Karma XPU로 Pyro 및 볼륨 렌더링하기

볼륨 렌더링은 Houdini GPU의 VRAM 용량을 초과하게 만드는 가장 쉬운 방법 중 하나입니다. Karma XPU는 GPU와 CPU 리소스를 모두 사용하지만, 볼륨 데이터는 타일링된 셰이더 텍스처처럼 메모리 사용량에 대한 부담을 덜 받지 못합니다. GPU 메모리가 부족해지면 XPU는 CPU를 포함한 다른 사용 가능한 장치가 프레임 처리를 완료하도록 허용할 수 있습니다. 파이로 시퀀스의 경우 이로 인해 성능 저하가 두드러지게 나타날 수 있습니다. 연기와 화염 밀도는 프레임마다 변하기 때문에 시뮬레이션에서 가장 많은 메모리를 필요로 하는 부분은 주변 프레임보다 훨씬 더 많은 메모리를 필요로 할 수 있습니다. Karma XPU 볼륨 렌더링을 더욱 부드럽게 하려면 먼저 볼륨 데이터 자체를 줄이는 것부터 시작하십시오. 복셀 해상도를 낮추고, 카메라에 맞춰 캐시를 자르고, 셰이딩에 필요하지 않은 필드를 제거하십시오. 그래도 메모리 사용량이 많은 프레임에서 VRAM 용량을 초과하는 경우, 메모리 용량이 더 큰 GPU를 사용하거나 Karma CPU를 사용하는 것이 현실적인 해결책이 될 수 있습니다.

캐릭터 장면은 일반적으로 시퀀스 전체에 걸쳐 메모리 사용량이 비교적 예측 가능합니다. 하지만 파이로는 다릅니다. 연기 기둥이 최고점에 도달했다가 사라지는 과정을 반복하기 때문에 VRAM 요구량이 일정하게 유지되는 것이 아니라 시뮬레이션의 흐름에 따라 변합니다. XPU를 사용하면 이러한 피크를 통해 어떤 프레임이 GPU 리소스를 많이 사용하고 어떤 프레임이 CPU 리소스를 필요로 하는지를 결정할 수 있습니다.

왜 볼륨이 가장 먼저 한계에 도달하는가

렌더러가 표면 지오메트리(surface geometry)가 아닌 복셀 그리드(voxel grids)를 기반으로 작동하기 때문에, VDB 및 기타 볼륨 데이터는 VRAM을 빠르게 소모할 수 있습니다. 해상도를 높이면 볼륨 전체에 복셀이 추가되므로, 표면 지오메트리의 경우보다 메모리 사용량이 훨씬 더 가파르게 증가할 수 있습니다. 데이터 양이 많은 Pyro 캐시의 경우, 볼륨 데이터가 씬(scene)의 다른 요소들보다 메모리 측면에서 더 큰 부담이 될 수 있습니다.

또한 Pyro 시퀀스는 고정된 VRAM 요구량을 갖지 않습니다. 각 프레임마다 그리드 크기와 밀도가 다를 수 있어 샷(shot) 전체에 걸쳐 메모리 사용량의 변화가 발생합니다. 더 큰 문제는 Karma XPU가 볼륨 그리드에 대해 아웃 오브 코어(out-of-core) 렌더링을 지원하지 않는다는 점입니다. 연기와 불의 밀도가 높아지면 데이터 밀도가 가장 높은 프레임에서 GPU의 가용 VRAM 용량을 초과하여 렌더링 속도가 저하될 수 있습니다. 따라서 Karma XPU로 볼륨을 렌더링할 때는 메모리 사용량을 주요 고려 사항으로 삼아야 합니다.

볼륨이 VRAM 용량을 초과하면 어떤 일이 발생하나요?

랜더러볼륨이 비디오 메모리를 초과할 때파이로 시퀀스에 미치는 영향
카르마 XPU아웃 오브 코어 미지원, 중앙 처리 장치로 전환됨시뮬레이션 피크 프레임 속도가 크게 느려짐
카르마 CPU시스템 메모리 사용매우 무거운 파이로 샷에 더 안전함
레드시프트볼륨 그리드는 아웃 오브 코어 렌더링을 사용하지 않음볼륨 데이터가 여전히 하드웨어 메모리 한계에 도달함

볼륨 렌더링의 경우, 핵심적인 결정 사항은 단순히 GPU 렌더러를 선택하는 문제가 아닙니다. 캐시 용량을 가용한 GPU 메모리 한도 내로 유지하거나, 아니면 시스템 RAM을 활용할 수 있는 렌더러로 해당 샷을 옮겨야 합니다. 이러한 구분은 특히 가장 무거운 Pyro 프레임이 GPU 메모리 용량을 초과할 때 더욱 중요해집니다.

