Houdini에서 Redshift Out-of-Core를 사용하는 이유와 VDB가 이를 무시하는 이유
‘아웃 오브 코어(out-of-core)’는 VRAM 용량을 초과하는 데이터를 시스템 RAM에 보관하다가 GPU가 필요로 할 때 PCIe를 통해 불러올 수 있게 해주는 메커니즘입니다. 덕분에 그래픽 카드의 VRAM 용량을 넘어서는 규모의 씬(scene)이라도 렌더링이 중단되지 않고 끝까지 완료될 수 있습니다. 하지만 많은 사람들이 간과하는 점은 이 기능의 적용 범위입니다. 아웃 오브 코어는 텍스처와 지오메트리에는 적용되지만, Maxon의 설명에 따르면 VDB 및 볼륨 그리드, 씬 에셋, 스프라이트 노드 텍스처 등에는 이 기능이 적용되지 않습니다. Pyro나 VDB 작업 시 메모리 한계에 부딪히는 경우가 가장 빈번하기 때문에, Houdini 아티스트들에게는 이러한 세부 사항이 무엇보다 중요합니다. 볼륨 관련 씬에서는 VRAM 용량이 다시금 절대적인 한계로 작용하게 되기 때문입니다. 이를 해결하는 방법은 단순히 설정 옵션을 하나 더 체크하는 것이 아닙니다. 프레임에서 로드하는 볼륨 데이터의 양을 줄이거나, VRAM 용량이 더 큰 그래픽 카드를 사용하여 렌더링하는 것만이 유일한 해결책입니다.
많은 Houdini 아티스트들이 Redshift를 선택하는 이유 중 하나는 바로 아웃 오브 코어 기능 때문입니다. 아웃 오브 코어는 실제로 존재하는 기능이며 Maxon이 설명한 대로 정상적으로 작동합니다. 다만, Houdini에서 가장 방대한 양으로 생성되는 데이터 유형에는 이 기능이 적용되지 않을 뿐입니다.
아웃 오브 코어(Out-of-Core)가 실제로 다루는 범위

이미지 출처: Maxon
Textures and geometry are the two categories out-of-core handles. When they exceed the memory on the card, Redshift keeps them in system RAM and fetches what the render needs across the PCIe bus. The frame completes, only more slowly.
PCIe bandwidth is a small fraction of the bandwidth between the GPU and its own memory, so the more a render reaches outside the card, the longer it waits. The penalty is not linear and varies from scene to scene. A frame sitting just over the limit may barely register the difference, while one far over it can crawl. Treat out-of-core as a safety net for the occasional heavy frame. A whole sequence running out-of-core usually means the scene needs work. This is also where Redshift and Karma XPU part ways architecturally. Karma XPU has no out-of-core path at all, and when a GPU device runs out of memory, XPU hands the work to the remaining devices, CPU included.
Redshift가 VRAM 밖으로 옮길 수 있는 것과 없는 것
| 데이터 유형 | 아웃 오브 코어 지원 여부 | 후디니에서의 의미 |
| 텍스처 | 예 | 고용량 UDIM 세트 및 4K/8K 맵도 정상 렌더링됨 |
| 지오메트리 | 예 | 밀도가 높은 인스턴싱 씬도 문제없이 완료됨 |
| VDB / 볼륨 그리드 | 아니요 | 파이로, 연기 및 화염: VRAM 용량이 절대적인 한계임 |
| 씬 에셋 | 아니요 | 할당된 VRAM 예산 내에 포함되어야 함 |
| 스프라이트 노드 텍스처 | 아니요 | 일반적이지 않으나 동일한 규칙이 적용됨 |
Maxon은 아키텍처상의 세부적인 이유를 언급하지 않은 채 제외되는 항목들을 명시하고 있습니다. 개괄적으로 설명하자면, 렌더링 중 볼륨 데이터에 접근하는 방식은 텍스처 조회(texture lookup)와 다르며, Redshift는 이 데이터를 그래픽 카드 메모리에 상주시켜 처리합니다. 실제 렌더링 결과에 영향을 미치는 것은 실질적인 작동 방식이므로, 그 이상의 기술적 세부 사항에 대해서는 별도로 추측하지 않겠습니다.
여러 개의 GPU를 사용하더라도 이러한 상황은 달라지지 않습니다. VRAM은 여러 카드 간에 통합(pooling)되지 않으므로, 시스템에 장착된 각 GPU가 볼륨 데이터를 개별적으로 보유해야 합니다. 따라서 24GB 용량의 카드를 하나 더 추가하면 해당 용량 범위 내의 프레임에서는 렌더링 속도가 향상되겠지만, 용량이 매우 큰 VDB 데이터를 처리할 때 48GB의 메모리 한도를 사용할 수 있게 되는 것은 아닙니다.
이미 아웃 오브 코어(out-of-core) 상태인지 확인하는 방법
- Redshift 로그를 읽어보세요. Redshift는 모든 렌더링에 대한 로그를 기록하며, 해당 로그의 메모리 통계는 사용 가능한 VRAM 용량, 로드된 지오메트리 및 텍스처 데이터 용량, 그리고 렌더링이 메모리 외부에서 수행되었는지 여부를 보여줍니다. 마지막으로 렌더링된 프레임이 아닌, 가장 많은 리소스를 사용하는 프레임의 로그를 확인하세요.
- 가장 많은 리소스를 사용하는 프레임에서 VRAM 사용량이 최대가 되는 시점을 확인하세요. Pyro 시퀀스의 첫 번째 프레임은 시뮬레이션 크기가 아직 커지지 않았기 때문에 일반적으로 가장 적은 리소스를 사용합니다. 볼륨 크기가 가장 큰 시점의 GPU 메모리 사용량을 확인하세요.
- 시퀀스 전체의 프레임 시간을 비교하세요. 리소스 사용량이 많은 프레임이 적은 프레임보다 몇 배 더 오래 걸리고 장면 내용의 차이로 설명할 수 없다면, 메모리 외부에서 데이터를 가져오는 것이 원인일 가능성이 높습니다.
- 볼륨 데이터를 별도로 확인하세요. 가장 많은 리소스를 사용하는 프레임에서 로드된 VDB 그리드와 그 크기를 확인하세요. 디스크상의 파일 크기는 대략적인 지표일 뿐이며, 압축으로 인해 메모리 내 크기가 다를 수 있습니다. 텍스처와 지오메트리는 정상적으로 보이지만 메모리 부족 오류로 프레임 처리가 실패하는 경우, 안전장치가 없는 볼륨이 가장 먼저 의심 대상이 됩니다.
천장 아래 볼륨감 있는 장면 연출하기
- 카메라가 볼 수 없는 부분의 복셀 해상도를 낮추세요. 복셀 크기를 절반으로 줄이면 복셀 개수가 대략 8배로 늘어나므로 해상도가 가장 중요한 조정 요소입니다. 일반적인 방법은 모션에 필요한 해상도로 시뮬레이션을 수행한 다음, VDB 리샘플링을 사용하여 멀리 있는 피사체나 배경 장면을 위해 그리드를 다시 샘플링하는 것입니다.
- 카메라에 맞춰 볼륨을 클리핑하세요. 시뮬레이션 컨테이너는 일반적으로 프레임에 나타나는 크기보다 훨씬 큽니다. VDB를 카메라 절두체에 맞춰 클리핑하고 비활성 복셀을 제거하면 렌더러가 로드하지만 표시하지 않는 데이터를 제거할 수 있습니다.
- 셰이더가 읽는 필드만 유지하세요. Pyro 시뮬레이션은 렌더링에는 중요하지 않고 솔버에 중요한 필드를 출력합니다. 밀도와 방출을 위한 온도 또는 화염 필드가 대부분의 셰이더에 해당합니다. 모션 블러를 렌더링하는 경우에만 속도를 유지하고 나머지는 캐싱하기 전에 제거하세요.
- 낮은 정밀도로 테스트해 보세요. 그리드를 16비트로 저장하면 디스크 캐시 크기가 줄어듭니다.
- 렌더링을 레이어로 분할하세요. 연기와 불, 또는 전경과 배경의 볼륨을 분리하면 합성 전에 각 레이어가 최대 성능 범위 내에 유지됩니다.
- VRAM 용량이 더 큰 그래픽 카드로 교체하세요. 32GB 카드는 24GB 카드보다 최대 성능이 3분의 1 더 높기 때문에 이러한 경우에 적합합니다.
서로 다른 두 천장에서 VDB 테스트하기
볼륨(volume) 데이터는 아웃오브코어(out-of-core) 처리 경로를 지원하지 않으므로, 단일 그래픽 카드의 VRAM 용량이 고사양 Pyro 프레임의 렌더링 가능 여부를 직접적으로 결정합니다. iRender는 각각 24GB VRAM을 탑재한 카드를 최대 8개까지 장착한 RTX 4090 시스템과 32GB VRAM을 갖춘 RTX 4090(단일 카드) 시스템을 분 단위 과금 방식으로 대여하므로, 사용자가 직접 VDB 캐시를 로드하여 각 사양별 렌더링 로그를 비교해 볼 수 있습니다.
VRAM 사용량이 32GB를 초과하는 고해상도 Pyro 샷은 어떤 대여 구성으로도 렌더링할 수 없으며, 이 경우 씬(scene)을 최적화하거나 여러 레이어로 분할하는 작업이 필요합니다.
최고의 속도, 완벽한 자유. iRender의 전용 GPU 서버로 VFX 워크플로를 완벽하게 제어하세요. iRender로 렌더링을 시작하세요 →
FAQ
- Q1: Redshift의 Out-of-core 기능이 VDB 볼륨에도 적용되나요?
아니요. Maxon의 문서에 따르면 VDB와 볼륨 그리드는 씬 에셋(scene assets) 및 스프라이트 노드 텍스처와 마찬가지로 Out-of-core 기능을 사용하지 않는 데이터 유형에 포함됩니다. 텍스처와 지오메트리는 시스템 RAM으로 넘어가 PCIe를 통해 데이터를 불러올 수 있지만, 볼륨 데이터는 반드시 각 그래픽 카드의 VRAM 내에 수용되어야 합니다. 따라서 Houdini Pyro, 연기 및 화염 씬의 경우 VRAM 용량이 절대적인 한계점이 됩니다. 볼륨 데이터가 이 용량을 초과하면 단순히 렌더링 속도가 느려지는 것이 아니라, Out-of-memory(메모리 부족) 오류로 인해 프레임 렌더링이 실패하게 됩니다. - Q2: Redshift의 Out-of-core 기능은 구체적으로 어떤 데이터를 처리하나요?
텍스처와 지오메트리입니다. 이 데이터들이 VRAM 용량을 초과할 경우, Redshift는 해당 데이터를 시스템 RAM에 유지하고 렌더링에 필요한 부분만 PCIe 버스를 통해 가져오므로 프레임 렌더링이 완료되기는 하지만 속도는 느려집니다. 속도 저하 정도는 그래픽 카드 외부(시스템 RAM)에 있는 데이터의 양에 따라 커지며 씬마다 다릅니다. VDB, 볼륨 그리드, 씬 에셋, 스프라이트 노드 텍스처는 이 기능에서 제외되므로 반드시 그래픽 카드 메모리 내에 들어갈 수 있어야 합니다. 또한 VRAM은 여러 GPU 간에 통합(pooling)되지 않으므로, 각 카드가 해당 데이터를 개별적으로 보유해야 합니다. - Q3: Pyro 씬에서 Redshift의 VRAM 부족 문제를 어떻게 해결하나요?
프레임이 로드하는 볼륨 데이터의 양을 줄이십시오. 카메라에 세부 사항이 보이지 않는 영역의 복셀 해상도를 낮추십시오(복셀 크기를 절반으로 줄이면 복셀 개수는 약 8배 증가하기 때문입니다). VDB를 카메라 절두체(frustum) 영역으로 자르고(clip), 활성화되지 않은 복셀은 제거(prune)하십시오. 셰이더가 읽는 필드(예: 밀도, 온도)만 남기고, 모션 블러가 필요한 경우에만 속도(velocity) 데이터를 포함하십시오. 연기와 화염을 별도의 렌더 레이어로 분리하십시오. 그래도 씬이 메모리에 들어가지 않는다면 VRAM 용량이 더 큰 그래픽 카드로 렌더링하고, Redshift 로그를 확인하여 무엇이 메모리를 사용하고 있는지 파악하십시오.