デカールはマテリアルの一種であり、レベル内でスタティックメッシュやスケルタルメッシュなどのジオメトリにマテリアルの特性 (ベース カラー、ラフネス、法線など) を投影することで、シーンに局所的な変化を付けることができます。たとえば、見かけが単調にならないようにしたり、ベースのサーフェスに汚れや傷を付けたりするときにデカールを使用します。
デカールで石壁に欠けを追加。
Unreal Engine でデカールを適用する方法は 2 つあります。
- BasePass の前に、すべてのデカールを DBuffer に集め、これを BasePass マテリアルでサンプリングする。
- BasePass の後、ライティングの前に、GBuffer に直接ブレンドする。
UE5 のデフォルトのデカール適用方法は DBuffer デカールです。モバイル ディファード レンダラなど、特殊なケースでは GBuffer デカールも使用します。DBuffer と GBuffer のどちらを使うかは、関連するプロジェクト設定から自然と推測されます。プロジェクト設定に適しているのがどちらのデカール パスであれ、ディファード デカール マテリアル ドメインのマテリアルが描画されます。
デカールを使用する
デカールは次のように使用できます。
- デカール アクタを手動でレベルに配置する。
- デカール アクタ コンポーネントを含むブループリントを作成する。
- デカール マテリアルを直接メッシュに適用する。
デカール アクタ
[Visual Effects (視覚効果)] > [Decal Actor (デカール アクタ)] の [Create menu (作成メニュー)] でデカール アクタを作成できます。[Place Actors (アクタの配置)] パネルの視覚効果カテゴリからレベルにデカール アクタをドラッグすることもできます。
デカール アクタは方向依存性のあるワイヤーフレーム ボックスで、デカールの投影範囲を表しています。投影方向を示す矢印があります。
コンテンツ ブラウザで新規マテリアルを作成します。詳細パネルでマテリアル ドメインを [Deferred Decal (ディファード デカール)] に設定し、サポートされている [Blend Mode (ブレンド モード)] を選択します。サポートされているブレンド モードには [Translucent (半透明処理)] と [Alpha Composite (アルファ コンポジット)] があります。
上述の 2 つのオプションを合わせたデカール ブレンディングが必要な場合は、[DBuffer Material Expressions (DBuffer マテリアル表現式)] を使ってマテリアル グラフにカスタムのブレンド ロジックを作成できます。後述の「デカール ブレンディング」のセクションを参照してください。
DBuffer デカールでは 変調 ブレンド モードはサポートされていませんが、コンパイル エラーは発生しません。変調 を選択した場合、マテリアルのコンパイルは成功しますが、ブレンド モードは自動的に半透明処理に戻ります。
マテリアル グラフでデカールのビジュアル属性を設定し、マテリアルをコンパイルして、デカール アクタに適用します。シーン内でアクタがメッシュと交差する場合、デカールのビジュアル品質が矢印の方向に沿ってメッシュに投影されます。
下の 2 番目の画像のように、サーフェスがバウンディング ボックスの境界に近づくと、受け側のマテリアル特性へと滑らかに遷移します。


