무엇을 찾고 계신가요?
Hero background image
테크니컬 아티스트를 위한 모바일 최적화 팁 - 2부

이 페이지에서 얻을 수 있는 정보 모바일 게임용 아트 에셋 최적화를 위한 유용한 팁 모음 의 2부입니다. 파트 1은 에서 확인할 수 있습니다.

그 밖의 많은 모바일 최적화 팁을 찾을 수 있습니다. 이 포괄적인 전자책 과 이 Unity 학습 과정 모바일 애플리케이션을 위한 3D 아트 최적화

Unity 에디터의 조명 설정
이러한 배치 기술을 활용할 수 있도록 게임 오브젝트를 구성합니다.
조명

유니버설 렌더 파이프라인 (URP)을 사용하면 콘솔과 PC의 동일한 물리 기반 라이팅과 머티리얼을 휴대폰이나 태블릿으로 확장할 수 있습니다.

추첨 호출 일괄 처리

각 프레임마다 Unity는 렌더링해야 하는 오브젝트를 결정한 다음 드로우 호출을 생성합니다. 그리기 호출은 객체(예: 삼각형)를 그리기 위해 그래픽 API를 호출하는 반면, 배치는 함께 실행되는 그리기 호출의 그룹입니다. 함께 그릴 개체를 일괄 처리하면 각 개체를 일괄적으로 그리는 데 필요한 상태 변경을 최소화할 수 있습니다. 이렇게 하면 오브젝트 렌더링에 드는 CPU 비용이 줄어들어 성능이 향상됩니다.

  • 동적 일괄 처리: 작은 메시의 경우 Unity는 CPU에서 버텍스를 그룹화하고 변형한 다음 한 번에 모두 그릴 수 있습니다. 참고: 로우 폴리 메시(버텍스 어트리뷰트가 900개 미만이고 버텍스가 300개 이하인 경우)가 충분한 경우에만 이 옵션을 사용합니다. 동적 배처는 이보다 큰 메시를 배치하지 않으므로 이 기능을 활성화하면 모든 프레임에서 배치할 작은 메시를 찾는 데 CPU 시간이 낭비됩니다.
  • 정적 일괄 처리: 움직이지 않는 지오메트리의 경우 Unity는 동일한 머티리얼을 공유하는 메시의 드로 콜을 줄일 수 있습니다. 동적 일괄 처리보다 효율적이지만 메모리를 더 많이 사용합니다.
  • GPU 인스턴싱 동일한 개체가 많은 경우 이 기술은 그래픽 하드웨어를 사용하여 개체를 보다 효율적으로 일괄 처리합니다.

SRP 일괄 처리: 고급에서 URP 자산의 SRP 배처를 활성화합니다. 이렇게 하면 씬에 따라 CPU 렌더링 시간이 크게 빨라질 수 있습니다.

너무 많은 동적 조명 피하기

모바일 애플리케이션에 너무 많은 동적 조명을 추가하지 않는 것이 중요합니다. 동적 메시의 경우 커스텀 셰이더 효과 및 광원 프로브, 정적 메시의 경우 구운 조명과 같은 대안을 고려해 보세요.

URP 및 빌트인 렌더 파이프라인 리얼타임 라이트의 구체적인 제한 사항은 이 기능 비교 표를 참조하세요.

그림자 비활성화

그림자 드리우기는 메시 렌더러와 라이트별로 비활성화할 수 있습니다. 그림자 그리기 호출을 줄이려면 가능하면 그림자를 비활성화하세요.

캐릭터 아래에 간단한 메시 또는 쿼드에 적용된 흐릿한 텍스처를 사용하여 가짜 그림자를 만들 수도 있습니다. 그렇지 않으면 커스텀 셰이더로 블롭 그림자를 만들 수 있습니다.

Unity 라이트맵 다이어그램
그림자 드리우기를 비활성화하여 그리기 호출을 줄입니다.
라이팅을 라이트맵에 굽기

GI(전역 조명)를 사용하여 정적 지오메트리에 극적인 조명을 추가합니다. 오브젝트에 기여 GI를 표시하여 고품질 조명을 라이트맵 형태로 저장할 수 있습니다.

그러면 구운 그림자와 조명을 런타임에 성능 저하 없이 렌더링할 수 있습니다. 프로그레시브 CPU 및 GPU 라이트매퍼는 글로벌 일루미네이션의 베이킹 속도를 높일 수 있습니다.

매뉴얼과 라이트 최적화에 대한 이 문서를 따라 Unity에서 라이트 매핑을 시작하세요.

