UDN
Search public documentation:

ImageBasedReflectionsJP
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 Engine 3」におけるDirectX 11 > 画像ベースの反射
UE3 ホーム > マテリアルとテクスチャ > 画像ベースの反射


画像ベースの反射


ドキュメントの概要: Daniel Wright により作成。

概要


画像ベースの反射は、「Unreal Engine 3」における DirectX 11 のレンダリング パイプラインの機能です。この技術は、GDC 2011 (ゲーム デベロッパーズ カンファレンス 2011) の Samaritan デモにおいて、シーン全体の HDR 反射をリアルタイムにレンダリングするために使用されました。この技術では、各ピクセルにおいて、シーンの近似バージョンを反射させることによって、これまでの反射技術 (シーンキャプチャなど) よりも効率的になっています。シーンの近似バージョンは、4 つの主要なコンポーネントから構成されています。

  • ImageReflectionActors (テクスチャ化されたクワッド)
  • bUseImageReflectionSpecular が有効になっている光源
  • 不透明なサーファスからの粗い静的なシャドウイング
  • ImageReflectionShadowPlane で反射された、動的なオブジェクトからの動的なシャドウイング

これらのコントロールすべてから構成されているシーン

Reflections.jpg

画像ベースの反射を有効にする


ゲームの Engine.ini ファイルにおいて、 AllowImageReflections と AllowImageReflectionShadowing を True にセットする必要があります。次に、反射させるマテリアルの上で bUseImageBasedReflections を有効にし、ImageReflectionActors を配置することによって、何かが反射するようにします。

空のレベルからのクイックスタート

  • 静的メッシュまたは BSP を追加します。
  • 新たなマテリアルを作成し、値 1 をもつ Constant ノードを Specular (スペキュラ) の input に接続し、 bUseImageBasedReflections を enabled (有効) に変更し、これをシーンのメッシュに割り当てます。
  • エディタが Lit (リット) モードになっていることを確認します。これによって、光源がない場合に自動的に Unlit (アンリット) に変更され、反射が表示されなくなります。
  • [Actor Classes] (アクタクラス) タブの ImageReflectionActor を、配置したジオメトリの上にドラッグアンドドロップします。
  • 反射が見えるようにカメラを配置します。デフォルトでは、 ImageReflectionActor が一方の側に向かっているので、カメラを反対の側に回転させることによって反射が見えるようにしなければならない場合があります。

注意 : ImageReflectionActor は透過 (translucent) であるため、透過の選択を有効にしたときにのみ選択することができます。(デフォルトでは、無効になっています)。透過の選択を制御するボタンは、エディタのツールバー上にある [distance to far clipping plane] (遠いほうのクリッピング平面までの距離) というスライダーのすぐ隣りにあります。

機能


画像ベースの反射には、次の機能セットがあります。

  • HDR 反射。
  • あらゆるサーフェスが反射できます。(平面や点に限定されない)。
  • サーファス全体で光沢を変化させる機能がサポートされています。この機能は濡れた道路などに適しています。そのうような道路の場合は、水たまりでは鏡のような反射となり、他の部分ではより光沢のある反射となります。
  • 異方性の光沢 - ある方向において、反射による縞が強くなります。
  • 動的なコンポーネント - 静的なシャドウイングを除いて、反射のあらゆる部分を実行時に変化させることができます。

マテリアルのプロパティ


次のマテリアルプロパティが、画像の反射に影響を与えます。

  • bUseImageBasedReflections (画像ベース反射の使用) - マテリアル上で画像の反射を有効 / 無効にします。
  • ImageReflectionNormalDampening (画像反射法線緩和) - 画像の反射によって使用される法線を緩和させます。これが役立つのは、つぎのような理由によります。すなわち、濡れたサーファスにおいて、反射するディフューズ光源のためには、凹凸が大きい法線となり、スペキュラ反射のためには、よりなめらかな法線となる傾向があるからです。この値が大きくなると法線がよりなめらかになります (潜在する頂点法線により近くなります)。値が 1 の場合は、まったく緩和されず、与えられた法線がそのまま反射に用いられます。
  • SpecularColor (スペキュラカラー) - 反射の寄与をスケーリングします。
  • SpecularPower (スペキュラパワー) - マテリアルの光沢を制御します。

