빽빽한 식생은 삼각형 수만으로 죽는 일은 드뭅니다: 그것은 천 개의 드로 콜, 부주의한 알파 카드의 오버드로, 그리고 아무도 켜져 있는 줄 몰랐던 그림자로 죽습니다. 노력을 이 순서로 쓰세요: 인스턴싱 먼저, 컬 거리 둘째, 그림자 셋째, LOD 넷째, 밀도 배치 다섯째, 그리고 각 단계를 같은 고정 카메라로, 한 번에 한 변수씩 검증하세요. 안 그러면 아무것도 못 배웁니다. 이 가이드는 각 단계를, 그것이 당신 문제라고 알려 주는 프로파일러 서명과 함께 다룹니다.
진짜 숲이 "공짜로" 렌더되는 것은 물리가 대규모로 병렬이기 때문. 당신의 GPU는 그 룩을 60 fps로 가장할 수 있습니다. 단, 엔진이 바로 이 작업을 위해 이미 제공하는 기계를 당신이 무력화하기를 멈춘다면요.
심적 모델: 다섯 병목, 하나의 순서
식생 성능은 한 문제가 아니라 다섯이며, 예측 가능한 순서로 지배합니다. 드로 콜이 먼저 CPU를 묶고, 컬 거리는 GPU에 애초에 얼마를 그리라고 요구하는지를 정하고, 그림자는 그것을 드리우는 모든 것의 비용을 조용히 두 배로 하고, LOD와 오버드로는 픽셀당 청구를 다스리며, 밀도 배치는 그 모든 것 중 당신이 실제로 필요로 한 양을 정합니다. 순서를 어겨 공략하면 병목이 아니던 것을 최적화하게 됩니다. 아래 순서가 비용이 실제로 무는 순서입니다.
인스턴싱 먼저, 나머지 전부 그다음
5,000번 그려지는 한 나무는 5,000개의 개별 나무보다 근본적으로 쌉니다: 두 엔진 모두 반복 메시를 인스턴스된 드로로 배치하며, 당신의 첫 일은 그저 그 기계를 무력화하지 않는 것입니다.
Unreal은 foliage와 계층적 인스턴스 스태틱 메시로 배치하고, Unity는 GPU 인스턴싱과 지형 디테일로. 배치를 조용히 깨는 것:
- 인스턴스 대신 고유한 액터/오브젝트로 배치된 식생;
- 인스턴스별 머티리얼 변형: 룩마다 머티리얼을 저작하는 대신 하나의 머티리얼 안에서 인스턴스별 데이터(색, 스케일)를 쓰라;
- 조직적으로 흩어진 배치라 엔진이 클러스터를 단위로 컬할 수 없음.
프로파일러의 티는 명백합니다: 식물 수에 비례해 커지는 드로 콜. 숲 뷰가 수천 개의 드로 콜을 보이면, 다른 무엇에 손대기 전에 이것을 고치세요. 이 목록의 더 아래 어느 것도 당신을 못 구합니다. GPU가 시작도 하기 전에 CPU 바운드니까. 건강한 인스턴스 식생은 안에 몇천의 식물이 있든 숲 뷰 전체에 대해 드로 콜을 낮은 수백으로 유지합니다.
컬 거리는 공짜 돈
풀은 800미터 밖에서 렌더할 필요가 없다: 팝을 감추는 페이드 범위와 함께 타입별 컬 거리(지피 30~60 m, 관목 100~200 m, 나무만이 긴 거리를 얻는다)를 설정하라.
이것은 전체 파이프라인에서 분당 가치가 가장 높은 설정인데, 기본값이 거기고 아무도 안 알아채기에 일상적으로 "무한"에 방치됩니다. 근거는 지각적입니다: 지피는 100 m 훨씬 전에 한 픽셀 미만을 차지합니다: 최종 이미지에 문자 그대로 아무것도 기여하지 않으면서 여전히 매 프레임 버텍스, 오버드로, 그림자 작업을 씁니다. 먼 덮음은 더 싼 시스템의 몫: 지형 머티리얼의 색, 불투명 임포스터, 또는 그냥 알맞은 초록으로 칠한 지형 레이어의 먼 LOD.
페이드 범위(디더 또는 알파)는 튀어나옴을 감춰 플레이어가 컬 거리 자체를 결코 못 보게 합니다. 페이드를 보이지 않을 만큼 딱 충분히 길게, 그 이상은 아니게 조율하세요: 지나치게 긴 페이드는 크로스페이드 동안 같은 식물의 두 표현에 값을 치른다는 뜻입니다.
그림자: 청구서의 조용한 절반
작은 지피의 동적 그림자 드리움을 끄고, 나무에는 유지하고, 관목에는 거리 제한하라: 풀 그림자는 거의 제로의 시각적 이득을 위해 비용을 두 배로 한다.
그림자 패스의 모든 풀잎은 빛의 시점에서 다시 그려집니다. 빽빽한 장면에서 그림자 패스는 흔히 베이스 패스만큼 듭니다: 즉, 풀 그림자는 전체 식생 예산에서 가장 큰 단일 항목일 수 있는데, 다발 밑동의 단순한 앰비언트 어두워짐과 시각적으로 구별 불가능합니다. 수정은 거의 공짜: 지피는 그림자 드리움 끔, 나무는 켬(그 그림자는 진짜 구성 작업을 함), 중간은 거리 제한. 그다음 프로파일러에서 그림자 패스를 전후로 확인하세요. 보통 인스턴싱 다음으로 가장 큰 단일 승리이며, 몇 분이면 됩니다.
LOD: 실루엣을 예산하라, 폴리곤이 아니라
좋은 식생 LOD 체인은 윤곽을 보존하고 내부를 도살한다: 전이 거리를 눈으로 검증하고, 임포스터 전 마지막 메시 LOD를 가장 세게 최적화하라. 그게 모든 와이드 샷에서 화면에 있는 것이니까.
이런 지층 식물은 컬 거리와 그림자 설정이 가장 값하는 곳: 수천 인스턴스, 각각 수십 미터 너머에서 거의 아무것도 기여 안 하고, 각각 동적 그림자를 드리우면 비용이 두 배가 됨.
히어로 나무를 위한 실용적 체인: 풀 메시 → 내부 ~50 % 감소(같은 실루엣) → 병합 카드로 ~15 % → 불투명 임포스터/빌보드. 진짜 고통을 아끼는 두 노트:
- 가상화 지오메트리 엔진에서도 먼 임포스터는 여전히 값합니다. 오버드로와 그림자는 삼각형이 어떻게 지불되든 진짜 비용으로 남으니까. 가상화 지오메트리는 삼각형 수를 풀지, 투명 비용을 풀지 않습니다.
- 투명은 거리에서 적입니다. 빽빽한 알파 테스트 카드는 GPU가 가장 약한 곳(중간 LOD)에 정확히 오버드로를 쌓습니다. 가까이는 메시 잎을, 멀리는 불투명 임포스터를 선호하세요; 알파 무거운 중간이 프레임 시간이 숨는 곳. 한 LOD가 미스터리하게 비싸면, 거의 항상 투명한 것.
오버드로: 볼 수 없는 비용
오버드로는 GPU가 쌓인 투명 표면을 통해 같은 픽셀을 여러 번 셰이딩하는 것입니다: 식생 특유의 저주이며, 최종 이미지에서 보이지 않고, 흔히 "가벼운" 장면이 느린 이유입니다.
대부분의 엔진에 오버드로 시각화 모드가 있습니다; 켜고 풀밭을 보세요. 흰색으로 빛나면, 겹치는 알파 카드가 쌓이면서 각 픽셀을 다섯 번, 열 번 셰이딩하는 것. 완화책: 얇은 것 많이 대신 더 적고 큰 잎; 실루엣이 허락하는 곳에 불투명 지오메트리; 그리고 가장 적게 기여하는 카드의 적극적 컬. 오버드로는 "내 장면은 느린데 아무것도 비싸 보이지 않는다"의 고전적 범인입니다: 삼각형은 싸고 픽셀은 여러 번 지불되니까요.
밀도는 설계 결정이지, 슬라이더 위치가 아니다
플레이어가 걷고 보는 곳은 빽빽하게, 아닌 곳은 성기게: 오솔길을 따라 20 m 폭의 풍부한 디테일 띠는 균일 비용의 일부로 "어디나 무성하다"로 읽힌다.
경사와 높이 마스크가 그 일부를 자동으로 하고(가파른 면과 먼 대지는 지피가 전혀 필요 없음), 클러스터링이 나머지를 합니다: 틈 있는 다발은 균일 채움보다 싸게 렌더되고 또한 더 자연스러워 보여, 성능 승리와 미의 승리가 같은 방향을 가리킵니다. 여기서 배치 도구가 값을 합니다: 밀도를 마스크와 종별 규칙으로 칠하고, 곧장 엔진 네이티브 인스턴스로 베이크하는 것이 오후와 일주일의 차이. 그게 Numivo의 스캐터가 하는 것의 핵심이며, 평범한 foliage와 인스턴스 메시로 베이크하기에, 이 글의 모든 기법이 결과에 변경 없이 적용됩니다. 당신과 표준 최적화 사이에 플러그인 런타임은 없습니다; 베이크된 장면은 그냥 엔진 콘텐츠.
프로파일링 루프
같은 카메라, 같은 뷰, 한 번에 한 변수: 각 변경 후 GPU 프레임 시간, 드로 콜, 그림자 패스, 오버드로를 측정하라.
가장 빽빽한 비스타에서 고정 "예산 카메라"를 골라 위 각 단계 전후로 스탯을 스크린샷하세요. 규율이 중요한 것은 식생 최적화가 상호작용하기 때문: 컬 거리 변경은 그림자 패스가 보는 인스턴스 수를 바꾸고, LOD 변경은 오버드로를 바꾸고, 밀도 변경은 그 모두를 한 번에 바꿉니다. 무작위 플라이스루는 무작위 숫자와, 변경이 도왔는지에 대한 반증 불가능한 논쟁을 낳습니다. 고정 카메라는 당신이 방어할 수 있는 결정을 낳습니다. 숫자를 공유 시트에 두면, 추세선이 단일 측정이 못 하는 이야기를 들려줍니다.
훔칠 만한 현장 수치
- 지피 컬: 30~60 m · 관목: 100~200 m · 나무: 시선
- 건강한 인스턴스 숲 뷰의 드로 콜: 낮은 수백
- 빽빽한 장면에서 그림자 패스 비중: 흔히 식생 비용의 ~절반, 풀 그림자 끔이 존재하는 가장 싼 큰 승리
- "어디나 무성하다"로 읽히는 오솔길 띠 드레싱 폭: ~20 m
- 히어로 나무의 LOD 수: 3 메시 LOD + 불투명 임포스터
- 풀의 오버드로 목표: 오버드로 뷰에서 ~3× 미만, 쌓인 알파 카드의 빛나는-흰 8~10×가 아니라
미니 FAQ
Nanite / 가상화 지오메트리가 이걸 구식으로 만드나요? 어느 항목이 지배하는지를 바꾸지, 규율을 바꾸지 않습니다. 알파 카드의 오버드로, 그림자 비용, 인스턴스별 오버헤드가 모두 남고, 거리의 임포스터는 여전히 값합니다. 새 기술이 당신의 특정 병목을 풀었다고 가정하는 대신 타깃 하드웨어에서 측정하세요. 옮겼을 뿐, 제거하지 않았을 수 있습니다.
왜 낮은 밀도에서도 장면이 느린가요? 흔한 용의자, 순서대로: 동적 그림자를 드리우는 풀, 배치를 무력화하는 변형별 고유 머티리얼, 무한의 컬 거리, 또는 오버드로를 쌓는 알파 테스트 LOD 체인. 각기 뚜렷한 프로파일러 서명이 있습니다. 바꾸기 전에 확인하세요, 안 그러면 엉뚱한 걸 고칩니다.
게임플레이에 "너무 빽빽한" 건 얼마나? 전투 가독성이 성능보다 먼저 밀도를 제한합니다: 실루엣이 잡동사니에 사라지면 플레이어는 드레싱이 아니라 게임을 탓합니다. 비스타에 빽빽, 아레나에 적당이 프로파일러와 플레이테스트를 모두 살아남는 패턴.
베이크할까, 절차적으로 둘까? 출시엔 베이크하세요: 베이크된 인스턴스는 정직하게 프로파일되고 런타임 의존 없이 출시됩니다. 절차적 설정(마스크, 규칙, 시드)을 버전 관리에 두어, 지형 변경 후 손으로 작업을 다시 하지 않고 재베이크할 수 있게 하세요.
빽빽해 보이면서 또한 빠른 것은 모순이 아닙니다: 그것은 대개 다섯 가지를 올바른 순서로 하고 각각을 같은 카메라로 증명하는 규율입니다.