Unity 에디터의 여러 라이트 레이어
레이어는 광원의 영향을 특정 컬링 마스크로 제한할 수 있습니다.
라이트 레이어 사용

여러 개의 조명이 있는 복잡한 장면의 경우 레이어를 사용하여 오브젝트를 분리한 다음 각 조명의 영향을 특정 컬링 마스크로 제한합니다.

Unity 에디터의 라이트 프로브
움직이는 물체에 라이트 프로브 사용

라이트 프로브는 씬의 빈 공간에 대한 베이크된 조명 정보를 저장하는 동시에 고품질 조명(직접 및 간접 조명 모두)을 제공합니다. 다이나믹 라이트에 비해 빠르게 계산되는 구형 고조파를 사용합니다.

정육면체와 교차하는 반사 구
반사 프로브 최소화

리플렉션 프로브는 사실적인 리플렉션을 만들 수 있지만 일괄 처리 측면에서 비용이 많이 들 수 있습니다. 저해상도 큐브맵, 컬링 마스크, 텍스처 압축을 사용하여 런타임 성능을 개선하세요.

Unity 에디터의 투명 머티리얼
씬 뷰에서 오버드로 시각화 모드
투명한 소재에 유의하세요

투명 오브젝트를 렌더링하면 불투명 오브젝트를 렌더링할 때보다 항상 더 많은 GPU 리소스가 사용되며, 특히 오버드로라고 하는 프로세스를 통해 투명 오브젝트를 여러 번 겹쳐 렌더링하는 경우 더욱 그렇습니다. 특히 모바일 플랫폼의 경우 가능하면 불투명한 소재를 사용하는 것이 좋습니다. RenderDoc 그래픽 디버거를 사용하여 오버드로를 확인할 수 있습니다.

셰이더를 단순하게 유지

가능한 가장 단순한 셰이더(예: 조명이 없는 셰이더)를 사용하고 불필요한 기능은 사용하지 마세요. 파티클과 같은 시스템을 위해 특별히 설계된 유니티의 사전 빌드 셰이더를 사용하세요. URP에는 이미 모바일 플랫폼에 최적화된 여러 경량 조명 및 비조명 셰이더가 포함되어 있습니다. 오버드로를 최소화하려면 게임 내 파티클의 수 및/또는 크기를 줄이세요.

성능 목표를 위해 가능하면 반투명 불투명 머티리얼을 사용하고, 노드에서 복잡한 연산을 염두에 두는 것이 좋습니다. 이 세션의 셰이더 그래프에서 더 많은 팁을 확인하세요.

조명 대 조명 해제 셰이더

셰이더를 만들 때 머티리얼이 빛에 반응하는 방식을 결정할 수 있습니다. 대부분의 셰이더는 라이팅 또는 비라이팅으로 분류됩니다. 라이팅되지 않은 셰이더는 가장 빠르고 계산 비용이 가장 저렴한 셰이딩 모델입니다. 저사양 기기를 타겟팅하는 경우 이 기능을 사용하세요.

고려해야 할 주요 사항은 다음과 같습니다:

  • 조명은 조명되지 않은 셰이딩 모델에는 영향을 주지 않습니다. 즉, 스페큘러 계산과 같은 많은 계산이 필요하지 않습니다. 그 결과 렌더링 비용이 절감되거나 렌더링 속도가 빨라집니다.
  • 만화와 유사한 양식화된 아트 디렉션을 사용하면 조명이 없는 음영과 잘 어울립니다. 이 스타일은 모바일 플랫폼용 게임을 개발할 때 고려할 가치가 있습니다.
Unity 에디터의 셰이더 그래프
셰이더 그래프의 버텍스 변위
버텍스 셰이더의 수학 연산

버텍스 셰이더는 모든 버텍스에서 작동하고 픽셀(또는 프래그먼트) 셰이더는 모든 픽셀에서 실행됩니다. 일반적으로 화면의 정점 수보다 렌더링되는 픽셀 수가 더 많습니다. 즉, 픽셀 셰이더가 버텍스 셰이더보다 더 자주 실행됩니다. 따라서 가능하면 픽셀 셰이더에서 버텍스 셰이더로 계산을 옮기는 것이 좋습니다. 평소와 마찬가지로 최적화 작업 후에는 특정 상황에 가장 적합한 솔루션을 결정하기 위해 추가 프로파일링을 수행해야 합니다.