ImageReflectionActors


ImageReflectionActors は、画像ベースの反射を使用して反射されるシーンの最も基本的な要素です。他のプロパティをいくつか使用して、テクスチャ化されたクワッドを定義します。

  • bEnabled (有効) - 反射が有効か否かを保持します。Matinee の切り替えトラックを通じて制御することができます。
  • bTwoSided (両面) - 反射が両側から見ることができるか否かを保持します。
  • ReflectionColor (反射カラー) - RGB によって ReflectionTexture 値が調整され、A (アルファ) によって輝度が制御されます。 Matinee の LinearColor トラックを通じて制御することができます。
  • ReflectionTexture - 反射の中のクワッドに適用されるテクスチャです。

最大 85 個の ImageReflectionActor をワールド内で同時に有効にすることができます。この値を超えると、そのうちのいくつかがレンダリングされなくなります。有効な ImageReflectionActor の数が増えると、その分だけ画像反射をレンダリングするコストが高くなります。このことは、ImageReflectionActor がオフスクリーンの場合であっても同様です。(なぜなら、ビューアの背後にある場合でも反射の中では見ることができるからです。)

ReflectionTexture (反射テクスチャ) の制限

D3D 11 テクスチャ配列をともなって使用されるため、ReflectionTexture プロパティには制限があります。制限事項は以下のとおりです。

  • サイズは、1024 * 1024 でなければなりません。
  • フォーマットは、DXT5 でなければなりません。
  • テクスチャグループは、TEXTUREGROUP_ImageBasedReflection でなければなりません。このテクスチャグループには、特別なミップ生成設定項目があります。この設定項目は、ミップマップをブラーさせることによって、拡大した場合にむらができないようにします。

ReflectionTexture の RGB は、カードがどのくらいエミッシブであるかを表し、アルファはどのくらいオパシティであるかを表します。

左側にある単一の ImageReflectionActor によって、反射地点からの距離に光沢度がどのくらい依存しているかが分かります。右側は、反射が異方性であり、垂直方向により引き延ばされています。

6NoAniso.jpg 6Aniso.jpg

次のシーンでは、あらゆるサーファスが画像反射を受け取ることが分かります。地面の平面である必要はありません。光沢度は、マテリアルのスペキュラパワーと反射元との距離に影響を受けるため、シーン中では壁よりも地面の方が、光沢度が高くなっているのです。

AnySurface.jpg

ImageReflectionSceneCapture

ImageReflectionSceneCapture は、基本的に ImageReflectionActor にすぎませんが、シーンの一部をテクスチャの中にキャプチャするため、ユーザーが手作業で反射テクスチャを指定しなくても済みます。建物の前面全体やエミッシブテクスチャがまだないもののために反射をセットアップする場合に、非常に役立ちます。シーンキャプチャは、ライティングのビルド時に更新します。ライティングをビルドせずに更新を強制するには、右クリックして Update (更新) を選択します。

プロパティ

  • DepthRange (深度範囲) - テクスチャの中にキャプチャされるワールド空間の深度の範囲を制御します。選択されると、ワイヤーフレームボックスによって現在の範囲の大きさが表示されます。
  • ColorRange (カラー範囲) - HDR のソース値を、LDR 生成のテクスチャに収めるために使用されます。デフォルト値は 4 です。これは、キャプチャされたテクスチャで表現できる最大カラー値が 4 であることを意味します。

レベルに置かれた単一の ImageReflectionSceneCapture です。背後の建物の前面がキャプチャされています。ワイヤーフレームボックスによって、キャプチャされる深度の範囲が示されています。