무엇보다 먼저 캐시 축소하기

더 많은 VRAM을 갖춘 GPU로 넘어가기 전에, 먼저 볼륨 데이터를 줄여보는 것이 좋습니다. 전체 렌더링 설정을 즉시 변경하지 않고도 메모리 사용량을 낮출 수 있는 몇 가지 방법이 있습니다.

  1. 복셀 해상도 낮추기: 볼륨 전체의 해상도를 일률적으로 낮추기보다는, 가장자리나 카메라에서 멀리 떨어진 영역부터 시작하여 가능한 부분의 해상도를 줄이십시오.
  2. 카메라 영역에 맞춰 자르기(Crop): 카메라 시야각(view) 밖의 볼륨 영역은 제거하십시오. 불필요한 데이터라도 렌더링을 위해 로드되면 메모리를 차지할 수 있기 때문입니다.
  3. 사용하지 않는 필드 제거: 연기 및 화염 셰이더에 필요한 볼륨 필드만 남기십시오. 불필요한 필드는 최종 이미지에 기여하지 않으면서 데이터 양만 늘릴 뿐입니다.
  4. 캐시 형식 확인: 작업 방식(워크플로)에 적합한 형식과 압축 수준으로 캐시가 설정되어 있는지 확인하십시오. 압축되지 않은 대용량 캐시는 불필요한 저장 공간 및 로딩 비용을 초래할 수 있습니다.
  5. 렌더 레이어 분리: 합성(compositing) 작업이 가능하다면, 볼륨을 장면의 나머지 요소와 분리하여 렌더링하십시오. 이렇게 하면 무거운 Pyro(파이로) 샷을 더 쉽게 관리할 수 있습니다.

이미지 출처: sidefx.com

프레임이 아닌 시퀀스 읽기

Pyro 시퀀스는 시뮬레이션 전반에 걸쳐 연기 밀도가 변하기 때문에 프레임마다 동작이 매우 다를 수 있습니다. 시뮬레이션 피크 부근의 구간은 주변 프레임보다 렌더링 속도가 몇 배나 느릴 수 있습니다. 가장 부하가 큰 프레임에서 VRAM 사용량을 측정해야 하는데, 이 프레임은 시퀀스 초반보다는 중간쯤에 나타나는 경우가 많습니다. 프레임 번호에 따른 렌더링 시간을 그래프로 나타내면 이러한 패턴을 훨씬 쉽게 파악할 수 있습니다.

속도가 느린 구간이 시퀀스의 작은 부분에만 해당한다면 전체 작업을 변경하는 대신 해당 프레임들을 다른 설정으로 개별적으로 렌더링하는 것이 좋습니다. 시퀀스 대부분이 메모리 한계에 근접해 있다면 개별 프레임 범위를 수정하는 것보다 전체 샷을 Karma CPU로 옮기는 것이 일반적으로 더 깔끔한 방법입니다.

Karma XPU에서 확인해 볼 만한 설정

‘Volume Limit(볼륨 제한)’은 볼류메트릭 광선(volumetric ray)이 장면 내에서 몇 번이나 전파될 수 있는지를 제어합니다. SideFX 문서에 따르면 설정 가능한 범위는 0에서 65535 사이입니다. 값이 0보다 크면 볼류메트릭 객체가 간접광을 받을 수 있으며, 값이 높을수록 더 복잡한 빛 산란 효과를 얻을 수 있습니다. 하지만 바운스(반사) 횟수가 늘어날 때마다 렌더링 시간이 상당히 증가할 수 있습니다. 4를 초과하는 값은 시각적으로 눈에 띄는 개선 효과가 미미한 경우가 많으므로, 실제로 더 깊이 있는 볼류메트릭 빛 전달이 필요한 샷에서만 이 설정을 높이는 것이 좋습니다.

이미지 출처: sidefx.com

‘Volume Step Rate(볼륨 스텝 레이트)’는 Karma XPU 볼륨 렌더링 시 확인해 볼 만한 또 다른 설정입니다. 기본값은 0.25로, 이는 대략 4개의 복셀(voxel) 중 하나를 샘플링하는 수준입니다. 값이 1이면 모든 복셀을 샘플링하며, 1보다 큰 값은 볼륨을 더 빈번하게 샘플링합니다. 이 값을 높이면 볼륨 노이즈를 줄일 수 있지만, 렌더링 시간과 메모리 사용량도 함께 증가합니다. 대부분의 샷에서 이 값을 1 이상으로 높여도 얻을 수 있는 추가적인 이점은 제한적이므로, 최종 이미지의 실제 노이즈를 확인한 후에 조정하는 것이 좋습니다.

