Decal
HD レンダーパイプライン (High Definition Render Pipeline、HDRP) には、シーンでデカールを作成する 2 つの方法があります。デカールメッシュ使って手動でデカールを配置するか、または Decal Projector (デカールプロジェクター) コンポーネントでデカールを投影します。両方とも、Decal Shader (デカールシェーダー) または Decal Master Stack (デカールマスタースタック) を用いてデカールマテリアルを作成する必要があります。デカールマテリアルを作成して配置する場合も、またはシーンに投影する場合のどちらにも使えます。
制限および互換性
デカールプロジェクターは、デカールシェーダー または デカールマスタースタック のいずれかを持つ不透明のマテリアルに影響します。ただし、透明マテリアルに関しては、デカールシェーダー を持つもののみに影響します。透明マテリアルのエミッシブはサポートしませんが、Decal Layer (デカールレイヤー) はサポートします。 デカールメッシュは、デカールシェーダー または デカールマスタースタック のいずれかを持つ不透明のマテリアルのみに影響しし、デカールレイヤーはサポートしません。
デカールレイヤー
デカールレイヤーの有効化
Decal Layer (デカールレイヤー) を使うには、まずプロジェクトの HDRP アセット で有効にします。それから フレーム設定 でデカールレイヤーを有効にし、カメラがデカールレイヤーをプロセスするように設定します。
- プロジェクトウィンドウで HDRP アセットを選択し、Inspector で Decal > Layers に移動してチェックボックスを有効にします。
- すべてのカメラに対するデフォルトフレーム設定で、デカールレイヤーを有効にするには、Default Frame Settings For セクションのドロップダウンから Camera を選択し、Decal Layers チェックボックスを有効にします。
カメラに対するフレーム設定をオーバーライドするには、個別にデカールレイヤーを設定します。
- シーンビューまたは Hierarchy ウィンドウで Camera をクリックし、Inspector 内のプロパティーを表示します。
- General セクションに行き Custom Frame Settings のチェックボックスを有効にします。こうすると Frame Settings Overrides が展開され、このカメラのみをカスタマイズできるようになります。
- Rendering セクションで、Decal Layers チェックボックスを有効にし、このカメラがデカールレイヤーを使うようにします。
デカールレイヤーの使用
デカールレイヤーが有効になったら、シーンの特定のデカールプロジェクターからメッシュを切り離すために使うことができます。この手順は以下の通りです。
- Hierarchy またはシーンビューでデカールプロジェクターをクリックし、 Inspector 内で表示します。
- Decal Layer プロパティードロップダウンから、デカールプロジェクターが影響を与えるデカールレイヤーを選択します。
- Hierarchy またはシーンビューで Mesh Renderer (メッシュレンダラー) または Terrain (地形) をクリックし、Inspector 内で表示します。
- **Rendering Layer Mask* ドロップダウンから (ゲームオブジェクト用の メッシュレンダラー または地形用の その他の設定 を参照してください)、このメッシュレンダラーまたは地形に影響を与えるデカールレイヤーを選択します。デカールレイヤーが有効で、メッシュレンダラーと地形の両方が同じデカールレイヤーを使う場合、デカールはメッシュレンダラーまたは地形のみに影響を与えます。
デカールレイヤーの名前変更
デフォルトにより、デカールプロジェクターの UI、メッシュレンダラーまたは地形で、デカールレイヤーは Decal Layer 1-7 と名付けられます。各デカールレイヤーは特定の名前を付けて、差別化することができます。この手順は、まず デフォルト設定ウィンドウ を開いてから Decal Layer Names に行きます。ここから各デカールレイヤー個別に名前を設定できます。
パフォーマンス関連
デカールレイヤーを有効にすると、メモリー消費、GPU パフォーマンスの負担が生じ、より多くのシェーダーバリアントを生みます (従って、ビルドタイムを増やしてください)。
デカールレイヤーシステムを使い、メッシュレンダラーまたは地形の Rendering Layer Mask を介してデカールを無効にしても、パフォーマンスを維持できません。パフォーマンスを維持するには、メッシュレンダラーまたは地形の Receive Decals プロパティーを無効にする必要があります。
HDRP がデカールを不透明なマテリアルに適用できるように実装するには、深度プレパスで深度をレンダリングし、操作による CPU リソース強度を追加しなければなりません。深度プレパスを完全強要しない限り、Receive Decals が有効化されたマテリアルのみ、深度プレパスでレンダリングします。デカールレイヤーシステムを持つデカールを無効にすると、HDRP は深度プレパスでレンダリングを実行します。このため、パフォーマンスを維持するために、マテリアルで Receive Decals プロパティーを無効にする必要があるのです。
Unity 2020.2 以前のデータ移行
Unity 2020.2 以前、新しいメッシュレンダラーおよび Terrain (地形) の Rendering Layer Mask に対するデフォルト値には、デカールレイヤーフラグが 何も含まれていません。つまり、デカールレイヤーを有効にすると、これらメッシュレンダラーおよび地形は、デフォルトでデカールを全く受信しません。最新バージョンは Decal Layer Default をデフォルトで使用しています。