설득력 있는 빽빽한 숲은 퍼포먼스 보스전이다: 수천 그루의 하이폴리 나무, 계층진 투명도, 지평선까지 뻗은 인스턴스가 그것이다. 당신은 임포스터(카메라를 향한 빌보드로 어느 각도에서든 3D 나무를 위장하는)로 끝나는 규율 있는 LOD 체인, 공격적인 인스턴싱과 컬링, 그리고 저렴한 먼 나무들이 자신을 드러내지 않도록 하는 몇 가지 셰이딩 트릭으로 이 싸움을 이긴다. 이 글은 풀 메시에서 빌보드까지의 체인 전체, 팔면체 임포스터 트릭, 그리고 무겁게 최적화된 숲이 죽어 보이지 않게 하는 법을 걷는다.
여기의 모든 나무는 카메라로부터 다른 거리에 있으므로, 모든 나무는 다른 비용이어야 한다. 저렴한 숲의 예술은 가까이 있는 것들에만 폴리곤을 쓰고 나머지는 설득력 있게 위장하는 것이다.
핵심 아이디어: 거리별로 지불하라
5미터 떨어진 나무와 500미터 떨어진 나무는 같은 비용이어서는 안 된다. LOD 체인은 가까이에서 풀 디테일을 쓰고, 거리와 함께 점진적으로 더 저렴한 표현을, 평평한 빌보드로 끝낸다: 그래서 숲이 자라는 동안 총비용이 평평하게 유지된다.
전체 게임은 카메라가 겨우 해상하는 나무에 정가를 지불하기를 거부하는 것이다. 가까이에서 나무는 개별 리프 카드가 있는 풀 메시다; 멀리서 그것은 평평한 이미지가 완벽하게 재현하는 한 줌의 픽셀이다. LOD(레벨 오브 디테일) 체인이 그것을 형식화한다: 같은 나무의 여러 버전을 감소하는 비용으로, 화면 크기로 교체한다, 그래서 만 그루의 숲이 대략 디테일로 보이는 것만큼 비용이 든다, 풀 품질의 각 나무의 합이 아니라. 그것 없이는 밀도가 프레임 시간을 선형으로 땅으로 스케일한다; 그것과 함께 당신은 같은 예산으로 나무 수를 훨씬 더 높이 밀어붙일 수 있다.
LOD 체인, 단계별로
LOD0 리프 카드가 있는 풀 메시(가까이); LOD1–2 축소된 지오메트리와 단순화된 잎(중간); LOD3 몇 개의 카드나 단일 카드; 최종 LOD 임포스터/빌보드(멀리). 각 단계는 대략 비용을 반으로 줄이며 교체는 보이지 않게 유지된다.
일반적인 폴리지 LOD 체인은 대략 이렇게 진행된다: LOD0, 모든 리프 카드가 있는 풀 디테일 메시, 플레이어 바로 옆의 나무를 위해; LOD1–LOD2, 축소된 줄기 지오메트리와 더 적고 더 큰 리프 카드, 중간 지면을 위해; LOD3, 극적으로 단순화된 카드 클러스터; 그리고 최종 임포스터(본질적으로 평평한 이미지) 모든 먼 것을 위해. 기술은 전이 거리와 블렌드에 있다, 교체가 튀지 않도록. 디더된 또는 크로스페이드된 LOD 전이는 스위치를 숨긴다; 잘못된 거리에서의 딱딱한 튐이 환상을 깨뜨리는 징후다. 실제 카메라에 맞춰 거리를 튜닝하라, 기본값이 아니라.
임포스터: 어느 각도에서든 3D 위장
임포스터(팔면체 임포스터)는 나무를 수십 개의 각도에서 아틀라스로 사전 렌더링한 다음, 가장 가까운 캡처된 뷰를 빌보드로 보인다. 평평한 빌보드와 달리 카메라가 주위를 움직이는 동안 정확해 보인다: 저렴하지만 3D 같은 표현이다.
체인의 먼 끝은 가장 큰 절약이 사는 곳이며, 임포스터는 그것들을 수용 가능하게 만드는 영리한 트릭이다. 단순한 빌보드 (카메라를 향해 도는 하나의 평평한 이미지)는 정면에서는 좋아 보이지만 당신이 움직이면 부자연스럽게 평평해지고 미끄러진다. 팔면체 임포스터는 나무를 구 주위에 배치된 많은 시점에서 사전 렌더링하고, 텍스처 아틀라스에 패킹하고, 현재 카메라 방향에 가장 가까운 캡처된 각도를 표시함으로써(가장 가까운 몇 개 사이에서 블렌딩) 이를 해결한다. 결과는 비용의 일부로 어느 각도에서든 진짜 3D 나무로 읽힌다, 그래서 임포스터가 믿을 만한 먼 숲의 등뼈다. 그것들은 한 번 베이크되고 그리는 데 거의 비용이 들지 않는다.
지상층은 인스턴스 수를 빠르게 배가한다. 덤불은 나무와 같은 규율이 필요하다: 인스턴스화하고, LOD하고, 세게 컬링하라. 80미터의 양치식물은 전혀 그려져서는 안 된다.
인스턴싱과 컬링
반복되는 나무를 인스턴스로 그려 수천 개가 몇 개의 드로 콜만 들도록 하고, 공격적으로 컬링하라: 화면 밖에 있는 것은 프러스텀-컬링하고 작은 것은 거리-컬링하라. 인스턴싱은 CPU 비용을 고친다; 컬링은 보이지 않는 것에 대해 지불하는 것을 멈춘다.
완벽한 LOD가 있어도, 만 그루의 나무를 개별 오브젝트로 제출하면 CPU가 묻힌다. 인스턴싱은 나무의 모든 복사본을 몇 개의 드로 콜로 무너뜨린다, 그것은 진짜 숲을 위해 협상 불가능하다: 그리고 그것이 정확히 스캐터를 네이티브 엔진 인스턴스로 베이크하는 것이 당신에게 주는 것이다. 그 위에 무자비하게 컬링하라: 프러스텀 컬링은 뷰 밖의 모든 것을 떨어뜨리고, 거리 컬링은 지상 잡동사니와 특정 범위를 넘어서 알아채기에 너무 작은 잔가지를 제거한다. 특히 풀과 덤불은 딱딱하고 가까운 컬 거리를 가져야 한다, 왜냐하면 나무보다 빠르게 인스턴스 수를 배가하기 때문이다. 밀도를 칠하고 인스턴스 메시로 베이크하는 워크플로 (Numivo의 것 같은)는 엔진에 빽빽한 숲이 필요로 하는 정확히 그 배치되고 컬 가능한 형태를 넘겨준다.
저렴한 숲을 살아 있게 유지하기
무거운 최적화는 숲을 정적이고 죽어 보이게 만들 수 있다: 가까운 LOD에 미묘한 바람, 인스턴스 간 색과 스케일 변화, 그리고 먼 임포스터가 평평한 판지로 읽히지 않게 하는 셰이딩으로 이에 대항하라.
이 모든 효율의 위험은 훌륭하게 돌아가면서 생기 없게 느껴지는 숲이다. 세 가지 저렴한 터치가 그것을 되돌린다: 바람: 가까운 LOD에 버텍스 애니메이션으로 가까운 폴리지가 움직이게, 먼 임포스터가 멈춰 있어도(아무도 300미터의 정적인 나무를 알아채지 못한다). 변화: 스케일, 회전, 인스턴스당 틴트를 무작위화해 눈이 반복을 잡지 못하게 한다; 동일한 나무는 복사-붙여넣기의 징후다. 그리고 임포스터에 셰이딩 관리: 태양 각도가 바뀔 때 명백한 판지로 평평해지지 않도록 그들의 조명을 베이크하라. 아낀 프레임 시간을 플레이어가 실제로 보는 가까운 이 디테일에 쓰라, 그러면 최적화된 숲이 최적화되지 않은 것만큼 살아 있게 느껴진다: 몇 배 더 빠르게 돌면서.
훔칠 가치가 있는 현장 수치
- 비용 원칙: 거리별로 지불, 먼 나무는 가까운 나무처럼 비용을 지불해서는 안 된다
- LOD 체인: 풀 메시 → 축소 → 카드 클러스터 → 임포스터, 각각 ~비용을 반으로 줄인다
- 임포스터 = 아틀라스의 사전 렌더링된 각도 → 어느 뷰에서든 3D 같은 빌보드
- 반복을 인스턴스로(적은 드로 콜) + 작은 먼 폴리지를 세게-컬
- 살아 있게 유지: 가까운-LOD 바람 + 인스턴스당 변화 + 베이크된 임포스터 셰이딩
미니 FAQ
빌보드 대 임포스터, 차이는? 빌보드는 카메라를 향해 도는 하나의 평평한 이미지이며 당신이 주위를 움직이면 평평해진다. 임포스터는 많은 각도를 저장하고 올바른 것을 보여주므로 3D에서 버틴다. 플레이어가 궤도를 돌거나 지나치는 모든 것에는 임포스터를 사용하라; 단순한 빌보드는 정말 멀리 있는 정적인 배경에만 좋다.
나무는 몇 개의 LOD 레벨이 필요한가? 일반적으로 세 개에서 네 개 더하기 임포스터. 더 많은 것이 자동으로 더 나은 것은 아니다: 각 레벨은 저작과 메모리 비용이다. 각 교체를 작고 알아채지 못하는 단계로 만들기에 충분한 것이 목표이지, 최대값이 아니다.
Nanite가 이것을 쓸모없게 만드는가? 그것은 지오메트리 측면을 바꾼다(Nanite는 전통적인 LOD 없이 밀한 메시 디테일을 처리한다). 하지만 투명도(리프 카드), 인스턴싱 규율, 컬링은 여전히 중요하며, 임포스터는 먼 거리에 여전히 유용하다. 원칙은 살아남는다; 툴링이 이동한다.
숲 성능을 가장 자주 죽이는 것은? 겹치는 투명 리프 카드에서 오는 오버드로와 컬링되지 않은 지상 폴리지. 리프 카드를 조이고, 덤불을 가까이서 컬링하고, 모든 것을 인스턴스화하라: 그 셋이 나무 메시에 손을 대기 전에 예산의 대부분을 되찾는다.
빽빽한 숲은 렌더링하기 가장 벌하는 것 중 하나이자 제대로 하기 가장 보람 있는 것 중 하나다. LOD 체인을 짓고, 임포스터가 거리를 짊어지게 하고, 무자비하게 인스턴스화하고 컬링하고, 저축을 가까운 바람과 변화에 쓰라: 그러면 당신은 지평선까지 뻗고 그리고 프레임레이트를 유지하는 숲을 가지게 된다.

