UDN
Search public documentation:

DevelopmentKitGemsCreatingASimpleBlobShadowJP
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

Unreal Development Kit ホーム > Unreal Development Kit Gems > 単純なブロブ シャドウの作成

単純なブロブ シャドウの作成


2011年3月に UDK について最終テスト実施済み
PC 対応

概要


正確でリアルタイムな動的シャドウが、アクタに必要とならない場合があります。そのような場合は、簡単なブロブ シャドウが役に立ちます。このテクニックは、スクリーン上にシャドウを必要とするアクタが多数存在する場合にも役立ちます。つまり、パフォーマンスを維持することができるのです。

このエフェクトを実現するには、アクタに動的デカール アクタを付属させます。長いシャドウを投じる必要がある場合は、デカール アクタの回転を利用することができますが、デカール コンポーネントには FOV の設定項目がないため、最善のやり方とはいえないかもしれません。シャドウのカラーと暗さは、デカール マテリアル インスタンスによって制御されます。最後に、投影されるシャドウのサイズは、デカール アクタ内のデカール コンポーネントによって制御されます。

デカール マテリアルの配置


次は、シャドウを作成するために使用されるデカール マテリアルの配置です。modulate blend (調整ブレンド) モードが使用されています。transparent blend (透明ブレンド) モードを使用することもできますが、modulate blend (調整ブレンド) モードの方が、スクリーンにレンダリングする際にはるかに負荷が少ないです。(110 以下の命令に対して 14 以下の命令)。

SimpleBlobShadowMaterialLayout.png

  • Constant Clamp (コンスタント クランプ) - これより前のすべての計算によってもたらされた出力値が、0.f から 1.f の範囲に収まるようにするために使用されます。調整 (modulation) は、この範囲から外れた値にも有効ですが、この場合は望ましくありません。
  • Add (追加) - オパシティ テクスチャ マスクを、補完されたシャドウカラーに追加するために使用されます。シャドウの「反転」マスクを追加すると、シャドウの一部になっていない領域に 1.f が加わります。このようにして、値がクランプされている場合、値が 1.f になり、デカールがレンダリングされたときに見えなくなります。
  • 'Opacity Texture' (オパシティ テクスチャ) - シャドウマスクを定義します。必ずしも円形のシャドウを使用する必要はありません。他の静的シャドウの形を作成することができます。
  • Linear Interpolation (線形補間) - (1, 1, 1, 1) と ShadowColor の間を線形補間します。ShadowColor の Alpha 出力を利用することによって、シャドウの明暗を制御することができます。
  • Constant [1] (定数) - 線形補間関数のパラメータの 1 つです。シャドウの最大明度を定義します。(この場合は 1 です)。
  • 'Shadow Color' (シャドウカラー) - シャドウのカラーを定義します。必ずしも、黒のカラーを使用する必要はありません。

関連テーマ

デカール マテリアルのテスト


新たに作成したこの簡単なシャドウ ブロブのデカール マテリアルをテストするには、次のようにします。

  1. Content Browser (コンテンツブラウザ) の中からデカール マテリアルを選択します。
  2. ワールド ビューポート内で、デカールを配置したいところを右クリックすると、コンテクストメニューが開きます。
  3. Add Movable Decal:(動くデカールを追加する) か Add Decal:(デカールを追加する) のどちらかを左クリックします。

SimpleBlobShadowAddingATestDecal.jpg

関連テーマ

デカール マテリアル インスタンスの作成と変更


デカール マテリアル インスタンスは、開発者がマテリアル内の既存のパラメータを再定義することによって、異なるバージョンを素早く作成することができます。このケースでは、カラーと明度、シャドウマスクを開発者が変更できるようになっています。このためには、以下を実行します。

コンテンツブラウザ内でデカール マテリアルを右クリックし、Create New Material Instance (Constant) (新たなマテリアル インスタンスの作成 (コンスタント)) を選択して左クリックします。

SimpleBlobShadowCreateNewMaterialInstanceMenu.jpg

以下のダイアログボックスが現れます。マテリアル インスタンスを保存する場所と名前を入力します。

SimpleBlobShadowCreateNewMaterialInstance.jpg

次において、変更したいプロパティの左側にあるチェックボックスをクリックします。これらのチェックボックスによって、オーバーライドされるプロパティが決まります。適切な値に変更します。

SimpleBlobShadowAlterMaterialInstance.jpg

