스파스 볼륨 텍스처(Sparse Volume Texture, SVT) 는 3D 데이터 구조체로 텍셀(복셀)을 저장하는 텍스처입니다. 3D 텍스처 및 볼륨 텍스처와 유사한 3차원 UV 좌표로 SVT 데이터를 인덱싱할 수 있습니다. 표준(고밀도) 볼륨 텍스처와 달리 SVT는 '관심' 데이터가 있는 볼륨 영역(복셀 데이터가 있는 영역)에만 메모리를 사용하므로 훨씬 더 많은 볼륨이 허용됩니다. 심지어 볼륨 규모가 동일하더라도 표준 볼륨 텍스처의 밀도에 비해 메모리를 적게 사용할 수 있습니다.
스파스 볼륨 텍스처의 타입
스태틱 또는 애니메이션 볼륨을 사용하여 스파스 볼륨 텍스처를 나타낼 수 있습니다. 스태틱 SVT는 단일 볼륨이지만, 애니메이션 SVT는 플립북 애니메이션과 비슷하게 재생할 수 있는 볼륨이나 프레임의 시퀀스입니다.

스태틱 단일 볼륨 SVT(왼쪽) 및 애니메이션 SVT(오른쪽)
이러한 SVT는 불균질 볼륨 액터를 사용하여 렌더링됩니다. 불균질 볼륨 액터 사용에 대한 자세한 내용은 불균질 볼륨을 참조하세요.
스파스 볼륨 텍스처의 구성
스파스 볼륨 텍스처는 여러 텍스처로 구성됩니다. 여기에는 볼륨을 구성하는 피지컬 타일 데이터(Physical Tile Data) 텍스처에 대한 인디렉션 역할을 하는 페이지 테이블(Page Table) 텍스처가 포함됩니다. 이러한 타일 데이터 텍스처가 볼륨에 대한 텍스처 데이터를 저장하며, 이들은 최대 두 개의 텍스처를 사용하여 볼륨의 데이터와 어트리뷰트를 저장할 수 있습니다. 이는 어트리뷰트 A(Attributes A)와 어트리뷰트 B(Attributes B)로 저장됩니다.
어트리뷰트 A와 B는 각각 RGBA 텍스처 채널을 사용하여 데이터를 저장하므로 최대 8개 채널에 데이터를 저장할 수 있습니다. 이 데이터는 페이지 테이블에 대해 한 번, 피지컬 타일 데이터에 대해 한 번, 이렇게 총 두 번에서 세 번의 텍스처 룩업을 통해 가져오며 총 횟수는 SVT에 따라 달라집니다. 즉, SVT는 페이지 테이블과 타일 데이터 텍스처의 일대일 관계가 아니라 두 피지컬 타일 데이터 텍스처에 대해 단일 페이지 테이블 룩업을 공유합니다.
SVT의 두 타일 데이터 텍스처(어트리뷰트 A 및 B)의 픽셀 포맷은 16비트, 32비트, 8비트 UNORM과 같이 다를 수 있습니다. 어트리뷰트 목록 중 하나에서 RGBA 텍스처 채널 중 하나를 사용하지 않는 경우 채널 수가 더 적은 픽셀 포맷을 사용하려고 시도합니다. 아무 채널도 사용하지 않는 경우 텍스처는 메모리를 소모하지 않습니다.
텍스처 포맷 | 텍스처 | 언리얼 엔진 표현 |
---|---|---|
페이지 테이블(Page Table) | ![]() |
![]() |
피지컬 3D 타일(Physical 3D Tiles) | ![]() |
![]() |
스파스 볼륨 텍스처를 보는 방법
다음과 같은 방법으로 스파스 볼륨 텍스처 작업을 할 수 있습니다.
- 볼륨 도메인 머티리얼(Volume-Domain Materials)
- 스파스 볼륨 텍스처 뷰어
불균질 볼륨 액터 및 컴포넌트
불균질 볼륨(Heterogeneous Volumes)은 볼륨 도메인 머티리얼에 스파스 볼륨 텍스처 머티리얼 노드를 통합하여 SVT를 활용하는 배치 가능한 액터입니다. 이 액터 타입은 해당 머티리얼의 로직 구성을 사용하여 SVT와 SVT의 어트리뷰트를 렌더링합니다. 불균질 볼륨 액터는 추가 구성 없이도 애니메이팅된 SVT를 재생 및 루프할 수 있습니다.
불균질 볼륨 렌더링은 리얼타임 디퍼드 렌더링 기능에 의해 부분적으로 제한됩니다. 하지만 패스 트레이서는 스캐터링, 섀도 및 글로벌 일루미네이션을 정확하게 시뮬레이션하는 등, 더 완전한 볼륨 렌더링 지원을 제공합니다.

불균질 볼륨 액터를 사용하여 렌더링된 SVT 머티리얼의 예시입니다.
불균질 볼륨 액터 사용 및 구성에 대한 자세한 내용은 불균질 볼륨을 참조하세요.
볼류메트릭 포그
SVT는 볼륨 도메인 머티리얼이 메시에 적용될 때 익스포넨셜 하이트 포그(Exponential Height Fog)의 기능인 볼류메트릭 포그를 지원합니다. SVT는 볼류메트릭 포그의 해상도보다 더 많은 디테일을 보유할 수 있으므로 이 메서드를 불균질 볼륨에 사용하면 불일치가 발생할 수 있습니다.

