이 튜토리얼에서는 Blender의 두 가지 Compositing Render Pass인 Depth와 Mist의 기능, 설정, 공통점과 차이점을 살펴보겠습니다. 이 두 패스는 포스트 프로덕션에서 오브젝트의 거리 정보나 씬의 깊이 정보를 제공합니다.
영상 자막 텍스트
안녕하세요 여러분! 이 튜토리얼에서는 Blender의 두 가지 Compositing Render Pass인 Depth와 Mist의 기능, 설정, 공통점과 차이점을 살펴보겠습니다. 이 두 패스는 포스트 프로덕션에서 오브젝트의 거리 정보나 씬의 깊이 정보를 제공합니다.
두 패스 모두 카메라에 가까운 지점은 검은색, 멀리 있는 지점은 흰색으로 보이는 이미지를 생성할 수 있으며, 이 이미지를 렌더링과 직접 블렌딩하거나 마스크로 사용해 다른 효과를 만들 수 있습니다. 예를 들어 제가 Atmospheric Perspective 비디오 튜토리얼 시리즈에서 보여드린 방식입니다.
하지만 두 패스 사이에는 차이점이 있습니다. 단순히 가상 씬에서 값의 범위를 계산하는 방식뿐 아니라, 결과 이미지의 다른 특성들에서도 차이가 있으며, 이러한 차이 때문에 특정 용도에 더 적합하거나 덜 적합할 수 있습니다. 이 차이를 더 잘 설명하기 위해, 튜토리얼 전반에 걸쳐 두 개의 3D 씬을 사용하고 설정을 바꿔가며 결과 차이를 보여드리겠습니다.
간단히 말해, Depth와 Mist의 차이는 Depth가 가상 카메라로부터 오브젝트까지의 실제 거리 값을 반환하는 반면, Mist는 카메라에서 일정 거리부터 안개를 적용하고 특정 깊이까지 점차 증가시키며, 그 지점을 넘어가면 모든 것이 흰색이 된다는 점입니다.
따라서 Depth는 Defocus 노드나 Z-Combine 노드처럼 실제 거리 값을 사용해야 하는 작업에 더 적합합니다.
Defocus는 카메라로부터 특정 거리에 있는 요소에 초점을 맞추고 다른 요소는 흐리게 만들어 Depth of Field를 구현합니다.

반면 Z-Combine은 각 씬이나 이미지의 Z 또는 Depth 필드에 저장된 카메라 거리 값을 기준으로 어떤 픽셀을 표시하고 어떤 픽셀을 숨길지 결정하여 두 씬을 블렌딩합니다.

그렇다고 해서 Depth를 다른 용도로 사용할 수 없다는 의미는 아닙니다. 저 역시 Atmospheric Perspective 시리즈에서 사용했지만, 그 경우에는 Depth가 반환하는 정보를 Normalize해야 했습니다. 곧 Depth를 Normalize한다는 것이 무엇인지, 그리고 그것이 데이터에 어떤 영향을 미치는지 살펴보겠습니다.
Depth Render Pass는 기본적으로 Properties Editor의 View Layers 탭에 있는 Passes 섹션에서 선택되어 있습니다. 이 탭에서는 이 Render Pass를 Z라고 부르지만, Compositing의 Render Layers 노드에서는 Depth라고 표시됩니다.

Depth가 반환하는 최소 거리 값은 Camera 오브젝트의 Clip Start 값입니다. Clip Start보다 카메라에 가까운 오브젝트는 렌더링되지 않기 때문에, Depth 출력이 Normalize되지 않은 경우 이것이 Depth가 반환할 수 있는 최소값이 됩니다.

반대로 Depth가 반환하는 최대 거리 값은 Camera 오브젝트의 Clip End 값입니다. 그 값을 넘어서는 오브젝트는 렌더링되지 않기 때문입니다. 가상 우주의 배경은 무한한 거리로 간주되므로, Depth 마스크에서는 최대값을 가지게 됩니다.
Properties Editor의 Data 탭에 있는 Viewport Display 섹션에서 Limits 옵션을 활성화하면, 가상 카메라를 선택한 상태에서 3D 씬 안에 Clip Start와 Clip End 지점을 표시할 수 있습니다.
이렇게 하면 Clip End 값을 적절하게 설정하기가 더 쉬워집니다.

반면 Mist는 Camera로부터의 거리가 증가함에 따라 점점 더 흰색이 되는 이미지를 반환합니다. 하지만 이 경우 안개 효과의 시작점은 Clip Start가 아니라, 우리가 원하는 값으로 지정할 수 있는 Mist Start라는 값입니다.
기본적으로 활성화되어 있는 Depth와 달리, Mist Render Pass는 Passes 섹션에서 명시적으로 활성화해야 합니다. 이 작업은 렌더링을 시작하기 전에 해야 하며, 그렇지 않으면 정보가 계산되지 않기 때문에 Mist를 사용하려면 렌더링을 다시 해야 합니다.
Mist Render Pass를 활성화하면 World 탭에 Mist라는 새로운 섹션이 나타나고, 여기에서 Mist Start와 다른 파라미터들을 설정할 수 있습니다.

