ゲームのグラフィックスにおいて、地面の足跡、壁の弾痕、コンクリートの汚れ、ひび割れなどのディテール表現を手軽にシーンに追加できる「デカール(Decal)」機能は、背景のリアルさを向上させる上で極めて重要です。Unityのユニバーサルレンダーパイプライン(URP)では、「URP Decal Projector」コンポーネントを使用することで、3Dメッシュを直接変形させることなく、投影オブジェクト(プロジェクター)を用いて任意の形状にグラフィックスを貼り付けることができます。しかし、シーンにデカールを配置し、バウンディングボックスの枠内に綺麗に対象が収まっているにもかかわらず、「なぜか弾痕が地面に一切表示されない」「特定のオブジェクトやキャラクターにだけデカールが映らない」といった表示の不具合に遭遇したことはないでしょうか。本記事では、このデカールの描画不良バグの根本原因を、「スタンプと撥水コーティング」の例え話を交えて解説し、実務で絶対に役立つ詳細な解決手順と設定チェックリストを解説します。

1. 例え話で理解する:『撥水コートされた壁とインクの乗らないスタンプ』

このデカールが投影されないバグを直感的に理解するために、『壁にインクのスタンプ(デカール)を押そうとしている作業者』を例えに考えてみましょう。

あなたが壁(3Dオブジェクト)に「落書きのスタンプ(デカール)」を押そうとしています。しかし、スタンプを何度強く押し付けても、壁には一切インクが乗りません。よく調べてみると、2つの問題が起きていました。

1つ目の問題は、作業者がスタンプを押すための「インク台(Decal Renderer Feature)」をそもそも現場に持ってきていないこと。インク台がないため、スタンプのゴム印(Projector)は乾いており、壁を空押ししている状態です。
2つ目の問題は、壁の表面に「撥水コーティング(Receive Decals = Off)」が強力に施されていること。インクをしっかりつけてスタンプを押しても、壁がインクを完全に弾いてしまい、何も残りません。この撥水コートを剥がさない限り、いくらスタンプを強力なものに変えても無駄に終わります。

これが、URP Decalにおける『投影失敗バグ』の正体です。システム全体でデカールを描画する機能をアクティブにし、かつ投影される側のメッシュマテリアルに対しても「デカールを受け取ります」という許可を与えてあげる必要があります。

2. 根本的な原因:レンダラー機能の未登録とマテリアルの撥水設定

URPにおけるデカールの投影処理は、従来の Built-in パイプラインとは異なり、専用の「Renderer Feature」を介したカスタムレンダーパス(DBuffer パスまたは Screen Space パス)で実行されます。技術的な原因は以下の3つに集約されます。

原因①:Universal Renderer Data に Decal Feature が未登録

URPは、標準の不透明・半透明描画パスとは別に、デカールを合成するための専用パスを稼働させる必要があります。このパスを指示するのが `Decal` Renderer Feature です。これが登録されていない場合、シーン内のすべての `Decal Projector` は描画計算自体をスキップされ、機能しません。

原因②:投影先マテリアルの「Receive Decals」がOFFになっている

パフォーマンス最適化のため、URPのマテリアル(Lit等)は、個別にデカールを受け取るかどうかの判定フラグを持っています。地面や壁のプレハブをインポートした際や、カスタムマテリアルを新規作成した際、このフラグが初期状態でOFFになっていると、デカールプロジェクターの範囲内であっても一切投影されなくなります。

原因③:描画手法(Decal Technique)とプラットフォームの互換性ミスマッチ

URPのデカールには `DBuffer`(デカールバッファを使用する高品質な手法)と `Screen Space`(深度と法線から画面上で合成する軽量手法)の2つがあります。WebGLや一部の古いモバイル端末では DBuffer がサポートされておらず、設定の不整合によりデカールが真っ黒になったり消滅したりすることがあります。

3. 解決のためのステップ・バイ・ステップ手順

ステップ①:Universal Renderer Dataへの「Decal」追加

  1. プロジェクト内の Universal Renderer Data アセット(通常は `UniversalRP-HighQuality-Renderer` などの名称)を選択します。
  2. インスペクターの最下部にある Add Renderer Feature ボタンをクリックします。
  3. リストから Decal を選択して追加します。
  4. 追加された `Decal` のインスペクターで、Technique(描画手法)を確認します。PC/コンソール向けであれば DBuffer が推奨されます。モバイルやQuest向けであれば負荷の低い Screen Space を検討してください。

ステップ②:投影先アセットのマテリアル設定変更

  1. デカールを投影させたいオブジェクト(例:コンクリートの壁や地面のメッシュ)のマテリアルを選択します。
  2. マテリアルのインスペクター最下部付近にある Advanced Options(または `Surface Options`)を展開します。
  3. Receive Decals のチェックボックスを ON(有効) にします。

ステップ③:デカール同士の重なり順(Z-Fighting)の解消

弾痕が足跡と重なった際にチカチカする現象(Z-Fighting)を防ぐため、`Decal Projector` コンポーネントの Draw Order プロプロパティを調整します。数値が大きいデカールほど「手前」に描画されます。

// 足跡(背景・土台)のデカール
[Decal Projector] -> Draw Order: 0

// 弾痕(手前・上乗せ)のデカール
[Decal Projector] -> Draw Order: 5 (より大きな値にして手前にソート)

4. 実務用チェックリストと推奨設定テーブル

ターゲット環境 推奨 Technique メリット 注意点・デメリット
PC / Console (PS5, Xbox) DBuffer ライティングやノーマルマップが綺麗に馴染む。高品質。 VRAM消費量が僅かに増加する。モバイルでの互換性注意。
Mobile / Meta Quest / WebGL Screen Space 追加のバッファが不要で非常に軽量。ほぼ全ての端末で動作。 ライティングの馴染みが制限され、法線の変化に弱い。