SVT를 표시하는 불균질 볼륨 액터(왼쪽) 및 메시에 적용되었으며 볼류메트릭 포그로 렌더링된 SVT 머티리얼(오른쪽)
SVT 머티리얼로 볼류메트릭 포그를 구성하려면 이 페이지의 볼류메트릭 포그와 함께 스파스 볼륨 텍스처 보기를 참조하세요.
볼류메트릭 클라우드
SVT는 볼륨 도메인 머티리얼이 불균질 볼륨 액터에 적용될 때 자동으로 볼류메트릭 클라우드를 지원합니다.

스파스 볼륨 텍스처 뷰어
스파스 볼륨 텍스처 뷰어는 프리뷰어로는 매우 유용합니다. 하지만 나머지 씬과 사용하기에는 최적화가 되지 않았으며 이상적이지도 않습니다. 최선의 방법은 머티리얼을 생성하여 SVT를 제대로 표시하고 이를 불균질 볼륨에 적용하거나 스파스 볼륨 텍스처를 보는 방법 섹션에서 언급된 방법 중 하나를 사용하는 것입니다.
스파스 볼륨 텍스처 뷰어(Sparse Volume Texture Viewer) 를 사용하면 머티리얼을 구성할 필요 없이 바로 SVT 에셋을 프리뷰할 수 있습니다. 이 뷰어를 사용하면 SVT의 어트리뷰트 텍스처 채널을 각각 프리뷰할 수 있으며 애니메이션이 있다면 그 애니메이션을 재생할 수도 있습니다. 따라서 필수 구성 없이도 빠르게 SVT 에셋을 디버깅하기에 이상적입니다.
SVT 뷰어를 사용하려면 다음 단계를 따릅니다.
- 스파스 볼륨 텍스처 뷰어 를 액터 배치(Place Actors) 패널에서 씬으로 드래그 앤 드롭합니다.
- 디테일(Details) 패널에서 SVT 에셋을 스파스 볼륨 텍스처 프리뷰(Sparse Volume Texture Preview) 할당 슬롯에 할당합니다.
그러면 뷰어 내에 SVT가 표시됩니다.

소멸(Extinction) 프로퍼티 값을 조정하여 라이트를 흡수하는 정도를 설정함으로써 볼륨이 보이는 정도를 조정할 수 있습니다.
프레임이 두 개 이상인 SVT의 경우 재생(Playing) 및 루핑(Looping) 체크박스를 사용하여 SVT의 프레임 루프를 재생합니다. 프레임 레이트(Frame Rate) 프로퍼티는 초당 플레이할 프레임 수(fps)를 지정합니다. 프리뷰어 기본값은 24fps로 설정됩니다. 애니메이트 프로퍼티를 선택하지 않은 경우, 프레임(Frame) 프로퍼티 값을 사용하여 SVT에서 프레임을 스크럽할 수 있습니다.

애니메이션 없는 SVT 프리뷰(왼쪽) 및 애니메이팅된 프레임이 루핑되는 프리뷰(오른쪽)
SVT 뷰어는 한 번에 하나의 텍스처 채널만 표시합니다. 이 뷰어는 SVT 에셋의 단일 채널을 검사하는 데 유용하며 볼륨 텍스처에 저장된 데이터에 따라 다르지만 대체로 잘 작동합니다. 임포트된 모든 속도 데이터는 밀도로 표시되며 원치 않는 결과를 반환할 것입니다.
프리뷰 어트리뷰트(Preview Attribute) 선택 박스를 사용하여 프리뷰하려는 어트리뷰트 채널을 선택합니다. 첫 번째 채널인 AttributesA Red 가 기본적으로 사용됩니다.
스파스 볼륨 텍스처 뷰어에는 다음과 같은 프로퍼티가 있습니다.

프로퍼티 | 설명 |
---|---|
에셋 프리뷰 | |
스파스 볼륨 텍스처 프리뷰(Sparse Volume Texture Preview) | 프리뷰어에서 사용하는 SVT 에셋입니다. |
스트리밍 요청 차단(Blocking Streaming Requests) | 스트리밍 요청이 발생하면 즉시 차단(대기)하도록 SVT 스트리밍 매니저에 알립니다. 이 프로퍼티를 효과적으로 사용하는 방법에 대한 자세한 내용은 스트리밍 퍼포먼스 참고 사항 섹션을 참조하세요. |
프레임당 트랜스폼 적용(Apply Per Frame Transforms) | 주어진 스파스 볼륨 텍스처 프레임에 어태치된 트랜스폼을 적용합니다. 이 트랜스폼은 스파스 볼륨 텍스처 뷰어 컴포넌트의 트랜스폼에 상대적입니다. |
중심에서 피벗(Pivot at Centroid) | 피벗을 볼륨의 중심으로 이동합니다. 트랜스폼은 원점에 있는 피벗으로 작성되었으며, 원점은 작성된 방식에 따라 보통 볼륨의 모서리 중 하나입니다. 피벗을 볼륨 중앙으로 강제 이동하면 트랜스폼이 중단될 수 있습니다. |
복셀 크기(Voxel Size) | 모든 복셀에 적용할 균등 스케일입니다. 전체 볼륨의 스케일을 빠르게 조절하여 스케일 관련 문제를 디버깅할 수 있습니다. |
프리뷰 어트리뷰트(Preview Attribute) | 프리뷰할 어트리뷰트를 선택합니다. 단일 SVT 내에 여러 어트리뷰트가 포함되어 있어도 한 번에 하나의 어트리뷰트만 프리뷰할 수 있습니다. 어트리뷰트 A 또는 B의 알파 채널이 없음(None) 으로 설정된 경우, 뷰어에서 프리뷰할 때 검은색 사각형 비주얼이 표시될 수 있습니다. 이는 GPU가 존재하지 않는 텍스처 채널에 대해 기본적으로 1을 반환하는 알파 채널을 제외하고는 일반적으로 0을 반환하기 때문입니다. 기본적으로 채널이 정의되지 않은 상태이므로 없음 으로 설정해 두어도 문제가 되지는 않을 것입니다. |
밉 레벨(Mip Level) | 어떤 밉 레벨에서 SVT를 볼지 설정합니다. |
소멸(Extinction) | 볼륨의 불투명 정도를 설정합니다. 소멸은 흡수(파티클에 부딪혀 흡수된 라이트 레이) 및 스캐터링(파티클에 부딪혀 다른 방향으로 산란되거나 반사되어 더는 카메라에 도달하지 않는 레이)의 합입니다. 값이 클수록 더 불투명하게 표시됩니다. |
애니메이션 | |
프레임(Frame) | 값을 입력하거나 슬라이더를 드래그하여 애니메이팅된 SVT의 프레임을 스크럽합니다. 이 프로퍼티는 재생 이 비활성화되어 있을 때 편집할 수 있습니다. |
프레임 레이트(Frame Rate) | 이 SVT 애니메이션이 재생될 프레임 레이트를 지정합니다. 예를 들어, 24, 30, 48, 60 등의 값을 사용합니다. 이 프로퍼티는 재생 이 활성화되어 있을 때 편집할 수 있습니다. |
재생(Playing) | SVT 에셋의 프레임이 여러 개일 때 프리뷰어가 SVT 에셋 프레임 재생을 루핑할지 여부를 토글합니다. |
루핑(Looping) | 재생 이 활성화되어 있을 때 애니메이션을 루핑합니다. |
역재생(Reverse Playback) | 재생 이 활성화되어 있을 때 애니메이팅된 SVT 프레임을 역방향으로 재생합니다. |
스파스 볼륨 텍스처로 작업하기
복셀 데이터 베이스(Voxel Data Base, VDB) 파일에서 스파스 볼륨 텍스처를 임포트할 수 있습니다. 이 포맷은 스파스 볼륨 데이터를 저장하는 데 널리 사용됩니다. VDB 데이터는 언리얼 엔진으로 임포트될 때 스파스 볼륨 표현으로 변환됩니다.
VDB 파일에는 소위 말하는 '그리드'가 포함되어 있는데, 이는 볼륨의 다른 이름입니다. 이러한 그리드에는 밀도, 속도, 온도 같은 다양한 타입의 컴포넌트가 포함될 수 있습니다. SVT는 Float(float, float2, float3, float4), Double(double, double2, double3, double4) 및 Half(half, half2, half3, half4) 타입의 그리드 임포트를 지원합니다. 이 결과로 생성된 SVT 해상도는 모든 임포트된 그리드의 치수를 합한 값입니다.
언리얼 엔진은 모든 타입의 VDB 임포트를 지원하지만, 현재 SVT는 double 포맷을 지원하지 않습니다. double 포맷 데이터는 임포트 시 8/16/32비트로 변환됩니다.
각 그리드에는 자체 트랜스폼이 있을 수도 있습니다. VDB 포맷을 통해 원근/프러스텀 트랜지션을 비롯한 다양한 트랜스폼 타입이 허용됩니다. 언리얼 엔진은 현재 스케일 조절, 회전, 이동을 포함한 트랜스폼을 지원합니다. 이러한 트랜스폼은 프레임에 따라 다를 수 있으므로 임포트된 SVT는 애니메이션 타임라인에서 스케일 조절/회전/이동할 수 있습니다.
트랜스폼이 프레임에 따라 다를 수 있지만 주어진 단일 프레임 내에서 사용되는 모든 그리드의 모든 트랜스폼은 동일할 것으로 예상됩니다.
VDB 파일 임포트하기
다음 액션 중 하나를 수행하여 VDB 파일을 임포트할 수 있습니다.
- VDB를 콘텐츠 브라우저(Content Browser)에 직접 드래그 앤 드롭합니다.
- 콘텐츠 브라우저의 임포트(Import) 버튼을 사용합니다.
VDB에는 스태틱 및 애니메이팅된 VDB 파일을 임포트하는 자체 임포트 창이 있습니다.
동일한 이름이 포함된 애니메이팅된 VDB 파일(번호가 지정된 프레임을 제외)을 임포트할 때는 애니메이팅된 시퀀스의 파일 중 하나를 임포트할 수 있습니다. 그러면 임포터에서 그 파일이 VDB 시퀀스에 속한 파일로 인식합니다. 애니메이팅된 VDB 시퀀스에서 모든 파일을 선택하고 모두 동시에 임포트했다면, 각 파일이 자체 시퀀스를 생성하므로 동일한 애니메이팅된 SVT가 여러 개 생성됩니다.
![]() |
![]() |
---|---|
SVT 임포트 옵션: 스태틱 단일 프레임 VDB | SVT 임포트 옵션: 애니메이팅된 VDB 시퀀스 |
임포트 옵션에는 다음과 같은 정보와 세팅이 포함되어 있습니다.
프로퍼티 | 설명 |
---|---|
스태틱/애니메이팅 임포트(Import Static / Animated) | 임포트하는 VDB 타입이 스태틱 VDB인지 애니메이팅된 VDB인지 표시합니다. |
현재 에셋(Current Asset) | 임포트되는 VDB 파일 경로입니다. |
시퀀스 임포트(Import Sequence) | 순차적으로 라벨이 지정된 여러 개의 VDB 파일을 하나의 애니메이팅된 스파스 볼륨 텍스처 시퀀스로 임포트합니다. 애니메이팅된 SVT는 순차적으로 번호가 지정된 시퀀스 VDB 파일(file0.vdb, file1.vdb, file2.vdb 등)의 일부인 소스 파일을 임포트할 때 생성됩니다. 임포터는 자동으로 파일이 시퀀스의 일부인지 탐지하고 시퀀스 임포트 체크 박스를 설정합니다. |
어트리뷰트 A(Attributes A) | 사용자가 소스 그리드의 개별 채널을 결과 SVT의 (RGBA) 채널에 할당할 수 있습니다. 각 어트리뷰트는 페이지 테이블 텍스처에서 읽은 타일 데이터 텍스처를 나타냅니다. 이 프로퍼티 옆에 있는 포맷 드롭다운을 사용하여 16비트 float, 32비트 float, 8비트 unorm 같이 각 타일 데이터 텍스처가 사용할 포맷 종류를 선택합니다. 8비트 unorm은 0에서 1 범위의 데이터 또는 어트리뷰트에 사용됩니다. |
어트리뷰트 B(Attributes B) | 소스 파일에 있는 그리드를 표시하고 사용자가 소스 그리드의 개별 채널을 결과 SVT의 (RGBA) 채널에 할당할 수 있습니다. 각 어트리뷰트는 페이지 테이블 텍스처에서 읽은 타일 데이터 텍스처를 나타냅니다. 이 프로퍼티 옆에 있는 포맷 드롭다운을 사용하여 16비트 float, 32비트 float, 8비트 unorm 같이 각 타일 데이터 텍스처가 사용할 포맷 종류를 선택합니다. 8비트 unorm은 0에서 1 범위의 데이터 또는 어트리뷰트에 사용됩니다. |
소스 파일 그리드 정보(Source File Grid Info) | 명명된 인덱스, 타입, 치수 등 임포트할 VDB 파일의 그리드 정보를 표시합니다. |
SVT를 임포트하고 생성하는 데 걸리는 시간은 소스 VDB 파일의 치수와 프레임 수에 따라 다릅니다.
스파스 볼륨 텍스처 에셋은 임포트 프로세스 중에 생성됩니다. 파일을 열면 볼륨 해상도, 밉 레벨 수, 프레임 수와 같은 파일 정보가 표시됩니다.

