レンダリング パス

ムービー レンダー キューのさまざまなレンダリング パス レイヤーについて説明します。

Windows
MacOS
Linux

ムービー レンダー キューは、最終画像、オブジェクト ID、その他のレンダリング関連のパスなど、異なるタイプの出力画像を個別のパスでレンダリングする機能をサポートしています。各レンダリング パス設定により、別々のレンダリング モードでムービーが出力されます。選択した外部ポストプロダクションあるいはコンポジット プログラムにおいて、後でそれらを使用することができます。

前提条件

  • ムービー レンダー キュー」ページの前提条件の手順を完了している。

    • オブジェクト ID を使用している場合は、この ID を使用するためのプラグインを有効にしている。Unreal Engine メニューで [Edit (編集)] > [Plugins (プラグイン)] に移動して、 [Rendering (レンダリング)] セクションで [Movie Render Queue Additional Render Passes] を見つけて有効にします。有効にしたら、エディタを再起動する必要があります。

    render pass plugin

ムービー レンダー キューは 複数 のレンダリング パスを出力する機能を備えているものの、ディファード レンダリングの制限により、最終画像を構成するすべてのパスを出力することはできません。つまり、アンビエント オクルージョン、サブサーフェス散乱など、他のレンダリング パッケージ (AOV) で使用できる一般的なパスは、Unreal Engineでは利用できません。このページでは、サポートされている唯一のパスをリストしています。

概要

レンダリング パス を出力に追加するには、 [+ Setting (+ 設定)] ボタンをクリックして、 [Rendering (レンダリング)] カテゴリのエントリを選択します。

render pass list

レンダリング パスは、他の設定と同様に有効または無効にすることができます。可能な場合はプロパティの編集用に選択することもできます。

デフォルトでは、選択したすべてのレンダリング パスが、最終出力フォルダに他のそれぞれのレンダリング パスと一緒に出力されます。形式文字列トークンの {render_pass} を使用すると、これらのパスを整理できます。たとえば、 File Name Format で次のように設定すると、パスが Output Directory を基準に、パスに関連するサブフォルダに分けられます。

{render_pass}/{sequence_name}.{frame_number}

ムービー レンダー キューで生成できるレンダリング パスの例。

ディファード レンダリング

Unreal Engine からの主な出力は、ビューポートで表示される最終イメージを作成する、デフォルトの [Deferred Rendering (ディファード レンダリング)] 設定で処理されます。ディファード レンダリングには、 [Detail Lighting (詳細ライティング)][Lighting Only (ライティングのみ)][Reflections (反射)][Unlit (非ライティング)] などのバリエーションもあります。これらのバリエーションは最終イメージの作成には使用されません。ここではレベル エディタ ヴューポートと同等です。

以下がディファード レンダリング オプションです。

レンダリング パス

説明

Deferred Rendering (ディファード レンダリング)

ビューポートの表示と一致するシーンの最終的な画像を表示します。

deferred rendering

Detail Lighting (詳細ライティング)

法線マップと組み合わされているライティングのみを表示する特別なシェーダ バリエーション。シーンのジオメトリを際立たせるのに役立ちます。

deferred detail lighting

Lighting Only (ライティングのみ)

詳細ライティングに似ているものの、ライティングに影響する法線マップがありません。

deferred lighting only

Reflections Only (反射のみ)

ワールドのすべてを反射させる特別なシェーダ バリエーション。

deferred reflections only

Unlit (非ライティング)

ベース カラーのみを表示し、ライティング情報を含まない特別なシェーダ バリエーション。

deferred unlit

すべてのディファード レンダリング パスに同一のプロパティが含まれていますが、各レンダリング パスは個別に設定できます。

deferred rendering details

名前

説明

Accumulator Includes Alpha

オンにすると、アルファ チャンネルに複数の時間/空間サンプルが蓄積されます。これには r.PostProcessing.PropagateAlpha を 1 または 2 に設定する必要があります。これは、[Project Settings (プロジェクト設定)] > [Rendering (レンダリング)] で、[Post Processing (ポストプロセス)] 設定の [Enable Alpha Channel Support (アルファ チャンネル サポートを有効化)] で有効にできます。

また、蓄積の負荷が約 30% 増加するため、必要な場合を除いて使用しないでください。これは、複数の時間/空間サンプルを使用するレンダリングに適用されます。

Disable Multisample Effects

被写界深度 (DOF)、テンポラル アンチエイリアシング、モーション ブラー、色収差など、複数のピクセルをブレンドするポストプロセス エフェクトを無効にします。これは、Object Id レンダリング パスを使用する場合は望ましくありません。この設定により、シーン内でこれらのポストプロセスを無効にせずに、レンダリング ジョブに対するこれらのポストプロセスを除外することができます。

Use 32Bit Post Process Materials

この設定を有効にすると、ポストプロセス マテリアルが 16 ビットではなく、32 ビット品質で書き込まれます。

Additional Post Process Materials

追加するポストプロセスのレンダリング パスの配列。デフォルトでは、MovieRenderQueue_WorldDepth と MovieRenderQueue_MotionVectors を含みます。このパスをレンダリングするには、マテリアルを有効化する必要があります。

Add Default Layer

ステンシル レイヤー配列に含まれていないすべてのオブジェクトを含む追加のステンシル レイヤーを作成します。デフォルト レイヤーは個別にレンダリングされるので、後に再コンポジットするためにオブジェクトの小さなグループを除外するレンダリングを作成することができます。

Stencil Layers

ステンシル レイヤーのリスト。シーン内のオブジェクトのグループを含みます。シーンはすべてのオブジェクトで再度レンダリングされ、指定されたレイヤー上にオブジェクトを含まないピクセルはクリップされて黒くなります。その後、DoF、モーション ブラー、TAA を使用する機能を保持したままポストプロセスが行われます。

ポストプロセス レンダリング パス

ポストプロセス レンダリング パスは、ディファード レンダラから指定できる追加のレンダリング パスです。ポストプロセス レンダリング パスは、.exr 形式で出力する必要があります。これは、他の形式で表示および解釈できる範囲を超えたカラーやメタデータの情報が含まれているためです。

ワールド深度

ワールド深度 は赤チャンネルに格納されるワールド単位で書き込まれた深度です。これは、ポストプロダクションで 被写界深度 を再作成するために使用できます。カメラ焦点距離とシャッター サイズを EXR メタデータから読み取って、インゲームの被写界深度に自動的に一致させることができます。

world depth render pass

Nuke ZDefocus2 ノードの例を以下に示します。EXR ファイルからメタデータを読み取り、リアルタイムで検出されるものと同様のブラーを生成します。貼り付け後に focal_point プロパティを再調整して、WorldDepth テクスチャを正しくサンプリングする必要があります。

ZDefocus Nuke ノードでのワールド深度

set cut_paste_input [stack 0]
version 12.0 v3
push $cut_paste_input
add_layer {FinalImageMovieRenderQueue_WorldDepth FinalImageMovieRenderQueue_WorldDepth.red FinalImageMovieRenderQueue_WorldDepth.green FinalImageMovieRenderQueue_WorldDepth.blue FinalImageMovieRenderQueue_WorldDepth.alpha}
ZDefocus2 {
z_channel FinalImageMovieRenderQueue_WorldDepth.red
math depth
fill_foreground false
center {{"[metadata exr/unreal/camera/FinalImage/focalDistance]"}}
focal_point {960 540}
size {{"((input.height*(focalLength*focalLength / (fstop * (focalDistance - focalLength)))*.5 / sensorWidth)/10)" x1 26}}
max_size 100
filter_type bladed
legacy_resize_mode false
show_legacy_resize_mode false
blades {{"[metadata exr/unreal/camera/FinalImage/dofDiaphragmBladeCount]"}}
name ZDefocus1
selected true
xpos 959
ypos 229
addUserKnob {20 User}
addUserKnob {7 focalLength l "Focal Length"}
focalLength {{"[metadata exr/unreal/camera/FinalImage/focalLength]"}}
addUserKnob {7 focalDistance l "Focal Distance"}
focalDistance {{"[metadata exr/unreal/camera/FinalImage/focalDistance]"}}
addUserKnob {7 sensorWidth l "Sensor Width"}
sensorWidth {{"[metadata exr/unreal/camera/FinalImage/sensorWidth]"}}
addUserKnob {7 fstop l Fstop}
fstop {{"[metadata exr/unreal/camera/FinalImage/fstop]"}}
}

モーション ベクター

モーションベクター は、X と Y の 0,1 座標空間に格納されます。ここで、0.5, 0.5 はモーションなしです。

motion vector render pass

Nuke では、 VectorBlur ノードを使用して画像にモーション ベクターを適用することができます。Ureal Engine は、他のレンダリング パッケージとは異なり、画面全体にノーマライズされたモーション ベクターを格納します。そのため、Nuke VectorBlur ノードでは、uv_offset を -0.5 (再スケーリングを行うため /[0, 1/] ではなく、/[-.5, .5/]) に設定し、モーション ブラーのスケールを画像の幅で制御します。

VectorBlur Nuke ノードを使用したモーション ベクター

set cut_paste_input [stack 0]
version 12.0 v3
push $cut_paste_input
add_layer {FinalImageMovieRenderQueue_MotionVectors FinalImageMovieRenderQueue_MotionVectors.red FinalImageMovieRenderQueue_MotionVectors.green FinalImageMovieRenderQueue_MotionVectors.blue FinalImageMovieRenderQueue_MotionVectors.alpha}
VectorBlur2 {
uv FinalImageMovieRenderQueue_MotionVectors
uv_offset -0.5
blur_type uniform
scale {{input.width}}
soft_lines true
name Unreal_VectorBlur
selected true
xpos 1338
ypos -93
}

お使いのソフトウェアによっては、モーション ベクターの X チャンネルと Y チャンネルを個別に再スケーリングする必要がある場合があります。これは、他のソフトウェアでは、モーション ベクターがピクセル値であることを想定しており、画面に合わせて正規化されていないためです。モーション ベクターをスクリーンに正規化すると、X チャンネルと Y チャンネルの強度が異なります。

ステンシル レイヤー

ステンシル レイヤーを使用すると、Layers 内のオブジェクトに基づいたシーケンスのレイヤー化されたレンダリングを行うことができます。

シーン全体はレイヤーごとにレンダリングされ、レイヤーに属するアクタは ステンシル バッファ にレンダリングされます。ステンシル バッファは、レイヤー内のアクタの外側にあるピクセルをクリップするために使用されます。これにより、シャドウ キャスティング オブジェクトが他のアクタやレイヤーにシャドウをキャストすることができます。

ステンシル バッファにレンダリングされると、ポストプロセス エフェクトが適用され、各ピクセルを取得して半透明の黒がピクセルに書き込まれます。半透明の後、そしてポストプロセスの前にこの処理が行われ、その後ポストプロセスがこのレイヤーに適用されます。アルファ チャンネルを維持することができるので、ポストプロダクションにおいて実際に影響を受けたピクセルとその量を知ることができます。

以下に、3 つのステンシル レイヤーとデフォルト レイヤーの例を示します。被写界深度などのポストプロセス エフェクトが正しく適用され、背景画像からも前景のオブジェクトがクリップされていることがわかります。これらの画像は、データをアンプリマルチプライ処理する必要はありますが、最終的なレンダリングと同様の結果を得るために、再び追加することができます。

stencil layer render pass

以下は Nuke の例です。この例では、元の画像で指定されたレイヤーの 1 つに単純な色相シフトを適用しています。元の画像は、アルファ チャンネルの蓄積を有効にし、[Color Output (カラー出力)] で [Tone Curve (トーン カーブ)] を無効にした状態でレンダリングしています。

stencil layer nuke tint

このように複数の画像を適切に組み替えるためには、リニア空間で書き出す必要があります ([Color Output (カラー出力)] で [Tone Curve (トーン カーブ)] を無効にする)。こういったポスト プロダクション作業では、OCIO ベースのワークフローを使用する必要があります。

