무비 렌더 큐는 최종 이미지, 오브젝트 ID 및 기타 렌더링 관련 패스 등, 별도 패스로 다양한 타입의 출력 이미지를 렌더링하는 기능을 지원합니다. 각 렌더 패스 세팅은 별도의 렌더링 모드로 무비를 출력합니다. 그러면 출력된 결과를 외부 포스트 프로덕션이나 원하는 컴포짓 프로그램에서 사용할 수 있습니다.
전제조건
- 무비 렌더 큐 페이지의 전제조건 단계를 완료해야 합니다.
-
오브젝트 ID(Object ID) 렌더 패스를 사용하는 경우, 해당 렌더 패스를 사용하기 위한 플러그인을 활성화해야 합니다. 언리얼 엔진 메뉴에서 편집(Edit) > 플러그인(Plugins) 으로 이동하여 렌더링(Rendering) 섹션에서 Movie Render Queue Additional Render Passes 플러그인을 찾아서 활성화합니다. 그 후 에디터를 재시작해야 합니다.

무비 렌더 큐는 일부 렌더 패스를 출력할 수 있지만, 디퍼드 렌더링 제한 때문에 최종 이미지 어셈블에 필요한 모든 패스를 출력할 수는 없습니다. 즉, 앰비언트 오클루전이나 서브서피스 스캐터링 같은 AOV의 다른 렌더링 패키지에서 사용할 수 있는 일반적인 패스를 언리얼 엔진에서는 사용할 수 없습니다. 이 페이지에는 지원되는 패스만 나열되어 있습니다.
개요
+ 세팅(Setting) 버튼을 클릭하고 렌더링(Rendering) 카테고리에서 원하는 항목을 선택하여 출력에 렌더 패스 를 추가할 수 있습니다.
다른 세팅과 마찬가지로 렌더 패스도 활성화하거나 비활성화할 수 있으며, 사용 가능한 프로퍼티가 있는 경우 렌더 패스를 선택하여 프로퍼티를 편집할 수 있습니다.
기본적으로 선택한 렌더 패스는 모두 최종 출력 폴더에 나란히 출력됩니다. 포맷 스트링 토큰 {render_pass} 를 활용하여 패스를 정리할 수 있습니다. 예를 들어, 파일 이름 포맷(File Name Format) 에서 다음과 같이 설정하면 렌더 패스가 출력 디렉터리(Output Directory) 를 기준으로 패스 관련 서브폴더로 나누어집니다.
{render_pass}/{sequence_name}.{frame_number}

무비 렌더 큐가 생성할 수 있는 일부 렌더 패스에 대한 예시입니다.
디퍼드 렌더링
언리얼의 메인 출력은 디폴트 디퍼드 렌더링(Deferred Rendering) 세팅으로 처리되어 뷰포트에서 보는 최종 이미지를 생성합니다. 디테일 라이팅(Detail Lighting), 라이팅만(Lighting Only), 리플렉션(Reflections) 및 라이팅제외(Unlit) 등의 몇 가지 베리에이션이 제공됩니다. 이러한 베리에이션은 최종 이미지 생성에는 사용되지 않으며, 여기서는 레벨 에디터 뷰포트와 동일한 기능성을 위해 제공됩니다.
디퍼드 렌더링에는 다음과 같은 옵션이 있습니다.
| 렌더 패스 | 설명 |
|---|---|
| 디퍼드 렌더링(Deferred Rendering) | 뷰포트에 보이는 것과 일치하는 씬의 최종 이미지를 표시합니다.
|
| 디테일 라이팅(Detail Lighting) | 노멀 맵과 결합된 라이팅만 표시하는 특별 셰이더 베리에이션입니다. 씬의 지오메트리를 보여줄 때 유용합니다.
|
| 라이팅만(Lighting Only) | 디테일 라이팅과 비슷하지만, 라이팅에 영향을 주는 노멀 맵이 없습니다.
|
| 리플렉션만(Reflections Only) | 월드의 모든 것을 반사사키는 특수 셰이더 베리에이션입니다.
|
| 라이팅제외(Unlit) | 라이팅 정보 없이 베이스 컬러만 표시하는 특수 셰이더 베리에이션입니다.
|
모든 디퍼드 렌더링 패스에는 같은 프로퍼티가 포함되어 있지만, 각 렌더 패스는 개별적으로 환경설정할 수 있습니다.
| 이름 | 설명 |
|---|---|
| 알파 포함 축적기(Accumulator Includes Alpha) | 활성화하면 알파 채에 대해 여러 템포럴 샘플 및 스페이셜 샘플이 축적됩니다. 이렇게 하려면 프로젝트 세팅(Project Setting) > 렌더링(Rendering)으로 이동해 포스트 프로세싱(Post Processing) 세팅에서 알파 채널 지원 활성화(Enable Alpha Channel Support)를 사용하여 r.PostProcessing.PropagateAlpha를 1 또는 2로 설정해야 합니다. 이 경우 약 30%의 축적 비용도 추가되므로 필요한 경우가 아니라면 사용하지 말아야 합니다. 여러 템포럴 또는 스페이셜 샘플을 사용하는 렌더링에 적용됩니다. |
| 멀티 샘플 이펙트 비활성화(Disable Multisample Effects) | 뎁스 오브 필드, 템포럴 안티 에일리어싱, 모션 블러 및 색수차 같이 오브젝트 ID 렌더 패스 사용 시 바람직하지 않은 여러 픽셀을 블렌딩하는 포스트 프로세싱 이펙트를 비활성화합니다. 이 세팅을 사용하면 이러한 포스트 프로세스를 씬 내에서 수동으로 비활성화할 필요 없이 렌더링 작업에서 제외할 수 있습니다. |
| 32비트 포스트 프로세스 머티리얼 사용(Use 32Bit Post Process Materials) | 이 옵션을 활성화하면 포스트 프로세스 머티리얼이 16비트가 아닌 32비트 퀄리티로 작성됩니다. |
| 추가 포스트 프로세스 머티리얼(Additional Post Process Materials) | 포함할 추가 포스트 프로세스 렌더 패스 배열입니다. 기본적으로 MovieRenderQueue_WorldDepth 및 MovieRenderQueue_MotionVectors가 포함됩니다. 패스를 렌더링하려면 이 머티리얼이 활성화되어야 합니다. |
| 디폴트 레이어 추가(Add Default Layer) | 스텐실 레이어 배열에 아직 포함되지 않은 모든 오브젝트가 포함된 추가 스텐실 레이어를 생성합니다. 이 디폴트 레이어는 개별적으로 렌더링되므로 나중에 다시 컴포짓할 작은 오브젝트 그룹을 제외한 렌더링을 생성할 수 있습니다. |
| 스텐실 레이어(Stencil Layers) | 씬의 오브젝트 그룹이 포함된 스텐실 레이어 목록입니다. 씬이 모든 오브젝트와 함께 다시 렌더링된 다음 지정된 레이어에 오브젝트가 포함되지 않은 픽셀은 클리핑되어 검은색으로 바뀝니다. 그런 다음, 포스트 프로세싱이 적용되어 DoF, 모션 블러 및 TAA를 사용할 수 있는 기능이 유지됩니다. |
포스트 프로세스 렌더 패스
포스트 프로세스 렌더 패스(Post Process Render Pass)는 디퍼드 렌더러를 통해 지정할 수 있는 추가 렌더 패스입니다. 다른 포맷에서 표시하고 해석할 수 있는 것 이상의 컬러 및 메타데이터 정보가 포함되어 있으므로 .exr 포맷으로 출력해야 합니다.
월드 뎁스
월드 뎁스(World Depth) 는 레드 채널에 저장된 월드 유닛으로 기록된 뎁스입니다. 포스트 프로덕션에서 뎁스 오브 필드 를 재생성하는 데 사용할 수 있습니다. 카메라 초점 길이 및 셔터 크기를 EXR 메타데이터에서 읽어 자동으로 게임 내 뎁스 오브 필드와 일치시킬 수 있습니다.
Nuke ZDefocus2 노드 예시를 아래에서 확인할 수 있습니다. 이 노드는 EXR 파일에서 메타데이터를 읽어 실시간으로 발견되는 것과 비슷한 블러를 생성합니다. WorldDepth 텍스처를 올바르게 샘플링할 수 있도록, 붙여넣기한 다음에 focal_point 프로퍼티를 다시 조정해야 합니다.
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]"}}
}
모션 벡터
모션 벡터(Motion Vectors) 는 X, Y 좌표 공간 0,1 에 저장되며, 0.5, 0.5 는 모션이 없는 것입니다.
Nuke에서 VectorBlur 노드를 사용하여 이미지에 모션 벡터를 적용할 수 있습니다. 언리얼에서는 다른 렌더링 패키지와 달리 전체 화면에 정규화된 모션 벡터를 저장합니다. 결과적으로 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 채널의 강도가 달라집니다.
스텐실 레이어
스텐실 레이어를 사용하면 레이어 내의 오브젝트를 기반으로 시퀀스를 레이어별로 렌더링할 수 있습니다.
레이어별로 전체 씬이 렌더링되고 레이어에 속한 액터는 스텐실 버퍼(Stencil Buffer) 에 렌더링됩니다. 그런 다음, 스텐실 버퍼를 사용하여 해당 레이어의 액터 범위 밖에 있는 픽셀을 클리핑합니다. 이를 통해 섀도 캐스팅 오브젝트가 다른 액터 및 레이어에 섀도를 드리울 수 있습니다.
스텐실 버퍼에 렌더링되면, 각 픽셀을 가져와 픽셀에 반투명한 검정을 쓰는 포스트 프로세싱 이펙트가 적용됩니다. 이 작업은 반투명과 포스트 프로세싱 사이에 이루어지며, 이후 포스트 프로세싱이 이 레이어에 적용됩니다. 알파 채널을 보존할 수 있으므로 포스트 프로덕션에서 어떤 픽셀이 실제 영향을 받았는지, 그리고 얼마나 영향을 받았는지 알 수 있습니다.
아래는 디폴트 레이어와 세 가지 스텐실 레이어의 예시입니다. 뎁스 오브 필드 같은 포스트 프로세싱 이펙트가 제대로 적용되었으며, 전경의 오브젝트가 배경 이미지에서 클리핑된 것도 볼 수 있습니다. 이러한 이미지를 다시 추가하여 최종 렌더와 비슷한 결과를 생성할 수 있지만, 데이터의 사전 곱셈을 해제해야 할 수도 있습니다.
아래는 원본 이미지에 지정된 레이어 중 하나에 간단한 색조 변화를 적용한 Nuke 예시입니다. 원본 이미지는 색상 출력(Color Output) 세팅에서 톤 커브(Tone Curve)는 비활성화하고 알파 채널 축적은 활성화한 상태로 렌더링되었습니다.
이와 같이 여러 이미지를 적절하게 다시 결합하려면 선형 스페이스로 익스포트해야 합니다(색상 출력 세팅에서 톤 커브 비활성화). 이러한 종류의 포스트 프로덕션 작업에는 OCIO 기반 워크플로를 사용해야 합니다.
스텐실 레이어는 진정한 레이어 시스템은 아닌데, 반투명 오브젝트는 그 뒤에 있는 다른 레이어의 불투명 오브젝트를 표시하고 배경 레이어는 전경 오브젝트가 가리는 검은 구멍을 표시하기 때문입니다. 스텐실 레이어는 베이스 레이어의 추가 포스트 프로세스 머티리얼과 일치하므로 레이어별 포스트 프로세싱 머티리얼을 지원하지 않으며, 커스텀 뎁스/스텐실 을 지원하는 머티리얼과만 호환됩니다.
패스 트레이서
패스 트레이서(Path Tracer)는 패스 트레이서 렌더링 메서드를 기반으로 이미지를 출력합니다. 디퍼드 렌더링 패스와 디테일 면에서 비슷합니다.
패스 트레이서 렌더링 모드는 렌더링하는 프레임마다 경로 데이터를 축적합니다. 그 결과 이미지의 픽셀이 채워지면서 노이즈가 많은 이미지가 생성되는데, 특히 카메라 프레임의 콘텐츠가 크게 변하는 경우 그렇습니다.
이러한 노이즈를 줄이려면 안티 에일리어싱(Anti-Aliasing) 세팅에서 스페이셜 샘플(Spatial Samples) 수를 늘리면 됩니다.
그러면 이미지가 여러 번 렌더링되며, 추가 샘플을 통해 패스 트레이서가 간극을 더 효과적으로 메울 수 있습니다. 패스 트레이서 렌더링의 노이즈를 효과적으로 제거하려면 많은 수의 스페이셜 샘플 이 필요하며, 이에 따라 이미지 출력에 필요한 시간이 크게 증가합니다.