샘플러 어드레싱/타일링 메서드를 변경하면 시간이 다소 걸릴 수 있는데, 이는 런타임 SVT 데이터를 다시 생성해야 하기 때문입니다.
머티리얼에서 스파스 볼륨 텍스처 사용하기
머티리얼은 Sparse Volume Texture Object 및 Sparse Volume Texture Sample 노드를 사용하여 스파스 볼륨 텍스처를 샘플링할 수 있습니다.

SVT를 불균질 볼륨, 볼류메트릭 포그, 볼류메트릭 클라우드와 함께 사용할 수 있습니다. 비슷하게 머티리얼 도메인(Material Domain)을 볼륨(Volume) 으로, 블렌드 모드(Blend Mode)를 애디티브(Additive) 로 설정하면 해당 항목의 머티리얼을 구성할 수 있습니다.
Sparse Volume Texture Sample 노드는 일부 UV 좌표(3차원이어야 함)를 받아 어트리뷰트 A와 어트리뷰트 B 출력 핀(둘 다 float4)에서 결과 데이터를 가져옵니다. SVT를 머티리얼 그래프의 파라미터로 사용하고 모든 타입의 머티리얼에 샘플링할 수 있습니다. 하지만 불균질 볼륨, 볼류메트릭 포그, 볼류메트릭 클라우드처럼 머티리얼 도메인이 볼륨으로 설정된 머티리얼에서 사용할 때 가장 유용합니다.
아래는 SVT를 샘플링하는 볼륨 머티리얼의 예시입니다. 여기서는 월드 스페이스 위치를 기반으로 3D UV 좌표를 계산하는데, 이 로직은 SVT에만 국한되지 않으며 선택 사항입니다. UV 입력 핀이 할당되지 않은 경우 UV는 아래 이미지와 같은 로직을 사용하여 자동으로 계산됩니다. SVT 샘플 노드에는 어트리뷰트 A와 어트리뷰트 B, 이렇게 두 개의 Float4 출력이 있지만 이 예시에서는 첫 번째 채널만 사용하고 있습니다. 사용 중인 SVT의 밀도가 첫 번째 채널에 포함되어 있기 때문입니다.
머티리얼에서 스파스 볼륨 텍스처를 샘플링하기 위한 가장 간단한 구성 예시입니다.
스파스 볼륨 텍스처 UV 좌표
스파스 볼륨 텍스처는 3차원 UV 좌표와 함께 샘플링됩니다. 표준 2D 텍스처와 마찬가지로 UV 스페이스는 모든 3차원(XYZ)에서 0~1까지 확장됩니다. UV 스페이스는 SVT 에셋을 열 때 살펴볼 수 있는 볼륨 해상도(Volume Resolution) 프로퍼티를 따라 이어집니다.
UV 스페이스는 개별 프레임의 바운딩 박스를 합산한 것으로 정의됩니다. 따라서 머티리얼 로직을 구성할 때 바운딩 박스의 크기를 고려할 필요는 없습니다. 다른 프레임에 사용된 것과 같은 UV 좌표가 동일한 월드 스페이스 복셀에 인덱싱되기 때문입니다.
또한 Texture Property 노드를 사용하여 2D 텍스처에서 하는 것과 마찬가지로 텍스처 크기와 텍셀 크기를 쿼리할 수 있습니다. 블루프린트에서 SVT의 볼륨을 쿼리할 수도 있습니다.
엔진 소스 스파스 볼륨 머티리얼 예시
언리얼 엔진에는 SVT 에셋을 적용할 수 있는 빈 샘플 SVT 머티리얼이 이미 구성되어 있습니다. 콘텐츠 브라우저의 Engine > Engine Materials 에 SparseVolumeMaterial 로 명명된 머티리얼이 바로 샘플 SVT 머티리얼입니다. 이 머티리얼을 복사하여 인스턴스를 생성합니다.
머티리얼 인스턴스를 연 다음 SparseVolumeTexture 파라미터를 오버라이드하고 임포트한 자체 SVT 에셋을 할당 슬롯에 적용합니다.
불균질 볼륨과 함께 SVT 보기
불균질 볼륨과 함께 SVT를 사용하려면 다음 단계를 따릅니다.
- 씬에 불균질 볼륨 액터를 추가합니다.
- 디테일(Details) 패널에서 머티리얼(Materials) 섹션으로 이동합니다.
- SVT 기반 머티리얼을 엘리먼트 0(Element 0) 슬롯에 할당합니다.
불균질 볼륨과 그 프로퍼티에 대한 자세한 내용은 불균질 볼륨을 참조하세요.
볼류메트릭 포그와 함께 SVT 보기
볼류메트릭 포그와 함께 SVT를 사용하려면 다음 단계를 따릅니다.
- 익스포넨셜 하이트 포그(Exponential Height Fog) 를 씬에 추가합니다.
- 디테일 패널에서 볼류메트릭 포그(Volumetric Fog) 를 선택합니다.
-
SVT 머티리얼을 메시에 적용합니다.
메시가 필요한 경우 액터 배치 패널의 셰이프(Shape) 카테고리에서 큐브(Cube) 를 선택합니다.
SVT는 볼류메트릭 포그의 해상도보다 더 많은 디테일을 보유할 수 있으므로 더 좋은 결과를 얻으려면 메시를 스케일 조절해야 할 수도 있습니다. 또한 다음과 같은 콘솔 변수를 사용하여 볼류메트릭 포그의 해상도를 높이는 것이 좋습니다.
r.VolumetricFog.GridPixelSize 4
(디폴트는 8)r.VolumetricFog.GridSizeZ 256
(디폴트는 128)
애니메이팅된 스파스 볼륨 텍스처 재생하기
애니메이팅된 SVT를 재생하려면 블루프린트와 함께 머티리얼 인스턴스 다이내믹(Material Instance Dynamics, MID)을 사용해야 합니다. SVT 애니메이션은 그 머티리얼에서 Sparse Volume Texture Parameter 노드를 사용하여 구동됩니다. 이렇게 하면 틱마다 SVT 파라미터를 바꿀 수 있는데, 이는 애니메이팅된 SVT의 각 프레임은 그 자체로 스태틱 SVT이기 때문입니다.
SVT를 애니메이팅하기 위한 로직을 구성할 때 고려할 부분이 두 가지 있습니다.
- 이벤트 BeginPlay는 애니메이팅된 스파스 볼륨 텍스처 컨트롤러를 구성하며, 이 클래스에는 애니메이팅된 SVT를 재생하는 기능이 있습니다. 이를 용이하게 하기 위해 이 컨트롤러는 할당된 SVT에서 프레임을 추출할 수 있습니다. 추출된 프레임도 SVT 셰이더 인터페이스를 구현하며, 그 프레임 또한 SVT 머티리얼 파라미터에 바인딩될 수 있습니다. SVT 파라미터를 업데이트하려면 MID가 필요합니다.
- Event Tick은 컨트롤러 변수에 대한 업데이트를 호출하여 현재 프레임을 가져와 머티리얼 인스턴스 다이내믹(Material Instance Dynamic)의 Sparse Volume Texture Parameter 노드에 적용합니다.
다음 예시에서는 메시에 적용되었으며 볼류메트릭 포그로 렌더링된 SVT 머티리얼을 구성하는 방법을 보여줍니다. 이는 하나의 워크플로 예시에 불과합니다. 볼류메트릭 클라우드를 사용하거나 애니메이팅된 SVT를 사용해야 하는 다른 사용 사례를 활용하려면 머티리얼 렌더링에 사용되는 액터 또는 컴포넌트에 MID를 할당해야 합니다. 예를 들어, 클라우드 머티리얼을 사용하면 볼류메트릭 클라우드 컴포넌트의 클라우드 머티리얼을 업데이트해야 합니다.
불균질 볼륨은 예외입니다. 해당 볼륨의 컴포넌트가 이미 이 모든 로직을 구현하므로 SVT 파라미터로 머티리얼을 생성하여 애니메이팅된 SVT를 할당하기만 하면 되기 때문입니다. 불균질 볼륨 컴포넌트는 SVT 파라미터를 업데이트하기 위해 백그라운드에서 자동으로 MID를 생성합니다.
볼류메트릭 포그와 함께 사용하기 위한 머티리얼 인스턴스 다이내믹 생성 블루프린트 로직을 구성하려면 다음 단계를 따릅니다.
- SVT 머티리얼의 그래프에서 Sparse Volume Texture Sample Parameter 노드를 사용합니다.
- 액터 블루프린트(Actor Blueprint) 를 생성합니다.
- 컴포넌트(Components) 패널에서 추가(+) 버튼을 클릭하고 목록에서 큐브 메시를 선택합니다.
- 이벤트 그래프(Event Graph) 에서 Event BeginPlay 노드를 드래그하여 Construct Object from Class 노드를 추가합니다.
- Construct Object from Class 에서 클래스를 Animated Sparse Volume Texture Controller 로 설정합니다.
- Construct Object from Class 노드에서 Return Value 를 우클릭하고 변수로 승격(Promote to Variable) 을 선택합니다.
- 내 블루프린트(My Blueprint) 패널의 컴포넌트(Components) 에서 NewVar 의 이름을 'Controller'로 변경합니다.
- Set Controller 노드를 드래그하여 Set Sparse Volume Texture 노드를 추가합니다.
- Set Controller 노드의 출력 핀을 Set Sparse Volume Texture 노드의 Target 입력에 연결합니다.
- Set Sparse Volume Texture 노드에서 Sparse Volume Texture 핀을 우클릭하고 변수로 승격 을 선택합니다.
-
내 블루프린트 패널의 컴포넌트 에서 Sparse Volume Texture 변수를 클릭합니다. 디테일 패널의 디폴트 값(Default Value) 에서 Sparse Volume Texture 를 설정합니다.
Sparse Volume Texture 슬롯을 빈 채로 두면 SVT 머티리얼이 업데이트되지 않고 SVT의 애니메이션이 재생되지 않습니다.
-
Set Sparse Volume Texture 노드를 드래그하여 Play 노드를 추가합니다.
Play 노드는 컨트롤러에서 Update()를 호출할 때마다 컨트롤러가 내부 타이머를 업데이트하도록 합니다. 이 타이머는 현재 프레임 추출 시 '현재'로 간주할 프레임을 정의합니다. 또한, SVT의 재생을 제어할 수 있는 Pause 및 Stop 노드도 있습니다.
- Set Controller 노드에서 컨트롤러 출력 핀을 드래그하여 Play 노드의 Target 핀에 연결합니다.
- Play 노드를 드래그하여 Create Dynamic Material Instance 노드를 추가합니다.
- Create Dynamic Material Instance 노드에서 부모(Parent) 드롭다운을 SVT Material 로 설정합니다.
- Create Dynamic Material Instance 노드에서 Return Value 핀을 우클릭하고 변수로 승격 을 선택합니다.
- 내 블루프린트 패널의 컴포넌트 에서 NewVar 의 이름을 'MID'로 변경합니다.
- Set MID 노드의 Return Value 핀을 드래그하여 Set Material (Cube) 노드를 추가합니다.
블루프린트 로직의 이 부분은 다음과 같습니다.
이미지를 클릭하면 최대 크기로 볼 수 있습니다.
SVT의 각 프레임을 재생하도록 블루프린트 로직을 설정하려면 다음 단계를 따릅니다.
- 내 블루프린트 패널의 컴포넌트 에서 Controller 변수를 그래프에 드래그하고 Get Controller 를 선택합니다.
- Controller 노드를 드래그하여 Update 노드를 추가합니다.
- Event Tick 실행 핀을 Update 에 연결합니다.
- Event Tick Delta Seconds 핀을 Update 노드의 Delta Time 핀에 연결합니다.
- Update 노드를 드래그하여 Get Current Frame 노드를 추가합니다.
- Controller 노드를 드래그하여 Get Current Frame 노드의 Target 핀에 연결합니다.
- 내 블루프린트 패널의 컴포넌트 에서 MID 변수를 그래프에 드래그하고 Get MID 를 선택합니다.
- Get MID 노드를 드래그하여 Set Sparse Volume Texture Parameter Value 노드를 추가합니다.
- Get Current Frame 노드의 Return Value 핀을 드래그하여 Set Sparse Volume Texture Parameter Value 노드의 Value 핀에 연결합니다.
- Set Sparse Volume Texture Parameter Value 노드에서 Parameter Name 을 SVT 머티리얼의 Sparse Volume Texture Parameter 이름으로 설정합니다.
블루프린트 로직의 이 부분은 다음과 같습니다.
이미지를 클릭하면 최대 크기로 볼 수 있습니다.
시뮬레이션(Simulate) 또는 에디터에서 플레이(Play-in-Editor, PIE) 시 SVT 애니메이션이 반복 재생됩니다.

