대부분의 경우, 나나이트는 화면 해상도에 맞추어 아무런 문제없이 스케일링됩니다. 이는 세밀한 LOD와 오클루전 컬링이라는 두 가지 핵심 기술 덕분입니다. 일반적으로 이는 나나이트가 화면에 그리려고 하는 트라이앵글 수가 씬 내 소스 데이터의 지오메트릭 복잡도와 관계없이 상당히 일정하며 픽셀 수에 비례한다는 것을 의미합니다.
나나이트는 픽셀보다 훨씬 많은 수의 트라이앵글을 그릴 필요가 없다는 디자인 원칙을 따릅니다.
콘텐츠 유형이 스케일링에 사용되는 나나이트 기법에 나쁜 영향을 미치는 경우도 있지만, 그렇다고 해서 나나이트를 해당 콘텐츠에 전혀 사용할 수 없거나 기존 파이프라인보다 렌더링이 훨씬 빠르다는 의미는 아닙니다. 이러한 콘텐츠 유형에서는 씬 복잡도가 아니라 픽셀에 따른 스케일링이 적용되지 않는다는 뜻입니다. 이러한 상황에 대해서는 언리얼 엔진에서 제공하는 프로파일링 기능을 사용하여 모니터링할 수 있습니다.
군집 지오메트리
군집 지오메트리는 헤어, 나뭇잎, 잔디 등 연결성이 없는 수많은 작은 요소가 원거리에서 볼륨을 이루는 것을 가리킵니다. 이러한 지오메트리 타입은 나나이트의 LOD와 오클루전 컬링 기술에 나쁜 영향을 미칩니다. 나나이트는 본질적으로 계층형 LOD로, 작은 트라이앵글을 커다란 트라이앵글로 간소화하고 그 차이가 인식할 수 없을 만큼 작다고 판단하면 보다 간소화된 것을 선택합니다. 연속적인 평면이 아닌 군집 지오메트리에서는 이 기능이 잘 작동하지 않으며, 멀리서 보면 솔리드 표면이 아니라 부분적으로 불투명한 클라우드처럼 보입니다. 따라서 나나이트는 군집 지오메트리를 일반적인 솔리드 표면과 같이 적극적으로 축소하지 못하며, 그 결과 커버된 픽셀에 대해 더 많은 트라이앵글이 그려지게 됩니다.
군집 지오메트리가 나쁜 영향을 미치는 두 번째 최적화 사례는 오클루전 컬링입니다. 오클루전 컬링은 아주 미세하며, 그 미세함의 정도가 픽셀 단위를 넘어섭니다. 구멍으로 가득한 지오메트리, 더 심한 경우 구멍이 가득하고 층층이 쌓인 지오메트리는 화면상의 영역이 그 뒤에 있는 것을 검게 처리하기 전에 다수의 뎁스 레이어를 빌드하게 만들기 때문에 막대한 오버드로를 유발합니다. 예컨대 화면에 8x8 픽셀 영역이 있다고 가정하고 모든 픽셀이 채워지기 전에 얼마나 많은 뎁스 레이어가 그려져야 하는지 생각해 볼 수 있습니다. 이렇게 과도한 오버드로로 인해 나나이트는 같은 픽셀 수에 대해 더 많은 트라이앵글을 그리게 되고 결과적으로 렌더링이 느려지게 됩니다.
폴리지는 이 문제가 가장 명확하게 드러나는 사례이지만, 그렇다고 해서 나나이트를 폴리지 타입 메시에 아예 사용하면 안 된다는 것은 아닙니다. 자세한 내용은 아래의 나나이트를 사용하는 폴리지 섹션을 참고하세요. 다양한 사용 사례로 실험해 보고 프로젝트에서 어떤 것이 잘 작동하는지 살펴보는 것이 좋습니다. 이러한 메시 타입에서 나나이트의 좋은 퍼포먼스를 보장하기 위해 프로파일링 툴을 사용할 수 있습니다.
가깝게 스택된 표면
기존 메시의 오클루전 컬링은 실질적인 한계 때문에 대규모 스케일에서의 킷배싱 워크플로를 거의 불가능하게 만듭니다. 나나이트의 세밀한 오클루전 컬링은 이 워크플로를 개발 과정에서 더욱 원활하게 사용할 수 있도록 지원합니다. 위의 군집 지오메트리 섹션에서 설명했듯이, 보이는 표면 바로 아래 가까이에 있는 숨겨진 표면에서 오버드로가 발생할 수 있습니다. 보이는 표면 아래에 지오메트리가 잘 묻혀 있는 경우 나나이트가 이를 상당히 저렴한 비용으로 탐지하고 컬링하여 거의 비용 소모 없이 처리할 수 있습니다. 그러나 최상단 표면 가까이에 지오메트리가 쌓여 있는 경우 나나이트는 어떤 것이 위에 있는지 판단하지 못하고 두 개를 모두 그립니다.
이처럼 컬링 시 발생하는 특수한 문제는 최악의 시나리오로, 이 경우 나나이트가 어떤 표면이 위에 있는지 인식하지 못하고 모든 레이어를 그리게 됩니다. 이 부정확성은 화면의 크기와 거리에 따라 커지며, 10cm 정도에서는 레이어가 분리되어 가까이에서 봐도 양호할 수 있지만 거리가 멀어져 거리 차이가 픽셀보다 작아지면 오버드로가 발생합니다.
아래 예시에서 카메라를 이동해 캐릭터가 서 있는 영역 아래를 내려다보면, 나나이트 '오버드로' 시각화를 통해 스택된 표면이 어떻게 렌더링되고 있는지 확인할 수 있습니다. 밝은 영역은 다른 영역보다 오버드로가 더 많이 발생한다는 것을 가리킵니다.
오버드로 시각화는 오버드로 문제를 찾아낼 수 있는 가장 효과적인 방법입니다. 어느 정도의 오버드로는 예상해야 하지만, 과도한 양은 나나이트 컬링 및 래스터화 비용을 높이고, 이 과정에서 씬 복잡도와 무관하게 나나이트의 스케일링 효과가 떨어지게 됩니다.
패시팅된 하드 에지 노멀
패시팅된 노멀이 있는 디테일 수준이 매우 높은 메시를 임포트하는 경우에 유의하세요. 이는 두 가지의 서로 다른 폴리곤 간의 노멀이 스무딩되지 않음을 의미합니다. 이 문제는 흔히 발생하며 놓치기 쉬우므로 주의해야 합니다. 메시에서 공유하는 버텍스 양이 적더라도 렌더링 퍼포먼스와 데이터 크기 양쪽에서 비용이 매우 높아질 수 있기 때문입니다. 이상적으로는 메시의 버텍스 수가 트라이앵글 수보다 적어야 합니다. 비율이 2:1 이상인 경우, 특히 트라이앵글 수가 많으면 문제가 될 수 있습니다. 비율이 3:1이면 메시가 완전히 패시팅되어 모든 트라이앵글이 자체 버텍스 3개를 갖게 되며 다른 트라이앵글과 버텍스를 전혀 공유하지 않게 됩니다. 이렇게 되는 가장 흔한 이유는 노멀이 스무딩되지 않아서 같지 않기 때문입니다.
버텍스가 많을수록 데이터도 많아진다는 것을 항상 염두에 두어야 합니다. 또한 이 경우 버텍스 트랜스폼 작업이 늘어나며, 2:1보다 비율이 높아지면 렌더링 패스 속도가 떨어지게 됩니다. 하드 서피스 모델링에서 의도적으로 사용할 경우 문제가 되지 않으며 사용하지 않을 이유 또한 없습니다. 하지만 실수로 100% 패시팅된 밀도 높은 메시를 임포트하는 경우 생각보다 훨씬 높은 비용을 치러야 합니다. 또한 로우 폴리곤 메시에서 감지할 수 있는 하드 노멀 한계치를 사용하여 다른 DCC 패키지에서 생성된 밀도 높은 유기체 타입 표면에 임포트된 노멀은 나나이트에 불필요한 비용을 더할 수 있으므로 주의해야 합니다.
아래의 왼쪽 이미지에 있는 두 메시를 예시로 들어 설명해 보겠습니다. 왼쪽의 메시에는 패시팅된 노멀이 있고, 오른쪽에는 스무딩된 노멀이 있습니다. 나나이트 '트라이앵글' 시각화 기능을 통해 비교해 보면, 각각을 그리는 데 사용된 트라이앵글 수가 눈에 띄게 차이나는 것을 알 수 있습니다. 왼쪽의 패시팅된 예시는 오른쪽의 스무딩된 예시보다 훨씬 더 많은 트라이앵글을 그립니다.
왼쪽에는 패시팅된 노멀, 오른쪽에는 스무딩된 노멀이 있는 나나이트 활성화 메시 | 왼쪽에는 패시팅된 노멀, 오른쪽에는 스무딩된 노멀이 있는 나나이트 활성화 메시의 나나이트 트라이앵글 시각화 |
나나이트 스켈레탈 메시
나나이트 스켈레탈 메시는 다음과 같은 기능을 지원합니다.
새로운 스켈레탈 메시 API를 통해 렌더링이 간소화됩니다.
전체 메시를 위한 단일 드로 콜.
버추얼 섀도 맵을 통한 섀도잉
지오메트리 LOD가 없습니다. 나나이트 스켈레탈 메시는 애니메이션 LOD를 사용합니다.
애니메이션 뱅크를 통한 인스턴싱.
나나이트를 사용한 폴리지
나나이트를 사용하는 폴리지는 베타 단계로 간주되며, 현재 활발하게 연구 개발되고 있습니다. 이 섹션에서는 나나이트를 통해 폴리지 지오메트리를 사용하는 방법에 대한 몇 가지 지침을 제공하지만, 나나이트 폴리지 기능 세트는 아닙니다.
디폴트 나나이트 세팅에서 나무와 같은 에셋의 경우, 거리에 따라 나무의 윗부분이 듬성해지는 것을 볼 수 있습니다. 이러한 사례는 연결되지 않은 각 파츠(나뭇잎 또는 풀잎)의 바운더리 부분에 열린 에지가 있는 군집 지오메트리의 특정한 형태입니다. '영역 보존'을 활성화하면 나나이트가 활성화되었을 때 이러한 솎아내기를 방지하는 데 도움이 됩니다. 나나이트에서 트라이앵글 수를 줄여 멀리 있는 지오메트리를 단순화하면, 결국에는 이처럼 연결되지 않은 엘리먼트를 완전히 제거해야 합니다. 나나이트에 더 많은 정보가 없으면 주요 표면 영역이 소실되므로 듬성듬성한 결과물이 도출됩니다. 영역 보존을 사용하면 열린 바운더리 에지를 확장함으로써 남은 트라이앵글에 해당 소실 영역을 재분배합니다. 나뭇잎과 같은 대칭 셰이프를 확장하면 스케일 확장과 동일한 효과가 연출됩니다. 리본과 같은 비대칭 셰이프의 경우(예: 풀잎) 두껍게 하는 효과가 있습니다.
모든 폴리지 메시에 '영역 보존'을 사용하는 것이 좋지만, 씬 폴리지로 사용하지 않을 메시에는 권장되지 않습니다.
나나이트 '클러스터' 시각화를 통해 '영역 보존' 세팅이 소실된 영역을 어떻게 재분배하는지 더 명확하게 볼 수 있습니다.
다음은 나나이트에서 폴리지 에셋을 사용 및 제작할 때 염두에 두어야 할 몇 가지 권장 사항입니다. 에픽게임즈에서는 최적의 접근법을 찾기 위해 계속해서 실험과 연구를 거듭하고 있습니다. 지금까지 알아낸 바에 따르면 나나이트를 사용하는 폴리지를 이전과는 다른 방식으로 만들어야 하지만, 고유의 장점을 활용한다면 나나이트를 사용하여 고퀄리티의 결과물을 더 신속하게 얻을 수 있습니다.
'영역 보존'을 사용합니다(스태틱 메시 에디터에서 활성화).
마스크드 카드 대신 지오메트리를 사용합니다.
마스크드 머티리얼은 불투명 머티리얼에 비해 비용이 꽤 많이 듭니다. 가장 빠르게 결과물을 얻으려면 마스크드 머티리얼을 아예 사용하지 않는 것이 좋습니다.
단일 카드로 많은 엘리먼트를 표현하는 기존의 접근법을 나나이트와 함께 사용하면 나나이트를 사용하지 않을 때보다 더 느릴 수 있습니다. 카드 기반 폴리지에서 나나이트를 활성화하면 항상 퍼포먼스가 향상될 것이라고 기대해서는 안 됩니다.
마스크 적용된 픽셀은 그려진 픽셀과 비용이 거의 동일합니다.
나나이트에 지오메트리 폴리지를 사용하는 것이 나나이트 카드, 비나나이트 카드 등 카드를 사용하는 방식보다 속도가 빠른 것으로 나타났으며, 외관도 더 낫습니다.
팹의 메가스캔: 그래스(Megascans: Grass) 팩에 테스트하기 좋은 예시가 포함되어 있습니다. 해당 팩은 각 엘리먼트가 독립적인 마스크드 하이 폴리 지오메트리 및 여러 엘리먼트가 단일 카드로 표현되는 마스크드 로우 폴리 카드를 모두 제공합니다.
월드 포지션 오프셋(World Position Offset, WPO)을 사용하는 경우 버텍스가 늘어나면 비용도 더 올라갑니다. WPO 로직은 제한적으로 사용하고, 늘 모니터링해야 합니다.
이 페이지의 군집 지오메트리 섹션에 설명된 문제가 여전히 적용됩니다. 위의 예시처럼 빽빽하게 우거진 숲은 모든 메시가 트라이앵글 수가 같은 솔리드 셰이프로 대체된 동일 씬보다 훨씬 느리게 렌더링됩니다.
나나이트에서 최대 월드 포지션 오프셋 디스플레이스먼트 사용하기
머티리얼 및 머티리얼 인스턴스에서 최대 월드 포지션 오프셋 디스플레이스먼트(Max World Position Offset Displacement) 세팅을 사용하여 상한을 WPO의 오프셋 양 허용치로 설정할 수 있습니다. 이는 특히 나나이트 메시에 유용한데, 나나이트 메시는 클러스터마다 개별적인 바운드가 있으며 GPU에서 개별적으로 컬링되어 작은 클러스터로 쪼개져 있기 때문입니다. WPO를 범위제한하는 것은 이러한 문제를 관리할 수 있는 좋은 방법입니다.
머티리얼의 디테일 > 월드 포지션 오프셋(World Position Offset) 카테고리 또는 머티리얼 인스턴스의 '머티리얼 프로퍼티 오버라이드(Material Property Overrides)'에서 '최대 월드 포지션 오프셋 디스플레이스먼트(Max World Position Offset Displacement)' 세팅을 찾을 수 있습니다.
자세한 내용은 머티리얼 프로퍼티를 참고하세요.
나나이트 스태틱 디스플레이스먼트 매핑
나나이트의 이 기능은 실험 단계입니다.
스태틱 메시 에디터에는 오프라인 어댑티브 테셀레이터를 통해 나나이트 활성화 메시에 디테일을 추가하는 옵션이 포함되어 있습니다. 테셀레이터는 구워진 디스플레이스먼트 맵을 사용하여 최적화된 나나이트 메시를 생성합니다. 이 텍스처 기반 접근법은 비파괴적이며, 스칼라 파라미터를 통해 테셀레이션 및 디스플레이스먼트 양을 조절할 수 있습니다.
나나이트 세팅의 디테일 패널에서 다음 작업을 수행합니다.
'상대 오차 정리(Trim Relative Error)'를 0이 아닌 값으로 설정하여 테셀레이션 양을 조절합니다.
적절한 디폴트 값은 0.04이지만, 0.02 이상으로는 유지해야 합니다. 이 값은 메시를 테셀레이트할 때의 오차 수준을 대상으로 합니다. 값이 너무 작으면 트라이앵글을 많이 사용하게 되고 빌드 시간이 늘어납니다.
'디스플레이스먼트 맵(Displacement Maps)'을 추가합니다.
'인덱스(Index)' 엘리먼트를 펼쳐 디스플레이스먼트에 사용할 '텍스처(Texture)'를 추가합니다.
메시에 2개 이상의 머티리얼 슬롯이 있는 경우, 각 디스플레이스먼트 맵 인덱스는 대응되는 머티리얼 슬롯에 매핑됩니다. 예를 들어 '머티리얼 슬롯 0(Material Slot 0)'은 '디스플레이스먼트 맵 인덱스 0(Displacement Maps Index 0)'에 매핑되고, '머티리얼 슬롯 1(Material Slot 1)'은 '디스플레이스먼트 맵 인덱스 1(Displacement Maps Index 1)'에 매핑되는 식입니다.
'규모(Magnitude)'를 설정하여 디스플레이스먼트 양을 조절합니다.
'변경사항 적용(Apply Changes)'을 클릭합니다.
나나이트 테셀레이션
나나이트의 이 기능은 실험 단계입니다.
나나이트 테셀레이션은 동적으로 프로그래밍 가능한 디스플레이스먼트로, 디스플레이스먼트 맵 또는 프로시저럴 머티리얼을 사용하여 나나이트 메시를 런타임에서 수정할 수 있게 해 줍니다. 원본 메시 버텍스에서만 작동하는 월드 포지션 오프셋과는 다르게 나나이트 디스플레이스먼트는 런타임에서 메시를 디스플레이스먼트 맵의 디테일에 맞게 추가 트라이앵글로 테셀레이션합니다. 현재 픽셀 밀도에 필요한 트라이앵글 디테일만 생성됩니다.
나나이트 테셀레이션에는 다음과 같은 장점이 있습니다.
작성 파이프라인에서 더 적은 디테일을 포함하는 소스 메시 사용.
머티리얼 기반 및 애니메이션되는 디스플레이스먼트
디테일이 살아 있는 나나이트 랜드스케이프 생성
나나이트 테셀레이션을 활성화하려면 ConsoleVariables.ini 또는 프로젝트의 .ini 환경설정 파일에 다음 콘솔 변수를 설정해야 합니다. 환경설정 파일:
// This is read-only and must be set in the config file for the project.
r.Nanite.AllowTessellation=1
// This can be dynamically toggled at runtime.
r.Nanite.Tessellation=1
이러한 변수가 설정되면, 다음 단계를 따라 머티리얼 에디터를 사용하여 테셀레이션을 구성할 수 있습니다.
메인 머티리얼 노드를 선택합니다.
'디테일' 패널의 '나나이트(Nanite)' 세팅에서 '테셀레이션 활성화(Enable Tessellation)' 박스를 체크합니다.
'텍스처 샘플(Texture Sample)'을 메인 머티리얼 노드의 '디스플레이스먼트(Displacement)' 입력에 연결합니다.
'디스플레이스먼트' 입력 값 범위는 0~1입니다.
머티리얼에서 테셀레이션을 사용할 때 두 가지 세팅을 설정합니다.
규모(Magnitude): '디스플레이먼트' 핀의 0~1 범위가 매핑되는 최소에서 최대까지 측정되는 디스플레이스먼트의 높이입니다. 또한 컬링에 사용되는 바운드를 지정하므로 필요에 따라 크게 설정합니다.
이 값은 퍼포먼스에 큰 영향을 미치고, 의도하지 않은 효과가 발생할 수 있습니다. 추가 정보는 아래에서 '알아야 할 사항' 섹션을 참조하세요.
중앙(Center): 베이스 메시에서 변경사항이 없는 경우에 해당하는 디스플레이스먼트 값을 지정합니다. 따라서 중간 회색이 중앙이고 메시 안팎 모두에서 동일한 디스플레이스먼트를 원하는 경우 0.5를 사용합니다. 외부로만 푸시하려는 경우 0으로 설정합니다.
또한 머티리얼의 '디테일' 패널에서 '디스플레이스먼트 페이드(Displacement Fade)'를 활성화하여 나나이트 테셀레이션을 최적화할 수 있습니다. 여기에는 두 가지 세팅이 있습니다.
시작 페이드 크기(픽셀)(Start Fade Size (Pixels)): 디스플레이스먼트 페이드 아웃을 시작할 때 화면상의 픽셀로 표시되는 최대 디스플레이스먼트 크기입니다. 이 값은 '끝 페이드 크기' 값보다 큰 값이어야 합니다.
끝 페이드 종료 크기(픽셀)(End Fade Size (Pixels)): 페이드 아웃이 완료되고 디스플레이스먼트가 비활성화될 때 화면상의 픽셀로 표시되는 최대 디스플레이스먼트의 크기입니다. 이 값은 '페이드 시작 크기' 값보다 작은 값이어야 합니다.
알아야 할 사항:
나나이트 메시에서만 작동합니다. 테셀레이션과 디스플레이스먼트는 비나나이트 메시에서 또는 나나이트가 지원되지 않는 경우 무시됩니다.
(오프라인 렌더러와 달리) 디스플레이스먼트는 셰이딩을 변경하지 않습니다. 해당 노멀 맵을 제공하거나 디스플레이스먼트 파생에서 노멀을 파생해야 합니다. 퀄리티와 압축을 위해 노멀 맵을 추가하는 것이 권장됩니다.
스칼라 디스플레이스먼트만 해당됩니다. 벡터 디스플레이스먼트는 현재 지원되지 않습니다.
디스플레이스먼트는 비정규화된 보간 버텍스 노멀을 따릅니다. 디스플레이스먼트 방향은 항상 노멀을 따르므로, 현재 셰이더에서 디스플레이스먼트 방향을 제어할 수 있는 옵션은 없습니다.
디스플레이스먼트는 로컬 스페이스에 있고, 모든 종류의 오브젝트 스케일보다 앞섭니다. 따라서 머티리얼에서 지정된 디스플레이스먼트 크기는 메시 스케일 조절 전 오브젝트 스페이스 유닛에 있습니다. 이를 원할 때가 많지만 그렇지 않을 수도 있습니다. 예를 들어 스케일 조절한 큐브의 타일링 브릭이 벽이 되기를 원하는 경우가 있습니다. 향후 이를 해결하기 위해 월드 스페이스에 대한 옵션을 추가할 수 있습니다.
테셀레이션 및 디스플레이스먼트는 나나이트가 생성되었다면 랜드스케이프에서 작동합니다. 하지만 메시 랜드스케이프 생성의 경우 스케일이 자동으로 적용되므로 랜드스케이프 머티리얼에 더 작은 크기를 사용해야 합니다. 64배 작은 크기를 권장합니다. 이는 앞서 언급한 옵션을 사용하여 해결될 가능성이 높습니다.
필요한 만큼 규모 세팅의 값을 작게 유지하세요. 대신 디스플레이스먼트 출력의 0~1 범위 전체를 사용하도록 하세요. 크기를 100으로 설정하고 디스플레이스먼트 출력에 연결한 값의 스케일을 낮춰 보정하지 마세요. 크기 값이 컬링에 대한 패치 바인딩에 사용되기 때문입니다. 크기가 큰 경우 특히 버추얼 섀도 맵에서 퍼포먼스에 큰 영향을 미칠 수 있습니다.
현재 균열 없는 디스플레이스먼트를 위한 솔루션은 없습니다. 따라서 UV 이음새, 하드 에지 노멀 또는 부드럽지 않은 디스플레이스먼트에 영향을 미치는 모든 버텍스 어트리뷰트가 균열을 유발합니다.
테셀레이션은 월드 포지션 오프셋과 결합할 수 있습니다. 이 경우 WPO는 테셀레이션 전에 베이스 메시 버텍스에 적용됩니다. 언제나 디스플레이스먼트는 테셀레이션 이후 Diced 트라이앵글 버텍스에 적용됩니다.
테셀레이션은 픽셀 뎁스 오프셋과 호환되지 않습니다. 테셀레이션이 활성화되어 있으면 PDO는 무시됩니다.
테셀레이션은 오파시티 마스크와 결합할 수 있지만 퍼포먼스로 인해 픽셀별이 아닌 Diced 트라이앵글 레이트에서 마스킹이 이루어집니다. 대부분의 사용 사례에서는 괜찮지만 디더링에서는 제대로 작동하지 않고, 여기서는 픽셀별 마스킹이 필요합니다.
디스플레이스먼트 맵에서 텍스처 압축 아티팩트가 명백하고 계단 단층처럼 표시될 수 있습니다. BC4를 사용하는 텍스처 압축 세팅 알파(Alpha)가 많은 경우에 적합합니다. Default/DXT5/BC3으로 RGBA의 알파에 저장되면 그 결과가 비슷할 것입니다. 경우에 따라 무압축이 필요할 수 있지만 부동 소수점은 과도할 가능성이 높습니다. 모든 압축 포맷을 사용하여 특히 노멀이 포함된 높이를 패킹하는 채널 패킹에서 아티팩트가 보일 가능성이 높습니다. 하이트맵이 다른 용도로 사용되었을 때 이전과는 반대로 작동할 수 있습니다.
디스플레이스먼트는 베이스 메시의 플랫 트라이앵글에 상대적입니다. 따라서 PN 트라이앵글이나 Catmull-Clark 서브디비전 표면 같은 곡면에서 시작하지 않습니다. 테셀레이션은 기본적으로 표면을 스무드하지 않습니다.
나나이트 스플라인
스플라인 메시는 랜드스케이프 터레인에 걸친 도로, 길 등의 스플라인 셰이프를 따라 메시를 디폼하는 데 사용됩니다. 나나이트 활성화 메시는 기본적으로 스플라인을 지원하며, 랜드스케이프 스플라인 및 블루프린트 스플라인으로 생성할 수 있습니다.
전경의 나나이트 메시와 나나이트 스플라인이 있는 예시 씬. 이 씬은 라이팅과 나나이트 트라이앵글 시각화를 보여줍니다.
나나이트 스플라인 메시에는 비주얼 관련한 문제가 있을 수 있습니다. 한 가지 예로, 나나이트가 활성화된 스태틱 메시로 스플라인 메시를 생성할 때 카메라가 스플라인 메시에서 멀어질수록 해당 스플라인 메시의 해상도가 떨어질 수 있습니다. 이는 나나이트가 더 낮은 레벨 오브 디테일(LOD)을 생성할 때 스플라인 메시의 디포메이션을 고려하지 않기 때문에 발생합니다. 그 결과, 디폼되지 않은 경우 특정 거리에서 눈에 띄지 않는 단순화가 스플라인 커브를 따라 스트레칭될 때 뚜렷해질 수 있습니다.
스태틱 메시 에디터 '디테일' 패널에 있는 '나나이트 세팅(Nanite Settings)'의 '최대 에지 길이 인수(Max Edge Length Factor)' 세팅을 통해 이러한 디포메이션 문제를 완화할 수 있습니다. 이 파라미터는 화면에서 메시의 버텍스 사이에 원하는 정도의 거리를 유지하기에 충분한 디테일을 유지하도록 나나이트를 강제함으로써 메시가 버텍스 밀도의 일부 한계치 미만에서 렌더링되는 것을 방지하여 이러한 문제를 완화합니다.
최대 에지 길이 인수의 디폴트값은 0으로, 이 메시에서 에지 길이가 고려되지 않음을 나타냅니다. 0보다 큰 값은 스크린 스페이스에서 연결된 두 버텍스 간의 원하는 거리를 나타냅니다. 구체적으로 설명하자면, 이 거리는 r.Nanite.MaxPixelsPerEdge로 환경설정된 원하는 나나이트 트라이앵글의 최소 에지의 배수로 표현됩니다.
이전 엔진 버전에서 나나이트 스플라인으로 업그레이드하기
언리얼 엔진 5.3 이하 버전으로 제작한 프로젝트의 경우, 이전에는 나나이트가 활성화된 스태틱 메시를 사용한 스플라인 메시 컴포넌트가 나나이트 메시에서 생성된 예비 메시를 일반적인 스태틱 메시로 렌더링하곤 했습니다. 이제 언리얼 엔진 5.4 이상 버전에서는 나나이트로 스플라인을 렌더링하는 것이 기본적으로 활성화되기 때문에, 이러한 메시가 나나이트로 렌더링되어 시각적 차이가 발생할 수 있습니다.
예비 메시를 스플라인 메시로 렌더링하는 이전 비헤이비어를 유지하기 위해 r.SplineMesh.RenderNanite를 0으로 설정할 수 있습니다.