런타임 버추얼 텍스처링

런타임 버추얼 텍스처링 메서드의 개요입니다.

Choose your operating system:

Windows

macOS

Linux

런타임 버추얼 텍스처 (RVT)는 GPU를 사용해 런타임에서 온디맨드 방식으로 텍셀 데이터를 생성하며, 기존의 텍스처 매핑과 비슷한 방식으로 작동합니다. RVT는 넓은 영역에 걸쳐 셰이딩 데이터를 캐싱하기 때문에 지형에 잘 맞도록 만들어진 데칼형 머티리얼과 스플라인을 사용하는 랜드스케이프 셰이딩에 적합합니다.

워크플로

다음은 프로젝트에서 런타임 버추얼 텍스처링을 구성하고 사용하는 대략적인 방법입니다.

  1. 콘텐츠 브라우저에서 런타임 버추얼 텍스처 에셋을 생성합니다. 런타임 버추얼 텍스처 에셋은 모든 컴포넌트(액터, RVT 볼륨, RVT 머티리얼)를 하나로 묶어 런타임 버추얼 텍스처를 렌더링하는 데 사용됩니다.

  2. 모드(Modes) 패널에서 런타임 버추얼 텍스처 볼륨(Runtime Virtual Texture Volume) 을 씬에 추가합니다. RVT 볼륨은 씬에 RVT 에셋을 배치하는 데 사용됩니다.

  3. RVT 에셋에 쓰기 를 수행할 수 있도록 머티리얼을 환경설정합니다.

  4. RVT 에셋에서 샘플링 을 수행할 수 있도록 머티리얼을 환경설정합니다.

  5. RVT 에셋으로 렌더링할 하나 이상의 프리미티브나 랜드스케이프 액터를 구성합니다.

RVT를 구성하는 단계별 가이드는 런타임 버추얼 텍스처링 퀵스타트를 참조하시기 바랍니다. 이 가이드에서는 런타임 버추얼 텍스처링과 함께 작업에 사용할 랜드스케이프 머티리얼과 추가 씬 액터를 구성합니다.

런타임 버추얼 텍스처링 컴포넌트

아래 컴포넌트는 언리얼 엔진 프로젝트에서 런타임 버추얼 텍스처를 구성하고 작업하는 데 사용됩니다.

런타임 버추얼 텍스처 에셋

런타임 버추얼 텍스처 에셋에는 씬에 RVT를 생성할 때 사용하는 환경설정 디테일이 포함되어 있습니다. RVT로 렌더링되는 씬의 액터와 머티리얼을 연결해 주는 RVT 시스템의 구심점이라고 생각하면 됩니다.

RVT 에셋을 참조하는 컴포넌트는 아래와 같습니다.

  1. 씬에 배치된 런타임 버추얼 텍스처 볼륨 마다 RVT 에셋이 하나씩 할당됩니다.

  2. 각 씬의 액터 에는 여러 RVT 에셋이 할당될 수 있습니다. 할당된 RVT 에셋을 사용하는 볼륨 바운드 안에 있는 경우 액터는 런타임 버추얼 텍스처로 렌더링됩니다.

  3. RVT 볼륨을 통해 액터를 RVT로 렌더링하려면 먼저 액터의 머티리얼버추얼 텍스처 머티리얼 도메인을 사용하거나 올바르게 구성된 RVT 머티리얼 표현식을 사용해야 합니다.

콘텐츠 브라우저에서 새 RVT 에셋을 생성하려면 마우스 오른쪽 버튼을 클릭하면 표시되는 컨텍스트 메뉴를 사용하거나 신규 추가(Add New) 버튼을 누릅니다. 머티리얼 및 텍스처(Materials & Textures) 카테고리에서 런타임 버추얼 텍스처(Runtime Virtual Texture) 를 선택합니다.

이미지를 클릭하면 최대 크기로 볼 수 있습니다.

에셋을 더블클릭해서 열고 에디터 창에서 세팅을 설정합니다.

RVT_Asset_Window.png

이 창에서 런타임 버추얼 텍스처가 지원하는 머티리얼 어트리뷰트의 크기, 타일 크기, 타입을 정의할 수 있습니다.

세팅에 대한 상세 정보와 사용 방법은 버추얼 텍스처 세팅 페이지를 참조하시기 바랍니다.

에셋 액션

우클릭 시 나타나는 컨텍스트 메뉴에는 머티리얼의 RVT 에셋을 관리하는 데 도움이 되는 몇 가지 액션이 있습니다.

RVTContextMenuActions.png

  • 에셋을 사용하는 머티리얼 찾기(Find Materials Using This) 는 콘텐츠 브라우저에서 이 RVT 에셋을 참조하는 모든 머티리얼을 찾아서 표시해 줍니다.

  • 머티리얼 사용 고치기(Fix Material Usage)는 RVT 에셋 머티리얼 타입을 변경했을 때 모든 머티리얼을 자동으로 고쳐 줍니다. 이 기능은 이 RVT 에셋을 참조하는 Runtime Virtual Texture Sample 노드를 포함한 모든 머티리얼과 머티리얼 함수를 찾습니다. 노드의 버추얼 텍스처 머티리얼 타입(Virtual Texture Material Type) 이 RVT 에셋의 머티리얼 타입과 일치하지 않으면 노드의 머티리얼 타입이 RVT 에셋의 타입에 맞게 수정됩니다.

런타임 버추얼 텍스처 머티리얼 타입

RVT 머티리얼을 구성할 때는 4가지 옵션을 선택할 수 있습니다.

머티리얼 타입

설명

압축 포맷

Base Color

베이스 컬러 - 베이스 컬러만 저장합니다.

BC1

Base Color, Normal, Roughness, Specular

베이스 컬러, 노멀, 러프니스, 스페큘러 - 베이스 컬러, 노멀, 러프니스, 스페큘러를 저장합니다. 압축이 활성화되어 있으면 2개의 BC3 텍스처가 데이터를 저장합니다. 텍스처에는 베이스 컬러와 노멀 X가 보관됩니다. 다른 텍스처에는 러프니스, 스페큘러, 노멀 Z 방향, 노멀 Y가 보관됩니다.

BC3 + BC3

YCoCg Base Color, Normal, Specular

YCoCg 베이스 컬러, 노멀, 스페큘러 - 베이스 컬러, 노멀, 러프니스, 스페큘러를 저장합니다. 압축이 활성화되어 있으면 3개의 텍스처가 사용됩니다. BC3 텍스처는 YCoCg 포맷으로 인코딩된 베이스 컬러를 보관하고, BC5 텍스처는 노멀 X와 노멀 Y를 보관하고, BC1 텍스처는 러프니스, 스페큘러, 노멀 Z 방향을 보관합니다.

BC3 + BC5 + BC1

YCoCg Base Color, Normal, Specular, Mask

YCoCg 베이스 컬러, 노멀, 스페큘러, 마스크 - YCoCg Base Color, Normal, Specular와 동일하며 일반적인 용도의 8비트 마스크 채널이 추가됩니다. 압축이 활성화되어 있으면 BC3 포맷의 알파 채널로 마스크가 패킹됩니다.

BC3 + BC5 + BC3

World Height

월드 높이 - 높이 값을 저장합니다. 이 값은 RVT 볼륨의 Z 좌표가 가지는 최솟값과 최댓값 범위로 정규화되어 저장됩니다.

R16_UNORM

언리얼 엔진 4.23에서 사용할 수 있었던 베이스 컬러, 노멀(Base Color, Normal) 머티리얼 타입은 삭제되었습니다. 이 타입을 사용하는 에셋은 4.24에서 베이스 컬러, 노멀, 러프니스, 스페큘러(Base Color, Normal, Roughness, Specular) 머티리얼 타입으로 자동 변환됩니다.

런타임 버추얼 텍스처 베이스 컬러 저장

YCoCg 베이스 컬러, 노멀, 러프니스, 스페큘러(YCoCg Base Color, Normal, Roughness, Specular) 머티리얼 타입을 사용하면 RVT에서 다른 베이스 컬러 인코딩이 가능해집니다.

디폴트로 베이스 컬러는 RGB로 저장되고 BC1로 압축됩니다. 이 인코딩 타입은 컬러변화와 저장된 데이터에 밴딩 현상이 발생할 수 있습니다. 이 현상은 부드러운 그레이디언트를 가진 베이스 컬러 데이터에서 가장 두드러집니다. YCoCg 머티리얼 타입은 이러한 문제를 줄이는 데 도움이 됩니다. 하지만 이 옵션을 사용하면 메모리를 25% 더 사용하게되며, 버추얼 텍스처 데이터를 샘플링하고 디코딩하는 과정에서 퍼포먼스가 더 필요합니다.

디폴트 베이스 컬러 인코딩

YCoCg 베이스 컬러 인코딩

런타임 버추얼 텍스처 노멀 저장

노멀은 BC5 텍스처, 또는 두 개의 BC3 텍스처로 구성되어 BC5와 동일한 정밀도를 제공하는 알파 채널에 X값, Y값과 함께 저장됩니다. Z 방향 노멀도 월드 스페이스 노멀을 저장하는 데 사용됩니다.

노멀을 머티리얼 그래프에서 RVT에 쓰는 방법은 두 가지입니다.

  • Runtime Virtual Texture Output 노드 사용하기

  • 표준 머티리얼 출력 노드 사용하기

Runtime Virtual Texture Output 노드에서 머티리얼을 쓰면 출력에 숨겨진 트랜스폼이 적용되지 않습니다. 입력과 무관하게 노드는 RVT에 작성됩니다(텍스처에 저장하기 위한 일부 인코딩도 진행됩니다).

표준 머티리얼 출력 노드에서 머티리얼을 쓰면 암시적 트랜스폼이 적용됩니다. 4.24에서는 이 동작이 기존 엔진 버전과 달라졌습니다. 원래 머티리얼 출력 노드에서 RVT를 쓸 때 디폴트 동작은 출력 노멀을 RVT 볼륨의 방향에 따라 정의되는 공유 탄젠트 스페이스로 바꾸는 것이었습니다. 4.24의 디폴트 동작은 노멀을 월드 스페이스로 변환하는 것입니다.

4.26에서는 표준 머티리얼 출력에서 RVT에 작성하는 기능이 삭제되었습니다. 이제 모든 출력은 Runtime Virtual Texture Output 노드에서 작성해야 합니다. 레거시 머티리얼은 Runtime Virtual Texture Output 노드를 사용하도록 자동 변환됩니다.

RVT에 노멀을 저장할 때 권장되는 방식은 월드 스페이스입니다. 이 공통 스페이스를 사용하면 여러 프리미티브를 RVT에 읽고 쓸 때 블렌딩 비헤이비어를 향상할 수 있습니다.

런타임 버추얼 텍스처 볼륨

런타임 버추얼 텍스처 볼륨 은 씬에 RVT 에셋을 배치하는 데 사용됩니다. 이 볼륨은 머티리얼을 구성할 때 렌더할 액터를 모두 포함해야 합니다. 일반적으로는 랜드스케이프나 표면 지형 같은 프리미티브여야 합니다.

Modes_RVTVolume.png

런타임 버추얼 텍스처에서 쓰기나 샘플링을 수행하는 모든 프리미티브는 볼륨의 바운드 안에 있어야 합니다. RVT 볼륨을 배치할 때에는 레벨 디테일(Details) 패널의 바운드의 트랜스폼(Transform from Bounds) 파라미터를 사용하면 선택한 액터의 위치와 스케일을 빠르게 조절할 수 있습니다. 보통 볼륨은 씬의 랜드스케이프와 비슷한 형태가 됩니다.

  1. 액터 배치(Place Actors) 패널에서 런타임 버추얼 텍스처 볼륨(Runtime Virtual Texture Volume) 을 씬으로 드래그합니다.

  2. 볼륨을 선택한 뒤 레벨의 디테일(Details) 패널에서 바운드의 트랜스폼(Transform from Bounds) 카테고리에 있는 소스 액터(Source Actor) 에셋 선택 툴(또는 스포이드 툴)을 사용해 씬의 액터를 선택합니다.

  3. 바운드 설정(Set Bounds) 버튼을 사용하면 볼륨의 위치, 스케일, 회전을 빠르게 조절할 수 있습니다.

  4. 이후에 다른 액터를 이 RVT에 쓰도록 설정하면 볼륨 바운드에 관련된 모든 액터 바운드가 포함되도록 바운드 설정(Set Bounds) 이 볼륨 스케일도 조절해줍니다.

RVT에 렌더링하는 오브젝트는 RVT 볼륨에 있는 -Z 방향의 직교 프로젝션을 사용합니다.

런타임 버추얼 텍스처 머티리얼 표현식

런타임 버추얼 텍스처 에셋이 할당된 씬 액터는 씬에 생성된 런타임 버추얼 텍스처로 구성될 수 있도록 다음 머티리얼 표현식을 사용해야 합니다.

런타임 버추얼 텍스처의 쓰기와 샘플링

씬의 RVT로 쓰기와 샘플링을 수행하려면 먼저 머티리얼을 위해 이 작업을 수행할 수 있도록 RVT 표현식을 구성해야 합니다.

  • Runtime Virtual Texture Output 표현식은 버추얼 텍스처에 쓰기와 샘플링을 모두 수행하는 하나의 머티리얼을 정의하는 데 사용됩니다. 기존 머티리얼 로직을 이 노드에 연결해야 합니다.

    Mat_RVTOutput.png

  • Runtime Virtual Texture Sample 표현식은 이 머티리얼을 위해 에셋을 샘플링하고 출력할 수 있도록 할당된 RVT 에셋을 가져옵니다.

    Mat_RVTSample.png

  • Runtime Virtual Texture Sample Parameter 표현식은 Runtime Virtual Texture Sample 노드와 같은 방식으로 작동하지만, 머티리얼 인스턴스가 오버라이드할 수 있도록 파라미터로 샘플링되는 RVT 에셋을 노출시킵니다.

    RVTSampleParam.png

    이 노드는 다른 파라미터와 마찬가지로 직접 생성할 수도 있고, Runtime Virtual Texture Sample 노드를 우클릭한 다음 컨텍스트 메뉴에서 파라미터로 변환(Convert to Parameter) 을 선택하여 만들 수도 있습니다.

    RVT 에셋을 오버라이드하는 데 머티리얼 인스턴스를 사용하는 경우, 할당된 RVT 에셋은 반드시 Runtime Virtual Texture Sample Param 표현식의 디테일 패널에 설정된 것과 머티리얼 유형이 일치해야 합니다.

아래 이미지는 바운딩된 RVT 에셋에 쓰기와 샘플링을 수행하는 랜드스케이프 머티리얼의 예시입니다. 여기서는 플랫폼에서 버추얼 텍스처링을 지원하지 않을 때 기존 랜드스케이프 렌더링을 사용할 수 있도록 해 주는 로직도 사용됩니다.

이미지를 클릭하면 최대 크기로 볼 수 있습니다.

그 밖의 머티리얼 표현식

RVT와 함께 사용할 수 있도록 머티리얼을 컴파일하는 상황은 크게 두 가지입니다.

  • RVT에 렌더링하는 경우

  • 다른 패스에 렌더링하는 경우

머티리얼 로직의 일부를 RVT에 렌더링하려는 경우 Runtime Virtual Texture Replace 표현식이 가장 적절입니다.

Mat_RVTReplace.png

View Property 표현식에도 RVT용 옵션이 몇 가지 있습니다.

  • Virtual Texture Output Level 노드는 렌더링되고 있는 RVT 밉 레벨을 출력합니다.

    Mat_ViewPropertyVTOutputLevel.png

  • Virtual Texture Output Derivative 노드는 현재 버추얼 텍스처 출력의 단일 텍셀이 커버하는 월드 스페이스의 X 및 Y 크기를 출력합니다.

    Mat_ViewPropertyVTOutputDerivative.png

  • Virtual Texture Max Level 노드는 렌더링되고 있는 밉 레벨의 수를 출력합니다.

    Mat_VirtualTextureMaxLevel.png

이 표현식을 활용하는 사례로는 RVT의 거리 기반 셰이딩 모방이 있습니다. RVT 셰이딩은 카메라로부터 독립적이기 때문에 이러한 셰이딩은 직접 표현할 수 없습니다. 하지만 셰이딩을 밉 레벨로부터 독립적인 상태로 만들면 비슷한 결과를 낼 수 있습니다. Runtime Virtual Texture Replace 노드를 사용하면 Runtime Virtual Texture Output 노드에 대해서만 밉 레벨로부터 독립적인 셰이딩 패스를 구현할 수 있습니다.

  • Virtual Texture Feature Switch 는 버추얼 텍스처링이 지원되지 않을 때 대안 패스에 예비 머티리얼 로직을 구성하는 경우 유용합니다.

씬 액터 출력 프로퍼티

씬에 배치된 모든 액터는 RVT로 렌더링이 가능합니다. 아래는 특히 유용한 액터 타입 후보입니다.

이상적인 액터 후보

이상적이지 않은 액터 후보

  • 랜드스케이프와 랜드스케이프 스플라인

  • 스태틱 메시와 인스턴스 스태틱 메시

  • 폴리지 인스턴스(데칼 스캐터링용)*

  • 스켈레탈 메시

  • 무버블 스태틱 메시

  • 애니메이션 메시