볼류메트릭 포그와 함께 사용된 애니메이션 SVT입니다.
좋은 결과를 얻기 위해 몇 가지를 조정해야 할 수도 있습니다.
- 블루프린트에서 볼류메트릭 포그를 사용할 때 더 나은 볼륨 해상도를 얻기 위해 메시 크기를 조정합니다. 위의 예시에서는 큐브 메시를 원본 크기의 20배로 확대했습니다.
- SVT 머티리얼에서 소멸 입력에 연결하기 전 마지막 곱하기에 더 큰 곱하기 값을 사용합니다. 위의 예시에서는 원래 값이 2.5 대신 7.5를 사용했습니다.
위의 예시 외에도 다음과 같은 작업도 수행할 수 있습니다.
- 컨트롤러에서 사용할 수 있는 다른 함수를 사용하여 프레임 인덱스나 현재 시간을 직접 설정합니다.
- 재생 속도는 컨트롤러의 프레임 레이트 프로퍼티를 조정하여 설정할 수 있습니다. 디폴트는 24fps입니다.
- 현재 프레임만 가져오는 대신 Get Current Frames For Interpolation 함수를 사용하여 가장 가까운 두 프레임 및 그 사이에 보간할 0과 1 사이의 값을 반환할 수 있습니다. 이 메서드를 사용하여 두 개의 SVT 파라미터와 선형보간 알파에 대한 스칼라 파라미터를 생성한 다음, 머티리얼 그래프(Material Graph)에서 Interpolation 노드를 사용할 수 있습니다.
시퀀서에서 애니메이팅된 스파스 볼륨 텍스처 사용하기
이전 섹션에서 생성한 애니메이팅된 SVT 블루프린트를 사용하여 시퀀서에서 재생을 제어하도록 확장할 수 있습니다. 시네마틱에 노출(Expose to Cinematics)로 설정된 새 변수를 생성하고 시퀀서에서 Event Tick 로직의 일부를 대체해야 합니다. 이 워크플로는 시퀀서로 스켈레탈 메시 애님 블루프린트 제어와 비슷합니다.
애니메이팅된 SVT 블루프린트 재생을 시퀀서에서 제어하도록 확장하는 방법은 다음과 같습니다.
- 애니메이팅된 SVT 블루프린트를 엽니다.
- 내 블루프린트 패널의 컴포넌트에서 Controller 변수를 그래프에 드래그 앤 드롭하고 목록에서 Get Controller를 선택합니다.
- Get Controller 노드를 드래그하여 Get Duration 노드를 추가합니다.
- Event Tick 노드의 실행 핀을 Get Duration 노드에 연결합니다.
- Get Duration 노드를 드래그하여 Set Time 노드(애니메이팅된 스파스 볼륨 텍스처 컨트롤러 카테고리 아래에 있음)를 추가합니다.
- Get Controller 노드를 Set Time 노드의 Target 핀에 연결합니다.
- Get Duration 노드의 Return Value를 드래그하여 Multiply 노드를 추가합니다.
- Multiply 노드의 출력 핀을 드래그하여 Set Time 노드의 Time 입력 핀에 연결합니다.
- 그래프를 우클릭하고 Fraction 노드를 추가합니다.
- Fraction 노드의 A 입력 핀을 우클릭하고 변수로 승격을 선택합니다. 변수를 'Animation Alpha'로 명명합니다.
- Set Time 노드를 드래그하여 Get Current Frame 노드를 추가합니다.
- Controller 노드를 드래그하여 Get Current Frame 노드의 Target 핀에 연결합니다.
- 내 블루프린트 패널의 컴포넌트에서 MID 변수를 그래프에 드래그하고 Get MID를 선택합니다.
- Get MID 노드를 드래그하여 Set Sparse Volume Texture Parameter Value 노드를 추가합니다.
- Get Current Frame 노드의 Return Value 핀을 드래그하여 Set Sparse Volume Texture Parameter Value 노드의 Value 핀에 연결합니다.
- Set Sparse Volume Texture Parameter Value 노드에서 Parameter Name을 SVT 머티리얼에서 사용한 Sparse Volume Texture Sample Parameter 이름으로 설정합니다.
- 내 블루프린트 패널의 컴포넌트에서 AnimationAlpha 변수를 선택합니다. 디테일 패널에서 시네마틱에 노출 체크 박스를 선택합니다.
- 컴파일하고 저장합니다.
애니메이팅된 SVT 블루프린트 로직의 Event Tick 경로는 다음과 같을 것입니다.
이미지를 클릭하면 최대 크기로 볼 수 있습니다.
이 로직을 구성한 상태에서 애니메이팅된 SVT 블루프린트 에 대한 트랙 을 시퀀서에 추가할 때, 트랙 옆에 있는 추가(+) 아이콘을 클릭하면 목록에 AnimationAlpha 변수가 표시됩니다.

변수를 추가하면 시퀀서 패널에서 변수를 키 설정할 수 있습니다.

스트리밍 퍼포먼스 참고 사항
- 애니메이팅된 SVT의 리얼타임 재생
- 애니메이팅된 SVT의 리얼타임 재생은 SVT의 해상도와 볼륨 데이터의 스파스 정도에 따라 크게 달라집니다. 데이터를 스트리밍하는 데 시간이 너무 오래 걸리면 렌더링이 더 거친 밉 레벨로 되돌아가 충실도가 눈에 띄게 떨어집니다. 다음과 같은 몇 가지 방법을 사용하여 이러한 문제를 해결할 수 있습니다.
- VDB를 임포트할 때 더 작은 픽셀 포맷을 사용합니다. 그러면 스트리밍 퍼포먼스가 향상됩니다. (리얼타임 사용 사례에서 32비트는 일반적으로 과합니다.)
- 애니메이션 프레임 레이트를 낮춥니다.
- 더 낮은 해상도의 밉 레벨을 사용합니다.
- 이 방법을 사용하는 경우, 애니메이팅된 SVT 컨트롤러 또는 불균질 볼륨 컴포넌트 세팅에서 밉 레벨을 설정해야 합니다. Sparse Volume Texture Sample 노드에서 MipLevel 입력 핀을 설정하면 주어진 밉 레벨에서 샘플링을 시도하지만(스트리밍된 경우), 스트리밍 자체는 그 설정으로 구동되지 않습니다. 스트리밍 퍼포먼스 조정에 유용한 콘솔 변수
r.SparseVolumeTexture.Streaming.NumPrefetchFrames
는 스트리밍 시스템에서 특정 프레임을 요청할 때 프리페칭할 프레임 수입니다. 디폴트는 3으로 대부분의 사례에서 효과적이지만, SVT 자체에 따라 값이 달라질 수 있습니다. 이 값을 너무 높게 설정하면 요청 때문에 스트리밍 시스템에 병목 현상이 발생할 수 있습니다. 값을 너무 낮게 설정하면 렌더링에 필요한 시간까지 프레임이 완전히 스트리밍되지 않을 수 있습니다.r.SparseVolumeTexture.Streaming.PrefetchMipLevelBias
는 프리페칭한 프레임의 밉 레벨에 바이어스를 적용합니다. 프리페칭은 점점 더 높은 밉 레벨(낮은 해상도)에서 수행됩니다. 이 바이어스를 사용하여 프레임이 프리페칭되는 밉 레벨을 변경할 수 있습니다. 음수 값으로 설정하면 높은 해상도의 밉 레벨에서 프레임이 프리페칭되며, 양수 값으로 설정하면 낮은 해상도의 밉 레벨에서 프레임이 프리페칭됩니다.r.SparseVolumeTexture.Streaming.PrintMemoryStats
는 스트리밍 시스템에 등록된 모든 SVT에 대한 메모리 정보를 인쇄합니다. 스트리밍 퍼포먼스는 보통 30~50MB보다 큰 SVT 프레임에서 저하되기 시작합니다. 이러한 현상은 디폴트 프레임 레이트인 24fps로 재생하려 할 때 발생합니다. 퍼포먼스는 대부분 사용 중인 플랫폼과 PC에 따라 달라집니다. 스트리밍 퍼포먼스는 현재 스트리밍 중인 SVT 수에 따라서도 달라집니다.
- 재생 차단
- 오프라인 제작 같은 특정 사용 사례의 경우, 위에서 설명한 방식으로 타협하고 싶지 않을 수 있습니다. 현재 프레임을 렌더링할 때 모든 밉이 스트리밍되도록 하기 위해 스트리머는 요청 차단을 지원합니다. 요청 차단을 통해 주어진 프레임에서 로드하기 위한 IO 요청이 발행되는 즉시 대기 상태가 되어 완료를 기다립니다. 요청 차단은 프레임 레이트에 영향을 줄 수 있으며 현재 게임 시간을 사용하여 애니메이션 재생을 구동할 때 프레임 '건너뛰기'를 발생시킵니다. 하지만 시퀀서를 사용하여 프레임을 렌더링하면 건너뛰기 문제가 사라집니다. 시퀀서는 이전 프레임 렌더링과 현재 프레임 렌더링 사이에 실시간으로 5분이 지나더라도 렌더링할 SVT 프레임을 지정하기 때문입니다. 이는 주로 SVT 에셋 디버깅에 사용되는 방식이므로 SVT 뷰어에는 적용되지 않습니다.
제한 사항
- 페이지 테이블 텍스처의 최대 크기는 2GB로 제한되며 최대 가상 SVT의 X 및 Y축 해상도는 32k 유닛을 초과하면 안 됩니다. Z축은 16k로 제한됩니다.
- 예를 들어, 32kx100x100 유닛 볼륨, 100x32kx100 유닛 볼륨 또는 100x100x16k 유닛 볼륨을 만들 수 있습니다. 이 예시에서 100은 페이지 테이블 크기를 제한 크기인 2GB 미만으로 유지할 만큼 낮은 값입니다.
- 애니메이팅된 SVT의 리얼타임 재생은 SVT의 해상도와 볼륨 데이터의 스파스 정도에 따라 크게 달라집니다. 데이터를 스트리밍하는 데 시간이 너무 오래 걸리면 렌더링이 더 거친 밉 레벨로 되돌아가 충실도가 눈에 띄게 떨어집니다. 애니메이션 프레임 레이트를 낮추거나 낮은 해상도의 밉 레벨을 사용하여 이 문제를 해결할 수 있습니다. VDB 파일을 임포트할 때 작은 픽셀 포맷을 선택하여 스트리밍 퍼포먼스를 향상할 수도 있습니다.
- 지원되는 플랫폼:
- 현재 셰이더 모델 5(Shader Model 5, SM5) 및 셰이더 모델 6(Shader Model 6, SM6)을 사용하는 DX11, DX12가 있는 Windows에서 지원됩니다.
- VDB 임포트는 현재 Windows 에디터 빌드에서만 작동합니다. 쿠킹된 빌드는 스트리밍 및 렌더링이 가능한 모든 플랫폼에서 SVT를 지원합니다.
- SVT는 모바일 렌더러(Mobile Renderer)에서는 작동하지 않습니다.
추가 리소스
- 이 페이지의 예시에서 사용된 VDB 파일은 EmberGen으로 제작한 JangaFX의 무료 VDB 세트에서 가져온 것입니다.
- 여기에서 무료 샘플을 다운로드할 수 있습니다.