
이것은 Unity 프로젝트에 대한 최적화 팁을 풀어내는 일련의 기사 중 세 번째입니다. 더 적은 자원으로 더 높은 프레임 속도로 실행하기 위한 가이드로 사용하세요. 이러한 모범 사례를 시도한 후에는 시리즈의 다른 페이지도 확인하세요:
대상 하드웨어의 한계를 이해하고 GPU를 프로파일링하여 그래픽 렌더링을 최적화하는 방법을 알아보세요. GPU의 작업 부하를 줄이기 위해 이러한 팁과 모범 사례를 시도해 보세요.
무료 전자책에서 더 많은 모범 사례를 찾으세요, 콘솔 및 PC를 위한 게임 성능 최적화.

Unity는 화면에 GameObject를 그리기 위해 그래픽 API(예: OpenGL, Vulkan 또는 Direct3D)에 드로우 호출을 발행합니다. 각 드로우 호출은 리소스를 많이 소모합니다.
재료 전환과 같은 드로우 호출 간의 상태 변경은 CPU 측에서 성능 오버헤드를 유발할 수 있습니다. PC 및 콘솔 하드웨어는 많은 드로우 호출을 처리할 수 있지만, 각 호출의 오버헤드가 여전히 높기 때문에 이를 줄이려고 노력해야 합니다. 모바일 장치에서는 드로우 호출 최적화가 필수적입니다. 이를 드로우 호출 배칭으로 달성할 수 있습니다.
드로우 호출 배칭은 이러한 상태 변경을 최소화하고 객체 렌더링의 CPU 비용을 줄입니다. Unity는 고해상도 렌더 파이프라인(HDRP) 또는 유니버설 렌더 파이프라인(URP)를 사용하여 여러 객체를 더 적은 배치로 결합할 수 있습니다:
몇 가지 간단한 방법으로 배칭을 극대화할 수 있습니다:
자세한 정보는 Draw call batching 문서를 참조하십시오.

프레임 디버거를 사용하여 단일 프레임에서 재생을 멈추고 Unity가 장면을 구성하는 과정을 단계별로 살펴볼 수 있습니다. 이렇게 하면 최적화 기회를 식별할 수 있습니다. 불필요하게 렌더링되는 GameObject를 찾아 비활성화하여 프레임당 드로우 콜 수를 줄이십시오.
프레임 디버거의 주요 장점 중 하나는 드로우 콜을 장면의 특정 GameObject와 연관시킬 수 있다는 것입니다. 이로 인해 외부 프레임 디버거에서는 불가능할 수 있는 특정 문제를 조사하기가 더 쉬워집니다.
참고: 프레임 디버거는 개별 드로우 콜이나 상태 변화를 표시하지 않습니다. 자세한 드로우 콜 및 타이밍 정보를 제공할 수 있는 것은 네이티브 GPU Profilers뿐이지만, 프레임 디버거는 여전히 파이프라인 문제나 배치 문제를 디버깅하는 데 매우 유용할 수 있습니다.
자세한 내용은 Frame Debugger documentation을 읽으십시오.
필레이트는 GPU가 매초 화면에 렌더링할 수 있는 픽셀 수를 나타냅니다. 게임이 필레이트에 의해 제한되는 경우, 이는 GPU가 처리할 수 있는 것보다 프레임당 더 많은 픽셀을 그리려고 한다는 것을 의미합니다.
같은 픽셀 위에 여러 번 그리는 것을 오버드로우라고 합니다. 오버드로우는 필레이트를 감소시키고 추가 메모리 대역폭을 소모합니다. 오버드로우의 가장 일반적인 원인은 다음과 같습니다:
영향을 최소화해야 하지만, 오버드로우를 해결하는 데는 만능 해결책이 없습니다. 영향을 줄이기 위해 다음 기술을 실험해 보세요.
다른 플랫폼과 마찬가지로, 콘솔에서의 최적화는 종종 드로우 콜 배치를 줄이는 것을 의미합니다. 다음은 도움이 될 수 있는 몇 가지 기술입니다:

컬링은 각 카메라에 대해 발생하며, 특히 여러 카메라가 동시에 활성화될 때 성능에 큰 영향을 미칠 수 있습니다. Unity는 두 가지 유형의 컬링을 사용합니다:
자세한 내용은 Working with Occlusion culling tutorial을 참조하십시오.
Allow Dynamic Resolution 카메라 설정을 사용하면 개별 렌더 타겟을 동적으로 스케일링하여 GPU의 작업량을 줄일 수 있습니다. 응용 프로그램의 프레임 속도가 감소하는 경우, 일관된 프레임 속도를 유지하기 위해 해상도를 점진적으로 낮출 수 있습니다.
Unity는 성능 데이터가 프레임 속도가 GPU에 의해 제한될 것으로 제안할 경우 이 스케일링을 트리거합니다. 스크립트를 사용하여 이 스케일링을 사전 예방적으로 수동으로 트리거할 수도 있습니다. 이는 애플리케이션의 GPU 집약적인 섹션에 접근할 때 유용합니다. 점진적으로 스케일링하면 동적 해상도가 거의 눈에 띄지 않을 수 있습니다.
지원하는 플랫폼 목록은 동적 해상도 매뉴얼 페이지를 참조하십시오.

