Decal Projectorとは?
Decal Projectorは、テクスチャやマテリアルを3Dオブジェクトの表面に投影する機能です。メッシュを加工せずに汚れ、傷、マーキング、ステッカーなどを表現できます。
代表的な使用例:
- 地面への影響マーク(爆発跡、血痕)
- 壁や床のステッカー・落書き
- キャラクターへのダメージ表現
- UIを3D空間に投影
Decal ProjectorはUnityのURP(Universal Render Pipeline)固有の機能です。
Built-inレンダラーには存在しないため、URPプロジェクトでのみ使用できます。
事前準備
Decal Rendererの追加
Decal Projectorを使用するには、URPのレンダラーにDecalレンダラーフィーチャーを追加する必要があります。
- Projectウィンドウでレンダラーアセット(
UniversalRenderer)を選択 - Inspectorの「Add Renderer Feature」をクリック
- 「Decal」を選択して追加

Decalレンダラーフィーチャーのパラメータ:
| パラメータ | 説明 |
|---|---|
Technique | デカールの描画方式(Automatic / DBuffer / Screen Space) |
Max Draw Distance | デカールが描画される最大距離 |
DBufferはアルベド・法線・金属感などに影響を与えられますが、プラットフォームによっては非対応の場合があります。
迷った場合はAutomaticで問題ありません。
デカール用マテリアルの作成
デカールには専用のシェーダーを使ったマテリアルが必要です。
- Projectウィンドウで右クリック → 「Create > Material」
- シェーダーを
Shader Graphs/Decal(またはURP/Decal)に変更 Base Mapにデカールとして投影したいテクスチャを設定
テクスチャの投影
Decal Projectorの追加
- ヒエラルキーで右クリック → 「Rendering > URP Decal Projector」
- 作成した
Decal Projectorオブジェクトを選択
または、既存のGameObjectにDecal Projectorコンポーネントを追加することもできます。

パラメータの解説

| パラメータ | 説明 |
|---|---|
Width / Height | 投影エリアの幅・高さ |
Projection Depth | 投影する奥行き(この範囲内のオブジェクトに投影される) |
Pivot | 投影の基点。デフォルトは中央 |
Material | デカールに使用するマテリアル |
Draw Distance | カメラからの最大描画距離 |
Fade Factor | デカールの不透明度(0で完全透明、1で完全不透明) |
Start Fade | フェードが始まる距離の割合 |
Materialに先ほど用意したマテリアルを割り当てています。
ここから新規に作成することもできます。
基本的な投影手順
Decal Projectorを投影したいオブジェクトの上に配置Materialに作成したデカールマテリアルを設定Width/Height/Projection Depthを調整して投影エリアを設定- SceneビューのGizmoで投影範囲を確認しながら調整

Depthの値が小さすぎると、厚みのあるオブジェクトには投影されないことがあります。対象オブジェクトを十分に覆う深さに設定してください。
投影方向はDecal ProjectorのTransformの回転を調整することで、斜め方向や側面への投影も可能です。

応用:TextMeshProの文字列を投影する
テクスチャではなく、TextMeshProで生成したテキストをリアルタイムにデカールとして投影できます。
RenderTextureを中継することで実現します。
仕組み
TextMeshPro → カメラ → RenderTexture → Decalマテリアル → Decal Projector → 3D空間に投影
専用カメラがTextMeshProをオフスクリーンに描画し、その結果をRenderTextureに書き込みます。そのRenderTextureをデカールマテリアルに設定することで、3D空間のオブジェクトに文字を投影できます。
RenderTextureの作成
- Projectウィンドウで右クリック → 「Create → Rendering → Render Texture」
Sizeを用途に合わせて設定(例:512×256)
TextMeshPro用カメラのセットアップ
- ヒエラルキーに新しいカメラを追加(「Camera」)
- Inspectorで以下を設定:
Output Texture:作成したRenderTextureを設定Background Type:Solid Colorにして背景を黒(Alpha=0)に設定Culling Mask:TextMeshPro専用のLayerのみを設定
TextMeshProオブジェクトのセットアップ
- ヒエラルキーに
TextMeshPro(3D Text)オブジェクトを追加 - 専用カメラの正面に配置
- LayerをTextMeshPro専用のLayer(例:「TextDecal」)に設定
- メインカメラの
Culling Maskから「TextDecal」レイヤーを除外(メインカメラには映さない)
CanvasをRenderModeを変更して、Render Cameraに描画用カメラを割り当てるといいでしょう。

Decalマテリアルへの設定
- デカール用マテリアルの
Base Mapに作成したRenderTextureを設定
これでTextMeshProに設定した文字列が3Dオブジェクトに投影されます。

スクリプトから文字列を動的に変更する
using TMPro;
using UnityEngine;
public class DecalTextProjector : MonoBehaviour
{
[SerializeField] private TextMeshPro _textMeshPro;
// 投影する文字列を変更する
public void SetText(string text)
{
_textMeshPro.text = text;
}
}
TextMeshProのtextプロパティを変更するだけで、RenderTextureの内容が自動的に更新され、投影される文字列もリアルタイムで変わります。
注意点
パフォーマンスへの影響
Decal Projectorは投影範囲内のすべてのオブジェクトに対して追加の描画処理が発生します。大量に配置するとDrawCallが増加するため、以下の点に注意してください。
- シーン内のDecal Projectorの数を必要最小限にする
Draw Distanceを適切に設定し、遠距離での描画を省く- 動かないデカールは
Update処理を持つスクリプトで管理しない
透明マテリアルとの相性
DBufferテクニックを使用した場合、透明(Transparent)マテリアルが設定されたオブジェクトにはデカールが投影されません。
透明オブジェクトへの投影が必要な場合はScreen Spaceテクニックを使用してください。
投影対象の制限
デカールが投影されるのはDecal ProjectorのDepth範囲内にあるオブジェクトのみです。
Rendererコンポーネントを持つオブジェクト(MeshRendererなど)が対象で、TerrainやParticle Systemには投影できません。
まとめ
Decal Projectorを使うと、メッシュを変更せずにテクスチャを3Dオブジェクトに投影できます。
- URP専用機能で、Decal Rendererフィーチャーの追加が必須
Shader Graphs/Decalシェーダーのマテリアルを使用する- 投影方向はGizmoで範囲を確認しながら調整
RenderTextureと組み合わせることでTextMeshProの文字列をリアルタイムで投影できる
テクスチャの投影だけでなく、TextMeshProと組み合わせれば動的なテキスト表示にも使えます。
演出やUI表現の幅が広がるので、覚えておくと役に立つかもしれません。