デカール アクタを軸外に回転させると、バウンディング ボックスの端付近でデカールがレンガへと徐々に戻ります。
デカール アクタには次のような特性があります。
これらは以下の表で定義されています。
| プロパティ | 定義 |
|---|---|
| Decal Material | デカールで使用するマテリアル アセットを指定します。 |
| Sort Order | デカール要素が描画される順番を制御します。数字が大きいほど後で (前面に) 描画され、数字が小さいほど背面に描画されます。 |
| Fade Screen Size | デカールがフェードアウトする画面上のサイズ。 |
| Fade Start Delay | デカールがフェードアウトするまでの待機時間 (秒単位)。 |
| Fade Duration | デカールのフェードアウトにかかる時間 (秒単位)。Fade Duration と Fade Start Delay を 0 に設定すると、デカールはフェードアウトしません。 |
| Fade In Duration | デカールのフェードインにかかる時間 (秒単位)。 |
| Fade in Start Delay | デカールがフェードインするまでの待機時間 (秒単位)。 |
| Destroy Owner After Fade | 有効にすると、フェードアウト後に自動的に所有アクタが破壊されます。 |
| Decal Size | ローカル空間におけるデカール サイズ。 |
| Decal Color | デカールの BaseColor を設定します。マテリアル グラフの Decal Color ノードを使ってこの色にアクセスできます。 |
メッシュ デカール
デカールのもう 1 つの利用方法に、シーン内の 1 つのジオメトリにデカール マテリアルを適用するやり方があります。これはスタティックメッシュでもスケルタルメッシュでも利用できます。そのジオメトリがレベル内でメッシュ デカールとして機能するようになります。
メッシュ デカールの利点は、複雑な形状に投影を拘束する上で、大きなテクスチャを使用してメモリを消費することなく、相応のビジュアル忠実度を実現できる点です。下の例では道路標示にメッシュ デカールを使用しています。
この例では、メッシュの黄色のバウンディング エッジが道路標識の輪郭を近接して囲み、適用するデカールの輪郭を形成しています。曲線のジオメトリを使用することで、外部 DCC でのデカール オーサリングを簡単にし、それによりテクスチャ解像度を節約します。
メッシュ デカールについては こちら を参照してください。
アクタのデカールを受け取る設定
スタティックメッシュ アクタでもスケルタルメッシュ アクタでも、詳細パネルに [Receives Decals (デカールを受け取る)] 設定があります。このトグルが無効のときは、アクタがデカール アクタと交差していてもデカールの投影が反映されません。
密集した複数のアクタがデカール アクタのバウンディング ボックスと交差しているが、特定のサーフェスにのみデカールを表示させたい場合は、このプロパティが大変便利です。
壁に対して [Receives Decals] を有効にし、青い球とオレンジの円柱ではオフにしています。
デカール レスポンス
ビューポートでのデカールの最終的な見た目は、デカールを投影する側のアクタに適用されたマテリアル属性だけでなく、デカールの投影を受ける側のマテリアルにも左右されます。
たとえば、下のマテリアル グラフはベースカラー、法線、ラフネスの 3 つのインプットにデータを渡します。できあがったデカール (右の図) は、受け側のサーフェスのこれら 3 つの属性をすべて上書きします。
受け側の [Decal Response (デカール レスポンス)] プロパティで、デカール投影のどの属性を受け側サーフェスに表示するかを決めます。このプロパティは [Material (マテリアル)] > [Advanced (詳細)] の詳細パネルにあり、デフォルトは [Color Normal Roughness (カラー、法線、ラフネス)] です。
| デカール レスポンス | 定義 |
|---|---|
| None (なし) | マテリアルにデカールを投影しません。ただし、マテリアル グラフから DBuffer チャンネルを読み込んで、デカールをカスタマイズ適用することができます。これにより補間処理をせずに済みます。 |
| Color Normal Roughness (カラー、法線、ラフネス) | デカールを投影し、すべての DBuffer チャンネルを適用します。 |
| Color (カラー) | デカールを投影し、カラーの DBuffer チャンネルを適用します。 |
| Color Normal (カラー、法線) | デカールを投影し、カラーと法線の DBuffer チャンネルを適用します。 |
| Color Roughness (カラー、ラフネス) | デカールを投影し、カラー、ラフネス、スペキュラ、メタリックの DBuffer チャンネルを適用します。 |
| Normal (法線) | デカールを投影し、法線の DBuffer チャンネルを適用します。 |
| Normal Roughness (法線、ラフネス) | デカールを投影し、法線、ラフネス、スペキュラ、メタリックの DBuffer チャンネルを適用します。 |
| Roughness (ラフネス) | デカールを投影し、ラフネス、スペキュラ、メタリックの DBuffer チャンネルを適用します。 |
下の例は、このプロパティを [Color (カラー)] にした場合と [Normal Roughness (法線、ラフネス)] にした場合のデカールを表しています。左の例はデカールのベース カラーだけが壁に投影されており、法線とラフネスのデータは破棄されています。右の例は法線とラフネスに変化がありますが、ベース カラーは壁のものです。
Sort Order
複数のデカールが重なり合う場合は、各デカール アクタの詳細パネルで Sort Order を設定できます。Sort Order で値の大きなデカール アクタは、値の小さなデカールより上に表示されます。
下の例では、青のデカールの Sort Order が 3、赤が 2、緑が 1 です。青のデカールが最前面、緑のデカールが最背面に描画されています。
DBuffer マテリアル表現式を使ったデカール ブレンディング
詳細パネルの Material > Blend Mode プロパティを使って DBuffer デカールのブレンド モードを設定します。Translucent および AlphaComposite ブレンド モードがサポートされています。
上述に加え、[DBuffer Texture (DBuffer テクスチャ)] マテリアル表現式を使って、受け側のマテリアルのマテリアル グラフにカスタムのブレンディング ロジックを作成できます。
DBuffer マテリアル表現式
DBuffer テクスチャ マテリアル表現式は、3 つの DBuffer テクスチャ、つまり BaseColor、WorldNormal、Roughness 用のデカール レスポンスそれぞれに対するアクセスを提供します。
このノードは、DBuffer からマテリアルのマテリアル グラフに直接データを読み込むことができます。デカールの挙動をカスタマイズして、プロジェクトに柔軟に合わせることができます。たとえば、DBuffer テクスチャ マテリアル表現式を使って、染みデカール ブレンド モードなど、従来の Unreal Engine 4 のデカールの挙動を視覚的に再現できます。
マテリアル グラフで選択したノードで、詳細パネルのドロップダウン メニューを使って DBuffer テクスチャを選択します。
また、ApplyDBuffer マテリアル関数を使って、マテリアル グラフで DBuffer をブレンドできます。この関数は、DBuffer デカール レスポンス マテリアル設定で適用されるロジックを自動的にレプリケートできます。マテリアル関数は、受け側のマテリアルのマテリアル属性と、そのインプットの最大 3 つの DBufferTexture ノードを扱います。マテリアル属性とデカール属性を組み合わせて返します。
受け側のマテリアルの [Decal Response (デカール レスポンス)] を [None (なし)] に設定することで、マテリアル グラフで DBuffer 表現式を使うときにデカールを重複して適用することを防ぎます。
これらのマテリアル表現式は 受け側の マテリアルのグラフで使用します。デカール アクタに適用されるマテリアルでは使用しません。
従来の染みデカールの例
DBufferTexture 表現式を使用すると、従来の染みデカール ブレンド モードと同様の効果を作成できます。以前のビジュアル エフェクトと非常に似ており、そのデカールの下のサーフェスの色も同時に薄くしたり濃くしたりできます。
デフォルトの半透明処理デカール ブレンディング (左) と DBuffer の染みブレンディング (右)。
この方法の主な制限事項は、DBuffer デカールの順番を並べる必要があり、常に 1 つだけがサーフェスに表示される点です。重なり合った DBuffer デカールはブレンドされません。上の画像で重なり合っている部分を見るとよくわかります。赤いデカールは青に隠れ、緑のデカールはその 2 つに隠れています。
DBuffer 染みワークフロー
次の手順に従い、DBuffer マテリアル表現式を使って従来の染みデカール ブレンド モードを再現できます。
-
受け側のマテリアルを開いてデカール レスポンスを [None (なし)] に設定します。
-
DBufferTexture ノードを使って、下図のロジックをマテリアル グラフに追加します。するとデカール マテリアルからベース カラーが読み込まれ、壁テクスチャのカラーと掛け合わされます。その結果が受け側のマテリアルのベース カラー インプットに渡されます。
パフォーマンスへの影響
多数のデカールを同時に描画しても、パフォーマンスを大きく損なうことはありません。デカール マテリアルの負荷は、他のマテリアルと同様に、画面占有率とマテリアルの複雑さに応じて大きくなります。
パス トレーサーでメッシュ デカールが与える主な負荷は、デカールの追加のアクセラレーション構造 (TLAS) の維持とトレースによるものです。また、TLAS のトレースに先立ちデカール投影を並べ替えることでも負荷が発生します。デカールの負荷は通常、画面占有率に応じて大きくなります。たとえば、The Origin のようにデカールの多いシーンでは約 30% 負荷が増加します。もっと限られたシナリオでは、負荷の増加が 5% 程度にとどまります。
下の The Origin のフレームでは、デカール オフの場合はサンプルあたり約 32ms、デカール オンの場合はサンプルあたり約 44ms で描画します。

