콘텐츠로 건너뛰기

Unity3D Rendering Issue Tracking – 1

문제상황) 그림과 같이 Primitives를 이용한 Scene 구성후 Android에서 게임 실행시 FPS가 40~50으로 떨어지는 현상이 발생.

이전의 Scene구성보다 Batches 가 2~3배 정도 증가했고 Verts, Tris가 2배정도 되었다.

다른 설정은 딱히 바꾼게 없는 터였고 MeshCombine 은 쓰고 싶지 않은 상황.  LightMap Bake 도 하지 않은 상태.

첫번째 한짓 – MeshRenderer의 Cast Shadow/Receive Shadow 옵션 끄기

결과 –  똑같음

두번째 한짓 – MeshRenderer의 Dynamic Occluded 옵션 끄기

결과 – 똑같음

세번째 한짓 – Edit>Project Settings>Quality>V sync Count -> Don’t Sync 로 바꿈

결과 – 똑같음

네번째 한짓 – LightMap 굽기

결과 – 똑같음, 임의 구간에서 느려짐이 체감됨.

다섯번째 한짓 – Profiler 돌림

결과 – gfx.waitforpresent에서 프레임을 잡아먹는게 보임, 그런데 waitforpresent가 대체 뭘말하는 것인지를 모름. 구글링을 해보니 CPU의 유휴시간을 말하는데 CPU연산은 끝났지만 GPU의 연산이 끝나지 않아 대기하는 시간 이라고 함.(참고)

GPU연산시간? 그게 뭐더라… 한참 이해를 못하다가 Optimizing에대한 Unity Docs를 찾아냄(링크)

해당 문서에 Shader를 체크해 보라는 내용이 있음. (모바일에서 빌트인 쉐이더를 사용할 경우 Mobile 또는 Unlit항목을 사용할 것.)

캐릭터를 제외한 다른 모든 MeshRenderer의 Material Shader를 변경

FPS 60으로 상승

유니티의 Standard Shader(빌트인) 을 사용할 경우 품질은 좋아지지만 모바일에서 성능이 매우 떨어진다(아마도 정점에 대한 빛계산이 여러가지로 많은 탓인듯.. PC에서는 아주 빠르게 동작하지만 모바일 환경에서는 매우 좋지 않다.)

따라서 모바일 게임을 만드는 경우에는 쉐이더를 직접 작성하거나 빌트인 쉐이더를 사용할 경우에는 Mobile항목이나 Unlit항목을 상요하는게 좋겠다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다