덧셈과 곱셈과 같은 기본 연산은 더 빠르게 처리할 수 있습니다. 느린 수학 연산은 가능한 한 적게 하는 것이 가장 좋습니다. GLES 2.0을 사용하는 디바이스와 같은 구형 디바이스에서는 복잡한 수학의 사용량을 낮춰야 합니다.

SRP 배처

SRP 배처를 켤 때 프로파일러 뷰에서 통계 창과 렌더링 섹션의 버텍스 그래프를 확인합니다. FPS가 향상되는 것 외에도 처리되는 트라이앵글과 버텍스의 수가 급격히 감소합니다. 오브젝트는 URP와 호환되는 셰이더를 사용하기 때문에 렌더 파이프라인은 처리되는 데이터의 양을 줄이기 위해 모든 관련 지오메트리 데이터를 자동으로 일괄 처리합니다.

캐릭터 애니메이션

기본적으로 Unity는 일반 릭으로 애니메이션 모델을 임포트하지만, 개발자는 캐릭터를 애니메이션할 때 종종 휴머노이드 릭으로 전환합니다. 휴머노이드 릭은 역운동학 및 애니메이션 리타기팅을 매 프레임마다 계산하기 때문에 동급의 일반 릭보다 30~50% 더 많은 CPU 시간을 소비합니다.

스킨 메시 렌더링은 비용이 많이 듭니다. 스킨드메시 렌더러를 사용하는 모든 오브젝트에 스킨드메시 렌더러가 필요한지 확인하세요. 게임 오브젝트에 애니메이션이 일부만 필요한 경우 BakeMesh 함수를 사용하여 스킨된 메시를 정적 포즈로 고정시킨 다음 런타임에 더 간단한 메시 렌더러로 교체합니다.

주로 휴머노이드 캐릭터를 위한 Unity의 메카님 시스템은 상당히 정교하지만 단일 값(예: UI 요소의 알파 채널)을 애니메이션하는 데 주로 사용됩니다. 애니메이터를 과도하게 사용하지 마세요. 특히 UI 요소와 함께 사용할 때는 트위닝 함수를 만들거나 간단한 애니메이션을 위한 타사 라이브러리(예: 도트윈 또는 린트윈)를 사용하는 것을 고려하세요.

Unity 에디터의 실내 조명 씬
프레임 디버거 툴로 드로 콜, 배치 및 렌더링 사이클의 모든 단계를 확인합니다.
추가 팁

프레임당 특정 시간 예산으로 작업

각 프레임에는 목표 초당 프레임 수(fps)에 따라 시간 예산이 정해집니다. 이상적으로 30fps로 실행되는 애플리케이션은 프레임당 약 33.33밀리초(1000밀리초/30fps)를 허용합니다. 마찬가지로 60fps를 목표로 하면 프레임당 16.66ms가 남습니다.

장치는 컷신이나 로딩 시퀀스 등 짧은 시간 동안은 이 예산을 초과할 수 있지만, 장기간은 초과할 수 없습니다.

프리셋

기본 설정에 의존하지 마세요. 플랫폼별 재정의 탭을 사용하여 텍스처 및 메시 지오메트리와 같은 에셋을 최적화할 수 있습니다. 설정이 잘못되면 빌드 크기가 커지고 빌드 시간이 길어지며 메모리 사용량이 늘어날 수 있습니다. 사전 설정 기능을 사용하여 특정 프로젝트를 향상시킬 수 있는 기준 설정을 사용자 지정하는 것도 고려해 보세요.

카메라 사용 제한

각 카메라는 의미 있는 작업을 수행하든 그렇지 않든 약간의 오버헤드가 발생합니다. 렌더링에 필요한 카메라 컴포넌트만 사용합니다. 저사양 모바일 플랫폼에서는 각 카메라가 최대 1ms의 CPU 시간을 사용할 수 있습니다.

전체 화면 효과 피하기

글로우와 같은 전체 화면 포스트 프로세싱 효과는 성능을 크게 저하시킬 수 있습니다. 타이틀의 아트 디렉션에 신중하게 사용하세요.

Renderer.material 사용 시 주의

스크립트에서 Renderer.material에 액세스하면 머티리얼이 복제되고 새 사본에 대한 참조가 반환됩니다. 이렇게 하면 이미 자료가 포함된 기존 배치가 중단됩니다. 일괄 처리된 오브젝트의 머티리얼에 액세스하려면 대신 Renderer.sharedMaterial을 사용하세요.

이 콘텐츠가 마음에 드셨나요?