RVT 콘텐츠는 사실상 셰이딩 캐시이기 때문에 프레임마다 완전히 업데이트되지 않습니다. 즉, RVT로 렌더링되는 오브젝트의 모빌리티는 스태틱 이어야 합니다. 스키닝되거나 애니메이트된 프리미티브는 RVT 렌더링하기에 좋은 후보가 아닙니다.

액터의 디테일(Details) 패널에서 버추얼 텍스처로 렌더(Render to Virtual Textures) 배열을 사용하면 씬으로 렌더할 수 있는 RVT 에셋을 지정할 수 있습니다. 하나의 액터는 여러 RVT에 할당할 수 있습니다. RVT로 렌더링하는 작업은 RVT 에셋이 씬에 배치된 RVT 볼륨에 할당되어 있고 액터의 머티리얼이 올바르게 구성된 경우에만 가능합니다.

예시는 런타임 버추얼 텍스처 퀵스타트를 참조하시기 바랍니다. 버추얼 텍스처 세팅 레퍼런스도 함께 참조하면 좋습니다.

아래 섹션은 씬에서 RVT로 렌더링할 때 액터 비헤이비어를 컨트롤하는 방법을 설명합니다.

버추얼 텍스처 패스 타입

메인 패스에서 그리기(Draw in Main Pass) 옵션을 사용하면 RVT로 렌더링하도록 설정된 오브젝트의 메인 패스 렌더링을 컨트롤할 수 있습니다.

아래 옵션은 RVT로 렌더링되는 오브젝트의 컨트롤에 사용됩니다.

RVT_Actor_RVTAsset_PassType.png

선택

설명

Never

렌더 안 함 - 해당 액터를 메인 패스로 렌더링하지 않습니다. 씬에 RVT가 없으면 렌더되지 않습니다. 이 옵션은 버추얼 텍스처가 지원되지 않는 경우 필요하지 않은 항목(데칼형 머티리얼 등)에 사용해야 합니다. 예를 들어, RVT로 출력되는 머티리얼이 있는 스태틱 메시 평면을 사용하면 RVT 랜드스케이프 머티리얼에 데칼형 머티리얼을 작성해야 합니다. 플랫폼이나 피처 레벨에서 버추얼 텍스처링을 지원하지 않으면 스태틱 메시 평면은 메인 패스를 렌더링하지 않습니다.

From Virtual Texture

버추얼 텍스처 지원 및 세팅에 따라 액터를 RVT나 메인 패스로 렌더합니다. 아래 조건을 모두 만족하는 경우 액터가 메인 패스로 렌더링하지 않습니다.

  • 버추얼 텍스처링 지원이 활성화되어 있습니다.

  • 액터가 참조하는 RVT 에셋 중 하나가 RVT 볼륨과 함께 씬에 배치되어 있습니다.

  • 관련 RVT 볼륨 중 하나가 '프리미티브 숨기기(Hide Primitives)'로 설정되어 있습니다.

예를 들어, 도로 메시와 머티리얼을 렌더링하는 랜드스케이프 스플라인은 스플라인을 따라 머티리얼을 적용할 수 있도록 RVT에 쓰기를 수행해야 합니다. 하지만 씬에 유효한 RVT가 없거나 피처 레벨이 버추얼 텍스처링을 지원하지 않는다면 스플라인 도로 메시가 랜드스케이프에 그대로 보이게 될 것입니다.

Always

항상 - 버추얼 텍스처 지원 여부에 관계없이 액터를 RVT와 메인 패스로 렌더링합니다. 랜드스케이프처럼 RVT에서 쓰기와 샘플링을 모두 수행해야 하는 오브젝트에 적합합니다. 예를 들어, RVT에 데이터도 쓰고 최종 RVT도 렌더링하도록 구성된 랜드스케이프 머티리얼은 항상 표시되어야 합니다.

RVT로만 렌더링되는 프리미티브의 콜리전은 비활성화하는 것이 권장됩니다. 콜리전은 자동으로 비활성화되지 않습니다.

LOD와 밉 설정하기

버추얼 텍스처 고급 롤아웃 프로퍼티를 사용하면 레벨 오브 디테일(LOD)과 컬링 비헤이비어를 설정해 RVT에 대한 액터의 렌더링 방식을 컨트롤할 수 있습니다. 이러한 파라미터들은 액터의 레벨 디테일(Details) 패널에서 사용할 수 있습니다.

씬의 프리미티브의 경우 다음의 프로퍼티를 조정합니다.

RVT_Actor_LODSettings.png

프로퍼티

설명

Virtual Texture LOD Bias