Mist와 Depth의 또 다른 차이점은 Mist가 Clip End를 사용하지 않는다는 것입니다. 대신 Mist Depth라는 파라미터를 사용하여, 그 거리를 넘어서면 모든 오브젝트가 흰색으로 렌더링되도록 설정합니다. 따라서 Start + Depth 거리의 모든 오브젝트는 흰색으로 렌더링됩니다.
Data 탭의 Viewport Display 섹션에서 Mist 체크박스를 활성화하면, 3D Viewport 안에서도 Mist Start와 Mist Depth를 표시할 수 있습니다. Limits 옵션도 활성화되어 있다면 두 표시가 겹치므로 비활성화하는 것이 좋습니다.

다시 렌더링하기 전에, Mist 효과가 Clip Start와 Clip End 값과 겹치도록 Mist Start와 Depth 값을 설정하겠습니다.
World 탭의 Mist 섹션에는 Falloff라는 또 다른 파라미터가 있습니다. 이것은 거리 증가에 따라 안개를 어떤 방식으로 적용할지 결정합니다. 기본 모드는 Quadratic이며, Inverse Quadratic과 Linear 같은 옵션도 있습니다.
Quadratic은 조명과 같은 전환 방식을 사용하여 0에서 1까지 부드럽게 전환합니다. Linear는 Quadratic보다 조금 더 선명한 전환을 제공합니다. 마지막으로 Inverse Quadratic은 0에서 1로 매우 빠르게 전환되어 전경 요소에도 짙은 안개를 표시합니다.

Z-Depth에는 이러한 파라미터가 없습니다. 이는 특정 공식에 따라 구현되는 효과가 아니라, 오브젝트의 실제 거리 값을 반환하기 때문입니다. 항상 선형이라고 말할 수도 있겠지만, 굳이 그렇게 표현할 필요는 없습니다.
앞서 말했듯이, Z-Depth는 실제 거리 정보를 얻는 데 더 적합하고, Mist는 이름 그대로 안개 효과를 만드는 데 더 적합합니다. 왜냐하면 원하는 특성으로 설정할 수 있기 때문입니다.
이제 렌더링을 하고 Compositor 창에서 패스를 확인하면, Mist 출력에서는 흥미로운 결과를 얻을 수 있지만, Depth에서 나온 마스크는 적어도 겉보기에는 사용할 수 없어 보일 것입니다.

이제 “Depth를 Normalize한다”는 것이 무엇을 의미하는지, 그리고 왜 다양한 튜토리얼에서 Normalize 노드를 자주 사용하는지 살펴보겠습니다.
앞서 언급했듯이, Z-Depth가 반환하는 값은 0에서 1 범위가 아니라 실제로는 가상 Camera로부터의 거리 값을 나타냅니다. 따라서 예를 들어 카메라로부터 정확히 특정 거리에서 효과를 시작하고 싶을 때 유용할 수 있습니다.

저장되는 숫자는 매우 클 수 있기 때문에, Z-Depth 필드는 JPG나 PNG 같은 대부분의 이미지 파일의 8비트 또는 16비트보다 더 많은 메모리를 사용해 데이터를 저장합니다. 아마 실제로는 32비트를 사용하는 것으로 알고 있습니다.
게다가 Backdrop에서는 1보다 큰 모든 값이 그 값으로 잘리거나 Clamp되며, 해당 픽셀은 흰색으로 표시됩니다. 하지만 Z-Depth 값은 일반적으로 1보다 훨씬 큰 Clip End 값에 의해 결정됩니다.
이런 이유로, Compositing Editor의 Backdrop에서는 반환된 값이 제대로 표시되지 않습니다. 이 탭에서는 1보다 큰 값이 모두 흰색으로 렌더링되기 때문입니다. 따라서 대부분의 경우 결과 이미지는 매우 밝고 디테일이 부족해 보입니다.
실제로 제가 사용한 씬에서는 Clip Start 값이 1이고 Clip End 값이 20000이기 때문에, Depth Pass가 완전히 흰색으로 보입니다!
이런 이유로 Utilities 그룹의 Normalize 노드를 사용하여 값을 0에서 1 범위로 매핑하는 경우가 많습니다. 하지만 여기에는 중요한 설명이 필요합니다.

Normalize 노드는 Clip Start와 Clip End 사이의 값을 0에서 1 범위로 매핑하지 않습니다. 대신 처리하는 이미지 안에 존재하는 픽셀의 최소값과 최대값을 기준으로 합니다.
하지만 이것은 우리가 Backdrop에서 보는 이미지와는 다릅니다. 앞서 언급했듯이 Depth 채널은 화면에 보이는 것보다 훨씬 많은 데이터를 저장하고 있기 때문입니다.
그래서 Depth 출력과 Viewer 사이에 Normalize 노드를 연결하면, 렌더링 하단의 요소들이 검게 보입니다. 왜냐하면 그 부분이 가상 카메라에 가장 가까운 지점이며, 따라서 Depth 마스크에서 가장 어두운 값을 가지기 때문입니다. Normalize된 버전에서는 그 값이 검은색으로 렌더링되지만, 실제로는 Camera의 Clip Start 거리에 있는 것은 아닙니다!

