UDN
Search public documentation:

DevelopmentKitGemsCreatingDistortedReflectionJP
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 > 歪んだ反射の作成
UE3 ホーム > マテリアルとテクスチャ > 歪んだ反射の作成

歪んだ反射の作成


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

概要


マテリアルのリアリズムを高めるには、強い / 弱い反射が必要になることがあります。パフォーマンス上の理由で、静的なキューブ マップは、オフラインで作成し、リアルタイムに使してそのエフェクトを実行することができます。ムーアの法則によって、リアルタイムに反射を生成してマテリアル内で使用するために利用できるパワーは、はるかに大きくなりました。鏡や大理石、金属といった現実世界の反射物を簡単に作成することができるようになりました。

レンダリング ターゲット


レンダリング ターゲットは、オフスクリーンでレンダリングされるビューポートです。つまり、ビューポートはワールドのビューを表しますが、スクリーン上には表示されません。これらはマテリアル内で使用することができるため、非常に便利なものです。それというのも、レンダリング ターゲットをマテリアルエディタ内で望ましい方法で編集することが可能だからです。

レンダリング ターゲットを作成する

レンダリング ターゲットは、コンテクスト ブラウザー内で右クリックするとことによって簡単に作成できます。New TextureRenderTarget2D (新たなテクスチャ レンダリング ターゲット 2D) を選択します。

01_CreatingRenderTarget.jpg

パッケージ名およびオプションのグループ、名前を入力します。この例では、Render Target (レンダリング ターゲット) を別のパッケージではなくマップ内に保存するようにしています。レンダリング ターゲットは通常特定のマップでしか使用されないため、このやり方が有益です。ただし、もちろんのこと、そのやり方を取るかどうかは任意です。レンダリング ターゲット 2D を適切なものにするために調整できるパラメータがあります。

02_SetPackageGroupName.jpg

  • Format - RenderTarget2D の形式です。
    • A8R8G8B8 - 8 ビットの RGBA です。値は、0 ~ 255 のみ可能です。
    • G8 - 8 ビットの Grayscale (グレースケール) です。値は、0 ~ 255 のみ可能です。
    • FloatRGB - float 型 RGB です。値は、あらゆる浮動小数点が可能です。
  • Height - RenderTarget2D の高さです。この値が小さくなるほどパフォーマンスが良くなります。
  • Width - RenderTarget2D の幅です。この値が小さくなるほどパフォーマンスが良くなります。

コンテンツブラウザ内で RenderTarget2D をダブルクリックすることによって、さらにいくつかのパラメータを調整することができます。

04_RenderTargetParameters.jpg

  • Address X - 0.f ~ 1.f 以外でサンプリングする場合に返されるピクセルを調整するためのパラメータです。
  • Address Y - 0.f ~ 1.f 以外でサンプリングする場合に返されるピクセルを調整するためのパラメータです。
  • Force Linear Gamma (強制 線形 ガンマ) - このレンダリング ターゲットのために線形のガンマ空間 (ガンマ補正の形態) を使用する場合に True にセットします。
  • Needs Two Copies (2 つのコピーを必要とする) - シーン自体の内部でレンダリング ターゲットを使用している場合は False にセットします。これによってメモリが節約されます。False にセットしない場合は、レンダリング ターゲットが他の目的で使用されているオフスクリーンバッファであるならば、2 個のコピーが必要となることがあります。
  • Render Once (1 度レンダリングする) - レンダリング ターゲットが一度だけレンダリングされればよい場合は、True にセットします。まったく変化しないシーンキャプチャに役立ちます。
  • Target Gamma (ターゲット ガンマ) - レンダリング ターゲット テクスチャのガンマを調整することができます。
  • Force PVRTC4 (強制 PVRTC4) - iOS でサポートされていなためレンダリング ターゲットに使用されません。

関連するテーマ

シーン キャプチャ反射を作成する


コンテンツブラウザ内の [Actor Classes] (アクタクラス) タブを開き、Scene Capture Reflect Actor (シーン キャプチャ反射アクタ) を見つけます。

03_SelectSceneCaptureReflectActor.jpg

Scene Capture Reflect Actor (シーン キャプチャ反射アクタ) を配置したい場所を右クリックします。反射が発する元となるべき場所に置きます。

05_AddSceneCaptureReflectActor.jpg

シーンキャプチャ反射のプロパティをセットする

SceneCaptureReflectActor (シーンキャプチャ反射アクタ) は、 SceneCaptureReflectComponent (シーンキャプチャ反射コンポーネント) のコンテナにすぎません。

06_SceneCaptureReflectActorProperties.jpg

  • Texture Target (テクスチャターゲット) - シーンキャプチャをレンダリングする RenderTarget2D です。
  • Scale FOV (スケール 視野角) - FOV (視野角) のスケールです。
  • Enabled (有効化) - シーンキャプチャが有効化されているかについてです。
  • Enable Post Process (ポストプロセスの有効化) - 当該のシーンキャプチャにポストプロセスが有効化されているかについてです。
  • Enable Fog (フォグの有効化) - 当該のシーンキャプチャにフォグが有効化されているかについてです。
  • Clear Color (クリアーするカラー) - シーンキャプチャをレンダリングする前に RenderTarget2D をクリアーする色です。
  • View Mode (ビューモード) SceneCapView_LitNoShadows (シーンキャプチャビュー_リット シャドウなし) - lit (リット) モードでシーンをレンダリングしますが、シャドウは省略します。 SceneCapView_Lit (シーンキャプチャビュー_リット) - lit (リット) モードでシーンをレンダリングします。 SceneCapView_Unlit (シーンキャプチャビュー_アンリット) - unlit (アンリット) モードでシーンをレンダリングします。 SceneCapView_Wire (シーンキャプチャビュー_ワイヤーフレーム) - wireframe (ワイヤーフレーム) モードでシーンをレンダリングします。
  • Scene LOD (シーン LOD) - シーンをキャプチャする際に使用するシーンの LOD レベルを調整することができます。
  • Frame Rate (フレームレート) - 当該のシーンキャプチャを更新するためのフレームレートです。
  • Post Process (ポストプロセス) - 当該のシーンキャプチャのために使用するポストプロセス チェーンです。
  • Use Main Scene Post Process Settings (メインのシーン ポストプロセス設定値を使用する) - シーンキャプチャがだたい同じになるようにするために、シーンのポストプロセス設定値を使用します。
  • Skip Update If Texture Users Occluded (テクスチャを使用しているものがオクルードされている場合に更新を省く) - マテリアル、アクタが現在視界にない場合は、当該のシーンキャプチャの更新を省きます。
  • Skip Update If Owner Occluded (オーナーがオクルードされている場合に更新を省く) - コンポーネントのオーナーが視界にない場合は、当該のシーンキャプチャの更新を省きます。
  • Max Update Dist (最大更新距離) - カメラがこの値よりも遠くにある場合は、当該のシーンキャプチャの更新を省きます。
  • Max View Distance Override (最大視界距離オーバーライド) - 反射から遠くにあるオブジェクトをカリングするために使用します。
  • Skip Rendering Depth Prepass (深度プリパスのレンダリングを省く) - 当該のシーンキャプチャをレンダリングする場合、深度プリパスを省きます。シーンキャプチャが小さい場合は、深度プリパスを省くと負荷が高くなります。(CPU コスト対 GPU コスト)。
  • Max Streaming Update Dist (最大ストリーミング更新距離) - オーナーからビューアまでの距離がこれよりも離れている場合、シーンキャプチャのためのストリーミングテクスチャを更新しません。

鏡を作成する


このマテリアルはとても簡単です。唯一適切に設定しなければならないのは、Lightmass Switches です。Lightmass が実行されている場合、レンダリング ターゲットを使用するのは意味がありません。これは、カメラの視界に依存するためです。したがって、Lightmass Switches がない場合は、不適切なディフューズカラーが使用されます。(通常、明るいグリーン)。この問題を解決するには、Lightmass に定数を参照させることによって、より適切にライトを反射されるようにします。