업그레이드 전 원격 GPU 테스트

볼륨 데이터가 GPU 메모리 한계를 벗어날 방법이 없을 때, 각 카드에서 사용 가능한 VRAM 용량이 어떤 프레임을 GPU에 유지할 수 있을지 결정합니다. 하드웨어 업그레이드를 고려하기 전에 먼저 씬(scene)과 캐시를 최적화해 보십시오. 그럼에도 여전히 로컬 VRAM 용량을 초과한다면, 하드웨어 관련 결정을 내리기 전 iRender의 RTX 4090(24GB) 또는 RTX 5090(32GB) 탑재 원격 워크스테이션을 활용해 가장 무거운 프레임을 테스트해 볼 수 있습니다.
단, Pyro 캐시 용량이 32GB를 초과하는 경우에는 어떤 대여 사양으로도 단일 프레임의 메모리 한계 문제를 해결할 수 없습니다. 멀티 GPU 장비는 여러 프레임을 병렬로 렌더링할 수 있지만, 각 GPU의 VRAM이 하나의 거대한 메모리 풀로 합쳐지지는 않기 때문입니다. 이러한 상황에서는 캐시 크기를 줄이거나 해당 샷(shot)의 렌더링 방식을 Karma CPU로 변경하십시오.

최고의 속도, 완벽한 자유. iRender의 전용 GPU 서버로 VFX 워크플로를 주도하세요. iRender로 렌더링하기 →

FAQ

  1. Karma XPU가 Pyro 및 볼륨 씬(scene) 처리에 어려움을 겪는 이유는 무엇인가요?
    Karma XPU는 볼륨 데이터가 복셀 그리드(voxel grid) 형태로 저장되기 때문에 Pyro 처리에 어려움을 겪을 수 있습니다. 해상도가 높아지면 메모리 사용량이 급격히 증가할 수 있기 때문입니다. 또한 용량이 큰 캐시에는 셰이딩을 위한 여러 필드가 포함될 수 있어 VRAM에 로드해야 할 데이터 양이 늘어납니다. 볼륨 그리드는 아웃 오브 코어(out-of-core) 기능을 지원하지 않으므로, 데이터 양이 많은 프레임은 GPU 메모리 용량을 초과하여 Karma XPU의 볼륨 렌더링 속도를 저하시킬 수 있습니다.
  2. Karma XPU는 볼륨에 대한 아웃 오브 코어 렌더링을 지원하나요?
    아니요. Karma XPU는 볼륨 그리드에 대한 아웃 오브 코어 렌더링을 지원하지 않으므로, 용량이 큰 VDB 캐시는 반드시 사용 가능한 장치 메모리 범위 내에 있어야 합니다. GPU 메모리가 부족할 경우 XPU는 CPU를 포함한 다른 사용 가능한 장치를 활용할 수 있지만, 이로 인해 해당 프레임의 렌더링 속도가 훨씬 느려질 수 있습니다. 매우 큰 볼륨의 경우 Karma CPU를 사용하는 것이 더 안전한 선택일 수 있습니다.
  3. GPU 렌더링을 위해 VDB 캐시 크기를 줄이려면 어떻게 해야 하나요?
    먼저 최종 샷에서 세부 사항이 눈에 띄지 않는 부분의 복셀 해상도를 낮추는 것부터 시작하세요. 카메라 뷰에 맞춰 볼륨을 자르고(crop), 셰이더에서 필요로 하지 않는 필드는 제거하십시오. 또한 캐시 형식과 압축 방식을 확인해야 합니다. 불필요하게 큰 파일은 로딩 시간과 메모리 사용량을 증가시킬 수 있기 때문입니다. 변경 사항을 적용할 때마다 데이터 양이 가장 많은 프레임으로 테스트를 수행하십시오.
  4. 용량이 큰 볼륨 샷에는 Karma CPU를 사용해야 하나요?
    용량이 큰 볼륨 프레임이 지속적으로 GPU 메모리 한계를 초과하는 경우에는 Karma CPU를 사용하는 것이 더 안전한 선택인 경우가 많습니다. Karma CPU는 GPU의 제한적인 VRAM 대신 시스템 RAM을 사용하므로 대용량 Pyro 캐시를 렌더링하기가 더 수월합니다. Karma XPU로 볼륨을 렌더링할 때는 캐시가 메모리 범위 내에 들어올 경우 XPU를 계속 사용하고, 메모리 부족이 주된 제약 요인이 될 때 CPU로 전환하는 것이 좋습니다.

더 보기: Nanite와 Lumen이 GPU와 VRAM을 한계치까지 사용하고 있습니다. 어떻게 해야 하나요?

No Comments

Leave A Comment