디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[📜일지] Frostory 모바일 최적화 삽질기

특수한발가락갤로그로 이동합니다. 2020.03.26 19:03:23
조회 1563 추천 16 댓글 10
														

안녕하세요!


이번에는 안드로이드에서 게임을 최적화 했던 과정을 정보 공유도 겸해서 씁니다.


----------------------


얼마전에 오랜만에 핸드폰에서 게임을 돌려보다가 렉이 생각보다 심각하다는 사실을 발견했습니다.


분명 옛날에는 쌩쌩하게 돌아갔었기 때문에, 왜 느려진 건지 원인을 알아내기로 했습니다.




1. 유니티 프로파일러로 찾아보기


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279fd9b58df534f83140e82efd2

기본 내장 프로파일러입니다.

development build를 키고 apk를 빌드하고, adb나 로컬 네트워크로 앱에 연결해서 볼 수 있습니다.


실제 게임중에 렉이 빡!하고 걸리는 부분이 있는데, JIT가 대부분 원인이였습니다.

그런데 이건 해결하기가 까다로웠습니다. 코드를 한번 돌려줘야하는데, 감이 안잡혔습니다.

그래서 그냥 IL2CPP를 쓰기로 했습니다. (자세한 내용은 https://blogs.unity3d.com/kr/2015/09/22/kr-csharp-compile-il2cpp/ 참고)


그런데 스파크를 잡긴 했지만, 전체적으로 프레임이 떨어지는 건 여전히 해결되지 않았습니다.

느린 부분을 찾아봤지만 딱히 문제가 될만한 부분은 없어 보였습니다.

다만 유니티 이벤트 시스템이 생각보다 많이 먹었는데 이건 캔버스에 쓸데없이 raycastTarget옵션을 많이 켰던 게 원인이였습니다.




2. 프레임 디버거

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279a8990d85521bde470eef453c

이것도 유니티 내장 툴인데, 저희는 주로 배칭이 제대로 되는지를 확인할 때 사용하고 있습니다.

렉이 심하게 걸리는 장면에서 그림자 배칭이 안되고 있다는 걸 확인해서 고쳤습니다.


고치고 다니 조금 빨라진 것 같은 느낌이 들었는데, 역시 옛날의 그 쌩쌩한 느낌은 아니였습니다.

그리고 다른 장면을 테스트해보니 여전히 느렸습니다.





3. Mali Graphics Analyzer


렌더링하는 게 느린 건 대충 알았는데, 정확히 어떤 요소를 그리느라 느린 건지 알 수 없었습니다.

이 때 유용한 게 그래픽카드 회사에서 배포하는 분석 툴들입니다.

하지만 이게 좀 복불복이 좀 있습니다.

핸드폰마다 툴이랑 호환이 잘 되는 것도 있고, 잘 되는 것도 있습니다.

저는 갤럭시S6를 써서 Mali Graphics Analyzer로 테스트해봤는데, 다른 건 다 되는데 정작 중요한 Fragment Count 정보를 못얻어왔습니다.

옛날에는 분명 잘 됐는데, 뭔가 버전이 꼬이면서 잘 안되게 된 것 같습니다.

오랜 시간 삽질을 해봤지만, 도저히 문제를 해결할 수 없었습니다.

결국 다른 방법을 찾기로 했습니다.



4. 각종 툴들


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279aacc5c830e1a8c430e7e5b5bviewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279fcca51d159148a140eca0017

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279adc90d855c498f100e57791d


모바일에서 느린 건 PC에서도 느릴 거라고 생각해서(비율적으로) PC에서도 여러가지 검사를 해봤습니다.

하지만 툴이 동작은 잘 하는데, 도움될만한 정보는 안나왔습니다.

그래서 이 방법은 일단 보류하기로 했습니다.




5. systrace

viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279f9ca59d05c4e8d470eb45ecf


유니티 2019.1부터 systrace를 지원한다고 해서 안드로이드 스튜디오로 프로파일링을 해봤습니다.

하지만 너무 개괄적인 내용만 나와서 어떤 요소가 느린 건지 알 수가 없었습니다.

이건 제가 세팅을 제대로 안해서 결과가 이상하게 나온 것 같은데, (원래 좀 더 자세하게 나와야함)

무엇을 잘못했는지 알 수가 없어서 일단 보류하기로 했습니다.




7. simpleperf


구글링 도중에 simpleperf가 좋다는 글을 보게 되었습니다. (https://www.slideshare.net/JaeseungHa/ndc2018-96510072)

그래서 따라해봤는데, 처음에는 제대로 되지 않았습니다.

원인은 삼성폰에서 adb run-as 명령을 지원하지 않는다는 것이였습니다.

그래서 결국 어쩔 수 없이 루팅을 해서 문제를 해결했습니다.

그리고 몇시간에 걸친 삽질 끝에 결국 데이터를 뽑는데 성공했습니다


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279faca0adf581edf120e57818a


이제까지랑 다르게 결과가 자세하게 나오니 상당히 유용했습니다.

쓸데없이 돌고 있던 코루틴도 발견해서 제거했고, 여러 느린 부분을 고쳤습니다.



viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279acc80cd05f1d82410ee50bad

보시다시피 물리 contact callback에 오버헤드가 크다는 사실도 발견했습니다.

실제 이벤트를 받고 코드가 실행되는 부분은 저렇게 작은데, 그걸 하기 위한 준비 작업은 저렇게나 큽니다.

그래서 관련된 부분을 고치고, 이 외에도 자잘자잘하게 느린 부분들을 고쳤습니다.


그 과정에서 JobSystem도 적용해봤는데 데드락 문제 때문에 다시 롤백하기도 했습니다.



8. 멀티스레드 렌더링


그런데 이렇게까지 코드를 쥐잡듯이 잡았는데도, 여전히 뭔가 시원한 느낌이 생기지 않았습니다.

그러다가 우연히 프로젝트 세팅에서 멀티스레드 렌더링이 꺼져있다는 사실을 발견했습니다.

예전에 멀티스레드 렌더링이 하도 불안정해서 꺼놨었는데, 시험삼어 켜서 빌드를 해봤습니다.

결과는 놀라웠습니다.

딱 예전의 그 쌩쌩한 느낌이 바로 재현됐습니다.

몇일간의 삽질이 무색하게도 빨라졌습니다.


플레임그래프로 확인해보니 확실히 멀티스레드 렌더링이 도움이 되는 걸 확인할 수 있었습니다.




viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279a89b51d358488d430e556087

(멀티스레드 렌더링 off)


viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73ced80fa11d02831208acfae4be8406aea1df501c6a3c8ae455d00fe20ed4549e5a3a65f01a5539765377f1de1c279fdc751810a4adc470e29b66c

(멀티스레드 렌더링 on)

렌더링 쓰레드가 먹는 시간과 메인 쓰레드가 먹는 시간이 비슷합니다. 그렇기 때문에 CPU 자원을 효율적으로 쓰게되는 셈입니다.



결론은 멀티스레드 렌더링을 키자.



읽어주셔서 감사합니다!



------------------- 이전 글 ---------------------

1편 소개

2편 괴물

3편 약탈자

4편 파편시스템

5편 대쉬퍼즐

6편 브금소개

7편 스프라이트 순서 처리

9편 대화 시스템

10편 그래픽 리소스 제작과정

11편 레벨 프로토타입 영상

12편 지형 시스템

13편 버려진 레벨들

14편 무기 시스템

15편 룬 시스템

16편 폭탄 퍼즐 레벨

17편 몬스터 제작 과정

--------------------------


추천 비추천

16

고정닉 4

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 며느리, 사위되면 시댁, 처가에 잘할 것 같은 스타 운영자 25/10/13 - -
174286 공지 인디 게임 개발 갤러리 규칙 - 질문 전 필독!! 파베르갤로그로 이동합니다. 24.12.04 5903 9
193761 공지 신문고 [3] 파베르갤로그로 이동합니다. 25.09.06 394 0
193433 공지 게임제작 초심자를 위한 글 모음 - Goranic 파베르갤로그로 이동합니다. 25.09.02 2015 7
123789 공지 뉴비 개임개발 하려는데 뭐부터 해야하나요 복사본 [22] 흉황갤로그로 이동합니다. 23.04.11 30603 54
196324 💬 정통로그라이크는 겜메강좌가 하나도없네 ㅇㅇ(112.140) 14:41 19 0
196323 💬 겜 출시할 생각이면 완장 안 다는게 맞음 Indie(106.250) 14:37 40 3
196320 💬 파딱 탈주 [5] dryrain갤로그로 이동합니다. 14:02 208 9
196319 💬 콘진원 중간심사 빡세짐? [1] Indie(183.107) 13:58 90 2
196316 💬 일 중독이면 정신병이나 후유증 온다고 봄? [14] Indie(211.203) 13:32 176 0
196315 💬 뭘 막아 외화 벌어야지... [3] Indie(221.146) 13:21 222 0
196314 💬 p2e 왜 막냐고? [4] Indie(151.115) 12:53 254 3
196313 💬 p2e는 왜 이악물고 막으려는거임? [13] ㅇㅇ갤로그로 이동합니다. 12:27 396 0
196312 💬 1인개발이랑 2~3인개발이랑 은근히 차이가 엄청 크구나 [21] Indie(118.103) 12:10 414 1
196311 💬 게임잼 한번도 참여 안해봤는데 ㄱㅊ음? [2] ㅇㅇ(222.109) 11:54 136 0
196310 💬 만들고 싶은 게임이 없다는 사람들이 갤에 가끔 있던데 [5] Indie(211.200) 11:50 225 2
196309 💬 개발이 항상 아이디어가 문제인듯 [2] ㅇㅇ(221.144) 11:41 154 1
196308 🐣질문 점선 외곽선은 어떻게 만듦? [2] 하우디갤로그로 이동합니다. 11:40 143 0
196307 💬 머스크가 2026년말에 AI가 만든 게임 출시한대 [5] 사랑맛쿠키갤로그로 이동합니다. 11:35 259 0
196306 💬 Gallery of Night Order 살려줘요 [4] oo갤로그로 이동합니다. 10:46 165 0
196305 🐣질문 튜토리얼 지옥?? [6] ㅇㅇ갤로그로 이동합니다. 09:41 311 0
196304 🐣질문 업그레이드 구현 방식 뭐가 더 나음? [7] 211214갤로그로 이동합니다. 09:35 267 3
196303 🐣질문 유니티 씬뷰 아이콘질문 [4] Indie(49.172) 09:28 148 0
196302 💬 헉 유튜브가 안된다. [6] Indie(218.37) 08:56 224 0
196301 💬 Localization 버리고 엑셀로 변경 중 [4] Indie(218.37) 07:02 276 1
196300 💬 . [22] ㅇㅇ갤로그로 이동합니다. 04:59 476 1
196298 💬 4인팀인 사람있으면 역할분담 [11] 니애미개갤로그로 이동합니다. 02:34 397 0
196297 💬 게임 제작업 통신판매업 다시 떼는법? [5] ㅇㅇ갤로그로 이동합니다. 02:08 234 1
196295 📚정보 Unreal Engine: Deferred Shader Rendering [3] pluto갤로그로 이동합니다. 01:16 410 11
196294 🐣질문 팹 플레시 할인보다 더 할인 할 때 있음? [2] ㅇㅇ갤로그로 이동합니다. 01:01 139 0
196293 💬 진짜 팩토리오같은게임도 처음에 저평가됐다는게 신기하다 [3] ㅇㅇ갤로그로 이동합니다. 00:44 325 0
196292 🐣질문 보드게임 시스템 같은건 저작권이 어떻게 되지 [14] ㅇㅇ(222.233) 00:43 297 0
196291 💬 마케팅 도대체 어케 하는거임.. [15] RootKit갤로그로 이동합니다. 00:26 449 1
196290 💬 또그라이크 또빌딩-0 Indie(49.167) 00:25 180 1
196288 💬 첫 게임 기획을 육성 시뮬겜으로 하는중인데 [1] ㅇㅇ갤로그로 이동합니다. 00:18 151 1
196287 💬 조작감에 대한 피드백이 가장 난감 [7] mazurka갤로그로 이동합니다. 10.15 276 1
196286 💬 그록 짱신기하다 [12] Micharie갤로그로 이동합니다. 10.15 511 0
196285 💬 개발중간 단축키 하나 추가하는거이가 일케 험난할줄야 -인.갤로그로 이동합니다. 10.15 187 1
196284 💬 우우 아트 어렵다.. 사운드 어렵다.. [2] Indie(59.27) 10.15 169 1
196283 💬 인붕이 줫댓다... [12] Indie(221.144) 10.15 366 3
196282 💬 님들 넥스트 페스트 하루에 위시리스트 몇명정도씩 늘음? [3] Indie(118.32) 10.15 290 2
196280 💬 sns 해외 홍보 계정 운영하는 사람 있음? [2] ㅇㅇ갤로그로 이동합니다. 10.15 176 1
196278 💬 c# ㅈㄴ 어렵다... [10] Indie(121.138) 10.15 363 0
196277 💬 모르는 장르 섣불리 창작하면 문제가... 펜톱갤로그로 이동합니다. 10.15 247 1
196276 💬 미완성 피드백을 들으면 ㅇㅇ(49.175) 10.15 119 0
196275 💬 '만화 그리는걸 싫어하는 작가'가 바쿠만에 나오는데 [1] bowmore갤로그로 이동합니다. 10.15 552 7
196274 💬 겜 안해도 인디하는거 아니고 기성 회사 들어간거면 상관없지 ㅇㅇ(222.233) 10.15 149 1
196273 💬 원래 겜안하는 겜알못 개발자는 많았음 [23] ㅇㅇ(222.111) 10.15 877 6
196272 💬 넥페 데모 찍먹하면서 개발력 증가함 [3] 무장농부갤로그로 이동합니다. 10.15 413 6
196271 💬 슬레이 더 스파이어: 유저 데이터 수집의 중요성 [3] ㅇㅇ갤로그로 이동합니다. 10.15 479 14
196270 💬 게임 별로 안좋아한다 <~ 개발해도 상관 없음 ㅇㅇ(121.180) 10.15 191 3
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2