개발 라이브러리 & 툴/유니티

Unity 최적화 작업 후에... #3

하늘흐늘 2022. 1. 24. 14:35
반응형

이 글에서는 Unity 모바일 게임에 대한 여러가지 설정 관련 최적화 경험 중 인상적인 것들에 대해서 이야기할까 합니다. 

파티클과 쉐이더 

우선 아래 글처럼 일부 파티클 사용시 기본 설정되는 표준쉐이더 사용으로 모바일에서 FPS이 낮아지는 현상이 있어 수정하였습니다.
참고: Unity 최적화: 모바일 파티클 매터리얼

파티클과 쉐이더 관련 문제는 상대적으로 고성능인 모바일 기기에서는 발견되지 않았었습니다. 성능별로 다양한 스펙트럼을 가진 기기들에서의 테스트가 중요한 거 같습니다. 다음으로 쉐이더는 선택할시 모바일용을 선택하는 것이 중요한 거 같습니다.
파티클의 계산은 물리 연산에 영향을 받습니다. 화면 표시는 원활한 플레이를 위하여 60 FPS로 설정하였지만 파티클의 계산과 물리 연산은 Project Settings>Time>Fixed Timestep에서 1000 / 30으로 계산하여 30 FPS로 설정하여 프레임을 높이도록 최적화 하였습니다. 물리 연산 시간의 최적화는 상대적으로 저성능 기기에서 프레임 상승의 효과가 있었습니다.

각종 옵션 설정 및 유의점

안드로이드 기기들은 성능의 스펙트럼이 넓어서 상대적인 저성능 기기들이 많이 존재합니다. 이런 기기들의 FPS는 의외로 Unity 설정 관련 부분으로 FPS를 올릴 수 있었습니다. 대표적으로 ETC2 fallback을 16-bit로 설정하고 Project Settings>Player>Andorid>Resoultion and Presentation>Allowed Orientations for Auto Rotation>Unit 32-bit Display Buffer 설정을 해제 하여 16 bit 그래픽으로 돌아가도록 최적화할 경우 FPS의 향상을 확인할 수 있었습니다. 화면 표시는 32bit -> 16bit로 컬러 범위가 줄어드는 거지만 게임에 사용된 리소스가 16bit도 제대로 사용하지 않는 관계로 품질저하는 없었습니다. 
이외에도 Project Settings>Quality 설정, Project Settings>Physics>Layer Collision Matrix 등등 인터넷에 있는 Unity 최적화 글에서 본 설정 내용 등을 바탕으로 필요한 최소사양으로 유니티 엔진의 설정을 최적화하였습니다. 이외에 사운드와 음악 파일 같은 리소스도 게임에 필요한 설정을 적용하여 최적화 하였습니다. 
Unity가 여러 플랫폼에서 돌아가고 게임마다 엔진의 최적화 설정이 틀린 관계로 자신의 게임에 맞는 Unity 설정의 최적화는 필수 있듯 싶었습니다. 성능 좋은 PC에서 돌아가는 게임이야 복잡하지 않으면 영향을 적게 받겠지만 저성능에서도 돌아가야 하는 모바일 환경에서는 최적화된 설정은 필수인 듯 보입니다. 또한 실제로 설정 최적화에 따른 FPS의 성능 향상도 있습니다. 
인터넷이 있는 Unity 최적화 글에 의문이 드는 경우도 있었습니다. 텍스처 품질을 낮추다던지 사운드 파일을 Mono로 설정하는 경우가 그러하였습니다. 대부분 텍스처 품질을 낮추거나 사운드를 모노로 바꾸어도 모바일에서는 크게 티나지 않는다는 논리를 가지고 있었습니다. 그러나 실제로 테스트해보면 상대적으로 좋은 모바일 기기에서는 스테레오와 모노의 음질차이가 느껴졌습니다. 고해상도에서는 또한 텍스처 품질 저하도 느껴질 거 같았습니다. 보통 이런 옵션을 설정하는 이유는 적은 용량, 빠른 로딩 및 사용이었는데 이렇게 옵션에 설정할 바에야 처음부터 게임 사양을 저품질로 정하고 리소스를 저품질로 만들면 더 빨리 만들지 않았을까 하는 생각이 들었습니다. 
인터넷에 있는 Unity 최적화 관련 글을 볼 때 이렇게 품질을 떨어뜨리는 최적화와 같은 경우에는 게임의 품질을 떨어뜨려도 이상 없는지에 대한 고민을 한 후에 설정을 건드리는 것이 좋은거 같습니다. 이는 Unity로 만든 게임에 대한 플레이 경험을 바꿀 수도 있기 때문입니다.

