나나이트는 언리얼 엔진 5의 가상화 지오메트리 시스템으로, 새로운 내부 메시 포맷과 렌더링 기술을 사용하여 픽셀 스케일의 디테일과 방대한 양의 오브젝트를 렌더링합니다. 인식할 수 있는 디테일만 지능적으로 처리하며, 그 외의 디테일에는 작동하지 않습니다. 또한 나나이트의 데이터 포맷은 고도로 압축되어 있으며, 자동 레벨 오브 디테일을 통해 세부적인 스트리밍을 지원합니다.
나나이트의 장점
- 지오메트리 복잡도가 대폭 증가하여 실시간으로 구현할 수 있는 트라이앵글과 오브젝트 수가 늘어났습니다.
- 프레임 예산이 더 이상 폴리곤 수, 드로 콜, 메시 메모리 사용에 의해 제한되지 않습니다.
- 이제 ZBrush 스컬프팅 및 사진측량 기술 스캔 등 영화 수준의 소스 아트를 직접 임포트할 수 있습니다.
- 노멀 맵 텍스처에 디테일을 굽는 대신 하이 폴리 디테일을 사용할 수 있습니다.
- 레벨 오브 디테일(Level of Detail, LOD)이 자동으로 처리되며 더 이상 개별 메시의 LOD를 수동으로 구성할 필요가 없습니다.
- 퀄리티 손실이 거의 발생하지 않으며, 특히 LOD 트랜지션의 경우 더욱 그렇습니다.
나나이트를 사용하면 이렇게 탁월한 이점이 있지만, 실용적인 측면에서는 여전히 한계가 있습니다. 예를 들면 인스턴스 수, 메시당 트라이앵글, 머티리얼 복잡도, 출력 해상도, 퍼포먼스는 콘텐츠 및 하드웨어 조합에 따라 신중하게 측정해야 합니다. 나나이트는 언리얼 엔진의 향후 출시 버전에서 계속해서 기능을 확장하고 퍼포먼스를 향상할 예정입니다.
나나이트 메시와 스태틱 메시의 차이점
나나이트 메시는 나나이트가 활성화된 스태틱 메시입니다. 나나이트 메시는 여전히 본질적으로는 트라이앵글 메시로, 이 데이터에 많은 LOD와 압축이 적용된 상태입니다. 또한 나나이트는 매우 효율적인 방식으로 데이터 포맷을 렌더링하기 위해 완전히 새로운 시스템을 사용합니다.
스태틱 메시에서 플래그를 활성화하기만 하면 나나이트의 장점을 활용할 수 있습니다. 나나이트용 콘텐츠를 제작하는 것은 기존 메시와 다를 바가 없지만, 나나이트는 기존 방식으로 렌더링된 지오메트리보다 획기적으로 많은 트라이앵글과 인스턴스를 처리할 수 있다는 점에서 차별화됩니다. 카메라를 충분히 가까이 이동하면 나나이트가 임포트된 원본 소스 트라이앵글을 그립니다.
나나이트 메시는 다수의 UV 및 버텍스 컬러를 지원합니다. 머티리얼은 메시의 여러 섹션에 할당되며, 이러한 머티리얼은 셰이더에서 처리할 수 있는 다양한 셰이딩 모델과 다이내믹 이펙트를 사용할 수 있습니다. 머티리얼 할당은 다른 스태틱 메시와 마찬가지로 동적으로 전환할 수 있으며, 나나이트는 머티리얼을 굽는 프로세스를 거치지 않아도 됩니다.
나나이트와 함께 버추얼 텍스처를 반드시 사용해야 하는 것은 아니지만 사용을 적극 권장합니다. 버추얼 텍스처는 나나이트가 메시 데이터를 사용하여 얻을 수 있는 텍스처 데이터와 그 목적이 유사한 언리얼 엔진의 직교 기능입니다.
나나이트로 작업하는 것은 스태틱 메시의 워크플로와 비슷하지만 아직 지원되지 않는 것도 많습니다. 자세한 내용은 이 페이지의 지원 기능 섹션을 참조하세요.
나나이트의 작동 방식
나나이트는 기존 엔진 워크플로에 매우 매끄럽게 통합되며 새로운 접근 방식으로 메시 데이터를 저장 및 렌더링합니다.
- 임포트되는 동안 메시는 트라이앵글 그룹의 계층구조 클러스터로 분석 및 분해됩니다.
- 렌더링되는 동안 클러스터는 카메라 뷰를 바탕으로 즉시 다양한 LOD로 전환되며, 동일한 오브젝트 내에서 인접한 클러스터에 크랙 없이 완벽하게 연결됩니다. 데이터는 온디맨드 방식으로 스트리밍되므로 표시되는 디테일만 메모리를 차지합니다. 나나이트는 기존 드로 콜을 완전히 우회하는 자체 렌더링 패스를 실행합니다. 나나이트 파이프라인을 검토해야 하는 경우에는 시각화 모드를 사용하면 됩니다.
나나이트는 디스크에서 온디맨드 방식으로 빠르게 메시 데이터를 스트리밍하는 기능을 활용하므로 런타임 스토리지의 경우 솔리드 스테이트 드라이브(Solid State Drive, SSD) 사용이 권장됩니다.
나나이트를 사용해야 하는 메시 타입
나나이트는 되도록 모든 경우에 활성화해 두어야 합니다. 일반적으로 나나이트가 활성화된 스태틱 메시는 더 빠르게 렌더링되며 더 적은 메모리와 디스크 공간을 차지합니다.
나나이트를 사용하기 적합한 메시의 조건은 다음과 같습니다.
- 트라이앵글이 많거나 화면상에 표시되는 트라이앵글이 아주 작은 경우
- 씬 내에 인스턴스가 많은 경우
- 다른 나나이트 지오메트리의 주요 오클루더 역할을 하는 경우
- 버추얼 섀도 맵을 사용하여 섀도를 드리우는 경우
단, 스카이 스피어는 예외입니다. 스카이 스피어는 화면상에서 크게 표시되고, 가리는 것이 없으며, 씬에 단 하나만 존재합니다. 이러한 예외 사례는 드물며 나나이트를 사용함으로써 발생하는 퍼포먼스 손실이 매우 적으므로, 사용 사례에 나나이트가 지원된다면 활성화할 수 없는 문제에 대해 크게 우려하지 않아도 됩니다.
일부 사용 사례는 현재 나나이트가 지원되지 않습니다. 자세한 내용은 이 페이지의 지원 기능 섹션을 참조하세요.
메시에서 나나이트 지원 활성화하기
다음과 같은 방법으로 지원되는 지오메트리에서 나나이트를 활성화할 수 있습니다.
지오메트리를 나나이트로 변환하려면 메시별 처리 시간이 다소 필요합니다. 대규모 프로젝트에서 나나이트 에셋이 많은 경우 공유 파생 데이터 캐시(Derived Data Cache, DDC)가 특히 유용합니다. 자세한 내용은 공유 DDC 문서를 참조하세요.
스태틱 메시 임포트하기
나나이트용으로 메시를 임포트하는 경우 나나이트 빌드(Build Nanite) 박스를 체크하세요.
라이트매스로 사전 연산된 라이팅을 사용하지 않는 경우에는 라이트 맵 UV 생성 프로퍼티를 비활성화하는 것을 권장합니다.
활성화하면 매우 디테일한 지오메트리에서 스태틱 메시 데이터를 임포트하고 빌드하는 데 시간이 많이 걸릴 수 있습니다. 또한 이 프로퍼티는 UV 채널을 추가하기 때문에 메시의 밀도가 아주 높은 경우에는 데이터 양이 상당히 커질 수 있습니다. 프로젝트에서 구운 라이팅이 필요하지 않은 경우에는 이 두 가지 사항을 감수할 필요가 없습니다.
에셋에 나나이트 활성화하기
나나이트를 활성화하려는 콘텐츠로 프로젝트가 이미 채워져 있는 경우 두 가지 선택지가 있습니다. 콘텐츠 브라우저를 사용하여 에셋을 일괄적으로 활성화하거나 개별 에셋을 각각의 에디터를 통해 활성화하는 것입니다.
일괄적으로 메시에 나나이트 활성화하기
스태틱 메시 에셋을 일괄 선택하여 나나이트를 활성화하려면 콘텐츠 브라우저(Content Browser) 를 사용하여 모두 선택합니다. 컨텍스트 메뉴에서 우클릭 하고 나나이트(Nanite) > 활성화(Enable) 를 선택합니다.
개별 메시에 나나이트 활성화하기
스태틱 메시와 지오메트리 컬렉션(카오스 피직스 기반 프랙처 메시) 등 나나이트를 지원하는 메시의 에디터를 열고 디테일(Details) 패널에서 나나이트를 활성화합니다.
스태틱 메시 에디터에서 나나이트 세팅(Nanite Settings) 을 찾아 나나이트 지원 활성화(Enable Nanite Support) 박스에 체크합니다.
지오메트리 컬렉션 에디터에서 나나이트(Nanite) 섹션을 찾아 나나이트 활성화(Enable Nanite) 박스에 체크합니다.
나나이트의 지원 기능
이 섹션은 지원되는 기능과 지원되지 않는 기능, 그리고 제한 사항을 통해 언리얼 엔진 프로젝트에서 나나이트를 가장 잘 활용할 수 있는 방법을 자세히 살펴봅니다.
지오메트리
나나이트는 스태틱 메시와 지오메트리 컬렉션에서 활성화할 수 있습니다.
나나이트 활성화 메시는 다음 컴포넌트 타입과 함께 사용할 수 있습니다.
- 스태틱 메시
- 인스턴스 스태틱 메시
- 스플라인 메시
- 계층형 인스턴스 스태틱 메시
- 지오메트리 컬렉션
- 폴리지 페인터
- 랜드스케이프 그래스
나나이트는 리지드 메시의 디포메이션을 제한적으로 지원합니다. 나나이트는 리지드 메시의 다이내믹 또는 스태틱 여부에 상관없이 동적 이동, 회전, 비균등 스케일링을 지원합니다. 이는 나나이트 메시의 위치 이동이 전체 메시에 단일 4x3 매트릭스 곱을 일률적으로 적용하여 표현할 수 있는 것보다 복잡하다는 것을 의미합니다.
다음 사항에는 디포메이션이 제한됩니다.
- (베타) 머티리얼의 월드 포지션 오프셋(World Position Offset, WPO)
- WPO 디스플레이스먼트를 사용하는 나나이트 메시는 클러스터마다 개별적인 바운드가 있으며 GPU에서 개별적으로 컬링되어 작은 클러스터로 쪼개져 있습니다. WPO를 범위제한하여 나나이트 메시의 클러스터를 얼마나 많이 컬링할지 관리할 수 있습니다.
- WPO를 사용하는 폴리지의 경우 폴리지에 구멍이 여러 개 있어 자체적으로 가려지지 않으므로 큰 문제가 되지 않습니다.
다음 사항에는 디포메이션이 지원되지 않습니다.
- 스켈레탈 애니메이션
- 모프 타깃
다음 사항에는 나나이트 활성화 메시가 지원되지 않습니다.
- 인스턴스의 버텍스 페인팅
- 구체적으로 이는 에디터의 메시 페인트(Mesh Paint) 모드를 사용하여 인스턴스별로 페인팅된 컬러를 의미하지만, 나나이트는 원본 메시의 버텍스 컬러를 지원합니다. 버텍스 컬러 페인팅 툴을 사용하여 나나이트 메시의 버텍스 컬러를 편집하고 만들 수 있습니다.
씬에 존재할 수 있는 인스턴스의 최대 수는 1,600만 개로 고정되어 있으며, 여기에는 나나이트를 사용하도록 활성화된 인스턴스뿐만 아니라 스트림 인되는 모든 인스턴스가 포함됩니다. 스트림 인되는 인스턴스만 총합으로 계산됩니다.
버텍스별 탄젠트는 나나이트가 활성화된 스태틱 메시에서 저장되지 않습니다. 대신 픽셀 셰이더에 탄젠트 스페이스가 파생됩니다. 데이터 크기를 줄이기 위해 탄젠트 데이터는 저장되지 않습니다. 이러한 접근 방식을 사용하는 탄젠트 스페이스에는 차이가 있어 에지에 불연속성이 발생할 수 있습니다. 하지만 심각한 문제는 아니며, 향후 출시에서는 버텍스 탄젠트를 지원할 예정입니다.
머티리얼
나나이트는 블렌드 모드를 불투명(Opaque) 및 마스크드(Masked) 로 설정한 머티리얼을 지원합니다. 지원되지 않는 머티리얼 타입이 탐지될 경우, 디폴트 머티리얼이 나나이트 활성화 메시에 할당되고 출력 로그 에 추가 정보와 함께 경고가 나타납니다.
추가 머티리얼 기능 참고사항
- 나나이트 활성화 메시는 표면에 투영된 데칼을 수신할 수는 있지만, 머티리얼이 반투명(Translucent) 블렌드 모드를 사용해야 하는 메시 데칼은 지원하지 않습니다.
- 와이어프레임(Wireframe) 체크 박스는 지원되지 않습니다.
- 버텍스 보간(Vertex Interpolator) 노드 및 커스텀 UV(Custom UV) 는 지원되지만, 픽셀당 3번씩 평가됩니다.
- 커스텀(Custom) 표현식 노드나 해당 노드를 사용하는 모든 노드(예: ParallaxOcclusionMapping 머티리얼 함수)는 나나이트에서 아티팩트를 발생시킬 수도 있습니다. 이는 나나이트가 아직 파생 분석을 지원하지 않기 때문입니다.
렌더링
다음 렌더링 기능은 현재 지원되지 않습니다.
- 다음을 사용하는 오브젝트의 뷰 전용 필터링
- 최소 화면 반경
- 디스턴스 컬링
- 포워드 렌더링
- 가상현실용 스테레오 렌더링
- 분할 화면
- 멀티샘플링 안티 에일리어싱(Multisampling Anti-Aliasing, MSAA)
- 라이팅 채널
- 나나이트 메시에 대한 레이 트레이싱
- 나나이트 활성화 메시에는 기본적으로 예비 메시가 사용됩니다. 스태틱 메시 에디터에서 예비 상대 오차(Fallback Relative Error) 파라미터를 낮추면 소스 메시의 트라이앵글을 더 많이 사용합니다.
- (실험단계) 나나이트 메시의 네이티브 레이 트레이싱 초기 지원은 콘솔 변수
r.RayTracing.Nanite.Mode 1
로 활성화 가능합니다. 이 방법은 오류가 전무한 예비 메시보다도 훨씬 적은 GPU 메모리를 사용하는 동시에 모든 디테일을 보존합니다.
- 일부 시각화 뷰 모드에서는 아직 나나이트 메시 표시가 지원되지 않습니다.
스태틱 메시 에디터에서 디테일 수준이 높은 지오메트리를 볼 때 일부 시각화 모드는 주의하여 사용해야 합니다. 노멀과 UV를 표시하면 에디터 퍼포먼스에 문제가 발생할 수 있습니다.
지원 플랫폼
나나이트는 현재 PlayStation 5, Xbox Series S|X 및 다음 사양의 그래픽 카드를 갖추었으며 셰이더 모델 6(Shader Model 6, SM6)이 포함된 DirectX 12 최신 드라이버를 사용하는 PC에서 지원됩니다.
- NVIDIA: Maxwell 세대 카드 이상
- AMD: GCN 세대 카드 이상
-
DirectX 12 Agility SDK 지원이 포함된 Windows 10 이상의 모든 버전(버전 1909.1350 이상) 및 Windows 11이 지원됩니다.
- Windows 10 버전 1909 - 리비전 .1350 이상이어야 합니다.
- Windows 10 버전 2004 및 20H2 - 리비전 .789 이상이어야 합니다.
- DirectX 12(셰이더 모델 6.6 atomics 포함) 또는 Vulkan(VK_KHR_shader_atomic_int64)
- 최신 그래픽 드라이버
PlayStation 4 및 Xbox One에서도 나나이트가 지원되지만, 현재는 실험단계로 간주됩니다. 이 플랫폼의 경우 퀄리티가 매우 높은 콘텐츠에서 나나이트의 퍼포먼스가 출시 가능한 게임의 요구 사항을 충족하지 못할 수 있습니다.
나나이트 예비 메시 및 정밀도 세팅
스태틱 메시에는 나나이트 표현의 정밀도와 풀 디테일 메시에서 생성된 예비 메시의 정밀도를 제어하는 추가 프로퍼티가 포함됩니다.
이 세팅은 스태틱 메시 에디터 디테일 패널의 나나이트 세팅 섹션에 있습니다.
나나이트 세팅에는 다음 프로퍼티가 포함됩니다.
프로퍼티 | 설명 |
---|---|
나나이트 지원 활성화(Enable Nanite Support) | 이 메시를 활성화하여 나나이트와 함께 사용하고, 나나이트를 사용할 수 없는 경우 예비 메시를 생성합니다. |
영역 보존(Preserve Area) | 단순화로 인해 표면 영역을 잃을 수 있는 나나이트 메시를 활성화하고, 열린 바운더리 에지를 확장하여 잃은 영역을 남은 트라이앵글에 재분배합니다. 이 세팅은 단순화로 인해 나뭇잎이 연결되지 않은 트라이앵글 및 쿼드가 될 가능성이 높은 폴리지에 사용하면 가장 유용합니다. 각 나뭇잎의 스케일을 확장하는 효과가 있습니다. 풀잎 등 지오메트리 리본의 경우 두껍게 하는 효과가 있습니다. 이 세팅은 모든 폴리지 메시에서만 활성화되어야 합니다. |
명시적 탄젠트(Explicit Tangents) | true인 경우 원본 모델 탄젠트가 에셋별로 저장되고 사용됩니다. 이 세팅을 통해 탄젠트는 런타임에 묵시적으로 파생되는 대신 디스크에 명시적으로 저장됩니다. 탄젠트 정밀도 세팅은 버텍스 탄젠트의 추가적인 제어에 사용할 수 있습니다. 이 세팅을 활성화하면 스토리지가 대략 10% 증가하며, 묵시적 탄젠트가 충분히 정밀하지 않을 때 바람직합니다. |
선형보간 UV(Lerp UVs) | 단순화 시 UV 보간 여부입니다. 이 세팅은 가능한 경우 활성화해야 합니다. 실제 UV 좌표의 경우 이를 사용하면 단순화 시 새 버텍스에 대한 오차가 가장 낮은 최적의 UV를 계산할 수 있으며, UV가 노멀 텍스처 좌표로 사용되고 트라이앵글의 페이스에 걸쳐 보간한다고 가정합니다. 이 세팅은 인덱스가 UV에 저장된 경우와 같이 UV에 저장된 데이터가 보간하기에 유효하지 않은 경우 비활성화해야 합니다. 인덱스의 선형보간은 의미가 없으며 인덱스를 사용하려는 셰이더를 손상시킬 수 있습니다. |
위치 정밀도(Position Precision) | 나나이트 메시의 버텍스 위치 생성 시 이 메시가 사용해야 하는 정밀도를 선택합니다. 자동 은 메시 크기에 따라 적절한 정밀도를 결정합니다. 정밀도를 오버라이드하여 정밀도를 향상하거나 디스크 사용 공간을 최적화할 수 있습니다. |
보통 정밀도(Normal Precision) | 나나이트 메시의 버텍스 노멀 생성 시 이 메시가 사용해야 하는 정밀도를 선택합니다. 자동 은 메시 크기에 따라 적절한 정밀도를 결정합니다. 정밀도를 오버라이드하여 정밀도를 향상하거나 디스크 사용 공간을 최적화할 수 있습니다. |
최소 상주(루트 지오메트리)(Minimum Residency (Root Geometry)) | 이 메시가 항상 메모리에 확보할 메모리 바이트 크기를 설정하고, 나머지는 스트림 인합니다. 값이 높을수록 메모리가 더 많이 요구되지만, 일부 메시의 경우 스트리밍되는 팝인(pop-in) 문제를 줄여주기도 합니다. |
트라이앵글 퍼센트 유지(Keep Triangle Percent) | 소스 메시에서 유지하는 트라이앵글 퍼센트입니다. 이 퍼센티지를 줄여 디스크 크기를 최적화할 수 있습니다. |
상대 오차 정리(Trim Relative Error) | 나나이트 메시에서 제거가 허용되는 최대 상대 오차를 설정합니다. 이 상대 오차보다 시각적 영향이 적은 경우 소스 메시의 모든 디테일이 제거됩니다. 상대 오차는 유닛 크기를 가지지 않으며, 메시 크기에 상대적입니다. 기본적으로 나나이트는 원본 소스 메시의 모든 트라이앵글을 저장합니다. |
예비 타깃(Fallback Target) | 예비 메시 생성 시 어떤 타기팅 시스템을 사용할지 결정합니다. 자동(Auto): 프로젝트 세팅을 기반으로 예비 메시를 자동으로 생성합니다. 예비 트라이앵글 퍼센트(Fallback Triangle Percent): 나나이트에서 소스 메시를 줄일 때 남길 트라이앵글 퍼센티지를 설정합니다. 예비 상대 오차(Fallback Relative Error): 지정된 오차가 메시 크기에 비례하여 떨어질 때까지 감소합니다. 이 상대 오차보다 시각적 영향이 적은 경우 생성된 예비 메시의 모든 디테일은 제거됩니다. |
소스 임포트 파일명(Source Import Filename) | 나나이트와 함께 사용할 고해상도 메시를 임포트하는 데 사용되는 파일 경로입니다. 메시의 고해상도 버전은 언리얼 엔진의 나나이트 및 지오메트리 모델링과 같이, 보다 디테일한 지오메트리를 사용하는 것이 유리한 시스템에서 LOD0 대신 사용됩니다. |
디스플레이스먼트 UV 채널(Displacement UV Channel) | 디스플레이스먼트 맵을 샘플링할 때 사용할 UV 채널입니다. |
디스플레이스먼트 맵(Displacement Maps) | 디스플레이스먼트 맵을 추가하고 편집합니다. |
최대 에지 길이 인수(Max Edge Length Factor) | 화면에서 각 메시 버텍스 사이에 허용되는 최대 거리를 제어합니다. 월드 포지션 오프셋을 사용하는 애니메이션, 스플라인 메시 컴포넌트 등 디폼하려는 메시가 지나치게 단순화되지 않도록 방지하는 데 사용할 수 있습니다. 지나친 단순화로 인한 문제를 수정하기 위해 명시적으로 필요한 경우가 아니면 디폴트인 0으로 유지해야 합니다. |
버텍스 정밀도
나나이트는 메시 버텍스 위치를 양자화하여 메모리 밀도를 최대화하고 디스크 점유 공간을 최소화합니다. 양자화 단계 크기는 2의 거듭제곱으로, 위치 정밀도 프로퍼티를 사용하여 개별 메시의 요구 사항을 충족하도록 선택할 수 있습니다. 기본적으로 설정되는 자동 은 메시 크기와 트라이앵글 밀도에 기반하여 적절한 정밀도를 선택합니다. 정밀도 크기를 선택하여 수동으로 오버라이드함으로써 정밀도를 향상하거나 디스크 점유 공간을 최적화할 수 있습니다.
양자화는 손실 압축의 한 형태입니다. 손실 압축은 모듈형 메시 조각이나 바운더리를 공유하는 다른 메시로 작업하는 경우에 특히 문제가 발생할 수 있습니다. 지오메트리에 구멍이나 크랙이 생기지 않도록 바운더리를 완벽하게 정렬해야 하는 경우에는 더욱 심각할 수 있습니다.
일관성을 유지하기 위해 양자화는 메시 원점을 중심으로 정규화되지 않은 오브젝트 좌표에서 일어납니다. 이는 메시가 동일한 정밀도 세팅을 사용할 때 양자화가 크랙을 일으키지 않게 하며, 메시 중심 사이의 이동은 해당 정밀도의 배수입니다.
데이터 트리밍
나나이트가 저장하는 데이터 양을 줄여 디스크 크기를 최적화해야 할 때가 있습니다. 나나이트에는 제작 중 언제든지 저장된 나나이트 메시에서 디테일 데이터를 트리밍하는 세팅이 있으므로 안전하게 퀄리티를 최대한 오버슈팅하고 나중에 그에 맞추어 조정할 수 있습니다.
디테일 데이터를 트리밍하려면 트라이앵글 퍼센트 유지 및 상대 오차 정리 프로퍼티를 사용해야 합니다. 이러한 프로퍼티는 나나이트 메시로 저장되기 전의 사전 데시메이션 옵션이라고 생각할 수 있습니다. 나나이트에서 디테일은 메시 전체에서 균등할 필요가 없습니다. 중요도가 가장 낮은 데이터를 먼저 제거하며, 손실 압축에 가깝습니다.
트라이앵글 퍼센트 유지 를 사용하여 소스 메시에서 유지할 트라이앵글의 퍼센티지를 설정합니다.
상대 오차 정리 를 사용하여 소스 메시에서 데이터를 트리밍할 때 허용되는 최대 상대 오차를 설정합니다. 제거될 경우 이 설정치보다 적은 상대 오차를 발생시키는 트라이앵글은 모두 제거됩니다. 다시 말해, 이 값보다 시각적 영향이 적은 모든 디테일은 트리밍된다고 할 수 있습니다. 상대 오차는 유닛 크기를 가지지 않으며, 메시 크기에 상대적입니다.
두 프로퍼티 모두 기본적으로는 아무 것도 트리밍하지 않도록 설정되어 있으며, 나나이트는 원본 소스 메시의 모든 트라이앵글을 저장합니다.
데이터 트리밍은 퍼포먼스 향상이 아닌 디스크 크기(다운로드 크기) 감소에 중요한 역할을 합니다. 자세한 설명은 아래의 데이터 크기 섹션을 참조하세요.
예비 메시
언리얼 엔진의 상당 부분은 기존에 렌더링된 메시가 제공하던 전통적인 버텍스 버퍼에 액세스해야 합니다. 스태틱 메시에서 나나이트가 활성화되면 디테일 수준이 높은 메시의 저퀄리티 표현(예비 메시)이 생성됩니다. 나나이트 렌더링이 지원되지 않는 경우 예비 메시가 사용됩니다. 또한 복합 콜리전이 필요하거나 구운 라이팅에 라이트맵을 사용해야 하거나 루멘으로 하드웨어 레이 트레이싱 리플렉션을 사용하는 경우처럼 완전한 디테일을 제공하는 메시를 사용하는 것이 이상적이지 않은 상황에 사용됩니다.
예비 트라이앵글 퍼센트 프로퍼티는 예비 메시를 생성하는 데 사용되는 원본 소스 메시의 트라이앵글 퍼센티지를 나타냅니다. 트라이앵글 퍼센티지는 0~100% 사이로 지정할 수 있으며, 퍼센티지가 높을수록 원본 메시의 디테일이 더 많이 보존됩니다.
예비 상대 오차 는 소스 메시에서 디테일을 제거할 때 허용되는 최대 상대 오차를 설정합니다. 제거될 경우 이 설정치보다 적은 상대 오차를 발생시키는 트라이앵글은 모두 제거됩니다. 시각적 영향이 적은 디테일일수록 먼저 제거된다고 할 수 있습니다. 상대 오차는 유닛 크기를 가지지 않으며, 메시 크기에 상대적입니다.
예를 들어, 메시에 아예 데시메이션을 적용하고 싶지 않다면 예비 트라이앵글 퍼센트를 100으로, 예비 상대 오차를 0으로 설정하면 됩니다.
아래 예시는 원본 소스 메시로부터 생성된 디테일 수준이 높은 나나이트 메시와 생성된 나나이트 예비 메시(디폴트 세팅)를 비교한 것입니다.
예비 상대 오차를 사용하여 원본 소스 메시에서 원본 디테일을 얼마나 보존할지 정하고, 예비 퍼센티지를 설정하여 그 디테일을 얼마나 사용할지 정할 수 있습니다.
아래의 비교에서 예비 메시는 예비 트라이앵글 퍼센트를 100%로 유지하지만, 원본 소스 메시에서 트라이앵글을 더 많이 사용하도록 예비 상대 오차를 조정했습니다. 이 값을 조정할 경우 뷰포트의 나나이트 트라이앵글에 나나이트 디테일을 값 변경 표시자로 사용할 수 있습니다.
예비 메시 시각화
스태틱 메시 에디터에서는 표시(Show) 드롭다운 메뉴의 뷰포트 나나이트 예비(Nanite Fallback) 옵션을 사용하여 완전한 디테일을 제공하는 나나이트 메시와 나나이트 예비 메시 간에 토글할 수 있습니다. 또는 단축키 Ctrl + N 을 사용하여 두 시각화 옵션 간에 빠르게 토글할 수도 있습니다.
나나이트 활성화 메시에 커스텀 예비 메시 LOD 사용하기
예비 메시는 복합 폴리곤별 콜리전, 레이 트레이싱, 라이트 굽기 등의 엔진 기능에 사용됩니다. 또한, 나나이트를 지원하지 않는 플랫폼에서 사용되기도 합니다. 예비 메시를 생성할 때, 나나이트 활성화 메시는 항상 소스 메시의 LOD0 슬롯을 사용하여 예비 메시를 자동 생성합니다. 그러나 자동 생성된 메시가 아닌 수동 지정한 예비 메시나 기존 LOD 시리즈를 사용하고 싶을 수도 있습니다.
이러한 수준의 컨트롤을 통해 프로젝트에서 나나이트를 사용할 수 있을 뿐만 아니라, 레이 트레이스드 리플렉션 또는 나나이트를 지원하지 않는 플랫폼에 나타난 지오메트리를 직접 제어할 수 있습니다.
아래의 단계를 따라 자체 커스텀 예비 메시를 지정하거나, LOD 시리즈를 사용할 수 있습니다.
- 이 방법을 사용할 경우 예비 메시는 무시되므로, 예비 트라이앵글 퍼센트(Fallback Triangle Percent) 를 0 으로 설정하여 예비 메시를 가능한 한 작게 만듭니다.
- 이 기존 LOD 설정 절차를 사용하여 메시에 하나 이상의 LOD를 추가합니다.
- LOD 세팅(LOD Settings) 섹션에서 LOD 임포트(LOD Import) 드롭다운의 임포트 LOD 레벨 1(Import LOD Level 1) 을 사용합니다.
- LOD 세팅(LOD Settings) 섹션에서 최소 LOD(Minimum LOD) 를 1 로 설정합니다. 이렇게 하면 나나이트에서 생성한 예비 메시가 무시됩니다.
복합 콜리전은 특수한 경우에 해당합니다. 일반 세팅(General Settings) 아래의 콜리전에 대한 LOD(LOD for Collision) 프로퍼티를 사용하여 콜리전에 사용할 LOD를 지정합니다. LOD0을 포함한 모든 LOD는 콜리전에 사용할 수 있습니다.
이 특수한 접근 방법은 나나이트 프로젝트가 나나이트를 지원하지 않는 플랫폼과 자동으로 호환되도록 하는 데 적합하지 않을 수 있으며, 프로젝트에서 테스트 및 평가해야 합니다.
나나이트는 매우 많은 인스턴스를 효율적으로 처리하지만, 나나이트가 비활성화될 경우 기존 렌더 파이프라인에는 드로 콜의 수가 지나치게 많을 수도 있습니다. r.Nanite 0
으로 나나이트 지원을 토글함으로써 프로젝트에 적절한지 테스트할 수 있습니다.
자세한 내용은 이 페이지의 콘솔 변수 및 명령 섹션을 참조하세요.
나나이트 활성화 콘텐츠 작업
대부분의 경우, 나나이트는 화면 해상도에 맞추어 아무런 문제없이 스케일링됩니다. 이는 세밀한 LOD와 오클루전 컬링이라는 두 가지 핵심 기술 덕분입니다. 일반적으로 이는 나나이트가 화면에 그리려고 하는 트라이앵글 수가 씬 내 소스 데이터의 지오메트리 복잡도와 관계없이 상당히 일정하며 픽셀 수에 비례한다는 것을 의미합니다.
나나이트는 픽셀보다 훨씬 많은 수의 트라이앵글을 그릴 필요가 없다는 디자인 원칙을 따릅니다.
콘텐츠 유형이 스케일링에 사용되는 나나이트 기법에 나쁜 영향을 미치는 경우도 있지만, 그렇다고 해서 나나이트를 해당 콘텐츠에 전혀 사용할 수 없거나 기존 파이프라인보다 렌더링이 훨씬 빠르다는 의미는 아닙니다. 이러한 콘텐츠 유형에서는 씬 복잡도가 아니라 픽셀에 따른 스케일링이 적용되지 않는다는 뜻입니다. 이러한 상황에 대해서는 언리얼 엔진에서 제공하는 프로파일링 기능을 사용하여 모니터링할 수 있습니다.
군집 지오메트리
군집 지오메트리는 헤어, 나뭇잎, 잔디 등 연결성이 없는 수많은 작은 요소가 원거리에서 볼륨을 이루는 것을 가리킵니다. 이러한 지오메트리 타입은 나나이트의 LOD와 오클루전 컬링 기술에 나쁜 영향을 미칩니다. 나나이트는 본질적으로 계층형 LOD로, 작은 트라이앵글을 커다란 트라이앵글로 간소화하고 그 차이가 인식할 수 없을 만큼 작다고 판단하면 보다 간소화된 것을 선택합니다. 연속적인 평면이 아닌 군집 지오메트리에서는 이 기능이 잘 작동하지 않으며, 멀리서 보면 솔리드 표면이 아니라 부분적으로 불투명한 클라우드처럼 보입니다. 따라서 나나이트는 군집 지오메트리를 일반적인 솔리드 표면과 같이 적극적으로 축소하지 못하며, 그 결과 커버된 픽셀에 대해 더 많은 트라이앵글이 그려지게 됩니다.
군집 지오메트리가 나쁜 영향을 미치는 두 번째 최적화 사례는 오클루전 컬링입니다. 오클루전 컬링은 아주 미세하며, 그 미세함의 정도가 픽셀 단위를 넘어섭니다. 구멍으로 가득한 지오메트리, 더 심한 경우 구멍이 가득하고 층층이 쌓인 지오메트리는 화면상의 영역이 그 뒤에 있는 것을 검게 처리하기 전에 다수의 뎁스 레이어를 빌드하게 만들기 때문에 막대한 오버드로를 유발합니다. 예컨대 화면에 8x8 픽셀 영역이 있다고 가정하고 모든 픽셀이 채워지기 전에 얼마나 많은 뎁스 레이어가 그려져야 하는지 생각해 볼 수 있습니다. 이렇게 과도한 오버드로로 인해 나나이트는 같은 픽셀 수에 대해 더 많은 트라이앵글을 그리게 되고 결과적으로 렌더링이 느려지게 됩니다.
폴리지는 이 문제가 가장 명확하게 드러나는 사례이지만, 그렇다고 해서 나나이트를 폴리지 타입 메시에 아예 사용하면 안 된다는 것은 아닙니다. 자세한 내용은 아래의 나나이트를 사용하는 폴리지 섹션을 참조하세요. 다양한 사용 사례로 실험해 보고 프로젝트에서 어떤 것이 잘 작동하는지 살펴보는 것이 좋습니다. 이러한 메시 타입에서 나나이트의 좋은 퍼포먼스를 보장하기 위해 프로파일링 툴을 사용할 수 있습니다.
가깝게 스택된 표면
기존 메시의 오클루전 컬링은 실질적인 한계 때문에 대규모 스케일에서의 킷배싱 워크플로를 거의 불가능하게 만듭니다. 나나이트의 세밀한 오클루전 컬링은 이 워크플로를 개발 과정에서 더욱 원활하게 사용할 수 있도록 지원합니다. 위의 군집 지오메트리 섹션에서 설명했듯이, 보이는 표면 바로 아래 가까이에 있는 숨겨진 표면에서 오버드로가 발생할 수 있습니다. 보이는 표면 아래에 지오메트리가 잘 묻혀 있는 경우 나나이트가 이를 상당히 저렴한 비용으로 탐지하고 컬링하여 거의 비용 소모 없이 처리할 수 있습니다. 그러나 최상단 표면 가까이에 지오메트리가 쌓여 있는 경우 나나이트는 어떤 것이 위에 있는지 판단하지 못하고 두 개를 모두 그립니다.
이처럼 컬링 시 발생하는 특수한 문제는 최악의 시나리오로, 이 경우 나나이트가 어떤 표면이 위에 있는지 인식하지 못하고 모든 레이어를 그리게 됩니다. 이 부정확성은 화면의 크기와 거리에 따라 커지며, 10cm 정도에서는 레이어가 분리되어 가까이에서 봐도 양호할 수 있지만 거리가 멀어져 거리 차이가 픽셀보다 작아지면 오버드로가 발생합니다.
아래 예시에서 카메라를 이동해 캐릭터가 서 있는 영역 아래를 내려다보면, 나나이트 오버드로 시각화를 통해 스택된 표면이 어떻게 렌더링되고 있는지 확인할 수 있습니다. 밝은 영역은 다른 영역보다 오버드로가 더 많이 발생한다는 것을 가리킵니다.
오버드로 시각화는 오버드로 문제를 찾아낼 수 있는 가장 효과적인 방법입니다. 어느 정도의 오버드로는 예상되는 문제이지만, 그 정도가 심하면 나나이트 컬링 및 래스터화 비용이 올라가 씬 복잡도와는 무관하게 프로세스 내 나나이트의 스케일링 효과가 떨어지게 됩니다.
패시팅된 하드 에지 노멀
유의할 문제 중 하나는 패시팅된 노멀이 있는 디테일 수준이 매우 높은 메시를 임포트하는 경우입니다. 이는 두 가지의 서로 다른 폴리곤 간의 노멀이 스무딩되지 않음을 의미합니다. 이 문제는 흔히 발생하며 놓치기 쉬우므로 주의해야 합니다. 메시에서 공유하는 버텍스 양이 적더라도 렌더링 퍼포먼스와 데이터 크기 양쪽에서 비용이 매우 높아질 수 있기 때문입니다. 이상적으로는 메시의 버텍스 수가 트라이앵글 수보다 적어야 합니다. 비율이 2:1 이상인 경우, 특히 트라이앵글 수가 많으면 문제가 될 수 있습니다. 비율이 3:1이면 메시가 완전히 패시팅되어 모든 트라이앵글이 자체 버텍스 3개를 갖게 되며 다른 트라이앵글과 버텍스를 전혀 공유하지 않게 됩니다. 이렇게 되는 가장 흔한 이유는 노멀이 스무딩되지 않아서 같지 않기 때문입니다.
버텍스가 많을수록 데이터도 많아진다는 것을 항상 염두에 두어야 합니다. 또한 이 경우 버텍스 트랜스폼 작업이 늘어나며, 2:1보다 비율이 높아지면 렌더링 패스 속도가 떨어지게 됩니다. 하드 서피스 모델링에서 의도적으로 사용할 경우 문제가 되지 않으며 사용하지 않을 이유 또한 없습니다. 하지만 실수로 100% 패시팅된 밀도 높은 메시를 임포트하는 경우 생각보다 훨씬 높은 비용을 치러야 합니다. 또한 로우 폴리 메시에서 감지할 수 있는 하드 노멀 한계치를 사용하여 다른 DCC 패키지에서 생성된 밀도 높은 유기체 타입 표면에 임포트된 노멀은 나나이트에 불필요한 비용을 더할 수 있으므로 주의해야 합니다.
아래의 왼쪽 이미지에 있는 두 메시를 예시로 들어 설명해 보겠습니다. 왼쪽의 메시에는 패시팅된 노멀이 있고, 오른쪽에는 스무딩된 노멀이 있습니다. 나나이트의 트라이앵글 시각화 기능을 통해 보면 각각을 그리는 데 사용된 트라이앵글 수가 눈에 띄게 차이나는 것을 알 수 있습니다. 왼쪽의 패시팅된 예시는 오른쪽의 스무딩된 예시보다 훨씬 더 많은 트라이앵글을 그립니다.
패시팅된 노멀(왼쪽)과 스무딩된 노멀(오른쪽)이 있는 나나이트 활성화 메시 | 패시팅된 노멀(왼쪽)과 스무딩된 노멀(오른쪽)이 있는 나나이트 활성화 메시의 나나이트 트라이앵글 시각화 |
이미지를 클릭하면 최대 크기로 볼 수 있습니다. | 이미지를 클릭하면 최대 크기로 볼 수 있습니다. |
나나이트를 사용하는 폴리지
나나이트를 사용하는 폴리지는 베타 단계로 간주되며, 현재 활발하게 연구 개발되고 있습니다. 이 섹션은 언리얼 엔진 5.1의 나나이트에서 폴리지를 사용하는 방법에 대한 일정 수준의 가이드를 제공합니다.
디폴트 나나이트 세팅에서 나무와 같은 에셋의 경우, 거리에 따라 나무의 윗부분이 듬성해지는 것을 볼 수 있습니다. 이러한 사례는 연결되지 않은 각 파츠(나뭇잎 또는 풀잎)의 바운더리 부분에 열린 에지가 있는 군집 지오메트리의 특정한 형태입니다. 영역 보존(Preserve Area) 을 활성화하면 나나이트가 활성화되었을 때 이처럼 듬성해지는 현상을 방지하는 데 도움이 됩니다. 나나이트에서 트라이앵글 수를 줄여 멀리 있는 지오메트리를 단순화하면, 결국에는 이처럼 연결되지 않은 엘리먼트를 완전히 제거해야 합니다. 나나이트에 더 많은 정보가 없으면 주요 표면 영역이 소실되므로 듬성듬성한 결과물이 도출됩니다. 영역 보존을 사용하면 열린 바운더리 에지를 확장함으로써 남은 트라이앵글에 해당 소실 영역을 재분배합니다. 나뭇잎과 같은 대칭 셰이프를 확장하면 스케일 확장과 동일한 효과가 연출됩니다. 리본과 같은 비대칭 셰이프의 경우(예: 풀잎) 두껍게 하는 효과가 있습니다.
모든 폴리지 메시에서 영역을 보존하는 것이 좋지만, 폴리지가 아닌 메시에는 권장되지 않습니다.
나나이트 클러스터(Cluster) 시각화를 통해 영역 보존 세팅이 소실된 영역을 어떻게 재분배하는지 더 명확하게 볼 수 있습니다.
다음은 나나이트에서 폴리지 에셋을 사용 및 제작할 때 염두에 두어야 할 몇 가지 권장 사항입니다. 에픽게임즈에서는 최적의 접근법을 찾기 위해 계속해서 실험과 연구를 거듭하고 있습니다. 지금까지 알아낸 바에 따르면 나나이트를 사용하는 폴리지를 이전과는 다른 방식으로 만들어야 하지만, 고유의 장점을 활용한다면 나나이트를 사용하여 고퀄리티의 결과물을 더 신속하게 얻을 수 있습니다.
- 영역 보존 을 사용합니다(스태틱 메시 에디터에서 활성화).
- 마스크드 카드 대신 지오메트리를 사용합니다.
- 마스크드 머티리얼은 불투명 머티리얼에 비해 비용이 꽤 많이 듭니다. 가장 빠르게 결과물을 얻으려면 마스크드 머티리얼을 아예 사용하지 않는 것이 좋습니다.
- 단일 카드로 많은 엘리먼트를 표현하는 기존의 접근법을 나나이트와 함께 사용하면 나나이트를 사용하지 않을 때보다 더 느릴 수 있습니다. 카드 기반 폴리지에서 나나이트를 활성화하면 항상 퍼포먼스가 향상될 것이라고 기대해서는 안 됩니다.
- 마스크 처리된 픽셀은 그려진 픽셀과 비용이 거의 동일합니다.
- 나나이트에 지오메트리 폴리지를 사용하는 것이 나나이트 카드, 비나나이트 카드 등 카드를 사용하는 방식보다 속도가 빠른 것으로 나타났으며, 외관도 더 낫습니다.
- 언리얼 엔진 마켓플레이스의 메가스캔: 그래스 팩이 좋은 테스트용 샘플이 될 것입니다. 해당 팩은 각 엘리먼트가 독립적인 마스크드 하이 폴리 지오메트리 및 여러 엘리먼트가 단일 카드로 표현되는 마스크드 로우 폴리 카드를 모두 제공합니다.
- 월드 포지션 오프셋(World Position Offset, WPO)을 사용하는 경우 버텍스가 늘어나면 비용도 더 올라갑니다. WPO 로직은 제한적으로 사용하고, 늘 모니터링해야 합니다.
- 이 페이지의 군집 지오메트리 섹션에 설명된 문제가 여전히 적용됩니다. 위의 예시처럼 빽빽하게 우거진 숲은 모든 메시가 트라이앵글 수가 같은 솔리드 셰이프로 대체된 동일 씬보다 훨씬 느리게 렌더링됩니다.
나나이트에서 최대 월드 포지션 오프셋 디스플레이스먼트 사용하기
머티리얼 및 머티리얼 인스턴스에서 최대 월드 포지션 오프셋 디스플레이스먼트(Max World Position Offset Displacement) 세팅을 사용하여 상한을 WPO의 오프셋 양 허용치로 설정할 수 있습니다. 이는 특히 나나이트 메시에 유용한데, 나나이트 메시는 클러스터마다 개별적인 바운드가 있으며 GPU에서 개별적으로 컬링되어 작은 클러스터로 쪼개져 있기 때문입니다. WPO를 범위제한하는 것은 이러한 문제를 관리할 수 있는 좋은 방법입니다.
머티리얼의 디테일 > 월드 포지션 오프셋(World Position Offset) 카테고리 또는 머티리얼 인스턴스의 머티리얼 프로퍼티 오버라이드(Material Property Overrides) 에서 최대 월드 포지션 오프셋 디스플레이스먼트 세팅을 찾을 수 있습니다.
자세한 내용은 머티리얼 프로퍼티를 확인하시기 바랍니다.
나나이트 스태틱 디스플레이스먼트 매핑
이 기능은 실험단계입니다.
스태틱 메시 에디터에는 오프라인 적응형 테셀레이터를 통해 나나이트 활성화 메시에 디테일을 추가하는 옵션이 포함되어 있습니다. 테셀레이터는 구워진 디스플레이스먼트 맵을 사용하여 최적화된 나나이트 메시를 생성합니다. 이 텍스처 기반 접근법은 비파괴적이며, 스칼라 파라미터를 통해 테셀레이션 및 디스플레이스먼트 양을 조절할 수 있습니다.
나나이트 세팅의 디테일 패널에서 다음 작업을 수행합니다.
- 상대 오차 정리(Trim Relative Error) 를 0이 아닌 값으로 설정하여 테셀레이션 양을 조절합니다.
- 좋은 디폴트 값은 0.04이지만, 0.02 이상으로는 유지해야 합니다. 이 값은 메시를 테셀레이트할 때의 오차 수준을 대상으로 합니다. 값이 너무 작으면 트라이앵글을 많이 사용하게 되고 빌드 시간이 늘어납니다.
- 디스플레이스먼트 맵(Displacement Maps) 을 추가합니다.
- 인덱스(Index) 요소를 펼쳐 디스플레이스먼트에 사용할 텍스처(Texture) 를 추가합니다.
- 메시에 2개 이상의 머티리얼 슬롯이 있는 경우, 각 디스플레이스먼트 맵 인덱스는 대응되는 머티리얼 슬롯에 매핑됩니다. 예를 들어, 머티리얼 슬롯 0은 디스플레이스먼트 맵 인덱스 0에 매핑되고, 머티리얼 슬롯 1은 인덱스 1에 매핑되는 식입니다.
- 세기(Magnitude) 를 설정하여 디스플레이스먼트 양을 조절합니다.
- 변경사항 적용(Apply Changes) 을 클릭합니다.
나나이트 테셀레이션
이 기능은 실험단계입니다.
나나이트 테셀레이션은 런타임에서 디스플레이스먼트 맵 또는 프로시저럴 머티리얼을 사용한 나나이트 메시 수정을 허용하는 동적으로 프로그래밍 가능한 디스플레이스먼트입니다. 원본 메시 버텍스에서만 작동할 수 있는 월드 포지션 오프셋과 달리 나나이트 디스플레이스먼트는 런타임에서 추가 트라이앵글로 메시를 테셀레이션하여 디스플레이스먼트 맵의 디테일을 따릅니다. 현재 픽셀 밀도에 필요한 트라이앵글 디테일만 생성됩니다.
나나이트 테셀레이션에는 다음과 같은 장점이 있습니다.
- 작성 파이프라인에서 더 적은 디테일을 포함하는 소스 메시 사용.
- 머티리얼 기반 및 애니메이션 디스플레이스먼트.
- 디테일한 나나이트 랜드스케이프 생성.
나나이트 테셀레이션 사용 | 나나이트 테셀레이션 미사용 |
나나이트 테셀레이션을 활성화하려면 ConsoleVariables.ini 또는 프로젝트의 .ini 환경설정 파일에 다음 콘솔 변수를 설정해야 합니다.
// 이는 읽기 전용으로 프로젝트의 환경설정 파일에서 설정되어야 합니다.
r.Nanite.AllowTessellation=1
// 런타임에서 동적으로 토글될 수 있습니다.
r.Nanite.Tessellation=1
이러한 변수가 설정되면 다음 단계를 따라 머티리얼 에디터를 사용하여 테셀레이션을 설정할 수 있습니다.
- 메인 머티리얼 노드를 선택합니다.
- 디테일 패널의 나나이트 세팅에서 테셀레이션 활성화(Enable Tessellation) 상자를 체크합니다.
- 텍스처 샘플을 메인 머티리얼 노드의 디스플레이스먼트(Displacement) 입력에 연결합니다.
디스플레이스먼트 입력 값 범위는 0~1입니다.
머티리얼에서 테셀레이션을 사용할 때 두 가지 세팅을 설정합니다.
- 크기(Magnitude): 디스플레이먼트 핀의 0~1 범위가 매핑되는 최소에서 최대까지 측정되는 디스플레이스먼트의 높이입니다. 또한 컬링에 사용되는 바운드를 지정하므로 필요에 따라 크게 설정합니다.
이 값은 변경하지 않는 것이 좋습니다. 퍼포먼스에 큰 영향을 미치고, 의도하지 않은 효과가 발생할 수 있습니다. 추가 정보는 아래에서 '알아야 할 사항' 섹션을 참조하세요.
- 중앙(Center): 베이스 메시에서 변경이 없을 때에 해당하는 디스플레이스먼트 값을 지정합니다. 따라서 중간 회색이 중앙이고 메시 안팎 모두에서 동일한 디스플레이스먼트를 원하는 경우 0.5를 사용합니다. 외부로만 푸시하려는 경우 0으로 설정합니다.
알아야 할 사항:
- 나나이트 메시에서만 작동합니다. 테셀레이션과 디스플레이스먼트는 비나나이트 메시에서 또는 나나이트가 지원되지 않는 경우 무시됩니다.
- (오프라인 렌더러와 달리) 디스플레이스먼트는 셰이딩을 변경하지 않습니다. 해당 노멀 맵을 제공하거나 디스플레이스먼트 파생에서 노멀을 파생해야 합니다. 퀄리티와 압축을 위해 노멀 맵을 추가하는 것이 권장됩니다.
- 스칼라 디스플레이스먼트만 해당됩니다. 벡터 디스플레이스먼트는 현재 지원되지 않습니다.
- 디스플레이스먼트는 비정규화된 보간 버텍스 노멀을 따릅니다. 현재 셰이더에서 디스플레이스먼트 방향을 제어할 수 있는 옵션은 없습니다. 항상 노멀을 따릅니다.
- 디스플레이스먼트는 로컬 스페이스에 있고, 모든 종류의 오브젝트 스케일보다 앞섭니다. 따라서 머티리얼에서 지정된 디스플레이스먼트 크기는 메시 스케일 조절 전 오브젝트 스페이스 유닛에 있습니다. 이를 원할 때가 많지만 그렇지 않을 수도 있습니다. 예를 들어 스케일 조절한 큐브의 타일링 브릭이 벽이 되기를 원하는 경우가 있습니다. 향후 이를 해결하기 위해 월드 스페이스에 대한 옵션을 추가할 수 있습니다.
- 테셀레이션 및 디스플레이스먼트는 나나이트가 생성되었다면 랜드스케이프에서 작동합니다. 하지만 메시 랜드스케이프 생성의 경우 스케일이 자동으로 적용되므로 랜드스케이프 머티리얼에 더 작은 크기를 사용해야 합니다. 예를 들어 64배 더 작게 사용해야 합니다. 이는 앞서 언급한 옵션을 사용하여 해결될 가능성이 높습니다.
- 필요한 만큼 크기 세팅의 값을 작게 유지하세요. 대신 디스플레이스먼트 출력의 0~1 범위 전체를 사용하도록 하세요. 크기를 100으로 설정하고 디스플레이스먼트 출력에 연결한 값의 스케일을 낮춰 보정하지 마세요. 크기 값이 컬링에 대한 패치 바인딩에 사용되기 때문입니다. 크기가 큰 경우 특히 버추얼 섀도 맵에서 퍼포먼스에 중대한 영향을 미칠 수 있습니다.
- 언리얼 엔진 4에서의 하드웨어 테셀레이션과 같이 균열 없는 디스플레이스먼트를 위한 솔루션은 없습니다. 따라서 UV 이음새, 하드 에지 노멀 또는 부드럽지 않은 디스플레이스먼트에 영향을 미치는 모든 버텍스 어트리뷰트가 균열을 유발합니다.
- 테셀레이션은 월드 포지션 오프셋과 결합할 수 있습니다. 이 경우 WPO는 테셀레이션 전에 베이스 메시 버텍스에 적용됩니다. 언제나 디스플레이스먼트는 테셀레이션 이후 Diced 트라이앵글 버텍스에 적용됩니다.
- 테셀레이션은 픽셀 뎁스 오프셋과 호환되지 않습니다. 테셀레이션이 활성화되면 PDO는 무시됩니다.
- 테셀레이션은 오파시티 마스크와 결합할 수 있지만 퍼포먼스로 인해 픽셀별이 아닌 Diced 트라이앵글 레이트에서 마스킹이 이루어집니다. 대부분의 사용 사례에서는 괜찮지만 디더링에서는 제대로 작동하지 않고, 여기에서는 픽셀별 마스킹이 필요합니다.
- 디스플레이스먼트 맵에서 텍스처 압축 아티팩트가 명백하고 계단 단층처럼 표시될 수 있습니다. BC4를 사용하는 텍스처 압축 세팅 알파(Alpha)가 많은 경우에 적합합니다. Default/DXT5/BC3으로 RGBA의 알파에 저장되면 그 결과가 비슷할 것입니다. 경우에 따라 무압축이 필요할 수 있지만 부동 소수점은 과도할 가능성이 높습니다. 모든 압축 포맷을 사용하여 특히 노멀이 포함된 높이를 패킹하는 채널 패킹에서 아티팩트가 보일 가능성이 높습니다. 하이트맵이 다른 용도로 사용되었을 때 이전과는 반대로 작동할 수 있습니다.
- 디스플레이스먼트는 베이스 메시의 플랫 트라이앵글에 상대적입니다. 따라서 PN 트라이앵글이나 Catmull-Clark 서브디비전 표면 같은 곡면에서 시작하지 않습니다. 테셀레이션은 기본적으로 표면을 스무드하지 않습니다.
나나이트 스플라인
스플라인 메시는 랜드스케이프 터레인에 걸친 도로, 길 등의 스플라인 셰이프를 따라 메시를 디폼하는 데 사용됩니다. 나나이트가 활성화된 메시는 스플라인을 기본적으로 지원하며 랜드스케이프 스플라인과 블루프린트 스플라인으로 생성할 수 있습니다.
나나이트 스플라인 메시에는 잠재적인 시각적 문제가 있을 수 있습니다. 한 가지 예로, 나나이트가 활성화된 스태틱 메시로 스플라인 메시를 생성할 때 카메라가 스플라인 메시에서 멀어질수록 해당 스플라인 메시의 해상도가 떨어질 수 있습니다. 이는 나나이트가 더 낮은 레벨 오브 디테일(LOD)을 생성할 때 스플라인 메시의 디포메이션을 고려하지 않기 때문에 발생합니다. 그 결과, 디폼되지 않은 경우 동일 거리에서 눈에 띄지 않는 단순화는 스플라인 커브를 따라 늘어날 때 뚜렷해질 수 있습니다.
스태틱 메시 에디터 디테일 패널에 있는 나나이트 세팅 의 최대 에지 길이 인수 세팅을 통해 이러한 디포메이션 문제를 완화할 수 있습니다. 이 파라미터는 화면에서 메시의 버텍스 사이에 원하는 정도의 거리를 유지하기에 충분한 디테일을 유지하도록 나나이트를 강제함으로써 메시가 버텍스 밀도의 일부 한계치 미만에서 렌더링되는 것을 방지하여 이러한 문제를 완화합니다.
최대 에지 길이 인수의 디폴트값은 0으로, 이 메시에서 에지 길이가 고려되지 않음을 나타냅니다. 0보다 큰 값은 스크린 스페이스에서 연결된 두 버텍스 간의 원하는 거리를 나타냅니다. 구체적으로 설명하자면, 이 거리는 r.Nanite.MaxPixelsPerEdge
으로 환경설정된 원하는 나나이트 트라이앵글의 최소 에지의 배수로 표현됩니다.
이전 엔진 버전에서 나나이트 스플라인으로 업그레이드하기
언리얼 엔진 5.3 이하 버전으로 제작한 프로젝트의 경우, 이전에는 나나이트가 활성화된 스태틱 메시를 사용한 스플라인 메시 컴포넌트가 나나이트 메시에서 생성된 예비 메시를 일반적인 스태틱 메시로 렌더링하곤 했습니다. 이제 언리얼 엔진 5.4에서는 나나이트로 스플라인을 렌더링하는 것이 기본적으로 활성화되기 때문에, 이러한 메시가 나나이트로 렌더링되어 시각적 차이가 발생할 수 있습니다.
나나이트의 예비 메시를 스플라인 메시로 렌더링하는 이전 동작을 유지하기 위해 r.SplineMesh.RenderNanite
를 0 으로 설정할 수 있습니다.
비나나이트 및 나나이트의 하이브리드 콘텐츠 워크플로
다음 섹션에서는 나나이트가 활성화되어 있으면서 동시에 비나나이트 기능 및 플랫폼도 지원해야 하는 프로젝트에서 에셋 복제 없이 사용할 수 있는 워크플로를 집중적으로 설명합니다.
나나이트용 고해상도 메시 임포트하기
콘텐츠 브라우저 또는 스태틱 메시 에디터 에서 고해상도 메시를 기존 비나나이트 스태틱 메시에 대한 나나이트 표현으로 임포트할 수 있습니다.
콘텐츠 브라우저 의 스태틱 메시 에셋에서 컨텍스트 메뉴를 우클릭하여 레벨 오브 디테일(Level of Detail) > 고해상도(High Res) > 고해상도 임포트(Import High Res) 를 선택하고 임포트하고 싶은 파일로 이동합니다.
또는 스태틱 메시 에디터 의 디테일(Details) 패널에서 나나이트(Nanite) 세팅을 사용하는 고해상도 메시를 임포트할 수도 있습니다. 임포트(Import) 를 클릭하고 임포트하려는 파일로 이동합니다.
이 워크플로를 사용하면 임포트 프로세스에서 나나이트 지오메트리를 통해 예비 메시를 자동 생성하는 대신, 기존의 스태틱 메시 및 그 레벨 오브 디테일(LOD) 체인이 예비 메시 가 됩니다.
이러한 워크플로는 씬의 스태틱 메시 액터에서 나나이트 불허(Disallow Nanite) 세팅을 적용하며, 아래의 스태틱 메시 컴포넌트 옵션 섹션에 자세히 설명되어 있습니다.
머티리얼 워크플로
비나나이트 및 나나이트 머티리얼 작업 워크플로를 향상할 수 있는 2가지 방법이 있습니다. 하나는 머티리얼 그래프에서 노드를 사용하여 로직 경로를 나누는 것이고, 나머지 하나는 나나이트 렌더링에만 사용되는 오버라이드 머티리얼을 사용하는 것입니다.
나나이트 패스 스위치 노드
나나이트 패스 스위치(Nanite Pass Switch) 노드를 사용하면 나나이트로 렌더링할 때 머티리얼 그래프에서 특화된 행동을 정의할 수 있습니다.
비나나이트 패스로 렌더링하는 경우 디폴트(Default) 입력을 사용하여 일반적인 방법대로 머티리얼을 처리할 수 있습니다. 단순화하거나 특별히 나나이트 패스로 렌더링하고 싶은 머티리얼 로직에는 나나이트(Nanite) 입력을 사용합니다. 예를 들어 머티리얼에 나나이트가 지원하지 않는 기능이 사용되는 경우, 디폴트 입력에 대해서는 동일한 로직을 유지하고 나나이트 입력에는 더 친숙한 로직을 사용해도 됩니다.
나나이트 오버라이드 머티리얼
나나이트 오버라이드 머티리얼(Nanite Override Material) 슬롯은 머티리얼과 머티리얼 인스턴스에서 사용할 수 있습니다. 오버라이드 머티리얼을 설정하는 경우, 할당된 머티리얼 또는 머티리얼 인스턴스가 있는 나나이트 활성화 메시는 참조된 나나이트 오버라이드 머티리얼을 대신 사용하게 됩니다. 이는 나나이트 패스 스위치 노드를 사용하여 머티리얼 그래프 내에서 직접 로직을 관리하는 대신 나나이트 워크플로 전용 머티리얼을 생성할 수 있다는 뜻입니다.
머티리얼 인스턴스에서 나나이트 오버라이드 머티리얼 슬롯은 강제로 없음(None) 으로 기본 설정됩니다. 따라서 부모 머티리얼에서 오버라이드를 설정해도 해당 머티리얼의 자손 인스턴스에서 오버라이드가 자동으로 상속되지 않습니다.
아래 예시에서 조각상의 스태틱 메시 에셋에는 나나이트가 활성화되어 있으며, 머티리얼 인스턴스가 적용되어 있습니다. 해당 머티리얼 인스턴스의 나나이트 오버라이드 머티리얼 은 시연 목적으로 단순한 색상 변경이 설정되어 있습니다. 왼쪽의 스태틱 메시 액터는 메시가 나나이트로 렌더링되고 있으므로 나나이트 오버라이드 머티리얼을 표시합니다. 오른쪽의 스태틱 메시 액터는 나나이트 불허 가 액터에 설정될 때까지 같은 머티리얼을 표시하고, 나나이트 오버라이드 머티리얼을 비활성화하여 머티리얼 인스턴스의 비나나이트 베이스 머티리얼을 보여줍니다.
스태틱 메시 컴포넌트 옵션: 나나이트 불허
나나이트 활성화 스태틱 메시가 개별 씬 액터에서 나나이트 불허 세팅으로 나나이트 표현을 사용해야 하는 경우 설정할 수 있습니다. 이는 동일한 스태틱 메시 에셋을 사용하는 나나이트 및 비나나이트 액터가 섞여 있음을 뜻합니다.
다음 예시에는 단일 나나이트 활성화 스태틱 메시 에셋이 나와 있습니다. 왼쪽은 나나이트 메시 표현이고, 오른쪽은 나나이트 불허가 활성화된 모습입니다.
랜드스케이프 터레인
랜드스케이프 액터에서 나나이트를 활성화할 수 있습니다. 에디터에서 사용자 워크플로에 지장을 주지 않도록 나나이트 랜드스케이프 메시는 백그라운드에서 리빌드됩니다. 나나이트 랜드스케이프는 랜드스케이프 해상도를 향상하지 않지만 사용자가 활용할 수 있는 GPU 컬링, 자동 지오메트리 스트리밍, LOD와 같은 나나이트 런타임 기능을 제공합니다. 이는 특히 VSM과 같이 요구 사항이 많은 기능의 경우 일반적으로 런타임 퍼포먼스를 향상합니다.
랜드스케이프에서 나나이트를 활성화하고 사용하는 방법을 알아보려면 랜드스케이프에서 나나이트 사용하기 문서를 참조하세요.
일반 콘텐츠의 퍼포먼스
비교를 위해 다음 GPU 타이밍은 PlayStation 5의 언리얼 엔진 5 테크니컬 데모인 나나이트 세계의 루멘에서 가져왔습니다.
- 평균 렌더 해상도 1400p가 4K로 템포럴 업샘플링되었습니다.
- 이 데모의 거의 모든 메시에 해당하는 모든 나나이트 메시를 컬링 및 래스터화하는 시간은 ~2.5밀리초(ms)입니다.
- 거의 모든 지오메트리에 나나이트 메시가 사용되었습니다.
- 100% GPU 기반이므로 CPU 비용이 거의 들지 않습니다.
- 모든 나나이트 메시를 평가하는 시간은 ~2밀리초입니다.
- 씬에 존재하는 머티리얼당 드로 콜은 1회로, CPU 비용이 매우 낮습니다.
GPU 시간을 모두 합치면 약 4.5밀리초로, 언리얼 엔진 4의 뎁스 프리패스와 베이스 패스를 합친 것에 해당하는 시간입니다. 따라서 나나이트는 60FPS를 목표로 하는 게임 프로젝트에 적합합니다.
이러한 수치는 앞 섹션에서 언급된 퍼포먼스 저하를 유발하지 않는 콘텐츠에서 예상되는 수치입니다. 인스턴스와 고유 머티리얼 수가 매우 많은 경우에도 비용이 높아질 수 있기 때문에 나나이트 개발 과정에서 이 영역에 대해 집중적으로 작업이 진행되고 있습니다.
데이터 크기
나나이트를 통해 고도의 디테일을 확보할 수 있기 때문에, 지오메트리 데이터가 많이 늘어나면 게임 패키지 크기와 플레이어의 다운로드 용량도 커질 것이라고 생각할 수도 있습니다. 하지만 실제로 용량에 미치는 영향은 거의 없습니다. 나나이트에 특화된 메시 인코딩 덕분에 나나이트의 메시 포맷은 표준 스태틱 메시 포맷보다 훨씬 작습니다.
예를 들어 언리얼 엔진 5 샘플인 에인션트의 협곡에서 나나이트 메시는 입력 트라이앵글당 평균 14.4바이트입니다. 이는 디스크에서 100만 트라이앵글 나나이트 메시 하나의 평균 크기가 ~13.8MB라는 것을 의미합니다.
기존의 로우 폴리 메시와 노멀 맵을 나나이트의 하이 폴리 메시와 비교하면 다음과 같습니다.
로우 폴리 메시
스태틱 메시 압축 패키지 크기: 1.34MB |
나나이트 메시
스태틱 메시 압축 패키지 크기: 19.64MB |
압축 패키지 크기는 에셋 전체의 크기가 아닙니다. 이 메시에서만 사용되는 고유 텍스처 또한 고려해야 합니다. 메시에 사용되는 머티리얼 다수는 여러 노멀, 베이스 컬러, 메탈릭, 스페큘러, 러프니스, 마스크 텍스처 등으로 구성된 고유한 텍스처를 갖습니다.
이 에셋은 베이스 컬러와 노멀이라는 두 가지 텍스처만 사용하므로 고유 텍스처가 여러 개 있는 에셋만큼 디스크 공간을 많이 차지하지 않습니다. 예를 들어 트라이앵글 수가 최대 150만 개인 나나이트 메시의 크기(19.64MB)는 4k 노멀 맵 텍스처보다 작습니다.
텍스처 타입 | 텍스처 크기 | 디스크상의 크기 |
---|---|---|
BaseColor | 4k x 4k | 8.2MB |
노멀 | 4k x 4k | 21.85MB |
메시 및 텍스처의 총 압축 패키지 크기:
- 로우 폴리 메시: 31.04MB
- 하이 폴리 메시: 49.69MB
나나이트 메시는 이미 디테일 수준이 매우 높기 때문에 고유 노멀 맵을 다른 에셋과 공유되는 디테일 노멀 타일링으로 대체해 볼 수 있습니다. 이 경우 퀄리티에서 손실이 발생하지만 이는 매우 미미한 수준이며, 로우 폴리와 하이 폴리 버전 사이의 퀄리티 차이보다는 훨씬 적습니다. 따라서 150만 개의 트라이앵글로 구성된 나나이트 메시는 4k 노멀 맵이 있는 로우 폴리 메시보다 외관상 더 뛰어나면서 크기도 더 작아질 수 있습니다.
나나이트 활성화 메시 및 텍스처의 총 압축 패키지 크기: 27.83MB
텍스처 해상도와 디테일 노멀 맵으로 많은 실험을 할 수 있지만, 이러한 비교를 통해 나나이트 메시의 데이터 크기가 아티스트들에게 이미 익숙한 데이터와 크게 다르지 않다는 점을 알 수 있습니다.
마지막으로, 동일한 LOD0 상태에서 나나이트 압축과 하이 폴리를 사용하는 표준 스태틱 메시 포맷을 비교해 보겠습니다.
하이 폴리 스태틱 메시
스태틱 메시 압축 패키지 크기: 148.95MB |
나나이트 메시
스태틱 메시 압축 패키지 크기: 19.64MB |
이전의 나나이트 압축 크기인 19.64MB 와 비교하면 4 LOD의 표준 스태틱 메시 압축에 비해 7.6배 작습니다.
나나이트 압축과 데이터 크기는 언리얼 엔진의 향후 출시에서 향상할 핵심 영역입니다.
데이터 크기에 대한 일반적인 조언
나나이트와 버추얼 텍스처링 시스템을 속도가 빠른 SSD 하드 드라이브와 함께 사용할 경우 지오메트리와 텍스처의 런타임 예산에 대한 우려를 줄여줍니다. 하지만 이 데이터를 사용자에게 전달하는 방식에서 가장 큰 병목 구간이 발생합니다.
디스크상의 데이터 크기는 물리적 미디어나 인터넷을 통한 다운로드 등 콘텐츠 전달 방식을 고려할 때 중요한 요소이며 압축 기술만으로는 한계가 있습니다. 평균적인 최종 사용자의 인터넷 대역폭, 광학 미디어 크기 및 하드 드라이브 크기는 하드 드라이브 대역폭 및 액세스 지연시간, GPU 컴퓨팅 파워 및 나나이트 같은 소프트웨어 기술과 동일한 레이트로 스케일링되지 않습니다. 따라서 데이터를 고객에게 전달하는 것은 여전히 까다로운 문제입니다.
디테일 수준이 매우 높은 메시를 효율적으로 렌더링하는 것은 나나이트에 있어서 큰 문제가 아니지만, 디스크에 데이터를 저장하는 것은 반드시 확인이 필요합니다.
시각화 모드
나나이트에는 현재 씬에서 데이터를 검토하는 여러 시각화 모드가 포함되어 있습니다.
레벨 뷰포트에서 뷰 모드(View Modes) 드롭다운의 나나이트 시각화(Nanite Visualization) 에 커서를 올려 나오는 옵션 중 선택합니다.
개요(Overview) 시각화는 이미지 중앙에 렌더링된 씬을 표시하고, 엄선된 나나이트 시각화를 화면 주변에 참고용으로 표시합니다.
선택할 수 있는 나나이트 시각화 모드는 다음과 같습니다.
나나이트 시각화 | 설명 |
---|---|
마스크(Mask) | 나나이트(초록)와 비나나이트(빨강) 지오메트리를 표시하는 시각화입니다. |
트라이앵글(Triangles) | 현재 씬에서 나나이트 메시의 모든 트라이앵글을 표시합니다. |
클러스터(Clusters) | 현재 씬 뷰에서 렌더링되는 모든 트라이앵글 그룹을 색으로 표시합니다. |
프리미티브(Primitives) | 인스턴스 스태틱 메시(Instance Static Mesh, ISM)의 모든 인스턴스에 대한 컴포넌트를 같은 색으로 표시하는 시각화입니다. |
인스턴스(Instances) | 씬의 각 인스턴스마다 다른 색을 적용하는 시각화입니다. |
오버드로(Overdraw) | 씬 지오메트리에서 발생하는 오버드로의 양을 표시합니다. 마스크 처리된 픽셀을 비롯해 평가된 모든 픽셀은 오버드로 뷰에 추가됩니다. 가깝게 스택된 작은 오브젝트가 큰 오브젝트보다 더 많은 오버드로를 유발합니다. |
머티리얼 ID(Material ID) | 개별 나나이트 메시의 각 머티리얼 ID를 별도의 색으로 표시합니다. |
라이트맵 UV(Lightmap UV) | 나나이트 메시 표면의 UV 좌표를 표시하는 시각화입니다. |
WPO 평가(Evaluate WPO) | 월드 포지션 오프셋을 사용하는 나나이트 활성화 지오메트리의 색상을 녹색으로, 그렇지 않은 지오메트리를 빨간색으로 표시합니다. |
나나이트는 나나이트 시각화 메뉴에서 추가적인 시각화 옵션을 활성화하는 고급 시각화 모드가 포함되어 있습니다. 이 시각화 모드는 나나이트의 다양한 로우 레벨 측면을 디버깅 또는 프로파일링하는 프로그래머에게 유용합니다.
콘솔 변수 r.Nanite.Visualize.Advanced 1
로 이 고급 시각화 모드를 활성화할 수 있습니다.
콘솔 변수 및 명령
다음과 같은 통계 및 콘솔 변수를 사용하여 나나이트를 디버깅 및 환경설정할 수 있습니다.
콘솔 변수 r.Nanite 0
을 사용하여 런타임에 전체적으로 나나이트 렌더링을 활성화 및 비활성화할 수 있습니다. 나나이트를 비활성화하는 것은 지원되지 않는 플랫폼을 에뮬레이트하는 좋은 방법입니다.
나나이트 예비 렌더링 모드
나나이트는 비활성화되거나 플랫폼이 나나이트를 지원하지 않을 때를 대비해 예비 메시 렌더링 모드를 제공합니다. 콘솔 변수 r.Nanite.ProxyRenderMode
로 사용할 모드를 제어할 수 있습니다.
- 0 은 디폴트 모드로, 설정할 경우 예비 메시를 렌더링하거나 스크린 스페이스 기반 LOD를 사용합니다. 여기에는 스태틱 메시 에디터 프로퍼티의 최소 LOD 인식이 포함됩니다. 이 내용은 위의 예비 메시 섹션에 설명되어 있습니다.
- 1 은 나나이트 활성화 메시의 모든 렌더링을 비활성화합니다.
- 2 는 1 모드와 비슷하게 작동하지만, 스태틱 메시 에디터에서 표시(Show) > 나나이트 예비(Nanite Fallback) 시각화가 나나이트 예비를 렌더링하도록 합니다.
예비 렌더 모드 1과 2는 나나이트 없이 지원 가능한 것보다 인스턴스 수가 훨씬 더 많은 씬에 유용합니다. 두 모드를 사용하면 나나이트를 지원하지 않는 플랫폼의 에디터에서 씬을 열 수 있습니다.
예를 들어, 언리얼 엔진 5 샘플 프로젝트인 '에인션트의 협곡'에서 나나이트를 비활성화하면 일반 드로 콜이 수십, 수천 개 발생하여 나나이트 미지원 플랫폼에서 맵을 열기가 어렵습니다.
나나이트 통계 명령
NaniteStats 명령은 뷰포트 우측 상단에 나나이트 컬링 통계의 오버레이를 추가합니다.
명령 실행인자는 나나이트가 화면에 어떤 통계를 표시할지 지정하는 데 사용됩니다. 실행인자가 제공되지 않으면 기본 뷰가 사용됩니다.
NaniteStats List
를 사용하여 디버그 출력에서 사용 가능한 모든 뷰를 표시할 수 있으며, 이는 다음과 같습니다.
- 기본
- VirtualShadowMaps
사용 가능한 경우 ShadowAtlas
및 CubemapShadows
에 대한 다른 통계도 확인할 수 있습니다. 확인하고 싶은 통계 목록 이름 앞에 명령을 입력하여 뷰를 선택합니다. 예를 들어 NaniteStats VirtualShadowMaps
처럼 입력하면 됩니다.
패스가 2개인 오클루전 컬링을 사용하는 뷰의 경우, 통계가 메인 패스와 포스트 패스에 대한 별도의 버킷으로 분리됩니다.
나나이트 스트리밍 풀 크기 제어하기
콘솔 변수 r.Nanite.Streaming.StreamingPoolSize
를 사용하여 나나이트 스트리밍 데이터를 저장할 전용 메모리의 양을 제어할 수 있습니다. 더 큰 풀을 사용하면 씬에서 이동할 때 IO와 압축 해제 작업이 줄어들지만 메모리 점유율이 늘어납니다.
풀이 뷰에 필요한 모든 데이터를 저장하기에 충분하지 않은 경우 캐시 스래싱이 발생하여 정적인 뷰에서도 스트리밍이 안정화되지 않을 수 있습니다.
이 콘솔 변수는 런타임에 변경할 수 없으며 반드시 환경설정(.ini) 파일에서 지정해야 합니다.
나나이트 스트리밍 데이터를 시각화하려면, 표시 > 나나이트 > 스트리밍 지오메트리(Streaming Geometry) 에서 스트리밍 지오메트리 표시 플래그를 사용합니다. 비활성화 시 나나이트 메시는 메모리에 항상 상주하는 퀄리티 레벨로만 렌더링됩니다.
단일 패스에서 최대 클러스터 설정하기
콘솔 변수 r.Nanite.MaxCandidateClusters
및 r.Nanite.MaxVisibleClusters
로 단일 패스에서 사용되는 후보 및 가시 클러스터의 최대 수를 지정할 수 있습니다. 이 값은 중간 버퍼의 크기 설정에 사용되며, 디폴트값은 일반적인 게임 렌더링 작업을 고려하여 선택되었습니다.
이 버퍼를 동적으로 크기 변경하거나 오버플로 시에 자동으로 퀄리티를 낮추는 메커니즘은 제공되지 않으므로 씬 복잡도에 비해 버퍼가 너무 작아져서 렌더링 아티팩트를 유발할 수 있으며, 이는 일반적으로 누락되거나 깜빡이는 지오메트리로 나타납니다. 이러한 유형의 아티팩트가 발생하면 NaniteStats
를 사용하여 후보 및 가시 클러스터에 대해 바운드를 보수적으로 설정합니다. 보다 구체적인 내용은 ClustersSW 및 ClustersHW 통계를 살펴보세요. 후보 클러스터의 메모리 비용은 현재 12바이트이며, 가시 클러스터는 16바이트입니다.
이 콘솔 변수는 런타임에 변경할 수 없으며 반드시 환경설정(.ini) 파일에서 지정해야 합니다.