UDN
Search public documentation:

DevelopmentKitGemsHUDDistortionJP
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 ホーム > Unreal Development Kit Gems > HUD Distortion (歪み) の追加
UE3 ホーム > ポストプロセスエフェクト > HUD Distortion (歪み) の追加
UE3 ホーム > マテリアルとテクスチャ > HUD Distortion (歪み) の追加

HUD Distortion (歪み) の追加


2011年7月に UDK に即して最終テスト実施済み

概要


スクリーンに歪み (distortion) を加えることが、プレイヤーにフィードバックを与える上で、往々にしてとても役に立ちます。この歪みによって、プレイヤーが何らかの武器で攻撃されたことや、水中にいること、狙撃スコープから眺めていることなどを表現することができます。この開発キットドキュメントでは、例として狙撃スコープが取り上げられます。

ポストプロセス


「Unreal Engine 3」では、スクリーン出力がレンダリングターゲットの中に保存されます。これにより、その編集にはポストプロセスを使用することができます。レンダリングターゲットの中に保存されるため、マテリアルシステムを利用して、レンダリングターゲットを編集します。 ポストプロセスエフェクト のページを参照してください。より詳細な情報については、 ポストプロセスマテリアル を参照してください。

マテリアルのセットアップ


テクスチャ

まず始めに、テクスチャがいくつか必要です。テクスチャは、UI LOD グループに保存され、Address X および Address Y が Clamp (クランプ) にセットされています。

次は、歪みのための法線マップです。

UDN_SniperScope_0.jpg

次は、オパシティのためのアルファマップです。

UDN_SniperScope_1.jpg

狙撃スコープテクスチャの座標

狙撃スコープにおいては、テクスチャがスクリーン全体に渡って広がっている状況は好ましいことではありません。理想的には、狙撃スコープがスクリーンの中央にあり、アスペクト比が 1:1 に限定されている必要があります。これをマテリアルで実現するには、テクスチャの座標を調整します。

UDN_SniperScope_TextureOffsetAndScale_3.jpg

  • テクスチャの座標を乗算 (Multiply) することによって、パーセンテージとしてテクスチャのスケールを調整することができます。 たとえば、0.5 の場合は テクスチャの 50% であり、2.0 の場合はテクスチャの 200% となります。
  • テクスチャの座標に加算 (Add) することによって、パーセンテージとしてテクスチャの位置を調整することができます。これは、スクリーン上のテクスチャの位置と同じではありません。テクスチャが最初に使用される際にテクスチャ内のどこを表示するかを示すものです。通常は、0 になっていますが、この値を調整することによって、テクスチャをパンして、描画を開始する地点のピクセルを選択できるようになります。今回の例では、テクスチャの Address X と Address Y がクランプされているため、テクスチャがスクリーン内を移動して、縁に黒い部分が作り出されます。これは、狙撃スコープにとっては理想的です。

異なるスクリーン解像度については、UnrealScript 内でパラメータを設定する必要があります。

狙撃スコープの歪み

リアリティを出すためには、狙撃スコープのレンズの湾曲を暗示する歪みを少しばかり加えるのが良いでしょう。そのためには、Scene Texture Sample 上のテクスチャルックアップ座標を調整します。法線マップを乗じる (Multply) ことによって、歪みの強さを調整することが可能です。

UDN_SniperScope_Distortion_4.jpg

  • 法線マップをスカラーパラメータで乗じる (Multiply) ことによって、歪みを簡単に調整することができます。

ALERT! ルックアップ座標を調整しているせいで、テクスチャ全体を調整しなければならない場合があるので、ご注意ください。画像が移動することによって、プレイヤーの視界が表されなくなることがあるからです。オフセットしなければならない場合があります。

UDN_SniperScope_AddingSceneOffset_13.jpg

狙撃スコープの彩色

テクスチャのオフセットと歪みが完了したので、すべてをまとめることができます。オパシティマップを使用しながら、2 つのバージョンの Scene Texture Sample を線形補間することによって 、スクリーン上に狙撃スコープの模様を容易に作成することができます。

