Decal アクタの操作ガイド

Deferred Decal アクタの操作ガイド

Windows
MacOS
Linux

ディファード デカールを使用すると、パフォーマンスが向上し、維持管理が簡単になります。ライティングを再計算するかわりに GBuffer へ書き出す利点は以下の通りです。

  • 全てのライトに同じコード パスが使用されるためライト数やライトの種類に制限がなく、かなり多くのライトのパフォーマンスが予測しやすくなります。

  • スクリーン スペース マスクを操作することで、通常では難しいと思われるエフェクト (湿ったレイヤーなど) が可能になります。

デカールをレンダリングするには、デカールを適用したいエリア周辺にボックスをレンダリングします。

レベルにデカールを追加する

シーンへデカールを追加する最も簡単な方法は、適切なデカール マテリアルを コンテンツ ブラウザ から選択した後、ビューポート内で右クリックし、コンキスト メニューから [Place Actor (アクタを配置)] を選択することです。このとき、デカールがサイズ変更されて、トランスフォーム ツールによって正しい位置に調整されることがあります。

Decal_1.png

サイジング、タイリング、オフセット処理

デカールが作成されると、移動ウィジェットや回転ウィジットを使用して配置したり方向を変えることができます。

Decal_2.png

不均等なスケーリング ウィジェットが、デカールのボリュームの幅、高さ、遠方平面の距離をコントロールします。

ディファード デカールのプロパティ

ディファード デカールのプロパティは以下の 2 つのみです。

アイテム

説明

Material

デカールに使用するマテリアルを保持します。

Sort Order

スタック時に、複数のデカールのソート順序を制御する値を設定します。値が高いデカールが上部にレンダリングされます。

ソート順序の設定には注意が必要です。多種類のデカールにソート値を過剰に設定すると、ステートによるデカール処理の妨げとなり、パフォーマンスに悪影響を与えることがあります。

マテリアルの設定

DecalBlendMode 設定により、マテリアルのプロパティ (ディフューズ、スペキュラ、法線、オパシティ、他) の GBuffer への適用方法が定義されます。

オパシティを使ってデカールの効果をブレンドします。デカールが効率的だと、GBuffer プロパティ操作が少なくて済みます。 現在、DBM_DiffuseDBM_SpecularDBM_EmissiveDBM_Normal といった他のモードに対して最適化しています。

アイテム

説明

Translucent

マテリアルを最大限にブレンドします。GBuffer を更新しますが、ベイクされたライティングには機能しません。

Stain

Modulate BaseColor です。残りをブレンドし、GBuffer を更新しますが、ベイクされたライティングには機能しません。

Normal

法線のみをブレンドします。GBuffer を更新しますがベイクされたライティングには機能しません。

Emissive

Additive エミッシブのみに使うことができます。

DBuffer_Translucent Color, Normal, Roughness

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。法線が結合されていないと DBM_TranslucentNormal になります。

DBuffer_Translucent Color

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。

DBuffer_Translucent Color, Normal

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。法線が結合されていないと DBM_DBuffer_Color になります。

DBuffer_Translucent Color, Roughness

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。

DBuffer_Translucent Normal

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。

DBuffer_Translucent Normal, Roughness

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。法線が結合されていないと DBM_DBuffer_Roughness になります。.

DBuffer_Translucent Roughness

メタル以外のマテリアル用です。DBuffer へ入れるとベイクされたライティングにも機能します。

Volumetric Distance Function (実験的)

LightVector に応じてオパシティに符号付距離を出力します。

DBM_ScreenSpaceMask は、SSAO (環境オクルージョン) で使用する特別なマスク チャネルに影響する特別なモードです。これにより、エリアによってデカールの効果をオーバーライドあるいはフェードさせることができます。

DBM_DiffuseSpecularEmissive は複数の GBuffer チャンネルに影響を与えるモードです。

マテリアル ブレンド モードもまた GBuffer 値のブレンドのされ方に影響を与えることに注目してください。従って、ディフーズ カラーの乗算処理が可能になります。

GBuffer ビューモードを使って、ピクセルごとに格納されている GBuffer 値を調べることができます。

デカールのローカル位置は 0 から 1 の間の 3D ポジションです。テクスチャ UV により X 成分と Y 成分が与えられます。Z 成分が必要な場合は、 CameraVector ノードを接続して 3 ベクター すべての成分を取得することができます。

パフォーマンス

デカールの影響を受けたオブジェクトのメッシュ複雑度は、パフォーマンスには影響しません。デカールのパフォーマンスは、スクリーン上のシェーダーの複雑度とシェーダーボックスのサイズで決まります。

デカールごとのパフォーマンスは改善することができます。ピクセル単位のパフォーマンスを高めるためには、デカールのバウンディング ボックスが小さい方が理想的です。これは手動で行えます。自動でも行うことはできますが、優秀なデザイナーであれば配置を調整することで、パフォーマンスをさらに高めることができます。

ビュー モードの ShaderComplexity (エディタ UI または "viewmode ShaderComplexity") でピクセル シェーディング負荷を確認することができます。ピクセル シェーディング負荷の概算を使って、複数のデカールのオーバーラップを累積します。 今のところ、デカールマスク機能の影響はありません (マスクされると、ステンシル ハードウェア機能が使用されるため、その個所に小さな負荷がかかり続けるはずです)。 次のシーンは、通常のレンダリング (上) と ShaderComplexity を有効にしたもの (下) で、デカールがないもの (左) とあるもの (右) です。

DecalShaderComplexity.jpg

色が濃いほど、ピクセルにかかる負荷が高いことを表します。この情報を使えば、適切なシェーダーを最適化し、ほとんど見えないデカールを取り除いたり、デカールをより効率的に配置することが可能になります。

現在の制限事項

  • 現在、ディファード デカールのみがサポートされており、それらは静的オブジェクト上でのみ機能します。

  • 法線のブレンドは現在オブジェクトの周囲をラップしていません。

  • ストリーミングはまだ接続されていないので、テクスチャがストリームされないようにしてください。

  • デカールのマスク (他のオブジェクトに影響しない) は完全には実装されていません。

2x2 のブロックのアーティファクトの修正

デカールには、以下の画像のようにエッジに 2x2 ピクセル ブロックのアーティファクトが見えることがあります。

2x2_artifacts.bmp

ここで "Decal Derivative" ノードを使います。このノードはパフォーマンスに非常に大きな影響を及ぼすので、注意して使用してください。異方性テクスチャのフィルタリングに必要なデカールのデフォルトテクスチャ座標の X 軸と Y 軸の微分係数を戻しますが、ハードウェアのデフォルトと DDX/DDY ノードを使用する場合とは異なる計算方法を行って 2x2 ピクセル ブロックのアーティファクトが発生しないようにします。

Decal_Derivative.png

このノードを使うことで、デカール上のアーティファクトが修正されます。

2x2_no_artifacts.bmp

現在の制限事項

  • DecalMipmapLevel はカスタム UV をサポートしませんが、出力は修正が可能です。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback