플레이어의 거대한 비율이 소박한 하드웨어에 있다(노트북, 스팀덱 같은 휴대기기, 오래된 GPU). 그리고 고사양 리그에서만 돌아가는 환경은 그들을 배제한다. 좋은 소식: 대부분의 환경 성능은 몇 가지 예측 가능한 곳에서 잃고(오버드로, 드로우 콜, 빽빽한 식생, 과대 텍스처) 몇 가지 규율 있는 습관으로 되찾는다. 이것은 아트를 도려내지 않고 낮은 프레임 예산을 맞추기 위한 실용 플레이북이며, 더해서 회귀를 출시 전에 잡는 고정 카메라 방법이다.
이것은 돌리기 가장 비싼 종류의 장면이다: 투명한 잎의 층들, 수천 개의 인스턴스, 무거운 오버드로가 있다. 프레임 시간이 어디로 가는지 알고 나면 가장 크고 가장 쉬운 승리가 사는 곳이기도 하다.
먼저 예산을, 밀리초로 설정하라
당신의 가장 약한 지원 하드웨어에서 목표 프레임 시간을 골라라(60 fps에 16.6 ms, 30에 33.3 ms). 그리고 그것을 딱딱한 한계로 다뤄라. "나중에 최적화"는 "나중에 재건축"을 뜻한다; 미리 예산 짜는 것이 훨씬 싸다.
숫자 없는 최적화는 그저 감이다. 당신의 바닥 하드웨어(스팀덱, 중급 노트북, 최소 사양이 무엇이든)에서 겨냥하는 프레임을 정하고, 그것을 밀리초로 변환하라, 밀리초는 쌓이고 퍼센트는 거짓말하기 때문이다. 그다음 끝에서가 아니라 지으면서 모든 장면을 그것에 붙들라. 저사양에서 매끄럽게 출시하는 팀은 더 세게 최적화하지 않는다; 그들은 그저 애초에 장면이 예산을 터뜨리게 놔두지 않는다, 이것은 아트가 끝나고 모든 것이 그것에 의존한 뒤 성능을 되긁는 비용의 일부다.
시간이 어디로 가는지 알라
환경 프레임 시간은 보통 오버드로(투명 식생), 너무 많은 드로우 콜(배치 안 된 오브젝트), 과대 텍스처(메모리 대역폭), 그리고 비싼 라이팅/그림자에 먹힌다. 눈감고 최적화하기 전에 당신의 병목을 찾으려고 프로파일하라.
최적화를 추측하는 것은 며칠을 낭비한다. 프로파일러를 열고, CPU 바운드(보통 드로우 콜)인지 GPU 바운드(보통 오버드로, 셰이딩, 또는 대역폭)인지 찾고, 진짜 병목을 공격하라. 그렇긴 해도, 환경은 예측 가능한 방식으로 실패하며, 거의 항상 다음 중 하나다: 층진 투명 식생에서의 오버드로; 수천 개의 인스턴스 안 된 오브젝트에서의 드로우 콜; 과대하거나 너무 많은 텍스처에서의 텍스처 메모리/대역폭; 그리고 너무 많은 동적 라이트나 고해상도 그림자 맵에서의 라이팅/그림자 비용. 이 플레이북의 나머지는 그것들을 보통의 영향 순서로 훑는다.
식생과 오버드로: 늘 그 악당
투명 식생 카드는 겹치고 같은 픽셀을 여러 번 다시 셰이딩한다: 그것이 오버드로이고, 저사양의 1순위 킬러다. 잎 카드 겹침을 줄이고, 공격적인 LOD를 쓰고, 먼 식생을 세게 컬하라.
빽빽한 식생은 대부분의 저사양 프레임 예산이 죽는 곳이다, 각 반투명 잎 카드가 GPU에게 나중에 그 위에 다시 그릴 픽셀을 셰이딩하게 강제하기 때문이다: 두꺼운 수관에서는 때로 픽셀당 열 번 넘게 그렇다. 수정: 낭비된 투명 영역이 적은 더 빡빡한 잎 카드를 쓰고, 식생이 물러날수록 빠르게 더 싼 LOD로 떨어지고, 먼 풀과 덤불이 그냥 그리기를 멈추도록 딱딱한 컬 거리를 설정하라. 휴대기기에서 "지평선까지 풀"과 "합리적 거리에서 컬된 풀"의 차이는 25와 40 fps 사이의 전체 차이일 수 있다. GPU가 배치할 수 있도록 식생을 네이티브 인스턴스로 베이크하고, 엔진의 인스턴싱이 무거운 일을 하게 하라.
드로우 콜과 인스턴싱
따로 제출되는 모든 고유 오브젝트가 하나의 드로우 콜이고, 수천 개가 CPU를 멈칫하게 한다. 반복 메시를 인스턴스화해 수백 개 복사본이 한 콜이 되게 하라; 말이 되는 곳에서 정적 잡동사니를 병합하라.
CPU 바운드라면, 드로우 콜이 보통 이유다. 엔진에게 렌더하라고 요청하는 각 별개의 것이 오버헤드를 나르고, 천 개의 개별 바위와 덤불로 손 배치된 장면은 CPU를 제출 비용에 빠뜨린다. 인스턴싱이 치료다: 인스턴스로 그려진 반복 메시는 수백 개 복사본을 단일 콜로 무너뜨린다, 이것이 바로 네이티브 엔진 인스턴스로 베이크하는 스캐터 도구가 성능에 중요한 이유다: 천 개 식물처럼 보이는 스캐터가 한 줌처럼 든다. 인스턴싱이 적용 안 되는 곳에서는, 작은 정적 잡동사니를 결합 메시로 병합하는 것도 콜 수를 자른다. 여기가 Numivo 같은 워크플로(밀도를 칠하고, 그다음 평범한 인스턴스 메시로 베이크)가 약한 하드웨어에서 직접 값하는 곳이다, 출력이 GPU가 원하는 싼 것이기 때문이다.
모든 장면이 최대로 빽빽할 필요는 없다. 고요하고 트인 공간은 거의 아무것도 들지 않고 하드웨어와 플레이어 둘 다에게 쉼을 준다: 밀도를 페이싱하는 것 자체가 최적화다.
LOD, 컬 거리, 텍스처 크기
먼 복사본이 싸도록 모든 유의미한 메시에 LOD를 주고, 화면에서 작은 오브젝트가 그리기를 멈추도록 컬 거리를 설정하고, 텍스처 해상도를 카메라가 거리에서 해상하는 것으로 제한하라. 이 셋은 적은 노력으로 많이 되찾는다.
세 가지 화려하지 않은 습관이 남은 예산의 대부분을 나른다. LOD: 먼 메시는 로우폴리 버전으로 바꿔야 한다, 20픽셀 나무에 완전한 디테일은 낭비이기 때문이다. 컬 거리: 화면에서 알아채기엔 너무 작은 모든 것은 완전히 렌더를 멈춰야 한다 (작은 프롭, 자갈, 고운 풀), 오브젝트 타입별로 조정. 텍스처 크기: 해상도를 플레이어 거리에서 실제 해상 가능한 것으로 제한하라(텍셀 밀도 논리를 보라, 먼 것은 훨씬 적은 텍셀이 필요하다), 과대 텍스처는 저사양 GPU가 아낄 수 없는 메모리 대역폭을 태우기 때문이다. 제대로 조정하면 이들 중 어느 것도 룩을 해치지 않는다; 그저 아무도 안 보는 디테일에 지불하는 것을 멈추게 한다.
고정 카메라로 회귀를 찾아라
몇 개의 "예산 카메라"를 정의하라(당신의 최악의 비스타, 가장 빽빽한 전투 공간, 가장 붐비는 실내). 그리고 그것들의 프레임 시간을 매 빌드 확인하라. 무작위 플라이스루는 회귀를 숨긴다; 매번 같은 잔혹한 뷰가 그것을 드러낸다.
콘텐츠가 추가되면서 성능은 조용히 썩고, 레벨을 무심코 돌아다녀서는 그것을 잡지 못한다. 대신, 당신의 한 줌의 최악의 뷰를 고정하라(빽빽한 숲 조망, 붐비는 시장, 이펙트 무거운 싸움). 그리고 정확히 그것들을, 매 빌드, 예산에 대해 측정하라. 숫자가 빨개지면, 최근 변경이 그것을 일으켰음을, 그리고 대략 어디인지를 안다. 이것이 성능 위기를 끝에서 발견하는 팀과 2 ms 회귀를 나타난 날에 고치는 팀 사이의 차이다. 저사양 타깃에서는, 그 카메라 중 하나를 에디터 추정만이 아니라 실제 스팀덱이나 최소 사양 머신에서 돌리게 하라.
훔칠 가치가 있는 현장 수치
- 프레임 예산: 16.6 ms(60 fps) / 33.3 ms(30 fps), 당신의 바닥 하드웨어에서 설정하라
- 늘 그 저사양 킬러: 식생 오버드로, 더 빡빡한 카드, 빠른 LOD, 세게 컬
- 반복 메시 → 인스턴스: 한 드로우 콜에 수백 개 복사본
- 텍스처 크기를 카메라 해상 가능한 디테일로 제한, 먼 것은 훨씬 적은 텍셀이 필요
- 회귀를 고정 예산 카메라로 잡아라, 매 빌드 측정
미니 FAQ
좋아 보이는 것과 저사양 사이에서 골라야 하나? 생각보다 덜. 대부분의 저사양 비용은 낭비다(오버드로, 배치 안 된 콜, 과대 텍스처), 보이는 품질이 아니라. 낭비를 자르면 아트는 살아남는다; 약한 하드웨어의 플레이어는 당신이 지불했지만 그들이 볼 수 없던 디테일을 드물게 그리워한다.
동적 라이팅은 스팀덱에서 금지인가? 금지가 아니라 예산 짜인다. 동적 라이트와 그림자 캐스터 수를 제한하고, 장면이 정적인 곳에서 베이크된 라이팅에 기대고, 동적 비용을 중요한 곳에 아껴라. 예산 항목이지 금지가 아니다.
휴대기기에서 가장 도움 되는 단일 변경은? 대개 식생 길들이기: 더 빡빡한 잎 카드, 공격적 LOD, 풀과 덤불의 세게 컬 거리. 오버드로는 가장 흔한 휴대기기 병목이고, 식생은 오버드로가 사는 곳이다.
타깃 하드웨어에서 얼마나 일찍 테스트해야 하나? 첫 버티컬 슬라이스부터. 강력한 개발 머신의 에디터 추정은 휴대기기가 가질 바로 그 문제를 숨긴다. 실제 최소 사양 기기에서의 빌드를 일찍 얻고 루프에 유지하라.
감자에서 돌리는 것은 게임을 못생기게 만드는 것이 아니다: 플레이어가 볼 수 없는 디테일에 지불하지 않는 것이다. 밀리초로 예산 짜고, 오버드로를 죽이고, 반복을 인스턴스화하고, 보이지 않는 것을 컬하고, 매 빌드 최악의 카메라를 지켜보라: 그러면 당신의 환경은 훌륭하게 보이고 그리고 고사양 리그에 있지 않은 거대한 관객을 위해 돌아갈 것이다.

