(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

表示する対象の制限もしやすく、好きなシェーダーが使えるサイバーエージェント製の軽量デカールシステム「AirSticker」 【Unity】【URP】


このエントリーをはてなブックマークに追加

この記事でのバージョン
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に肌のレンダラーだけ設定すれば、

服を無視して肌だけにデカールを付けるという事が可能です。