버추얼 텍스처 LOD 바이어스 - RVT로 렌더링할 LOD를 설정합니다. 렌더링되는 프리미티브가 커버하는 버추얼 텍스처 페이지의 수를 바탕으로 자동 선택됩니다. 이 옵션을 사용하면 추가 바이어스를 적용할 수 있습니다. 값이 높으면 강제로 디테일이 낮은 LOD를 사용합니다.

Virtual Texture Skip Mips

버추얼 텍스처 생략 밉 - 해당 프리미티브의 렌더링에서 생략되는 RVT에서 가장 낮은 밉의 수입니다. 지정된 드로 거리를 넘어가면 프리미티브를 렌더링할 필요가 없다는 사실을 알려주므로 RVT로 렌더링하는 비용을 절감할 수 있습니다.

Virtual Texture Min Coverage

버추얼 텍스처 최소 커버리지 - 이 값을 설정하면 버추얼 텍스처 생략 밉 파라미터를 무시하고 대신 밉에 반영되는 예상 크기를 바탕으로 RVT 밉에서 프리미티브를 컬링(또는 제거)합니다. 값의 단위는 픽셀이지만 로그 스페이스를 바탕으로 합니다. 예를 들어, 값을 3으로 설정하면 반영되는 크기가 8픽셀 미만일 경우 프리미티브를 컬링(또는 제거)합니다.

씬의 랜드스케이프의 경우, 다음의 프로퍼티를 조정합니다.

RVT_Actor_Landscape_LODSettings.png

프로퍼티

설명

Virtual Texture Num LODs

버추얼 텍스처 수 LOD - 랜드스케이프 컴포넌트를 RVT로 렌더링하는 데 사용되는 LOD의 수입니다. 0으로 설정하면 각 랜드스케이프 컴포넌트가 단일 쿼드로 RVT에 렌더링됩니다. GPU에 최적인 값은 0입니다. 랜드스케이프 머티리얼에 주파수가 높은 버텍스 보간 데이터가 필요한 경우 이 값을 높여야 합니다.

Virtual Texture LOD Bias

버추얼 텍스처 LOD 바이어스 - RVT 렌더링을 위해 선택된 LOD에 적용되는 바이어스입니다.

오브젝트 정렬 우선순위

씬에서 여러 프리미티브를 RVT로 렌더링하면 오브젝트 레이어 정렬 문제가 발생할 수 있습니다. 이 경우 Z 버퍼링이 사용되지 않고 액터의 머티리얼이 알파 블렌딩을 가질 수 있기 때문에 정렬 순서를 정의해야 할 수 있습니다.

씬에 있는 선택된 액터의 레벨 디테일(Details) 패널을 사용하면 반투명 정렬 우선순위(Translucency Sort Priority) 를 설정할 수 있습니다.

RVT_Actor_TranslucenySortPriority.png

모든 액터의 디폴트 값은 0 입니다. 항상 낮은 값이 우선(또는 하위 레이어에서) 렌더링되고, 큰 값은 나중에(또는 상위 레이어에서) 렌더링됩니다.

반투명 정렬 우선순위 | 스플라인: 1 | 데칼: 0

반투명 정렬 우선순위 | 스플라인: 1 | 데칼: 2

값이 동일한 액터의 렌더링 순서는 정의되지 않은 상태입니다. 씬의 RVT에서 액터가 누락되면 먼저 반투명 정렬 우선순위 를 확인해 보세요.

스트리밍 버추얼 텍스처 빌드

RVT로 넓고 액터가 많은 월드를 다루는 경우, RVT의 저해상도 밉으로 렌더링하는 작업의 속도가 느릴 수 있습니다. 또한, 월드 액터가 영구 상주해야 월드의 먼 부분을 표현하는 저해상도 밉으로 렌더링할 수 있습니다. 이 경우 메모리 비용이 높아질 수 있다는 점을 염두에 두시기 바랍니다.

이때는 RVT의 저해상도 밉을 구워서 스트리밍하는 것이 더 효율적입니다. 해상도가 높은 밉은 런타임으로 렌더링할 수 있습니다. 이렇게 하면 하나의 버추얼 텍스처로 스트리밍 버추얼 텍스처링과 런타임 버추얼 텍스처링 방식을 모두 활용할 수 있습니다.

RVT로 SVT 활성화하기

  1. RVT에 스트리밍 버추얼 텍스처링 지원을 추가하려면 스트리밍할 로우 밉 수를 설정합니다.

  2. RVT 볼륨에서 스트리밍할 스트리밍 레벨 수를 설정합니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

    로우 밉 수가 클수록 카메라와 가까운 거리에서 사용될 스트리밍 버추얼 텍스처가 더 크게 생성됩니다.

  3. 이제 스트리밍 버추얼 텍스처 에셋을 생성할 차례입니다. RVT 볼륨 컴포넌트에서 스트리밍 레벨(Streaming Levels) 프로퍼티 아래에 있는 빌드(Build) 를 클릭합니다. 처음 사용하면 스트리밍 버추얼 텍스처가 있는 버추얼 텍스처 빌더(Virtual Texture Builder) 에셋이 생성됩니다.

    이미지를 클릭하면 최대 크기로 볼 수 있습니다.

  4. 수정을 마치면 스트리밍 버추얼 텍스처를 업데이트해야 합니다. 업데이트하는 방법은 두 가지입니다.

    • 에디터 툴바의 빌드(Build) 메뉴에서 버추얼 텍스처 빌드(Build Virtual Textures) 를 선택합니다. 이 옵션을 사용하면 열려 있는 레벨의 모든 버추얼 텍스처가 빌드됩니다.

      이미지를 클릭하면 최대 크기로 볼 수 있습니다.

    • RVT 볼륨 컴포넌트에서 에디터에서 스트리밍 로우 밉 사용(Use Streaming Low Mips in Editor) 프로퍼티 옆에 있는 빌드(Build) 를 클릭합니다. 이 옵션을 사용하면 선택된 RVT 볼륨에 할당된 스트리밍 버추얼 텍스처만 빌드됩니다.

디폴트로 에디터는 항상 런타임에서 생성된 RVT 데이터로 렌더링을 수행하며, 스트리밍 버추얼 텍스처링 데이터로는 렌더링을 하지 않습니다. 이렇게 하면 수정을 할 때마다 스트리밍 버추얼 텍스처를 업데이트하지 않아도 되기 때문입니다.

RVT 로우 밉에서 스트리밍 버추얼 텍스처로 렌더링을 진행하려면 RVT 볼륨의 디테일(Details) 패널에 있는 에디터에서 스트리밍 로우 밉 사용(Use Streaming Low Mips in Editor) 프로퍼티를 선택합니다.

일부 RVT 에셋 세팅이 변경되면 관련된 SVT 에셋이 일치하지 않아 비활성화됩니다. 이 경우 게임의 퍼포먼스에 문제가 발생할 수 있습니다. 이 때 RVT 볼륨 UI에서 빌드 버튼 옆에 경고 아이콘을 표시해 줍니다. 맵 체크 시에도 조건을 플래그합니다.

RVT_Actor_StreamingLevelsNote.png

최적화, 통계, 디버깅

다음 섹션은 프로젝트에서 런타임 버추얼 텍스처링을 최적화하고 디버깅하는 방법을 나타낸 것입니다.

통계

키보드의 백틱(`) 키로 콘솔 창을 열고 아래 명령어를 입력하면 통계 정보가 활성화됩니다.

stat virtualtexturing 을 사용하면 밀리초(ms) 단위로 표시되는 비용에 대한 버추얼 텍스처링 씬의 피드백과 페이지 테이블에 대한 카운터를 볼 수 있습니다.

Stat_VirtualTexturing.png

stat virtualtexturememory 를 사용하면 현재 씬의 버추얼 텍스처링 사용과 관련된 메모리 카운터를 볼 수 있습니다.

Stat_VirtualTextureMemory.png

스트리밍 버추얼 텍스처링 로우 밉 디버깅

스트리밍 버추얼 텍스처가 사용되는 거리를 시각화하려면 RVT 볼륨의 디테일(Details) 패널에서 빌드 디버그(Build Debug) 체크박스를 사용합니다. 이 옵션은 에디터에서 스트리밍 로우 밉 사용(Use Streaming Low Mips in Editor) 프로퍼티 옆에 있습니다.

Build_BuildDebugVTVolume.png

이 옵션을 설정하면 스트리밍 버추얼 텍스처가 색상별로 데이터를 리빌드합니다. 따라서 스트리밍 버추얼 텍스처 밉이 사용되는 곳을 쉽게 확인할 수 있습니다.

메모리 풀

버추얼 텍스처링을 위한 메모리 풀 크기는 BaseEngine.ini 환경설정 파일에 구성됩니다. 풀은 텍스처 포맷 그룹과 타일 크기에 따라 구성됩니다. 풀 크기는 프로젝트의 최대 메모리 버짓을 지정하여 환경설정합니다. 이 세팅은 [/Script/Engine.VirtualTexturePoolConfig] 에서 확인할 수 있습니다.

메모리 풀에 적용할 r.VT.PoolSizeScale 확장성 세팅을 지정할 수 있도록 확장성 그룹(ScalabilityGroup) 옵션이 추가되었습니다.

디버깅

다음 콘솔 변수를 사용하여 프로젝트에서 버추얼 텍스처링을 디버깅할 수 있습니다.

콘솔 변수

설명

r.VT.Flush

버추얼 텍스처링 시스템의 물리적 캐시를 비우는 데 사용합니다. 잘못된 캐시 인밸리데이션에 의해 문제가 발생한 것으로 의심되는 경우에 유용합니다.

r.VT.MaxUploadsPerFrame

프레임당 업로드할 페이지 수의 최댓값을 설정합니다(디폴트는 에디터에서 64, 게임에서 8). 퍼포먼스 스파이크를 막기 위해 프레임에 업데이트되는 런타임 버추얼 텍스처 타일의 수에 스로틀을 적용하는 경우에 유용합니다.

콘솔 변수와 확장성

아래의 콘솔 변수는 프로젝트별, 플랫폼별, 확장성 수준에서 조정할 수 있습니다.

콘솔 변수

설명

r.VT.MaxUploadsPerFrame

프레임당 최대 버추얼 텍스처 페이지 업로드 수입니다. 값을 낮추면 비주얼 업데이트 속도를 늦추는 대신 퍼포먼스를 향상시킬 수 있습니다.

r.VT.MaxUploadsPerFrameInEditor

에디터 모드에서 프레임당 최대 페이지 업로드 수입니다. 명령어 r.VT.MaxUploadsPerFrame 과는 별개로 작동합니다. 에디터에서는 작업 중에 선명한 시각화를 위해 런타임 퍼포먼스를 희생하는 것이 나을 때도 있기 때문입니다.

r.VT.MaxContinuousUpdatesPerFrame

프레임당 최대 연속 페이지 업로드 수입니다. 업로드마다 이미 매핑된 하나의 랜덤 페이지가 새로고침됩니다. RVT 에셋이 연속 업로드로 설정되어 있고, 다른 페이지 업데이트로 MaxUploadsPerFrame 버짓이 사용되지 않은 경우에만 발생합니다.

r.VT.MaxContinuousUpdatesPerFrameInEditor

에디터 모드에서 프레임당 최대 연속 페이지 업로드 수입니다.

r.VT.RVT.TileCountBias

RVT 에셋의 크기(타일)(Size in Tiles) 프로퍼티에 적용되는 바이어스입니다. 값을 -1로 설정하면 RVT 해상도가 절반이 됩니다. 값을 1로 설정하면 RVT 해상도가 두 배가 됩니다.

r.VT.RVT.TileCountBias.Group<x>

확장성 그룹 로 설정된 RVT 볼륨에만 타일 수 바이어스를 적용합니다. 그룹이 지정되지 않은 CVar의 베리에이션은 확장성 그룹 0으로 매핑됩니다.

r.VT.PoolSizeScale

버추얼 텍스처의 물리적 풀 크기에 적용할 스케일 인수입니다. 값이 1보다 작으면 텍스처 풀 크기가 줄어듭니다. 메모리 제약이 큰 플랫폼에서 필요할 수 있습니다.

r.VT.PoolSizeScale.Group<x>

확장성 그룹 로 설정된 버추얼 텍스처의 물리적 메모리 풀에만 스케일 인수를 적용합니다. 그룹이 지정되지 않은 CVar의 베리에이션은 확장성 그룹 0으로 매핑됩니다.

r.VT.MaxAnisotropy

버추얼 텍스처 샘플링에 대한 최대 애니소트로피(MaxAnisotropy) 세팅입니다.

추가 참고 사항과 한계

  • 버텍스 셰이더 스테이지에서도 버추얼 텍스처를 샘플링할 수 있습니다. 하지만 이 경우 버텍스 셰이더가 버추얼 텍스처 GPU 피드백을 생성하지 않으므로 극도로 주의를 기울여 작업해야 합니다.

언리얼 엔진의 이전 버전을 위해 작성된 페이지입니다. 현재 언리얼 엔진 5 버전을 위해 업데이트되지 않았습니다.