UDN
Search public documentation:

DecalsTechnicalGuideJP
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

Decal システム テクニカルガイド

ドキュメントの概要: Decal を使用する作業の技術的およびプログラミング的な情報。

ドキュメントの変更ログ: Dave Burke? により作成。

概要

DecalComponent メンバ変数

以下は DecalComponent メンバ変数の簡単な説明です。

マテリアル

DecalMaterial プロパティは、この Decal で使用するマテリアルを表わします。MaterialInstance チェーンは最終的に DecalMaterial に到達する必要があります。

サイズ

サーフェス上のDecal のサイズ (接線/従法線方向)。

  • Width/Height

平面

Decal のサイズ:

  • NearPlane/FarPlane

タイリング

Decal UV のタイリング乗数とオフセット:

  • TileX/TileY
  • OffsetX/OffsetY

Hit 情報

Decal 錐台の位置と方向に関する情報。レンダーデータの計算時と、Decal のデバッグレンダリングに使用します。

  • HitLocation
  • HitNormal
  • HitTangent
  • HitBinormal

クリッピング

bNoClip プロパティのデフォルト値は FALSE です。TRUE の場合、Decal のジオメトリ計算に "NoClip" コードパスが使用されます。このコードパスにより、ソフトウェアベースによるクリップ (Decal 錐台に対するレシーバー三角形のクリップ) は実行されず、その分Decal のレンダリング中にフィルを追加します。さらに、"NoClip" Decal マテリアルに使用するテクスチャのアドレスモードを TA_Clamp に設定し、ミップマッピングに十分対応できる幅の透明なボーダーを外側エッジの周囲に設ける必要があります。

bNoClip は、頂点リットの静的メッシュ上にある Lit Decal を意味しますので注意してください。

静的Decal

bStaticDecal プロパティは、エディタを使用してレベルに配置された Decal の場合のみ TRUE になります。ADecalActor の defaultproperties ブロックによってblock.bStaticDecal は TRUE に設定されます。

レシーバー

HitComponent のデフォルト値は NULL です。NULL 以外の値の場合、Decal ジオメトリの計算時にこのコンポーネントはレシーバーになる可能性があると見なされます。このプロパティを設定すると、レシーバーの可能性となるすべてのコンポーネントと交差する必要性がなくなりますが、Decal が指定コンポーネントにしか投影されないため、望ましくない結果が生じる可能性があります (たとえば、ロケット爆破の場合などにはよくありません)。

コンポーネント

この Decal に対して生成されるジオメトリのコンポーネントと、それらに関連するレンダーデータのリスト。=Receiver= と RenderData 配列の長さは常に同じで、=RenderData= の i 番目の項目は Receiver i のデータです。このレイアウトにより、レシーバーは他から独立して Decal に関連付けまたは関連付け解除を行うことができます。

バイアス

2 つ以上のDecal が重なり合うときに、DepthBias と SlopeScaleDepthBias パラメータを使用してDecal の深度にバイヤスをかけ、他のDecal の下または上にレンダリングされるように制御します。

フィルタリング

前述のとおり、Filter にはフィルタするアクタのリストが含まれます。FilterMode では Filter リストのアクタを無視するか (FM_Ignore)、またはこの Decal により影響を受けるアクタのみに制限するか (FM_Affect) を指定します。デフォルト値は FM_None で、Filter は考慮されません。

投影フラグ

Decal の投影先を制御するフラグは以下のとおりです。

  • bProjectonBackfaces - 三角形のバックフェイス (背面)
  • bProjectOnBSP - BSP
  • bProjectOnStaticMeshes - 静的メッシュ
  • bProjectOnSkeletalMeshes - 骨格メッシュ
  • bProjectOnTerrain - テレイン

スクリプトからのDecal 作成

通常Decal は、DecalManager の >SpawnDecal メンバ関数を呼び出して作成します。基本的なプロセスは、=SpawnDecal= を呼び出し、Decal のサイズ、方向、マテリアル、Decal の計算方法に関するヒントを指定するだけです。

ゲーム中に武器が何かに命中したときに、それに反応して SpawnHitDecal を含む weapon クラスが呼び出される場合を考えてください。

この関数は次のようなコードです。

// ゲーム内のすべての武器が共有するステート/動作で構成されるクラス。
class BaseWeaponClassForYourGame extends Weapon

// ...

// 武器の命中に基づいてDecal を生成。SpawnExplosionEffects などの関数により呼び出される。
simulated function SpawnHitDecal(ImpactInfo Impact)
{
    local DecalComponent         DecalTemplate;

    // impact (インパクト) 情報に格納される物理マテリアルシステムなどを調べて、
    // このサーフェス/武器のペアに適したDecal のパラメータを取得する。
    DecalTemplate = Impact.GetDecalTemplate( this );

    // Decal テンプレートに基づいてDecal を作成する。
    WorldInfo.MyDecalManager.SpawnDecal( DecalTemplate.DecalMaterial,                // このDecal に使用する UMaterialInstance
                              Impact.HitLocation,                         // 命中位置にスポーンされるDecal 。
                              rotator(-Impact.HitNormal),                 // サーフェスにDecal を正しく配置する。
                              DecalTemplate.Width, DecalTemplate.Height,  // Decal サイズ (接線/従法線方向)。
                              DecalTemplate.Thickness,                    // Decal サイズ (法線方向)。
                              DecalTemplate.bNoClip,                      // TRUE の場合、"NoClip" コードパスを使用する。
                              FRand() * 360,                              // ランダムな回転
                              Impact.HitInfo.HitComponent );               // non-NULL の場合、このコンポーネントのみが対象。
}

Decal の有効期間の管理

一時的なDecal は、単体の DecalManager Actor (WorldInfo->MyDecalManager からアクセス可能) が管理し、ワールドに現存するDecal のリストを管理します。基本的な実装では、各Decal の構成可能な有効期間をカウントダウンして、有効期間が終了するとDecal をデタッチしますが、このクラスは簡単にオーバーライドでき (WorldInfo の構成可能な DecalManagerClassPath を使用して) 動作を変更することができます。

また、DecalManager はDecal が作成する DecalComponents もプールします。Decal の有効期間が完了するとプールに戻され、そのコンポーネントは将来の SpawnDecal() 呼び出し時に再利用されます。この方法により、オブジェクトを常時作成して破棄する代わりに、最悪の状況でも必要な数の DecalComponents だけを提供して、オブジェクトのオーバーヘッドとガーベジコレクションの回数を最小限に抑えています。

パフォーマンスのモニタリング

関連した統計値

エンジンの統計値グループ (ゲーム内コンソールで stat engine を入力して可視化します) には、Decal に関連する 2 つの項目があります。Decal 描画呼び出しの合計数を示す DecalDrawCalls と、レンダラーに渡されるDecal 三角形の合計数を示す DecalTriangles です。また、ゲーム統計グループ (stat game) には、Decal マネージャがカウントに費やした時間を示す DecalTime と、Decal の有効期間ポリシーがあります。

関連したShowFlags

Decal のレンダリングを管理する 2 つの showflag があります。 SHOW DECALINFO は、Decal 錐台や接線ベースを含む、Decal のデバッグ情報の表示を有効にします。 SHOW DECALS は、Decal をビューポートに描くかどうかの選択をグローバル単位で切り替えます。これには、 DECALINFO で有効にされたDecal のデバッグ情報レンダリングもすべて含まれます。

Decal のグローバルな有効化/無効化

エンジンの bStaticDecalsEnabledbDynamicDecalsEnabled 設定メンバ変数を使用して、静的または動的Decal を全面的に (ジオメトリ計算、シーンの関連付け、レンダリングなど) を有効/無効にすることができます。いずれの変数もデフォルトでは TRUE に設定されていて、Decal が完全に有効であることを意味します。

Decalの使用

エディタツールを使ったレベル内へのDecal配置や操作に関する詳細は、Decalシステムの参照 ページを参照してください。