【Unity】【URP】デカールを使ってオブジェクトにテクスチャを貼り付ける

UnityのURPでデカールを使ってオブジェクトにテクスチャを貼り付ける方法についてまとめました。

Unity2021.2.0f1

はじめに

Unity2021.2から、Universal Render Pipeline(URP)でデカールを使用できるようになりました。
本記事ではこのデカール機能の使い方をまとめます。

なおURPの基本的な知識については必要に応じて以下の記事を参照してください。

light11.hatenadiary.com

デカールの使い方

URPでデカールを使うにはまずUniversal Renderer DataAdd Renderer FeatureボタンからDecalを追加します。

f:id:halya_11:20211105155228p:plain
Decal Renderer Feature

Max Draw Distanceデカールする距離の最大値です。
Techniqueプロパティについては次節で説明します。

次にMaterialを作成し、Shader Graphs > Decalシェーダをアサインします。
Base Mapには投影したいテクスチャをアサインし、ノーマルマップを使いたい場合にはNormal MapNormal Blendを設定します。
また同じマテリアルを使ったデカールを複数使う場合にはEnable GPU Instancingにチェックを入れるとパフォーマンスを向上できます。

f:id:halya_11:20211105162410p:plain
マテリアル

次にGameObject > Rendering > URP Decal ProjectorからDecal Projectorを作成します。
これのMaterialプロパティに先程作ったマテリアルをアサインします。

f:id:halya_11:20211105161828p:plain
マテリアルをアサイ

あとは投影したい位置に移動すればデカールが貼り付けられます。

f:id:halya_11:20211105162436p:plain
デカール

必要に応じてProjection Depthプロパティを調整してデカール対象とする深度を調整してください。 その他のプロパティについては細かく説明しませんが、触ってみれば簡単にわかると思います。

なおデカールは半透明なオブジェクトには使用できないのでご注意ください。

Decal Renderer FeatureのTechniqueについて

さて前節で設定したDecal Renderer FeatureTechniqueプロパティは以下の選択肢を持ちます。

  • Automatic
  • DBuffer
  • Screen Space

このうちAutomaticを選択すると、ビルドするプラットフォームに応じてDBufferかScreenSpaceのいずれかをUnityが自動的に選択してくれます。

DBufferを選択すると、デカールの情報はDBufferという一時テクスチャに書き込まれ、不透明描画の際に合成されます。
DBufferを選択すると出現するSurface Dataというオプションを切り替えることで、デカールのクオリティを変更できますが、
DBufferの数が上下しパフォーマンスに影響するので注意が必要です。
例えばSurface DataAlbedo Normal MAOSにした状態でFrameDebuggerを見ると、三つのDBufferが生成されていることが確認できます。

f:id:halya_11:20211105171530p:plain
Surface Data: Albedo Normal MAOS

なおDBufferはDepthNormalプリパスを使うためタイルベースレンダリングとは相性が悪いようです。

TechniqueScreen Spaceにすると、深度テクスチャから再計算した法線を使ってデカールレンダリングします。
Normal Blendプロパティで再計算された法線の精度を設定できます。
精度が高いほど深度テクスチャのサンプリング数が多く、すなわち処理負荷が大きくなります。

また、Use GBufferにチェックを入れると、Deferred Renderingを行う際にGBufferを使ったデカールを行います

参考

docs.unity3d.com