안티 에일리어싱 스페이셜 샘플 프로퍼티 값을 늘리면 패스 트레이서 렌더링의 노이즈가 감소합니다.
패스 트레이서 렌더 모드는 현재 실험단계이며, 모든 머티리얼 셰이딩 모드가 지원되는 것은 아닙니다.
오브젝트 ID
오브젝트 ID(Object ID) 렌더 패스는 씬의 각 액터에 ID가 할당된 이미지를 출력합니다. 이러한 ID는 액터별로 완전히 고유할 수도 있고 특정 프로퍼티에 따라 그룹화될 수도 있습니다.
포스트 프로덕션 툴세트에서 이 이미지를 사용하여 씬의 개별 오브젝트를 선택하고 오브젝트의 마스크를 생성하여 특정 오브젝트를 선택적으로 조정할 수 있습니다.


구성
오브젝트 ID 패스를 제대로 렌더링하기 위한 구체적인 요구 사항이 있습니다.
-
오브젝트 ID 패스와 컴포짓하려는 모든 렌더 패스에 대해 멀티 샘플 이펙트 비활성화(Disable Multisample Effects) 를 활성화해야 합니다. 그러면 모션 블러, 뎁스 오브 필드, 안티 에일리어싱 및 여러 픽셀 레이어를 블렌딩하는 기타 포스트 프로세스가 제외되어 모든 오브젝트 에지가 선명하게 유지됩니다. 이는 오브젝트 ID 패스가 최종 이미지와 올바르게 정렬되는 데 필요합니다.

-
디퍼드 렌더러(Deferred Renderer) 세팅 아래에서 추가 포스트 프로세스 머티리얼(Additional Post Process Materials) 을 펼치고 MovieRenderQueue_WorldDepth 및 MovieRenderQueue_MotionVectors 머티리얼을 모두 활성화합니다.

-
안티 에일리어싱(Anti-aliasing) 세팅을 작업에 추가하고 스페이셜 샘플 수(Spatial Sample Count) 를 8 이상으로 설정합니다. 안티 에일리어싱 오버라이드(Override Anti Aliasing) 도 활성화하고 안티 에일리어싱 메서드(Anti Aliasing Method) 를 없음(None) 으로 설정합니다.
그러면 TAA가 지원되지 않는 한계를 극복할 수 있습니다. 템포럴 샘플 수(Temporal Sample Count) 를 사용하면 각 샘플 사이의 틈을 메꾸는 모션 블러가 부족하기 때문에 원하는 결과를 생성할 수 없으며, 그저 오브젝트의 여러 복사본이 서로 희미하게 겹치는 결과만 얻게 됩니다.
-
세팅에 .exr 시퀀스(.exr Sequence) 출력 모드를 추가하고 다른 익스포트 포맷을 비활성화하거나 제거합니다. 멀티레이어(Multilayer) 프로퍼티가 활성화 되어 있어야 합니다.

