この記事でのバージョン
Unity 2022.3.21f1
はじめに
以前、デカール(Decal)という
3Dモデルの表面の形に沿って、画像をスタンプのように投影して表示する公式機能の紹介しましたが、
このデカールは意図せず他のオブジェクトに映り込んだり、
貫通して裏面に表示されてしまったり、
好きなシェーダーが使えなかったりと、いくつか欠点がありました。
という事で今回は、それらの欠点が解消された軽量デカールシステム「AirSticker」の紹介です!
ちなみにサイバーエージェントが開発したOSSで、無料(MIT License)で使えます。
このAirStickerはメッシュを生成し、デカールを表現しているので、先程挙げた欠点は解消されています。
ただし、メッシュを生成しているので、
体に沿ってデカールを動かすみたいな形が変わるデカールには使えません。
他にも双方メリットデメリットがあるので、用途によって使い分けるか、もしくは併用する感じです。
- URPデカール
- メリット
- デカールを貼る処理が高速
- Zファイティングが起きない
- デメリット
- 完全なスキンアニメーション対応が難しい ( Air Stickerで補完できる )
- ピクセル負荷が高い ( Air Stickerで補完できる )
- カスタムシェーダーはそのままでは使えない( Air Stickerで補完できる )
- Air Sticker
- メリット
- 処理が軽量( ただし、デカールメッシュ生成はラグがある )
- 完全なスキンアニメーションを行える
- カスタムシェーダーをそのまま使える
- デメリット
- デカールを貼る処理に数フレームかかる ( URPデカールで補完できる )
- Zファイティングが起きる
AirSticker/README_JA.md at main · CyberAgentGameEntertainment/AirSticker · GitHub
なお、記事中では以下のアセットを使っています。
Night Club (SRP) - Unity Asset Store |
Riko - Unity Asset Store |
2D Casual Game UI Set - Unity Asset Store |
導入と使い方
さっそく導入ですが、お馴染みのPackageManagerを使います。
左上の+ボタンからAdd package from git URLを選択し、
https://github.com/CyberAgentGameEntertainment/AirSticker.git?path=/Assets/AirSticker
と入力し、Addを押せば
導入完了です。
次に使い方ですが、まずAir Sticker SystemというコンポーネントがHierarchy上に一つ必要になるので、
適当なオブジェクトにAddします。
さらにAir Sticker Projectorというコンポーネントを追加し、Inspector上で
デカールのサイズ(Width、Height、Depth)や貼り付ける対象(Receiver Objects)、
デカールのマテリアル(Decal Material)等の各種設定を行います。
ちなみにマテリアル(のシェーダー)は何でも大丈夫です。
あとはScene上でデカールを生成する位置と角度を調整するのですが、Unity公式のデカールと違って
再生しないのと生成されない点には注意が必要です。
Unityを再生すると、設定したReceiver Objectの下にデカールが生成されます。
例えばReceiver Objectに肌のレンダラーだけ設定すれば、
服を無視して肌だけにデカールを付けるという事が可能です。