UDN
Search public documentation:

UsingDecalsJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > パーティクルとエフェクト > Decal > Decal の使用


Decal システムの参照


概要


本書は Decal システムのリファレンスです。コンテンツのクリエーターの方々を対象に、 Decal マテリアルの作成、レベルへの Decal 要素追加、 Decal マテリアルの操作や作用の制御などに関する手法をご説明します。また本書では、プログラマーの方々を対象に、 Decal システムのアーキテクチャもご紹介しています。

Decal とは?


Decal とは、シーン内のサーフェスにマテリアルを投影するプリミティブの一種です。Decal ボリューム内に存在する全てのサーフェスには Decal マテリアルが投影されます。 UE3 の Decal 機能が UE2 の投影機能と異なる点は、一旦作成された Decal は固定であることです。言い換えれば、Decal と受信サーフェス間で移動しているアクタは、 Decal マテリアルプロジェクトを持たないということです。真のライトプロジェクタ挙動は、 LightFunctions を持つ UE3 で得られます (LightingReference をご覧ください)。 Decal はシーンに多様性を持たせ、メッシュのインスタンスを紛らわしたり、継ぎ目を目立たなくしたりするのに最適な効果です。

静的 Decal

静的 Decal とは、UnrealEd のレベルに配置される Decal です。静的 Decal のランタイム コストは、 Decal に使用するポリゴン数が極めて少ない場合や、衝突、遮断、および影の投影がない場合を除けば、おおむね静的メッシュと同程度です。

動的 Decal

動的 Decal とは、ゲームプレー中にスポーンされた Decal ―例えば、武器による一撃が命中した場合の効果などのことです。ゲーム内でスポーンされる Decal には一時的な作成コストがかかりますが、その後のフレームごとにかかるコストは静的 Decal と同じです(DRAW ~書込み後の直接呼出しのみ)。

Decal マテリアル


Decal マテリアルとは、 Decal 方法をリットに限定した増設シェーダー コードを有する特殊マテリアルです。Decal は標準マテリアルへ割り当てられますが、その結果 Decal マテリアルへの不正確なライティングの原因となります。これには、マップのリビルドやマップのエラー検査を行って、Decal に不正なマテリアルが含まれていないかを検知します。

マテリアルのインスタンス連鎖は Decal によって対応されていますが、単体のマテリアルと同様に、 Decal 機能は Decal マテリアルを参照するマテリアルのインスタンスのみを正常に照明します。

マテリアルとDecal マテリアルの区別をつけることは、さまざまな理由のため重要です:

  1. 透明なマテリアルを使用したDecals は、他の透明メッシュタイプよりフォグ対象に異なったレンダリングをします。
  2. Lit マテリアルを使用しているDecals は、マテリアルで演算された法線を Decal タンジェントフレームに変換しなくてはいけません。
  3. Decal で使用されていないシェーダ (例:シャドウ、zのみ、速度など) は、Decal マテリアル用にコンパイルされません。つまり、非Decal メッシュに適用されたDecal マテリアルは、正確に言えば、シャドウの投げ掛け、モーションブラーにかかわることはありません。

Decal マテリアルの作成

通常のマテリアルと同様に、Decal マテリアルを作成するには、 コンテンツブラウザ 内で右クリックし、 New Decal Material (新たな Decal マテリアル) を選択します。マテリアルの名前と目的のパッケージを選択して、[ OK ] ボタンをクリックします。 コンテンツブラウザ 内に新たな Decal マテリアルのオブジェクトが表示されます。それをダブルクリックしてマテリアルエディタを開き、マテリアルの設定を行います。

shot1.jpg shot7.jpg

Decal をレベルに追加する


Decal の作成

シーンに Decal を追加する最も簡単な方法は、汎用ブラウザからある 「Decal マテリアル」を選択し、キーボードの [D] を押し続けながら、パースペクティブ ビューポートにあるサーフェス上でマウスの左ボタンをクリックします。これにより、サーフェス上に投影する Decal が作成されます。また別の方法としては、右ボタンクリックによる標準メニューの [Add Actor](アクタの追加)オプションを使用し Decal を作成することですが、この方法でインスタンス化した Decal については、手動で方向を設定しなければなりません。

shot3.jpg

サイズ設定、タイリング、およびオフセット

Decal が作成されると、変換と回転のウェジットを利用し、位置と方向の設定を行います。

shot4.jpg

非均等スケーリング ウィジットでは、 Decal ボリュームの幅、高さ、および遠隔プレ―ン距離について操作できます。