UDN_SniperScope_Colorizing_5.jpg

  • ScopeColor の RGB 値を調整することによって、狙撃スコープのオーバーレイのカラーを変更します。
  • ScopeColor の アルファ値を調整することによって、狙撃スコープのオーバーレイの強さを変更します。

完成したマテリアル

UDN_SniperScope_Material_2_Thumbnail.jpg

シンプルなポストプロセスチェーンの作成


ポストプロセスチェーンは、「Unreal Engine 3」でポストプロセスエフェクトを扱う場合に使用されるものです。エフェクトを互いにチェーンさせるためにツリーのようにノードを使用しながら、他のポストプロセスエフェクトのモジュールを容易に結合させて、新たなポストプロセスエフェクトをデザイナーは作ることができます。このシステムに関する詳細については、 ポストプロセスエディタ ユーザーガイド および ポストプロセスエフェクトのリファレンス のページを参照してください。

UDN_SniperScope_NewMaterialEffect_7.jpg

このマテリアルエフェクトをテストするには、コンテンツブラウザ内で [New] ボタンを左クリックして、新たなポストプロセスチェーンを作成します。

UDN_SniperScope_TweakMaterialEffect_8.jpg

ポストプロセスチェーンが作成されたら、コンテンツブラウザ内のアイコンをダブルクリックすることによって、ポストプロセスエディタを開きます。何もないところで右クリックすると、コンテクストメニューが表示されるので、そこから Material Effect (マテリアルエフェクト) を選択します。これで、新たな Material Effect ポストプロセスノードが作成されます。

UDN_SniperScope_WorldProperties_9.jpg

Material Effect ポストプロセスノードを選択して、[Material] フィールドを、上で作成した狙撃スコープ (Sniper Scope) マテリアルにセットします。

UDN_SniperScope_SetWorldProperties_10.jpg

UnrealScript でマテリアルのパラメータを編集する


この開発キットドキュメントにおけるマテリアル作成のセクションで述べたように、変数をいくつか調整しなければなりません。ポストプロセスチェーン内の Material Effect ノードを見つけて参照することができるようにするには、その Material Effect ノードに名前をつける必要があります。これは、ポストプロセスエディタ内で次のようにして行うことができます。

UDN_SniperScope_TweakMaterialEffect_12.jpg

YourPlayerController.uc
var MaterialInstanceConstant SniperPostProcessMaterialInstanceConstant;

function PlayerTick(float DeltaTime)
{
  local MaterialEffect SniperPostProcessEffect;
  local LocalPlayer LocalPlayer;
  local LinearColor LC;

  Super.PlayerTick(DeltaTime);

  if (SniperPostProcessMaterialInstanceConstant == None)
  {
    Super.PlayerTick(DeltaTime);

    // Get the local player, which stores the post process chain
    LocalPlayer = LocalPlayer(Player);
    if (LocalPlayer != None && LocalPlayer.PlayerPostProcess != None)
    {
      // Get the post process chain material effect
      SniperPostProcessEffect = MaterialEffect(LocalPlayer.PlayerPostProcess.FindPostProcessEffect('SniperScope'));
      if (SniperPostProcessEffect != None)
      {
        // Create a new material instance constant
        SniperPostProcessMaterialInstanceConstant = new () class'MaterialInstanceConstant';
        if (SniperPostProcessMaterialInstanceConstant != None)
        {
          // Assign the parent of the material instance constant to the one stored in the material effect
          SniperPostProcessMaterialInstanceConstant.SetParent(SniperPostProcessEffect.Material);
          // Set the material effect to use the newly created material instance constant
          SniperPostProcessEffect.Material = SniperPostProcessMaterialInstanceConstant;

          // Adjust the scope color
          LC.R = 1.f;
          LC.G = 0.f;
          LC.B = 0.f;
          LC.A = 1.f;
          SniperPostProcessMaterialInstanceConstant.SetVectorParameterValue('ScopeColor', LC);
        }
      }
    }
  }
}

UDN_SniperScope_RunTimeChange_12.jpg

ダウンロード


UDN_SniperScope_Finished_11.jpg

  • このドキュメントで使用されているコンテンツは、 ここから ダウンロードすることができます。

関連テーマ