SceneCapture.jpg

環境テクスチャ


WorldInfo には、レベルの上にある無限に遠い半球から生じる反射を指定できるプロパティがいくつかあります。遠方から届いているように見える環境光の反射を追加する場合に役立ちます。また、シャドウイングメソッドによってもたらされるディテールを際立たせる場合にも有効です。

  • ImageReflectionEnvironmentTexture (画像反射環境テクスチャ) - 画像反射のためのパノラマ環境テクスチャです。このテクスチャは、水平線が最下部 (v = 0) に沿うようにするとともに、ワールド空間内でまっすぐに最上部 (v = 1) に沿うように配置する必要があります。すると、テクスチャの u 方向が、ワールドの Z 軸を中心とする回転に対応するようになります。
  • ImageReflectionEnvironmentColor (画像反射環境カラー) - ImageReflectionEnvironmentTexture に掛け合わされるカラーです。アルファによって輝度が調整されます。
  • ImageReflectionEnvironmentRotation (画像反射環境回転) - ワールドの Z 軸を中心にして環境テクスチャを回転させる角度です。単位は度です。

次は、環境テクスチャの例です。

EnvironmentTexture.jpg

ライトの反射


ライトに、 bUseImageReflectionSpecular (画像反射スペキュラの使用) というプロパティが新たに加わりました。これが有効にセットされてライトが反射すると、次のようなものが生じます。

  • 長く縞のようなハイライト。雨の日の夜に (路上などで) よく見かけるものです。
  • ライトの影響範囲に縛られないハイライト。
  • エネルギー保存のスペキュラ。(光沢のある部分では反射が暗くなり、鏡のような部分では明るくなります)。

bUseImageReflectionSpecular が有効になっているライトは、最大で 85 個ワールド内に同時に置くことができます。この値を超えると、そのうちのいくつかがレンダリングされなくなります。ライトには、 ReflectionSpecularBrightness (反射スペキュラ輝度) というプロパティもあります。これは、ライトによる反射の輝度を調整するものです。

すべての街灯の bUseImageReflectionSpecular が有効になっているシーンです。遠くにあるライトの反射が暗くはなっているものの見えていることに注目してください。ハイライトは道路のスペキュラパワーによって影響を受けます。マテリアルの光沢が強くなると暗くなります。(エネルギー保存)。

Streaky.jpg

静的なシャドウイング


反射のシャドウイングでは、光源漏れを防ぐ必要があります。反射をシャドウイングするための主要な方法は、ライティングのビルド時にライトマスによって生成されるシーンのオパシティ (静的なサーファス) から事前に計算される方法です。これらのシャドウを使用するには、WorldInfo において bEnableImageReflectionShadowing を有効にするとともに、シャドウイングが必要な部分のあたりに Lightmass Importance Volume (ライトマス重要ボリューム) があることを確認し、ライティングをビルドします。コンポーネント上で bCastStaticShadow を無効にすることによって、反射をシャドウイングする際に個々のオブジェクトを除外することができます。

次の単純なシーンでは、静的なシャドウイングがどのように作用するかを示しています。シャドウの半暗部の大きさは、反射地点からの距離とマテリアルの光沢度に依存します。

StaticShadowing.jpg

動的なシャドウイング


移動可能なアクタタイプ (InterpActor 、SkeletalMeshActor など) は、静的なシャドウイングの方法に含まれないため、地面から浮き上がっているように見えます。反射のためにサポートされている唯一の動的シャドウイングは、平面の反射を通じて行われるものです。これは、ImageReflectionShadowPlane (画像反射シャドウ平面) アクタを配置および配列することによって指定します。このような場合、地面に平面を配置するのが最も一般的です。

左のシーンには、動的なオブジェクトのシャドウイングが一切ありません。右のシーンでは、道路に ImageReflectionShadowPlane を並べているため、動的オブジェクトが地面に接地しています。

3Unshadowed.jpg 3Shadowed2.jpg