Decal マテリアルについては、[OffsetX]、[OffsetY] および [TileX]、[TileY] のプロパティをタイリングし、オフセット(移動)することができます。 これらのプロパティもまた非均等スケーリング ウェジットにリンクされています。非均等スケーリング ウェジットで、[Shift] ボタンを押しながらドラッグすると Decal マテリアルのタイリングを、[Alt] ボタンを押しながらドラッグすればオフセットを、それぞれ操作することができます。

下のイメージは、広いタイリング Decal により BSP ピース間の継ぎ目を覆い隠している例です。

shot8.jpg

受信サーフェスの操作

Decal フィルターのプロパティ カテゴリーには、 Decal マテリアルを投影できるサーフェスを操作する際に利用できるプロパティリストが用意されています。BSP、StaticMesh、SkeletalMesh、およびテレインに、 Decal を投影できるかどうかを設定するチェックボックスが用意されています。

下のイメージ図では、 Decal がBSPに投影されないように設定されており、これは StaticMesh 上に Decal されたものだけを見ることができます。

shot5.jpg

Decal はフィルターや FilterMode のプロパティーも備えており、これらによって投影可能な Decalをアクタごとに操作することが可能です。以下の例では、FM_Ignore というフィルターモードのある静的メッシュが追加されており、これにより StaticMesh のみが Decal によって無視されています。

shot6.jpg

プログラマー向け


Decals テクニカルガイド をご覧ください。

トラブルシューティング


ミップマップとの衝突

Decal テクスチャ上のミップマッピングの有効化は、Decal エッジの周りでアーチファクトを引き起こします:

decalbug.jpg

次のその問題と回避方法の詳細を記載します:

Decal テクスチャ座標は、decal イメージ平面上に受信ジオメトリを投影することにより演算されます。

受信ジオメトリが Decal 視錐台 (デフォルトの挙動) に対してクリップされた場合、Decal 視錐台の外側にフィルレートが存在せず、Decal テクスチャ座標値は、[0,1] になります。

Decal コンポーネントがテレインに投影している、または UDecalComponent::bNoClip が True に設定されている場合は、Decal ジオメトリは Decal 視錐台クリップされません。むしろ、オリジナルメッシュの頂点は「Decal 頂点」として使用されます。デフォルトの挙動と比較すると、「noClip」パスは余分なフィルレートを生じますが、「noClip」として、短い連想時間で実行されます。

なお、noClip による方法では、Decal イメージ平面の外側に投影する頂点が、負のテクスチャ座標値をもつことになります。すなわち、Decal マテリアルで使用されるテクスチャのアドレスモードが、クランプされたテクスチャアドレッシングを使用する必要があるということになります。

ストリーキング (縞) の原因は、低レベルのミップを計算するために使用されたフィルタリングが、非ゼロのカラーをエッジテクセルに流し出すためであり、また、そのテクセルは、テクスチャ上のクランプされたアドレッシングが原因となって、他のフラグメントにまたがってストリーキング化されています。ストリーキングを修正するには、Decal マテリアルにおけるテクスチャのためのテクスチャプロパティを開いて、テクスチャ上の bPreserveBorderR/G/B/A フラグを設定することによって、透明なボーダーピクセルが低いミップ上で保存されるようにします。

レンダリングされない場合

配置した Decal がエディタまたはゲーム内で表示されない場合は、以下の点を確認してください。

  • ビューポートが Lit (リット) ビューモードにセットされている。(光源がないと Decal は表示されません)。
  • Decal が受け手と同じレベルにある。(複数のレベルの受け手に投影する必要がある場合は、それぞれのレベルに複製されている)。
  • 受け手のメッシュコンポーネント上で、 bAcceptsStaticDecals が true になっている。
  • Decal において、適切な bProjectsOnBSP/StaticMeshes などのフラグがセットされている。
  • Decal のフィルター内に何も入っていない。

Z ファイト

Decal では、デプス バイアスを用いて配置ジオメトリとのZファイトを防ぎます。 また、各 Decal 同士のZファイトを防ぐため、デプスに書き込みません。Zファイト発生の原因はほとんどの場合が Decal で、デプスバイアスを微調整すれば解決できるものです。配置済みの Decal では、インスタンスごとにデプスバイアスを設定できます。ゲームのほかのパートに影響しないという点で、通常はこれが最善策です。動的な Decal (血や弾痕など) では、グローバルのデフォルト値を調整します。これにはファイル DecalComponent.uc のプロパティ DepthBias にある DefaultProperties を設定します。