더 멀리 있는 오브젝트나 Normalize된 Depth 마스크에서 흰색으로 보이는 픽셀에 대해서도 비슷한 설명을 할 수 있습니다.
Normalize가 입력 이미지의 최소값과 최대값을 기준으로 동작한다는 또 다른 증거로, Mist 정보에도 Normalize를 적용해 보겠습니다. 하단의 어두운 픽셀들은 0으로 재매핑되어 검게 표시되고, 가장 멀리 있는 요소의 픽셀은 이미 흰색이었기 때문에 그대로 유지됩니다.
이 개념을 더 잘 이해하기 위해 또 다른 예제를 보여드리겠습니다. 지금 보여드리는 씬에서는 카메라와 몇몇 오브젝트가 방 안에 배치되어 있습니다.
카메라의 Clipping End 값은 방 안에 있는 가장 먼 박스의 앞면은 렌더링하지만, 방의 뒷벽은 렌더링하지 않도록 설정되어 있습니다.

실제로 가장 먼 박스조차 완전히 보이지는 않지만, 이는 프레이밍의 원근 효과 때문입니다.

Clip Start는 카메라로부터 10센티미터로 설정되어 있지만, 그 근처에 배치된 오브젝트는 없습니다. 프레임 가장자리에 있는 방의 벽조차도 카메라로부터 그보다 더 멀리 떨어져 있습니다.
지금 렌더링을 시작하고 Normalize되지 않은 Depth Render Pass를 확인해 보면, 뒷벽은 완전히 흰색으로 보입니다. 실제로 Depth Pass는 가장 먼 박스 뒤를 볼 수 없기 때문에 그 이후의 모든 것을 흰색으로 렌더링합니다.
하지만 검은 영역은 없습니다. 앞서 말했듯이 Clip Start 근처에 배치된 오브젝트가 없기 때문입니다.

그러나 Normalize 노드를 사용하면 하단에 검은 띠가 생깁니다. 이것은 이전 씬 렌더링에서도 보았던 현상이며, 바닥의 그 부분이 카메라에 가장 가까운 영역이라는 뜻입니다.

이제 측면 벽 중 하나를 안쪽으로 이동시켜 카메라에 더 가깝게 만든 뒤 다시 렌더링하면, 앞서 설명한 내용을 확인할 수 있습니다.

Normalize에 의해 Depth 마스크가 어떻게 변경되는지 이해하는 것은 매우 중요합니다.
이 노드는 Mist와 함께 사용해서는 안 되며, Depth와 함께 사용할 때도 신중하게 결정해야 합니다. Atmospheric Perspective 같은 특수 효과용 마스크를 만들 때는 유용하지만, 다른 경우에는 사용하지 않는 것이 좋습니다.
그렇다면 여러분은 Clip Start와 Clip End 값을 0에서 1 범위로 매핑하여 Backdrop에서 Depth 마스크를 볼 수 있는 방법이 있는지 궁금할 수 있습니다.
방법은 간단합니다. Compositor에서 Utilities 그룹의 Map Range 노드를 추가한 다음, 노드의 From Min과 From Max 값을 Camera의 Clip Start와 Clip End 값과 동일하게 설정하면 됩니다.
그러면 Mist 패스와 비슷한 마스크를 얻을 수 있지만, 물론 실제 Depth 값은 잃게 됩니다.

이 튜토리얼을 마무리하기 전에 강조해야 할 마지막 중요한 차이점이 하나 있습니다. 바로 씬 안의 거리 값을 계산할 때 사용되는 샘플 수입니다.
Mist는 Anti-Aliasing도 구현하지만, Z-Depth에서는 이것이 계산되지 않습니다.
특히 Z-Depth 값은 하나의 샘플만 사용합니다. 따라서 Motion Blur나 Depth of Field 같은 효과를 사용하지 않는 경우, 즉 깊이 값을 블렌딩할 필요가 없는 경우에는 문제없이 사용할 수 있습니다. 하지만 깊이 값을 블렌딩해야 하는 경우에는 Mist를 사용하는 것이 더 적합합니다.

마지막으로, 렌더링의 Color Management 설정과 Backdrop에서 Z-Depth 및 Mist 마스크가 어떻게 표시되는지에 대한 설명을 덧붙이겠습니다.
View Transform 파라미터에 어떤 모드를 선택하느냐에 따라, Normalize 여부와 상관없이 Mist와 Depth가 화면에 표시되는 결과는 크게 달라질 수 있습니다.

하지만 이러한 변환은 Backdrop에서 데이터가 표시되는 방식에만 영향을 주어야 하며, 데이터 자체의 실제 값은 변경하지 않아야 합니다.

자, 이번 튜토리얼은 여기까지입니다! 도움이 되었기를 바랍니다! 다음에 또 만나요!