前の章に書かれていた手順に従って、この新たなデカール マテリアル インスタンスをテストしてください。

SimpleBlobShadowTestNewMaterialInstance.jpg

関連テーマ

簡単なブロブ シャドウをアクタに追加する


これには 3 つの方法があります。移動可能なデカールを、マップに存在するアクタに、(1) アタッチメントシステムを使用して付属させるか、(2) Kismet を使用して付属させるか、(3) ゲーム中にデカール アクタをスポーンさせることができます。

アタッチメント

この例では、「Unreal」エディタによって提供されているアタッチメント ツールを使用して、簡単なブロブシャドウを補間されたアクタに付属させます。

移動可能なデカールアクタを付属させるアクタを追加します。この例では、球体の補間アクタを追加しました。

SimpleBlobShadowAttachmentAddActors.jpg

[Attachments] (アタッチメント) ウィンドウを開きます。デフォルトでは、次の場所にあります。先に見たようにコンテンツブラウザには付属していません。

SimpleBlobShadowAttachmentOpenAttachment.jpg

ビューポートで付属させたいアクタを選択し、[Attachments] ウィンドウ内で右クリックし、Add Selected Actors (選択したアクタを追加する) をクリックします。

SimpleBlobShadowAttachmentAddAttachmentActors.jpg

InterpActor_0 (または、デカールを付属させたいアクタ) の右側にある小さな黒いボックスのどちらかをクリックしてホールドし、さらにそれをドラッグして、DecalActorMovable_1 (または、移動可能なデカールアクタ) の左側にある小さな黒いボックスの上でリリースします。これで、移動可能なデカール アクタを付属させて、球体のメッシュとともに動くようにすることができました。

SimpleBlobShadowAttachmentBindActors.jpg

関連するテーマ

Kismet


この例では、Kismet を使用して、簡単なブロブ シャドウをプレイヤーに付属させます。

移動可能なデカール アクタをワールドに追加します。 SimpleBlobKismetAddDecal.jpg

ワールドで移動可能なデカール アクタを選択します。ツールバー上にある KismetIcon.jpg ボタンをクリックして、Kismet ウィンドウを開きます。Kismet のスペースで右クリックして、移動可能なデカール アクタを追加します。

SimpleBlobKismetAddDecalReferenceInKismet.jpg

コンテクストメニューを使って Player Spawned (プレイヤーのスポーン) イベントを追加します。これによって、プレイヤーがスポーンしたときに Kismet が探知できるようになります。それにより、インスティゲータ (誘因となる存在 : この場合、プレイヤーのポーン) をオブジェクト変数に出力することができます。

SimpleBlobKismetAddPlayerSpawnedEvent.jpg

次に、コンテクストメニューから Teleport (テレポート) アクションを追加します。プレイヤーが最初にスポーンしたときには、移動可能なデカール アクタはプレイヤーのポーンの元にありません。したがって、移動可能なデカール アクタを、プレイヤーのポーンと同じ場所までテレポートさせます。

SimpleBlobKismetAddTeleportAction.jpg

Update Rotation (回転を更新) を false にセットします。移動可能なデカール アクタの回転は、変更する必要がありません。

SimpleBlobKismetTweakTeleportAction.jpg

次に、コンテクストメニューからオブジェクト変数を追加します。これによって、プレイヤーのポーンの参照を Kismet が保存できるようになります。(この参照は後に使用することができます)。

SimpleBlobKismetAddObjectVariable.jpg

Kismet ノードをすべて接続します。そのためには、小さなボックスまたは三角形をクリックして、適切な目標までドラッグします。プレイヤーがスポーンすると、Player Spawned (プレイヤーのスポーン) イベントがアクティベートされ、このインスティゲータ (誘因となる存在) を空のオブジェクト変数に出力します。次に Teleport (テレポート) Kismet ノードが実行され、オブジェクト変数の中に保存されているプレイヤーのポーンと同じ場所まで、移動可能なデカールアクタがテレポートされます。これによって、プレイヤーがスポーンしたときに、移動可能なデカールアクタを適切な場所に配置することができるようになります。

SimpleBlobKismetConnectTeleport.jpg

コンテクストメニューを使って Attach to Actor (アクタに付属させる) アクションを追加します。この Kismet ノードは、あるアクタを他のアクタに付属させるものです。この例では、移動可能なデカールアクタがプレイヤーのポーンに付属させられます。