때때로 게임 중에 여러 관점에서 렌더링해야 할 필요가 있습니다. 예를 들어, 1인칭 슈팅 게임(FPS)에서는 플레이어의 무기와 환경을 서로 다른 시야(FOV)로 별도로 그리는 것이 일반적입니다. 이는 전경 객체가 배경의 광각 FOV를 통해 왜곡되어 보이는 것을 방지합니다.
URP에서 카메라 스태킹을 사용하여 여러 카메라 뷰를 렌더링할 수 있습니다. 그러나 각 카메라에 대해 여전히 상당한 컬링 및 렌더링이 수행됩니다. 각 카메라는 의미 있는 작업을 하든 아니든 일부 오버헤드를 발생시킵니다.
렌더링에 필요한 카메라 구성 요소만 사용하십시오. 모바일 플랫폼에서는 활성 카메라마다 렌더링하지 않더라도 최대 1ms의 CPU 시간을 사용할 수 있습니다.
객체가 멀어지면 세부 수준 (LOD)이 이를 조정하거나 낮은 해상도의 메시와 더 간단한 재료 및 셰이더를 사용하도록 전환할 수 있습니다. 이는 GPU 성능을 강화합니다.
자세한 내용은 Unity Learn의 LOD 작업하기 과정을 참조하십시오.

포스트 프로세싱 효과의 비용을 GPU에서 확인하세요. 블룸 및 심도와 같은 전체 화면 효과는 비용이 많이 들 수 있으므로, 시각적 품질과 성능 간의 원하는 균형을 찾을 때까지 실험해 볼 가치가 있습니다.
포스트 프로세싱은 런타임 중에 크게 변동하지 않습니다. 볼륨 오버라이드를 결정한 후, 포스트 프로세싱 효과에 총 프레임 예산의 정적 부분을 할당하세요.
테셀레이션은 형태를 더 작은 버전으로 세분화하여 기하학을 증가시켜 세부 사항을 향상시킬 수 있습니다. 테셀레이션이 가장 의미 있는 예가 있지만, Unity 데모 죽은 자의 책의 나무 껍질과 같은 경우를 제외하고는, 콘솔에서 테셀레이션을 피하는 것이 좋습니다. GPU에서 비용이 많이 들기 때문입니다.
죽은 자의 책 데모에 대해 여기에서 더 읽어보세요.

GPU에 드로우 콜을 보내면, 그 작업은 Unity가 GPU 내의 사용 가능한 SIMD에 분배하는 많은 파도 전선으로 나뉩니다. 각 SIMD는 동시에 실행될 수 있는 최대 파도 전선 수가 있습니다.
파도 전선 점유율은 현재 사용 중인 파도 전선 수를 최대 수에 대한 비율로 나타냅니다. GPU의 잠재력을 얼마나 잘 활용하고 있는지를 측정합니다. 콘솔 개발을 위한 프로파일링 도구는 파도 전선 점유율을 매우 자세히 보여줍니다.
Unity의 죽은 자의 책에서 위의 예에서, 정점 셰이더 파도 전선은 녹색으로 나타나고 픽셀 셰이더 파도 전선은 파란색으로 나타납니다. 하단 그래프에서 많은 정점 셰이더 파도 전선이 픽셀 셰이더 활동 없이 나타납니다. 이는 GPU의 활용도가 낮음을 보여줍니다.
픽셀로 이어지지 않는 많은 정점 셰이더 작업을 수행하고 있다면, 이는 비효율성을 나타낼 수 있습니다. 낮은 웨이브프론트 점유율이 반드시 나쁜 것은 아니지만, 이는 셰이더를 최적화하고 다른 병목 현상을 확인하는 데 사용할 수 있는 지표입니다. 예를 들어, 메모리 또는 계산 작업으로 인해 정체가 발생하는 경우, 점유율을 높이면 성능이 향상될 수 있습니다. 반면에, 너무 많은 비행 중 웨이브프론트는 캐시 스래싱을 유발하고 성능을 저하시킬 수 있습니다.
GPU를 충분히 활용하지 못하는 간격이 있다면, 비동기 계산을 활용하여 계산 셰이더 작업을 그래픽 큐와 병렬로 이동할 수 있습니다. 예를 들어, 그림자 맵 생성 중에 GPU는 깊이 전용 렌더링을 수행합니다. 이 시점에서는 픽셀 셰이더 작업이 거의 발생하지 않으며 많은 웨이브프론트가 비어 있습니다.
계산 셰이더 작업을 깊이 전용 렌더링과 동기화할 수 있다면, 이는 GPU의 전반적인 사용을 개선하는 데 도움이 됩니다. 사용되지 않는 웨이브프론트는 스크린 스페이스 앰비언트 오클루전 (SSAO) 또는 현재 작업을 보완하는 모든 작업에 도움이 될 수 있습니다.
Unite에서 고급 콘솔을 위한 성능 최적화에 대한 이 세션을 시청하세요.

우리의 가장 포괄적인 가이드 중 하나는 PC와 콘솔을 위한 게임 최적화 방법에 대한 80개 이상의 실행 가능한 팁을 수집합니다. 전문가인 Success 및 Accelerate Solutions 엔지니어가 만든 이 심층 팁은 Unity를 최대한 활용하고 게임 성능을 향상시키는 데 도움이 될 것입니다.