티스토리 뷰
나나이트란?
완전히 가상화된 지오메트리. 계층형 LOD라고 한다. 영화 수준의 에셋을 직접 사용할 수 있다. 최적화, LOD 생성 프레임속도를 위해 퀄리티를 낮추는 작업이 더이상 필요하지 않다.
자동 레벨 오브 디테일이라고 할 수 있다.
레벨 오브 디테일 (이하 LOD) 는 게임의 성능을 높이는 중요한 요소였다. 카메라와 물체가 가까이 있을때는 high poly를, 멀리 있을때는 low poly를 사용하여 랜더링할 삼각형의 개수를 줄이는 기술이다.
위의 사진처럼 저-중-고 레벨의 폴리곤을 따로 사용하기 위해서는 디자이너가 작업을 3번 해야한다. 화면속의 물체가 100개인데 전부 LOD를 적용시키기 위해서는 300번의 작업이 필요한 것이다.
보통 low 폴리곤을 사용할 때에는 high 폴리곤 모델을 Baked 하여 로우 폴리곤에 입힐 노말맵을 만든다.
따라서 로우 폴리를 사용하기 위한 작업의 단계는
1. 하이 폴리 만들기
2. 로우 폴리 만들기
3. 하이 폴리를 구워서 로우 폴리에 입힐 노말맵 만들기
4. 노말맵을 로우폴리에 적용
정도의 단계를 거쳐야 하는 것이다.
나나이트는 이 단계를 전부 무시할 수 있다. 하이 폴리곤 모델만 있다면 언리얼 엔진5에서 자동으로 LOD를 적용시켜 주는것이다.
나나이트의 장점
언리얼 엔진5 공식문서에 따르면 나나이트의 장점은 다음과 같다.
- 지오메트리 복잡도가 대폭 증가하여 실시간으로 구현할 수 있는 트라이앵글과 오브젝트 수가 늘어났습니다.
- 프레임 예산이 더 이상 폴리곤 수, 드로 콜, 메시 메모리 사용에 의해 제한되지 않습니다.
- 이제 ZBrush 스컬프팅 및 사진측량 기술 스캔 등 영화 수준의 소스 아트를 직접 임포트할 수 있습니다.
- 노멀 맵 텍스처에 디테일을 굽는 대신 하이 폴리 디테일을 사용할 수 있습니다.
- 레벨 오브 디테일(Level of Detail, LOD)이 자동으로 처리되며 더 이상 개별 메시의 LOD를 수동으로 구성할 필요가 없습니다.
- 퀄리티 손실이 거의 발생하지 않으며, 특히 LOD 트랜지션의 경우 더욱 그렇습니다.
나나이트의 작동 방식
나나이트는 삼각형 매쉬를 그룹지어 클러스터 단위로 나눈다. 그리고 오브젝트 단위가 아닌, 클러스터 단위로 랜더링이 진행된다. 클러스터 단위로 랜더링이 진행되면, 한 오브젝트에서 깨짐 현상이 발생할 것 같지만, 언리얼 공식문서에 다음과 같이 나와있다.
- 렌더링되는 동안 클러스터는 카메라 뷰를 바탕으로 즉시 다양한 LOD로 전환되며, 동일한 오브젝트 내에서 인접한 클러스터에 크랙 없이 완벽하게 연결됩니다. 데이터는 온디맨드 방식으로 스트리밍되므로 표시되는 디테일만 메모리를 차지합니다. 나나이트는 기존 드로 콜을 완전히 우회하는 자체 렌더링 패스를 실행합니다. 나나이트 파이프라인을 검토해야 하는 경우에는 시각화 모드를 사용하면 됩니다.
그럼 이 클러스터 단위 랜더링이 어떤식으로 성능상의 이점을 가져오는가?
일반적으로 사용하는 오클루전 컬링은, 화면에 그릴 대상을 오브젝트 단위로 구분짓는다. 앞의 물체가 뒤의 물체를 완전히 가려버릴 경우, 뒤의 물체를 그리지 않지만 만약 뒤의 물체가 조금이라도 보이는 경우에는 뒤의 물체를 그리고, 앞의 물체를 그리게 된다.
위 그림에서 오른쪽의 상황에서는 뒤에 있는 빨간 원을 그리지 않게 된다. (알아보기 편하도록 파란 박스를 반투명하게 하고 뒤의 원을 남겨둠.)
왼쪽의 상황에서는 빨간 원이 조금이라도 보이므로 빨간원을 전부 그린 뒤, 파란 원을 그리게 된다.
클러스터를 이용한 컬링은 다음 그림과 같다.
빨간 원을 4 가지로 클러스터화 시켜서 보이는 클러스터 단위로 컬링을 진행하게 되면 그리는 삼각형의 개수를 줄일 수 있게된다. 오브젝트 전체를 그리지 않기 때문에 오클루전 컬링과 비교했을 때 성능상의 이점이 굉장히 커지는 것이다. 그래서 나나이트를 활성화 한 스태틱 메시는 더 빠르게 렌더링되는 것이다.
퍼포먼스 및 콘텐츠 문제
문서에서 말하는 나나이트의 원칙은 다음과 같다.
'나나이트는 픽셀보다 훨씬 많은 수의 트라이앵글을 그릴 필요가 없다는 디자인 원칙을 따릅니다.'
'나나이트가 화면에 그리려고 하는 트라이앵글 수가 씬 내 소스 데이터의 지오메트리 복잡도와 관계없이 상당히 일정하며 픽셀 수에 비례한다는 것을 의미합니다.'
1픽셀 안의 물체가 1트라이앵글 이상이 될 수 없다는 소리이다.
이런 원칙을 가지므로, 나나이트는 군집 지오메트리에 나쁜 영향을 미치게 된다.
군집 지오메트리란, 머리카락, 나뭇잎, 잔디 등 연결성이 없는 수많은 작은 요소들이 원거리에서 볼륨을 이루는 것을 말한다. 군집 지오메트리가 나나이트에 나쁜 영향을 미치는 이유 2가지를 설명한다.
1. 나나이트는 트라이앵글 끼리의 차이가 인식할 수 없을 만큼 작다고 판단하면 보다 간소화 시킨 트라이앵글을 선택한다. 그런데 연속된 평면이 아닌 군집 지오메트리에서는 이 기능이 잘 작동하지 않게된다.
이는 픽셀보다 훨씬 많은 트라이앵글을 그리게 한다.
2. 오클루전 컬링은 아주 미세하며 미세함의 정도는 픽셀 단위를 넘어선다. 따라서 층층히 쌓인 지오메트리의 경우 다수의 뎁스 레이어를 빌드하여 막대한 오버 드로를 유발하며, 과도한 오버 드로로 인해 나나이트는 같은 픽셀에 비해 더 많은 트라이앵글을 그리게 된다.
2번째가 잘 이해되지 않을 수 있는데, 문서에 있는 내용을 읽으면 이해가 될 것이다.
'거리가 멀어져서 거리 차이가 픽셀보다 작아지면 오버드로가 발생합니다.'
거리가 멀어져서 오브젝트 끼리의 거리 차이가 픽셀보다 작아지면, 나나이트는 어떤 것이 위에 있는지 판단하지 못하고 두 개를 모두 그려버리는 것이다.
'Unreal' 카테고리의 다른 글
[UE] 언리얼 기초 (0) | 2023.03.22 |
---|---|
[UE5] 버추얼 쉐도우 맵 VSM (0) | 2023.03.20 |
[UE] 나이아가라 (0) | 2023.03.18 |
UE5 character controller (0) | 2023.03.11 |
UE5 공부하다가 개빡쳐서 쓰는 글 (0) | 2023.03.10 |
- Total
- Today
- Yesterday
- 정렬
- 스택/큐
- IMGUI
- 탐욕법
- 데디케이티드
- sort
- Heap
- BFS
- 고득점kit
- 재귀
- DFS
- 고득점 Kit
- 채팅서버
- C++
- LV2
- Unreal 5.1
- 디자인 패턴
- 누적합
- Ue
- 힙
- LV3
- 해시
- level3
- 개인공부
- greedy
- UE5
- 완전탐색
- FPS
- 너비우선탐색
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |