※ 개인 공부 및 해석 자료이며 잘못된 부분이 있을 수 있습니다.
나나이트와 스태틱 메시
나나이트 메시 역시 근본적으로는 트라이앵글 메시이고, 임포트 과정에서 추가적인 프로세스를 거친다. 이 프로세스에서는 폴리곤들을 계층(Hierarchical) 구조의 클러스터로 분석되어 분해된 상태로 저장된다. 이 클러스터는 런타임 렌더링동안 카메라와 상호작용하며 LOD 조절이되며 하나의 오브젝트 내에서 이웃한 클러스터와 Seam이 느껴지지 않게 매끄럽게 연결되어 렌더링 된다. 기존 폴리곤 기반의 스태틱메시의 서브메시 당 LOD 그룹을 생성하는게 아닌 더 잘게 쪼개진 클러스터 그룹 단위로 LOD 전환이 발생한다. 렌더링 되지 않는 클러스터 데이터는 메모리를 차지하지 않으며, 그려지고 있는 디테일 메시만 메모리를 차지한다. 일반 스태틱 메시 드로우콜과는 별개로 다른 렌더링 패스를 통한다.
월드에서 정적인 메시로 배치하여 라이트맵을 생성할 대상이 아니라면 라이트맵 UV 생성 프로퍼티를 끄는게 좋다. 디테일한 메시는 이 옵션이 임포트 과정에서의 프로세스 시간을 늘릴 것이다. 또한 그 용량도 커져서 비효율적이다. 기존 파이프라인에서 스태틱 메시, Instanced Static Mesh, Hierarchical Instanced Static Mesh, Geometry Collection 유형을 나나이트 메시로서 사용 가능하다. 스켈레탈 애니메이션, 모프 타겟, 머티리얼에서 수정하는 월드 포지션 오프셋, 스플라인 메시는 나나이트 메시로서 사용 불가능하다. 스플라인 메시의 경우 런타임에 다이나믹하게 디포메이션이 되지 않는 프랍인 경우 단일 메시로 베이크하여 나나이트 메시로 바꾸는 우회가 가능하다.
커스텀 뎁스와 스텐실, 테셀레이션과 디스플레이스먼트는 사용할 수 없다. 임포트된 버텍스 컬러는 사용할 수 있지만 인스턴스가 가진 개별 버텍스 컬러는 사용할 수 없다.
기존 파이프라인에서는 메시의 모든 정점을 대상으로 Triangle을 생성하는 하드웨어 래스터라이징을 수행해야 했으나, 나나이트는 컴퓨트 셰이더로 제작된 프로세스 내에서 소프트웨어 래스터라이징을 수행한다. 모든 정점에 대해 수행하지 않고, 렌더링 되어야 할 클러스터(메쉬렛)에 대해서만 선별적으로 작업하므로 기대하던 것보다 훨씬 많은 정점의 메시를 처리할 수 있게 된다.
기존 파이프라인에서 병목이 걸리던 부분은 폴리곤 숫자라고 볼 수 있는데, GPU 성능이 많이 좋아졌다고 하지만 나나이트 메시 만큼 많은 하이폴 메시들을 바로 사용할 정도는 아니었다. 언리얼 엔진 5에서 나나이트와 궁합이 좋은 기술로는 GI를 담당하는 루멘과, Virtual Shadow Maps가 있는데, 이 두 기술 모두 적은 폴리곤과 디테일 텍스쳐로 구성된 렌더링 방식보다 노멀맵을 쓰지 않고 하이폴로만 이루어진 메시를 렌더링 할 때 시너지 효과를 볼 수 있다. 클러스터 기반 새로운 렌더링 방식에서는 로우 리소스의 폴리곤 카운트는 더 이상 병목이 아니고, 픽셀 셰이더가 병목을 일으키게 될 것이다. 따라서 높은 퀄리티와 성능을 한 번에 잡기 위해서는 하이폴리곤 메시와 가벼운 픽셀 셰이더가 합쳐져야 이상적인 파이프라인이 완성된다.
에인션트의 협곡의 보스로 등장하는 골렘은 스켈레탈 메시 기반 구조 위에 나나이트 스태틱 메시를 어태치에 디포메이션 없이 나나이트를 이용해 그렸다. 디폼이 없는 갑주와 같은 방식으로 구성된 캐릭터는 위와 같은 방식으로 우회해 구현할 수 있다.
루멘과 GI, 리플렉션
처음에는 루멘도 스크린 스페이스 GI의 개선버전인가 싶었지만, 기존 UE4의 SSGI를 완전히 대체하는 새로운 방식의 라이팅 솔루션이다. 디스턴스 필드 앰비언트 오클루전을 대체하고, 리플렉션에서도 SSR을 대체하여 사용된다. 전체적으로 레이트레이싱을 기반으로 하지만 퓨어 레이트레이싱은 아니고 GPU 라이트매스를 이용한 세미 레이트레이싱이다. 하드웨어 레이트레이싱을 사용할 수도 있지만 기본적으로는 소프트웨어 레이트레이싱을 기반으로 동작한다. 메시 디스턴스 필드를 생성하며, 이는 루멘의 소프트웨어 RT에 필요하므로 필수적으로 요구되는 옵션이다. 루멘은 다이나믹 GI와 리플렉션 메서드에 사용될 수 있다.
나나이트 메시가 적극 활용되면서 루멘 역시 메시 디테일로부터 보다 아름답고 정교한 GI를 얻어낼 수 있고, Indirect 라이팅 연산에서는 낮은 해상도 노멀 디테일을 사용하여 리얼타임 퍼포먼스를 커버한다. 포스트 프로세싱 볼륨을 사용하여 부분적으로 루멘 세팅을 오버라이드 할 수 있다. 섹션별로 디테일을 조절하거나 루멘의 사용여부를 결정할 수 있다.
리얼타임으로 업데이트 되기는 하지만, 한 프레임에 모든 계산이 됨을 보장하는 것은 아니다. 여러 단계에 거쳐 Progressive하게 계산하며 광원으로부터 점차 GI가 업데이트 되는 식으로 전파된다. 로컬 라이팅은 부분적으로 동작하기에 빠르게 업데이트되지만 전역적으로 영향을 미치는 태양, 디렉셔널 라이트의 변화에는 눈으로 식별할 수 있을만큼 몇 초 동안 변화할 수도 있다.
루멘을 사용하는 경우 스태틱 라이팅을 전체적으로 비활성화 해야한다. 어차피 사전 연산 라이팅이 제거되므로 스태틱 라이팅을 허용하지 않고 제거하여 레벨 로드시 라이트맵을 로드하지 않도록 설정할 수 있다. 아직까지 루멘과 라이트맵은 공존할 수 없기 때문에 다 날려버리는게 옳다. 차후에 리플렉션 관련해서 라이트맵과 함께 작업가능하도록 개선한다고는 하는데 그건 그 때 가서 고민해도 되겠다.
나나이트는 아직 스태틱 메시에 한정하여 힘을 발휘하지만, 루멘은 스켈레탈 메시에도 안정적으로 셀프 섀도우와 셀프 오클루전을 제공한다. 스태틱 라이트를 꺼버리고, G버퍼를 확보한 다음, r.GBufferDiffuseSampleOcclusion=1을 Configuration에 추가해 벤트 노멀을 만들 수 있도록 하고, 머티리얼에서 사용하면 된다.
소프트웨어 레이트레이싱은 스태틱메시만 지원하고, 스켈레탈 메시에 루멘을 사용하기 위해서는 하드웨어 레이트레이싱을 사용해야한다. 사용한다고 하더라도 스켈레탈메시의 트라이앵글 개수에 따라 성능저하가 심하다.
루멘의 테크 개요 페이지는 아직 한국어 번역이 진행되지 않아 직접 번역해보면서 어떻게 돌아가는지를 파악했다. 대부분의 알아야 할 정보들은 기술 디테일 페이지에 포함되어 있었다.
2021.05.31 - [언리얼] - 언리얼: 3. 루멘 기술 개요 한국어 번역
삭제되는 기능
캐스케이드 파티클 시스템.
아직까지는 레거시로 포함되어있지만, 더 이상 지원이 되지 않거나 EA 후에는 엔진에서 빠질 가능성이 있다. 나이아가라 파티클 시스템으로 포팅을 염두에 두어야 함.
참고 자료 링크
- 나나이트 가상화 지오메트리 | 언리얼 엔진 문서 (unrealengine.com)
- Introduction to Turing Mesh Shaders | NVIDIA Developer Blog
- Inside Unreal Engine 5: how Epic delivers its generational leap • Eurogamer.net
- A Macro View of Nanite – The Code Corsair (elopezr.com)
- Lumen Technical Details | 언리얼 엔진 문서 (unrealengine.com)
- 루멘 글로벌 일루미네이션 및 리플렉션 | 언리얼 엔진 문서 (unrealengine.com)
'Unreal > Articles' 카테고리의 다른 글
언리얼: 튜링 메시 셰이더 블로그 번역 (0) | 2021.06.01 |
---|---|
언리얼: 에인션트의 협곡 골렘 구현 방식 간단 살펴보기 (0) | 2021.05.31 |
언리얼: 루멘 기술 개요 한국어 번역 (0) | 2021.05.31 |
언리얼: 메타 휴먼 크리에이터 EA 신청 및 소스 파일 다운로드(MAYA) (0) | 2021.05.31 |
언리얼: Vault Cache 경로 변경하기 (0) | 2021.05.30 |