이러한 세팅이 적용된 상태로 무비 렌더 큐를 시작하면 최종 이미지, 오브젝트 ID, 월드 뎁스 및 모션 벡터를 포함한 멀티레이어 EXR 파일이 출력됩니다.
오브젝트 ID는 Cryptomatte 사양을 사용하여 EXR 파일에 저장되며, 서드파티 소프트웨어에서 이 데이터를 읽는 플러그인을 사용할 수 있습니다.
오브젝트 ID 렌더 패스는 언리얼 엔진에서 실험단계입니다. 언리얼 에디터에서만 사용할 수 있으며 출시 빌드에서는 사용할 수 없습니다.
오브젝트 ID 그룹화
기본적으로 고유 컬러 또는 ID가 레벨의 모든 액터나 컴포넌트에 할당됩니다. 오브젝트 ID(Object Ids) 의 ID 타입(Id Type) 프로퍼티에서 이를 변경할 수 있습니다.
| ID 타입 | 설명 |
|---|---|
| 전체(Full) | 기본 행동입니다. 레벨에 있는 모든 액터의 각 프리미티브에 적용되는 모든 머티리얼에 대해 고유 ID가 생성됩니다. |
| 머티리얼(Material) | ID가 머티리얼 또는 머티리얼 인스턴스에 따라 그룹화됩니다. 머티리얼 인스턴스는 부모 머티리얼과 함께 그룹화됩니다. |
| 액터(Actor) | ID가 같은 액터 인스턴스별로 그룹화됩니다. |
| 계층구조 포함 액터(Actor With Hierarchy) | ID가 같은 액터 인스턴스별로 그룹화됩니다. 다른 월드 아웃라이너 폴더에 있는 액터는 해당 폴더 기준으로 별도로 그룹화됩니다. |
| 폴더(Folder) | ID가 월드 아웃라이너 폴더 내 액터별로 그룹화됩니다. 이러한 폴더 내에 있는 모든 액터는 하나의 ID로 병합됩니다. |
| 레이어(Layer) | ID가 레이어 에 할당된 액터별로 그룹화됩니다. 여러 레이어에 속한 액터는 신뢰할 수 없는 결과를 낼 수 있습니다. |
포스트에서 오브젝트 ID, 뎁스 및 속도 결합하기
여러 스페이셜 샘플과 뎁스, 속도를 결합하여 언리얼의 포스트 프로세싱 파이프라인과 비슷한 결과, 즉 뎁스 맵을 통해서는 뎁스 오브 필드 와 비슷한 결과를, 속도 텍스처를 통해서는 모션 블러 와 비슷한 결과를 생성할 수 있습니다. 이러한 포스트 프로세스 패스를 적용하기 전에 오브젝트 ID를 사용하여 오브젝트를 선택하고 색을 보정할 수 있습니다.
뎁스 오브 필드와 모션 블러를 통해 정확한 밝기 하이라이트를 보존하려면 톤 커브를 비활성화하고 씬을 렌더링해야 합니다. 색상 출력 항목을 추가하고 톤 커브 비활성화(Disable Tone Curve) 프로퍼티를 활성화하면 됩니다. 그러면 sRGB 컬러 스페이스에서 HDR 선형 값이 출력됩니다. 뎁스 오브 필드와 모션 블러를 적용한 다음에는 이제 선형 sRGB에서 원하는 컬러 스페이스로 전환할 수 있습니다.
또한 속도 패스(Velocity Pass) 를 베이스 패스 중 작성(Write during base pass) 으로 설정해야 합니다. 언리얼 엔진 메인 메뉴에서 편집(Edit) > 프로젝트 세팅(Project Setting) > 엔진(Engine) > 렌더링(Rendering) 으로 이동하여 속도 패스(Velocity Pass) 를 베이스 패스 중 작성(Write during base pass) 로 설정하면 됩니다. 이 프로젝트 세팅을 변경한 다음에는 에디터를 재시작해야 합니다.
또한, r.BasePassForceOutputsVelocity 변수를 1로 설정해야 합니다. 엔진 전체에서 /Engine/Config/ConsoleVariables.ini를 편집해도 되고 렌더링 중에 콘솔 변수 로 적용해도 됩니다.
아래는 ZDefocus 및 VectorBlur 노드를 사용하는 Nuke 그래프 예시입니다. Nuke에서 속도 텍스처를 사용하려면, 레드 채널과 그린 채널을 교체해야 합니다(아래 그래프에서 RG_TO_GR은 ShuffleCopy 노드 사용).
이 Nuke 그래프는 8개의 스페이셜 샘플, 오브젝트 ID 패스, 모션 벡터 및 월드 뎁스로 렌더링된 EXR을 사용합니다. 뎁스 오브 필드 정보는 EXR 메타데이터에서 자동으로 가져옵니다. Cryptomatte 노드는 뉴턴의 요람 디바이스 마스크 생성에 사용된 다음, 간단한 색조 변화용 마스크로 사용됩니다. 색조 변화가 적용된 후 앞서 언급한 ZDefocus 노드가 적용된 다음에 VectorBlur가 적용됩니다.
ObjectID, ZDefocus 및 VectorBlur Nuke 노드
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
}
또한 언리얼은 X와 Y 모두에서 정규화된 모션 벡터 [0-1]을 저장하므로, 레드 채널의 스케일을 ImageHeight 및 ImageWidth(이 예제에서는 1080, 1920), 즉 0.5625로 다시 조절해야 합니다. 이렇게 스케일을 다시 조절하려면 속도 채널에서 0.5를 빼고 0.5625를 곱한 다음 다시 속도 채널에 0.5를 더한 다음 VectorBlur 노드에 연결합니다. 레드 채널의 스케일 재조절에 실패하면 모션 블러의 각도가 잘못됩니다.
스텐실 레이어와 마찬가지로 이 기능은 OCIO 기반 워크플로와 함께 사용하도록 계획된 것입니다. 어떤 하이라이트가 보케를 생성할 만큼 밝은지 결정하려면 뎁스 오브 필드가 선형 스페이스의 이미지에 적용되어야 합니다. 톤 커브를 비활성화하면 이미지의 룩이 변합니다. OCIO 기반 워크플로를 사용하면 뷰포트에서 최종 룩을 시각화하고 포스트 프로덕션에서 이미지에 해당 룩을 다시 적용하여 재현할 수 있습니다.
Nuke 노드 생성을 실험하고 싶다면 위의 예시에서 프레임 및 Nuke 파일을 다운로드 할 수 있습니다.
UI 렌더러
UI 렌더러(UI Renderer) 는 뷰포트에 추가된 슬레이트 또는 UMG 위젯을 알파가 있는 별도 출력으로 렌더링합니다. 이를 컴포짓 프로그램의 최종 이미지와 결합하여 렌더링하려는 UI 엘리먼트를 추가할 수 있습니다.
VT 대기 중 밉
VT(버추얼 텍스처) 대기 중 밉은 프리스트리밍 레코더와 함께 사용하도록 설계된 렌더 패스입니다. 이 패스는 사전 스트리밍 캐시 디버깅에 사용할 수 있는 버주얼 텍스처 밉 디버깅 프레임을 출력 디렉터리에 익스포트합니다.
이 디버그 렌더 패스는 나나이트 지오메트리에 대한 버추얼 텍스처 정보는 표시하지 않습니다. 나나이트 지오메트리를 많이 사용하는 경우, r.nanite 0 콘솔 명령을 사용하면 모든 메시가 나나이트가 아닌 버전으로 되돌아가고 디버그 정보가 더 잘 보입니다.