鏡マテリアルのレイアウト

07_MirrorMaterialLayoutThumb.jpg

08_MirrorExample.jpg

大理石を作成する


大理石のマテリアルを作成するには、ディフューズテクスチャと反射の間を線形補間するという方法があります。

大理石マテリアルのレイアウト

09_MarbleFloorMaterialLayoutThumb.jpg

10_MarbleFloorExample.jpg

歪んだ金属を作成する


反射を歪ませるには、法線マップを使用して UV 座標をオフセットします。

歪められた金属マテリアルのレイアウト

11_DistortedReflectionMaterialLayoutThumb.jpg

12_DistortedReflectionExample.jpg

反射の中に明るい緑の部分があるのはなぜか?


「Unreal Engine 3」がレンダリングターゲットに反射をレンダリングする場合、使用できるレンダリングターゲットのテクスチャスペース全部は使用しないことがあります。クリアなカラーが明るい緑であることが多いため、歪みテクスチャルックアップがレンダリングの範囲外である場合、明るい緑のピクセルが使用されます。不都合なことに、これが歪み反射に現れてしまうためです。この問題に対処するには、2 つの方法があります。

Reflection_BrightGreenErrors.jpg

カラーに基づきピクセルをフィルタリングする

1 つの方法としては、除去するカラー (この場合、明るい緑) に一致するピクセルを探します。それらのピクセルが見つかったら、歪んでいないレンダリングターゲットを使用します。そのためには、歪んだレンダリングターゲットの output の各コンポーネントで、if 文を実行します。まず、歪んだレンダリングターゲットの output の green チャンネルを調べます。これが 0.1f (バイトで 26) を超えているならば、フィルタリングダウンして、red チャンネルを調べます。0.1f を超えない場合は、歪んだレンダリングターゲットの output を出力します。red チャンネルがチェックされる場合、red チャンネルが 0.1f を下回っているかどうかが調べられます。もしそうであれば、blue チャンネルをチェックします。0.1f を下回っていない場合は、歪んだレンダリングターゲットの output が出力されます。blue チャンネルがチェックされる場合、blue チャンネルが 0.1f を下回っているかどうかが調べられます。もしそうであれば、歪みをともなわないレンダリングターゲットが出力されます。0.1f を下回っていない場合は、歪んだレンダリングターゲットが返されます。

Reflection_GreenFilterNodes.jpg

次がその結果です。先のものよりも出来映えがよいですが、それでも、バイリニアフィルタリングのせいで、見逃されている緑のピクセルがいくらかあります。

Reflection_BrightGreenFilter.jpg

ただし、この方式によって選択されているピクセルをチェックしたならば、先ほどは反射シーンの一部になっていた緑のピクセルが選択されていることも分かるはずです。そのため、シーンにおいて緑のパレットが圧倒的に使用されている場合、この方式はそれほどうまく機能しないことになります。

Reflection_GreenFilterPurple.jpg

UV 座標をクランプする

もう一つの方法としては、現実の問題を解決します。歪みが生じるのは、レンダリングターゲット上の UV 座標のルックアップを調整することによってです。UV 座標が、レンダリングターゲットのレンダリング範囲から逸脱して明るい緑の領域に入った場合に、明るい緑のピクセルが使用されます。これによって問題が発生してしまいます。そこで、この問題を解決する 1 つの方法として、歪んだ UV 座標のルックアップをクランプ (固定) することが考えられます。

Reflection_UVClampNodes.jpg

次がその結果です。最初のものやフィルタリング方式のものよりも結果がよくなりました。ただし、それほど目立たないながらも、端の方でテクスチャバンディングがいくらか生じています。

Reflection_UVClamping.jpg

しかしながら、この方式は、用いられているレンダリングターゲットが一定であることに依存します。これは、常に満たされる条件ではありません。UV のクランプによって失われるピクセルもあります。そのため、シャープな反射にはそぐわない場合があります。

ダウンロード


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