[Unity XR] Android Build Optimization Setting(유니티 XR 안드로이드 최적화)
by Sugar0810# 유니티 모바일 텍스쳐 압축연구 ETC2, PVRTC, ASTC
# Compute Skinning
Meshskinning.SkinOnGPU
렌더링 전 버텍스당 스키닝을 각 프레임마다 재계산하는데, 이 폴리곤이 많아지면 연산부담도 증가하게 됨.
이 연산은 CPU에서 처리하는데 Unity에서 옵션값을 통해 GPU에게 할당할 수도 있음
Player Settings > Player > Other Settings > Compute Skinning
해당 값이 활성 > GPU 연산, 비활성 > CPU 연산
언뜻 보면 GPU에게 맡기면 빠를거 같지만 모바일 환경은 GPU 사양이 제한되어 있어, 병목 원인에 따라 선택해야 함
CPU로 연산하면 SIMD라는 아키텍처를 이용해 고속연산을 수행하기 때문에 모바일 환경이라면 비활성 하는게 이득
하지만 프레임 드랍의 원인이 CPU라면 GPU에게 처리하도록 하는게 더 나은 방법
*단, GPU 스키닝 연산은 OpenGL ES2에서는 지원되지 않음. DX11과 OpenGL ES3에서만 유효 (지원여부는 바뀔수있다)
# 점진적 가비지 수집(incremental garbage collection)
유니티의 가비지콜렉터는 Boehm–Demers–Weiser garbage collector를 사용한다.
가비지콜렉터가 가비지 수집을 수행할때 프로그램 코드 실행 및 CPU 메인스레드를 중지하며 전체 힙을 검사한다(stop-the world garbage collection) 힙의 모든 오브젝트를 처리한 이후에 어플리케이션 실행을 재개함으로 성능에 영향을 미치는 gc 스파이크(중단으로 인해 프로파일러 윈도우의 그래프에서 나타나는 큰 스파이크)가 발생한다.
incremental mode는 가비지콜렉터가 힙의 모든 오브젝트들을 처리하기 위해 긴 중단을 한번만 수행하는 대신에 작업부하를 여러 프레임으로 분할하여 어플리케이션 실행을 더 짧게 중단하는것을 의미한다.
유니티에서 incremental mode는 기본적으로 활성화되어있으며 project settings의 player configuration에서 활성화 및 비활성화할수있다.
가비지수집을 더 빠르게 만들지않지만 여러 프레임에 작업부하를 분산하기때문에 gc 스파이크 및 gc 관련 성능 스파이크를 줄일수있다.
# 참고 사이트
'⚙️ Programming > C# & Unity' 카테고리의 다른 글
[Unity] Unity Event 1 - Button Onclick Listener Scripting + Lambda(유니티 이벤트 1 - 버튼 스크립트로 매핑하기 (온클릭 리스너) + 람다식) (0) | 2023.07.26 |
---|---|
[Unity] VR Keyboard | Unity Tutorial for Oculus Quest(VR 키보드 만들기) (0) | 2023.07.26 |
[Unity] OnEnable() 활용 점수 시스템 구현 (0) | 2023.07.25 |
[Unity] Sync Objects With Music(오디오 클립으로부터 BPM 추출하기) (0) | 2023.07.25 |
[Unity] 위키북스 절대강좌! 유니티 책 따라가기 (0) | 2023.07.25 |
블로그의 정보
Sugar
Sugar0810