각종 테스트 기기들

전에 테스트 기기에 특성에 대하여 Unity 최적화: 안드로이드 LG V10 vs Samsung S7 포스팅을 한적이 있습니다. 기기 간의 차이를 볼 수 있는 한 예입니다. 실제로 개발 기간 동안에 사용한 총 기기는 아래와 같습니다.

안드로이드
LG V10, Samsung Galaxy S7, Lenovo E10 tablet, Q88 Kids tablet

iOS
iPhone8 Plus, iPad Pro 10.5

기기들이 현재는 중고가 들이 그리 비싸지 않는 것들입니다. 최적화를 하면서 느낀점은 다양한 성능의 정말로 많은 기기들에서의 테스트가 중요하다는 것입니다. Unity의 해상도 시뮬레이션으로는 알 수 없는 것들을 알 수 있게하여 최적화 이전에 호환성을 좋게 하는데도 많은 도움을 줍니다. 

대표적으로 Q88 Kids tablet은 1.5Ghz Quard-Core + 512mb ram + Android 4.4 Kitkat으로 저사양의 기기에서의 한계를 아는데 좋았습니다. 이 태블릿을 테스트하고 나서야 만든 게임이 OpenGL-ES 2.0을 지원하지 않는다는 사실을 알고 추가하였습니다. 또한 게임 실행 중에는 30 FPS 근방으로 저사양에서도 원활히 돌아가는데 첫화면까지 로딩 시간이 길다는 것을 알 수 있었습니다.

위에 소개된 LG V10 vs Samsung S7글에도 적었듯이 최적화는 고사양에서 저사양 순으로 하는 것이 좋다는 것도 알 수 있었습니다. 추가적으로 쉐이더와 같은 경우는 상대적인 고사양에서는 문제가 발생하지 않다가 저사양에서는 FPS를 떨어뜨리는 요인으로 작용할 수 있다는 것도 알게 되었습니다.

Unity iOS 크래시 그리고 Exception 포스팅은 iPhone8 Plus 테스트시 iOS와 안드로이드의 옵션 설정 차이에 의하여 발생한 문제을 담고 있습니다. iPad Pro 10.5와 같은 경우는 고해상도에 따라 배경에 공백이 보이는 문제를 발견할 수 있었습니다.

회사에서의 테스트는 많은 부분을 QA에 의존하는 경향이 있는데 개발시 실제적으로 다양한 기기들을 가지고 테스트해보면 다양한 문제를 먼저 발견하고 수정할 수 있을거 같습니다.  
또한 최적화 이외에도 다른 플레이 느낌 등을 얻을 수 있습니다. 제가 만든 게임의 경우 Q88와 iPhone8 Plus에서의 FPS차이로 인하여 (30 vs 60) 난이도 차이를 느낄 수 있었습니다. 이런 것들은 PC 개발에서는 느낄 수 없는 것들을 발견하게해 게임을 더욱 풍성하게 만들 수도 있다고 생각합니다.

여기까지 최적화를 하면서 느낀 인상적인 점들을 적어 보았습니다. 읽는 분들에게 많은 도움이 되셨으면 합니다.

반응형