SimpleBlobKismetAddAttachAction.jpg

要素のすべてを接続します。先の説明への追加となりますが、Teleport Kismet ノードが実行されると、この Attach Kismet ノードが実行されることになります。この Kismet ノードは、移動可能なデカール アクタをプレイヤーのポーンに付属させます。

SimpleBlobKismetConnectAttach.jpg

レベルを起動すると、あなたが動くにしたがって、赤いデカールが付いていくのが分かります。

SimpleBlobKismetInGame.jpg

関連するテーマ

Unrealscript


この方法は、実行時に作成されるアクタにシャドウを付属させる場合に使用されます。

デフォルトでは、「Unreal Engine 3」にスポーン可能なデフォルト アクタがありません。次のコードを、エンジンまたは自作のパッケージに追加、コンパイルすることができます。

DecalActorSpawnable.uc
class DecalActorSpawnable extends DecalActorMovable;

defaultproperties
{
  // bStatic and bNoDelete prevent actors from being spawned at run time.
  bStatic=false
  bNoDelete=false
}

以下のコードは、スポーン可能で移動可能なデカールアクタをポーンに付属させる一例です。

SimpleBlobShadowPawn.uc
class SimpleBlobShadowPawn extends UTPawn
  placeable;

// The spawned simple blob shadow.
var PrivateWrite DecalActorSpawnable SimpleBlobShadowDecal;
// A reference to the archetyped simple blob shadow actor that we will be spawning.
var(Shadow) const DecalActorSpawnable SimpleBlobShadowDecalArchetype;

simulated function PostBeginPlay()
{
  local MaterialInstanceConstant DecalMaterialInstanceConstant;

  Super.PostBeginPlay();

  // Dedicated servers do not need to spawn the simple blob shadow
  if (WorldInfo.NetMode == NM_DedicatedServer)
  {
    return;
  }

  // No blob shadow archetype
  // The archetype was not the correct class type
  if (SimpleBlobShadowDecalArchetype == None)
  {
    return;
  }

  // Spawn the simple blob shadow actor
  SimpleBlobShadowDecal = Spawn(SimpleBlobShadowDecalArchetype.Class, Self,, Location, Rot(49152, 0, 0), SimpleBlobShadowDecalArchetype);

  if (SimpleBlobShadowDecal != None)
  {
    if (SimpleBlobShadowDecal.Decal != None && SimpleBlobShadowDecal.Decal.GetDecalMaterial() != None)
    {
      // Create a new material instance so that we can alter the parameters dynamically
      DecalMaterialInstanceConstant = new class'MaterialInstanceConstant';

      if (DecalMaterialInstanceConstant != None)
      {
        DecalMaterialInstanceConstant.SetParent(SimpleBlobShadowDecal.Decal.GetDecalMaterial());
        SimpleBlobShadowDecal.Decal.SetDecalMaterial(DecalMaterialInstanceConstant);
      }
    }

    // Attach the simple blob shadow to myself
    Attach(SimpleBlobShadowDecal);
  }
}

defaultproperties
{
}

このコードのロジックは、次のようになります。

  • アクタ (UTPawn はこれのサブクラスです) が最初にスポーンされると、PostBeginPlay が実行されます。
  • このアクタが専用サーバーにある場合は中止します。専用サーバーでは、ブロブシャドウをスポーンする必要がありません。
  • シャドウのアーキタイプが設定されていない場合は中止します。
  • アーキタイプのインスタンスを下向きにスポーンします。インスタンスを変数に割り当てることによって、追跡できるようになります。
  • デフォルト コンポーネントがデカール マテリアルをもっているか否かを確認します。
  • もっている場合は、新たなマテリアル インスタンスが作成され、その親を当該のデカール マテリアルに割り当てます。これによって、他に影響を与えることなく、プロパティを改変することができるようになります。
  • スポーンしたアーキタイプを自身 (SimpleBlobShadowPawn) に付属させます。

ワールド内にポーンを配置し、エディタ内で起動してポーンを見ることが可能です。アーキタイプのデカールアクタを使用することや、マテリアル インスタンスを実行時に作成することなどの、さらに高度な要素については、すでに説明されています。

関連するテーマ

ダウンロード


上記サンプルで使用されたコンテンツは、 ここ からダウンロードできます。 (SimpleBlobShadow.zip)