株式会社サイバーエージェントは、Unity用の軽量デカールシステム「AirSticker」を、2023年5月24日(水)よりオープンソースソフトウェア(以下、OSS)として公開した。
■「AirSticker」とは?
★デカール機能について
対象のオブジェクトに別のマテリアルを投影・上乗せできるデカール機能。この機能を使えば、シーン内のオブジェクトに別の絵柄を投影することができる。UnityではURPとHDRPでこのデカール機能が提供されている(※HDRPにはURPに加えて、いくつかの機能が追加されている)。
★「AirSticker」の特長は?
では次に、サイバーエージェントが公開した「AirSticker」の特長を見ていこう。
①メッシュデカール
メッシュ貼り付けによるデカール表現を実現。そのため、デカール表現のための処理負荷は、単なるメッシュ描画と同じ負荷となっており、非常に軽量に動作する。また、同一のマテリアル、同一のレシーバーオブジェクトであればデカールメッシュはワンスキンになっており、ドローコールも最小限になっている。
②低スパイクでのメッシュ生成
メッシュ生成処理は計算負荷の高い処理だが、メッシュ生成処理をメインスレッドとは別のスレッドで実行している。そのため、メインスレッドで発生するスパイクが少なくなっており、足跡やFPSの弾痕といったゲームでの典型的なデカールの利用が可能だ。
③完全なスキンアニメーション
スキンメッシュへのデカール貼り付けに対応している。貼り付けられたデカールメッシュは、レシーバーオブジェクトのスキンウェイトから、スキニング情報を割り当てられるため、スキンアニメーションに追従することができる。これにより、キャラクターへのボディペイントなどといった利用もできる。
④専用シェーダーをつくる必要がない
「AirSticker」で生成されたデカールメッシュを描画するために専用シェーダーをつくる必要はない。デカールメッシュの描画には、ビルトインシェーダーやユーザー独自のカスタムシェーダーなどをそのまま利用することができる。
■「URPデカール」と「Air Sticker」の併用がおすすめ!
★URPデカールのデメリットを補完
今回、サイバーエージェントが公開したデカールシステム「AirSticker」には、メッシュ生成方式によるデカール処理が実装されている。Unity URPで実装されているデカールが投影方式なのに対し、メッシュ生成方式であるという点がポイントだ。
投影方式は高い柔軟性をもっており優れたデカールシステムだが、メッシュデカールと比較すると処理負荷が高くなる場合がある。そこで「AirSticker」を利用することで、シンプルなメッシュ描画によるデカールを利用できるようになり、ゲームのランタイムパフォーマンスの向上が期待できるという。
同社はこの「AirSticker」をURPデカールのデメリットを補完できるもの、と位置付けており、メッシュ生成方式(AirSticker)と投影方式(URPデカール)を併用することで、多くのデメリットを補うことができるという。
具体的には、以下のようなメリット・デメリットを紹介している。
<URPデカール>
メリット
・デカールを貼る処理が高速
・Zファイティングが起きない
デメリット
・完全なスキンアニメーション対応が難しい(Air Stickerで補完できる)
・ピクセル負荷が高い(Air Stickerで補完できる)
・カスタムシェーダーはそのままでは使えない(Air Stickerで補完できる )
<Air Sticker>
メリット
・処理が軽量(ただし、デカールメッシュ生成はラグがある)
・完全なスキンアニメーションを行える
・カスタムシェーダーをそのまま使える
デメリット
・デカールを貼る処理に数フレームかかる(URPデカールで補完できる)
・Zファイティングが起きる
また、URPデカールはUnity2021以降でしか使用できないが、Air StickerはUnity2020からの動作をサポートする点も特長だ。
■「URPデカール」と「Air Sticker」使い分けの例
GitHubの「Air Sticker」ページでは、「URPデカール」と「Air Sticker」の併用のモデルケースとして、下記のような使用ケースが掲示されている。
- 「URPデカール」の使用ケース
オブジェクト座標系でデカールが移動する、Air Stickerによるメッシュ生成が終わるまでの時間稼ぎ
- 「Air Sticker」の使用ケース
オブジェクト座標系でデカールが移動しない
以下のページには、上記のモデルケースで実装しているプレイデモ動画もアップされている。
github.com/CyberAgentGameEntertainment/AirSticker/blob/main/README_JA.md