デカール オフ (サンプルあたり約 32ms)、デカール オン (サンプルあたり約 44ms)
ラスタ レンダリング パスで DBuffer デカールを使うには、プロジェクトで深度プリパスを使う必要があります。この場合、ドロー コールが追加されますが、カリングが向上します。これは [Engine (エンジン)] - [Rendering (レンダリング)] > [Early Z-pass (早期 Z パス)] の [Project Settings (プロジェクト設定)] で有効にできます。
実際には、ハイエンド プラットフォームでは大きなオーバーヘッドにはなりません。バーチャル テクスチャ、Nanite、Lumen も深度プリパスを使うからです。これらのシステムのいずれかがすでにプロジェクトで使用されている場合、DBuffer デカールで発生するペナルティはまったくないか、ほとんどありません。
デカールを最適化する
デカールのパフォーマンスを最適化するには、デカールが反映されるマテリアルの デカール レスポンス だけを有効にします。また、受け側マテリアルで、そのデカールが使用するチャンネルだけをアクティブにします。たとえば、マテリアルがベース カラーだけを反映させ、法線とラフネスを反映させない場合は、[Color (カラー)] のデカール レスポンスを選択します。
DBuffer を使用する各マテリアルが追加コードを追加すると、マテリアルの複雑さが増して負荷が大きくなります。
以前のフレームの法線を再投影する場合はそれに伴う負荷がいくらかありますが、それはデカールの影響を受けるピクセルのサンプリングと再投影のために過ぎません。
制限事項
従来の UE4 のデカールとのビジュアルの差異
プロジェクトにベイク済みライティングを使用している場合、従来の UE4 GBuffer デカールと DBuffer デカールではビジュアルに差がある場合があります。GBuffer デカールはベイク済みライティングとスカイ ライティングの後に適用されます。つまり、Dbuffer デカールと異なりライティングの影響を直接受けないため、色あせて見えます。
対して DBuffer デカールは早期に、多くの場合 BasePass マテリアル (エミッシブとアンビエント オクルージョンを除く) に適用されるため、ベイク済みの間接光を計算するときに正しくサンプリングされます。その結果、DBuffer デカールは物理的正確性が高まり、コントラストや彩度を維持できます。


Unreal Engine 4 で作成したベイク済みライティングの場合の GBuffer デカール (左) と、Unreal Engine 5 で作成したベイク済みライティングの場合の DBuffer デカール (右) の例。
法線の再投影
シェーダーの制限に対処するため、DBuffer デカールに以前のフレームから法線を再投影する必要があります。1 つのフレームに対して法線を書き込むか読み取るかのいずれかしかできないためです。再投影時にエラーが発生する場合は、DBuffer のサンプリングが早すぎてプリパス深度以外のものをサンプリングできず、法線が欠落しています。その場合は DBuffer デカールでファセット アーティファクトを表示できます。
デフォルトでは以前のフレームの法線の再投影は無効になっていますが、コンソール変数 r.Decal.NormalReprojectionEnabled=1 で有効にすることができます。上向きのオブジェクト サーフェス上の雪や草など、サーフェスのファセット方向に基づいてデカールを適用するときに主に使われます。
染みブレンド モード
DBuffer デカールは染みブレンド モードをサポートしていないため、デフォルトのブレンド モードに戻ります。デフォルトでは、DBuffer デカールはカラー値間を線形補間します。(OutColor = SourceAlpha + Dest(1-Alpha))
染みブレンド モードは乗算です (OutColor = Source*Dest)。DBuffer デカールで染みエフェクトを実現する方法は、上述のデカール ブレンディングのセクションで説明していますが、この方法ではデカールの重なりが適切に考慮されていません。
デカールのエミッシブおよびアンビエント オクルージョン インプット
エミッシブ と アンビエント オクルージョン は、デカール マテリアルの特殊ケースとして扱われます。メイン マテリアル ノードにあるそれらのインプット ピンは DBuffer システムを使用せず、ドロー コールを追加することで実装され、シーン カラーまたはスクリーン空間アンビエント オクルージョンのいずれかにディファード ブレンディングします。
Substrate マテリアルを使用している場合、シーン カラーおよびスクリーン空間アンビエント オクルージョンのレンダー ターゲットはそのまま残ります。
デカールとモバイルの互換性
DBuffer デカールは、モバイルでのデカール レンダリングではサポートされていません。
モバイル フォワード シェーディング (OpenGL ES 3.2、Metal、Vulkan、Switch) は GBuffer デカール レンダリングもサポートしていません。代わりにベース カラー/エミッシブをライトで照らされているシーンのカラーに適用して、デカールを近似させます。
モバイル ディファード シェーディング を使う場合は、GBuffer デカールが使われます。アンビエント オクルージョンはサポートされておらず、これらのデバイスでは描画されません。
モバイル デバイスでのデカールのサポートに関する詳細については、「モバイル レンダリング機能」のページを参照してください。
Substrate デカールとモバイルの互換性
プロジェクトで Substrate を有効にした場合、モバイル ディファード シェーディングではデカール レンダリングに GBuffer を使用しません。DBuffer デカールだけを使用します。