Q100418: 3D 모션 블러용 ScanlineRender 대신 VectorBlur를 사용하여 모션 블러 렌더링 시간을 개선하는 방법

팔로우

요약

Nuke 에서 3D 객체의 모션 블러를 높이는 표준 방법은 ScanlineRender 노드 내에서 샘플을 늘리는 것입니다. 이러한 샘플 값은 프레임 간 계산에 사용되는 보간된 데이터의 양을 제어합니다. 따라서 샘플 값이 클수록 모션 블러가 더 자세해집니다.

이러한 샘플 값을 늘리면 이미지 처리 시간이 상당히 늘어나며 이는 더 복잡한 프로젝트의 성능에 영향을 미칠 수 있습니다.

이러한 처리 오버헤드를 방지하려면 ScanlineRender 노드 자체 외부에서 이 계산을 처리할 수도 있습니다. 이는 VectorBlur 노드 내에서 ScanlineRender 노드의 생성된 모션 벡터를 사용하여 달성할 수 있습니다.

이 문서에서는 VectorBlur 노드(VectorBlur2 반복)를 사용하여 워크플로를 만드는 방법을 설명하고 예제 시나리오도 포함합니다.

추가 정보

ScanlineRender 노드는 기본적으로 Nuke 의 3D 객체에서 모션 벡터 패스를 생성합니다. 모션 벡터 패스 자체는 위치 정보를 레이어의 빨간색 및 녹색 채널 내에 숫자 값으로 저장합니다. 이러한 패스의 값은 의도한 색상을 나타내지는 않지만 Nuke 에서 샷에서 움직이는 물체의 방향, 속도 및 위치 변경을 결정하는 데 사용됩니다.

ScanlineRender 노드 내의 모션 벡터 정보는 기본적으로 순방향 레이어에 저장되지만 모션 레이어 또는 사용자 정의 생성 레이어에 저장할 수도 있습니다.

생성되는 이 모션 벡터 정보는 VectorBlur 노드로 읽어 들여 더 빠른 수준의 이미지 처리가 가능합니다. 이 프로세스는 ScanlineRender 노드에서 생성되는 레이어로 uv 채널 소스를 정의하는 것만큼 간단합니다. 여러 가지 사전 설정 옵션이 있지만 최상의 결과를 위해서는 Nuke ScanlineRender 사전 설정을 권장합니다.

이 워크플로에는 다음과 같은 몇 가지 이점이 있습니다.

1) VectorBlur 노드에는 처리를 위해 GPU를 사용할 수 있는 옵션이 있으므로 컴퓨터가 GPU 가속에 대한 권장 사양과 일치하는 경우 이 프로세스는 매우 효율적입니다.

GPU 가속에 대한 권장 최소 사양에 대한 자세한 내용은 다음 링크를 참조하십시오: Nuke 시스템 요구 사항

2) VectorBlur 노드는 u 및 v 값을 통해서만 2D 기반 정보를 해석하므로 필요한 처리량이 줄어듭니다.

3) VectorBlur 노드와 모션 벡터 계산은 ScanlineRender 노드 외부에 있으므로 VectorBlur 노드 자체를 비활성화하여 모션 블러를 비활성화하는 것이 쉽습니다.

4) 모션 벡터 계산은 2D 데이터로 렌더링되어 Nuke 로 다시 읽혀진 다음 3D 장면을 통한 이전 처리를 완전히 방지하는 데 사용됩니다.

다음은 이 프로세스를 다시 생성하는 단계 목록이 포함된 워크플로 예시입니다.

예시 워크플로

이 프로세스에는 두 단계가 필요합니다. 첫 번째 단계는 ScanlineRender 노드에서 모션 벡터 패스를 올바르게 생성하는 것이고, 두 번째 단계는 이러한 모션 벡터 패스를 VectorBlur 노드에 올바르게 통합하는 것입니다.

1단계: ScanlineRender

1) 3D 객체의 셰이더로 사용할 CheckerBoard 노드를 만듭니다.

2) Sphere 노드를 생성하여 x 변환 에서 '-2' 값으로 키프레임을 설정하고 프레임 10에서 값으로 다른 키프레임을 '2'로 설정합니다. (이는 3D 공간에서 Sphere에 애니메이션을 적용하고 기초를 생성하는 데 사용됩니다. 모션 블러의 경우)

프레임 1 프레임 10

프레임1.PNG프레임10.PNG

3) Sphere 노드의 img 입력을 CheckerBoard 노드에 연결합니다.

4) 카메라 노드를 생성하고 변환 z 값을 '10'으로 설정합니다. (이것은 3D 공간에서 구의 프레임을 구성합니다)

5) ScanlineRender 노드를 생성하고 Camera [3D Classic] 노드를 cam 입력에 연결하고 Sphere 노드를 obj/scn 입력에 연결합니다.

6) ScanlineRender 내에서 MultiSample 탭의 샘플 값 노브가 '1'로 설정되어 있는지 확인하세요.

7) 또한 모션 벡터 에 대한 셰이더 탭의 손잡이가 '거리'로 설정되고 모션 벡터 채널이 '앞으로'로 설정되어 있는지 확인합니다.

Screen_Shot_2018-06-22_at_5.15.58_PM.png

2단계: 벡터블러(VectorBlur)

1) VectorBlur 노드를 생성하고 입력을 ScanlineRender 노드에 연결합니다.

2) uv 채널 노브를 변경하고 ' forward ' 레이어로 설정합니다.

3) mv 프리셋 노브가 ' Nuke ScanlineRender' 로 설정되어 있는지 확인하세요.

4) Blur uv 노브를 변경하고 ' 선형 '으로 설정합니다. (이것이 기본값으로 유지되면 가장자리에 잘못된 보간이 생성됩니다)

5) 모션 양 노브를 변경하고 원하는 모션 블러 양으로 설정합니다.

6) 모션 폴오프 노브를 ' 0.2 ' 값으로 변경합니다. (이 컨트롤은 의도한 보간에 따라 폴오프를 제어하는 데 사용할 수 있습니다.)

7) 이 예에 따라 ScanlineRender 노드의 출력이 검정색이고 경계 상자를 사용하여 이미지 자체의 영역만 계산하는 경우 확장 흐림 bbox 노브를 경계 상자가 허용하는 값으로 변경해야 합니다. 이미지를 자르지 마세요.

이 크기는 입력 이미지에 따라 달라집니다. 제 예에서는 ' 50 ' 값을 사용하고 있습니다.

아래에서 다양한 값을 비교할 수 있습니다.

블러 bbox 확장 = 0 블러 bbox 확장 = 50

bbox_0.PNGbbox_50.PNG

참고: 위의 작업 흐름은 첨부된 스크립트 Alternative3DMotionBlur.nk 내에서도 다시 생성되었습니다.

결과 비교 테스트

예를 들어 원래 프로세스와 VectorBlur가 제안한 대체 프로세스 간의 비교에 대한 화면 기록이 첨부되어 있습니다: Alternative3DMotionBlur_comparison.mp4.

또한 다음 첨부 스크립트 내에서 이 테스트를 직접 실행할 수 있는 비교 테스트를 추가했습니다: Alternative3DMotionBlur.nk

다음은 25 프레임 렌더를 비교할 때 VectorBlur 노드를 통해 생성된 모션 블러가 눈에 띄게 더 빠르다는 것을 보여주는 위에서 언급한 기록의 두 가지 비교 이미지입니다.

벡터흐림

벡터블러.jpg

스캔라인렌더

스캔라인.jpg

참고: ScanlineRender 노드의 모션 블러 샘플은 동일한 결과를 얻는 데 필요한 최소한의 샘플을 사용하여 최대한 가깝게 일치되었습니다.

위의 비교에서 ScanlineRender 노드의 샘플을 늘리는 대신 VectorBlur 노드 내에서 모션 벡터를 사용하면 필요한 처리량이 줄어든다는 것을 알 수 있습니다. 이는 더 크고 복잡한 3D 렌더링 기반 스크립트에서 더욱 눈에 띄게 나타납니다.

참고: 이 프로세스는 ScanlineRender 노드 대신 RayRender 노드를 사용하여 수행할 수도 있습니다. 이것이 올바르게 작동하려면 RayRender 노드 'AOV' 탭 내의 다음 옵션을 변경해야 합니다.

레이렌더.PNG '

1) 출력 AOV 확인란을 켜야 합니다.

2) 올바른 레이어를 출력하려면 모션 벡터 패스를 설정해야 합니다(이 예에서는 'forward' 레이어 위).

추가 읽기

VectorBlur 및 ScanlineRender 노드에 대한 자세한 내용은 Nuke 문서에 대한 다음 링크를 통해 찾을 수 있습니다.

벡터 흐림 노드
ScanlineRender 노드

우리는 문제로 불편을 끼쳐 드려 죄송합니다

이유를 알려주세요