ステンシル レイヤーは、本当の意味でのレイヤー システムではありません。これは、半透明オブジェクトは、その背後にある他のレイヤーの不透明なオブジェクトを表示し、背景レイヤーは、前景オブジェクトがオクルージョンするブラック ホールを表示するためです。 ステンシル レイヤーは、レイヤーごとのポストプロセス マテリアルをサポートしていません。ステンシル レイヤーは、ベース レイヤーの追加のポストプロセス マテリアルと一致し、 カスタム深度/ステンシル をサポートしているマテリアルにのみ対応しています。

パストレーサー

パス トレーサーは、パス トレーサー レンダリング手法に基づいて画像を出力します。パス トレーサーの詳細は、ディファード レンダリング パスと似ています。

path tracer render details

パス トレーサーのレンダリング モードは、レンダリングするフレームごとにパス データを蓄積します。このため、特にカメラ フレームのコンテンツが大幅に変わった場合、画像のピクセルが塗りつぶされる際にノイズの多い画像になります。

このノイズを削減するため、[Anti-Aliasing (アンチエイリアス)] 設定で [Spatial Samples (空間サンプル)] の数を増やすことができます。

path tracer spatial samples

そうすることで、画像が複数回レンダリングされ、追加のサンプルによってパス トレーサーがより効果的にギャップを埋めることができます。パス トレーサーのレンダリングで効果的にノイズ除去するためには、大量の 空間サンプル が必要となり、画像の出力にかかる時間が大幅に増加します。

Spatial Samples Anti-Aliasing プロパティの値を大きくすると、Path Tracer レンダーのノイズが削減されます。

パス トレーサーのレンダリング モードは、現在のところ、実験段階の機能です。そのため、現時点では、すべてのマテリアル シェーディング モードがサポートされているわけではありません。

Object ID

[Object ID (オブジェクト ID)] レンダリング パスでは、シーンの各アクタに ID が割り当てられた画像を出力します。これらの ID は、アクタごとに完全に一意であるか、特定のプロパティに基づいてグループ化することができます。

object id render pass details

この画像をポストプロダクション スイートで使用すると、シーン内の個々のオブジェクトを選択してそのオブジェクト用のマスクを作成し、特定のオブジェクトを選択して調整を適用することができます。

元の画像 (ポストプロセスなし)

Object ID Pass

設定

オブジェクト ID パスには、正しくレンダリングするための特定の要件があります。

  1. オブジェクト ID パスと合成するレンダリング パスで、 Disable Multisample Effects をオンにする。これにより、モーションブラー、被写界深度、アンチエイリアシング、ピクセルの複数のレイヤーをブレンドするその他のポストプロセスが除去され、すべてのオブジェクトが鮮明なエッジを維持できるようになります。オブジェクト ID パスが最終イメージと正しく一致するために、これは必要です。

    disable multisample effects

  2. [Deferred Renderer] 設定で [Additional Post Process Materials] を展開して、 MovieRenderQueue_WorldDepthMovieRenderQueue_MotionVectors の両方のマテリアルを有効にします。

    additional post process materials

  3. シーケンス内のすべての Cine Camera Actors[Screen Percentage (スクリーン比率)]100 に設定されていることを確認します。これは、オブジェクト ID パスを最終画像に正確に一致させるために必要です。

    object id screen percentage

  4. [Anti-aliasing (アンチエイリアス)] 設定をジョブに追加して、 Spatial Sample Count8 以上に設定します。また、 Override Anti Aliasing をオンにして、 Anti Aliasing MethodNone に設定します。

    object id anti aliasing

    これにより、TAA がサポートされていないという制限に対処することができます。Temporal Sample Count を使用しても、各サンプル間のギャップをカバーするモーション ブラーがないため、単にオブジェクトの複数のコピーがわずかに重なった状態となり、求める結果が得られない場合があります。

  5. [.exr Sequence (.exr シーケンス)] 出力モードを設定に追加して、他のエクスポート形式を無効にするか削除します。Multilayer プロパティが オン になっていることを確認します。

    object id exr

これらの設定をした状態でムービー レンダー キューを起動すると、最終画像、オブジェクト Id、ワールド深度、およびモーション ベクターを含むマルチレイヤー EXR が出力されます。

Object Id は Cryptomatte 仕様を使用して EXR ファイルに格納されます。また、このデータを読み取るためのプラグインがサードパーティ製ソフトウェアで提供されています。

Object Ids のレンダリング パスは、Unreal Engine の実験段階の機能です。これは、Unreal Editor でのみ使用可能で、シッピング ビルドでは使用できません。

オブジェクト ID のグループ化

デフォルトでは、レベル内のすべてのアクタまたはコンポーネントに一意のカラーまたは ID が割り当てられます。これは Object Ids Id Type プロパティで変更できます。

object id group

ID タイプ

説明

Full

デフォルトの動作。レベル内のすべてのアクタの各プリミティブに適用されたすべてのマテリアルに対して、一意の ID が作成されます。

Material

ID はマテリアルやマテリアル インスタンスに基づいてグループ化されます。マテリアル インスタンスは、その親マテリアルでグループ化されます。

Actor

ID は同じアクタ インスタンスでグループ化されます。

Actor With Hierarchy

ID は同じアクタ インスタンスでグループ化されます。異なる ワールド アウトライナー フォルダ内のアクタは、そのフォルダを基準に個別にグループ化されます。

Folder

ID は ワールド アウトライナー フォルダ内のアクタでグループ化されます。これらのフォルダ内のすべてのアクタは、1 つの ID に統合されます。

Layer

ID は、 Layers で割り当てられたアクタごとにグループ化されます。複数のレイヤーに属しているアクタは、信頼性の低い結果を生み出す場合があります。

ポストプロセスでオブジェクト ID、深度、速度を組み合わせる

複数の空間サンプル、深度、速度を組み合わせることで、Unreal のポストプロセス パイプライン (深度マップによる 被写界深度 と速度テクスチャによる モーション ブラー ) と同様の結果を生成できます。これらのポストプロセス パスを適用する前に、オブジェクト ID を使用してオブジェクトを選択し、カラー補正を行うことができます。

被写界深度とモーション ブラーで適切な明るいハイライトを維持するには、トーン カーブを無効にしてシーンをレンダリングする必要があります。そのためには、[Color Output (カラー出力)] アイテムを追加して、 Disable Tone Curve プロパティをオンにします。これで、HDR リニア値が sRGB 色空間で出力されます。被写界深度とモーション ブラーを適用した後、sRGB 色空間を (リニア sRGB から) 希望の色空間に変換することができます。

disable tone curve

また、[Project Settings (プロジェクト設定)] で [Output Velocities During Base Pass (基本パス時の出力速度)] をオンにする必要があります。Unreal Engine のメイン メニューで [Edit (編集)] > [Project Settings (プロジェクト設定)] に移動してこの設定をオンにします。このプロジェクト設定を変更した後は、エディタを再起動する必要があります。

output velocities during base pass

また、r.BasePassForceOutputsVelocity 変数を 1 に設定する必要があります。これには、「/Engine/Config/ConsoleVariables.ini」を編集してエンジン全体でこの設定を行うか、レンダリング時に コンソール変数 として適用することもできます。

base pass console command

これは、ZDefocus ノードと VectorBlur ノードを使用した Nuke グラフの例です。速度テクスチャを Nuke で使用するには、赤と緑のチャンネルを切り替える必要があります (グラフでは RG_TO_GR で、 ShuffleCopy ノードを使用)。

この Nuke グラフでは、8 つの空間サンプル、オブジェクト ID パス、モーション ベクトル、ワールド深度でレンダリングされた exr を使用します。被写界深度情報は、exr メタデータから自動的に取得されます。cryptomatte ノードは、ファンのブレードとカーペットのマスクを作成するために使用され、その後、単純な色相シフトのマスクとして使用されます。色相シフトの適用後、前述の ZDefocus ノードを適用し、さらに VectorBlur を適用します。

nuke graph example

ObjectID, ZDefocus, and VectorBlur Nuke nodes

set N56cf6800 [stack 0]
add_layer {ActorHitProxyMask00 ActorHitProxyMask00.red ActorHitProxyMask00.green ActorHitProxyMask00.blue ActorHitProxyMask00.alpha}
add_layer {ActorHitProxyMask01 ActorHitProxyMask01.red ActorHitProxyMask01.green ActorHitProxyMask01.blue ActorHitProxyMask01.alpha}
add_layer {ActorHitProxyMask02 ActorHitProxyMask02.red ActorHitProxyMask02.green ActorHitProxyMask02.blue ActorHitProxyMask02.alpha}
Cryptomatte {
name Cryptomatte1
xpos 66
ypos -87
matteOutput alpha
matteList LivingRoom/CoffeeTable/BP_NewtonsCradle.NewtonsCradle
cryptoLayer ActorHitProxyMask
expression "((ActorHitProxyMask00.red == 30057640.0) ? ActorHitProxyMask00.green : 0.0) + ((ActorHitProxyMask00.blue == 30057640.0) ? ActorHitProxyMask00.alpha : 0.0) + ((ActorHitProxyMask01.red == 30057640.0) ? ActorHitProxyMask01.green : 0.0) + ((ActorHitProxyMask01.blue == 30057640.0) ? ActorHitProxyMask01.alpha : 0.0) + ((ActorHitProxyMask02.red == 30057640.0) ? ActorHitProxyMask02.green : 0.0) + ((ActorHitProxyMask02.blue == 30057640.0) ? ActorHitProxyMask02.alpha : 0.0) + 0"
keyedName ""
previewExpression0 "((mantissa(abs(ActorHitProxyMask00.red)) * 1 % 0.25) * ActorHitProxyMask00.green + (mantissa(abs(ActorHitProxyMask00.blue)) * 1 % 0.25) * ActorHitProxyMask00.alpha + (mantissa(abs(ActorHitProxyMask01.red)) * 1 % 0.25) * ActorHitProxyMask01.green + (mantissa(abs(ActorHitProxyMask01.blue)) * 1 % 0.25) * ActorHitProxyMask01.alpha)"
previewExpression1 "((mantissa(abs(ActorHitProxyMask00.red)) * 16 % 0.25) * ActorHitProxyMask00.green + (mantissa(abs(ActorHitProxyMask00.blue)) * 16 % 0.25) * ActorHitProxyMask00.alpha + (mantissa(abs(ActorHitProxyMask01.red)) * 16 % 0.25) * ActorHitProxyMask01.green + (mantissa(abs(ActorHitProxyMask01.blue)) * 16 % 0.25) * ActorHitProxyMask01.alpha)"
previewExpression2 "((mantissa(abs(ActorHitProxyMask00.red)) * 64 % 0.25) * ActorHitProxyMask00.green + (mantissa(abs(ActorHitProxyMask00.blue)) * 64 % 0.25) * ActorHitProxyMask00.alpha + (mantissa(abs(ActorHitProxyMask01.red)) * 64 % 0.25) * ActorHitProxyMask01.green + (mantissa(abs(ActorHitProxyMask01.blue)) * 64 % 0.25) * ActorHitProxyMask01.alpha)"
previewExpression3 ""
previewChannel none
in00 ActorHitProxyMask00
in01 ActorHitProxyMask01
in02 ActorHitProxyMask02
in03 none
in04 none
in05 none
in06 none
in07 none
in08 none
in09 none
in10 none
in11 none
}
push $N56cf6800
Dot {
name Dot1
xpos 13
ypos -171
}
Dot {
name Dot2
xpos 13
ypos -32
}
HueShift {
inputs 1+1
saturation 2.32
color_saturation 0.94
hue_rotation 88
name HueShift1
xpos 66
ypos -36
}
Dot {
name Dot3
xpos 194
ypos -32
}
Dot {
name Dot4
xpos 194
ypos -206
}
add_layer {FinalImageMovieRenderQueue_WorldDepth FinalImageMovieRenderQueue_WorldDepth.red FinalImageMovieRenderQueue_WorldDepth.green FinalImageMovieRenderQueue_WorldDepth.blue FinalImageMovieRenderQueue_WorldDepth.alpha}
ZDefocus2 {
z_channel FinalImageMovieRenderQueue_WorldDepth.red
math depth
fill_foreground false
center {{"[metadata exr/unreal/camera/FinalImage/focalDistance]"}}
focal_point {960 540}
size {{"((input.height*(focalLength*focalLength / (fstop * (focalDistance - focalLength)))*.5 / sensorWidth)/10)" x1 26}}
max_size 100
filter_type bladed
legacy_resize_mode false
show_legacy_resize_mode false
blades {{"[metadata exr/unreal/camera/ActorHitProxyMask/dofDiaphragmBladeCount]"}}
name ZDefocus1
xpos 296
ypos -216
addUserKnob {20 User}
addUserKnob {7 focalLength l "Focal Length"}
focalLength {{"[metadata exr/unreal/camera/FinalImage/focalLength]"}}
addUserKnob {7 focalDistance l "Focal Distance"}
focalDistance {{"[metadata exr/unreal/camera/FinalImage/focalDistance]"}}
addUserKnob {7 sensorWidth l "Sensor Width"}
sensorWidth {{"[metadata exr/unreal/camera/FinalImage/sensorWidth]"}}
addUserKnob {7 fstop l Fstop}
fstop {{"[metadata exr/unreal/camera/FinalImage/fstop]"}}
}
set N62ca2800 [stack 0]
push $N62ca2800
add_layer {FinalImageMovieRenderQueue_MotionVectors FinalImageMovieRenderQueue_MotionVectors.red FinalImageMovieRenderQueue_MotionVectors.green FinalImageMovieRenderQueue_MotionVectors.blue FinalImageMovieRenderQueue_MotionVectors.alpha}
ShuffleCopy {
inputs 2
in FinalImageMovieRenderQueue_MotionVectors
in2 none
red green
green red
out FinalImageMovieRenderQueue_MotionVectors
name RG_TO_GR
xpos 296
ypos -178
}
Add {
value -0.5
name Subtract_05
xpos 296
ypos -152
}
Multiply {
channels FinalImageMovieRenderQueue_MotionVectors
value {0.5625 1 1 1}
name MultiplyByAspectRatio
xpos 296
ypos -114
}
Add {
value 0.5
name Add_05
xpos 296
ypos -76
}
VectorBlur2 {
uv FinalImageMovieRenderQueue_MotionVectors
mv_presets "V-Ray Velocity"
uv_offset -0.5
blur_type uniform
scale {{width}}
soft_lines true
maskChannelInput FinalImageMovieRenderQueue_WorldDepth.red
name VectorBlur3
xpos 296
ypos -38
}
Viewer {
frame 1
frame_range 1-100
colour_sample_bbox {0.8895833492 -0.2208333313 0.890625 -0.2197916657}
samplepoints {{0.8895833492 -0.2208333313}
}
name Viewer1
xpos 292
ypos 12
}

また、Unreal は X と Y の両方に [0-1] として正規化されたモーション ベクターを格納しているため、赤チャンネルを ImageHeight と ImageWidth (この例では 1080、 1920)、すなわち、0.5625 に再スケールする必要があります。この再スケールを実行するには、速度チャンネルから 0.5 を減算し、さらに 0.5625 を乗算して、速度チャンネルに 0.5 を加算してから VectorBlur ノードに接続します。赤チャンネルの再スケールを怠ると、モーション ブラーの角度が正しくないものになります。

ステンシル レイヤーと同様、この機能は OCIO ベースのワークフローと組み合わせて使用することを前提としています。被写界深度は、ボケを作成するのに十分な明るさのハイライトを特定するために、リニア空間の画像に適用する必要があります。トーン カーブを無効にすることで、画像の外観が変わります。OCIO ベースのワークフローを使用すれば、ビューポートで最終的な外観を視覚化できるため、ポストプロダクションで画像にその外観を再適用することで、外観を再現することができます。

Nuke コード作成を体験するために、前述した例から フレームと Nuke ファイルをダウンロード できます。

UI レンダラ

UI レンダラ は、ビューポートに追加された Slate ウィジェットまたは UMG ウィジェットを、アルファを使用する独立した出力としてレンダリングします。これを合成プログラムで最終画像と組み合わせることで、レンダリングしたい UI 要素を追加することができます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる