UnityのURPでデカールを使ってオブジェクトにテクスチャを貼り付ける方法についてまとめました。
Unity2021.2.0f1
はじめに
Unity2021.2から、Universal Render Pipeline(URP)でデカールを使用できるようになりました。
本記事ではこのデカール機能の使い方をまとめます。
なおURPの基本的な知識については必要に応じて以下の記事を参照してください。
デカールの使い方
URPでデカールを使うにはまずUniversal Renderer Data
のAdd Renderer Feature
ボタンからDecal
を追加します。
Max Draw Distance
はデカールする距離の最大値です。
Technique
プロパティについては次節で説明します。
次にMaterialを作成し、Shader Graphs > Decal
シェーダをアサインします。
Base Map
には投影したいテクスチャをアサインし、ノーマルマップを使いたい場合にはNormal Map
やNormal Blend
を設定します。
また同じマテリアルを使ったデカールを複数使う場合にはEnable GPU Instancing
にチェックを入れるとパフォーマンスを向上できます。
次にGameObject > Rendering > URP Decal Projector
からDecal Projectorを作成します。
これのMaterial
プロパティに先程作ったマテリアルをアサインします。
あとは投影したい位置に移動すればデカールが貼り付けられます。
必要に応じてProjection Depth
プロパティを調整してデカール対象とする深度を調整してください。
その他のプロパティについては細かく説明しませんが、触ってみれば簡単にわかると思います。
なおデカールは半透明なオブジェクトには使用できないのでご注意ください。
Decal Renderer FeatureのTechniqueについて
さて前節で設定したDecal Renderer Feature
のTechnique
プロパティは以下の選択肢を持ちます。
- Automatic
- DBuffer
- Screen Space
このうちAutomaticを選択すると、ビルドするプラットフォームに応じてDBufferかScreenSpaceのいずれかをUnityが自動的に選択してくれます。
DBufferを選択すると、デカールの情報はDBufferという一時テクスチャに書き込まれ、不透明描画の際に合成されます。
DBufferを選択すると出現するSurface Data
というオプションを切り替えることで、デカールのクオリティを変更できますが、
DBufferの数が上下しパフォーマンスに影響するので注意が必要です。
例えばSurface Data
をAlbedo Normal MAOS
にした状態でFrameDebuggerを見ると、三つのDBufferが生成されていることが確認できます。
なおDBufferはDepthNormalプリパスを使うためタイルベースレンダリングとは相性が悪いようです。
Technique
をScreen Space
にすると、深度テクスチャから再計算した法線を使ってデカールをレンダリングします。
Normal Blend
プロパティで再計算された法線の精度を設定できます。
精度が高いほど深度テクスチャのサンプリング数が多く、すなわち処理負荷が大きくなります。
また、Use GBuffer
にチェックを入れると、Deferred Renderingを行う際にGBufferを使ったデカールを行います