• [게임제작] [게임만들기]#10 최적화를 해보자!!2016.09.21 AM 02:38

게시물 주소 FONT글자 작게하기 글자 키우기

왜?! 폰에서(아이폰5c) 프레임 드랍이 발생하는가?!

이참에 유니티 프로파일러를 배워볼까 했는데.. 자료도 찾기 힘들고 해서..

 

우선 어느 부분에서 프레임 드랍이 발생하는지 확인해 봤습니다.

 

의심이 되는 부분은 아래와 같습니다.


1. 유닛별 AI 샘플링 시간.. 기본 0.2s 로 고정

   - 유닛이 많아지면 프레임 드랍이 더 심해져야 하지만.. 실제로 유닛의 수와 상관없이 프레임 드랍은 일정함

   - 0.2s -> 1.0s 변경해도 프레임 향상 없음

 

2. 상대방 유닛을 검색하는 과정에서 사용되는 Find 함수 (1번과 똑같이 샘플링 시간 0.2s)

   - Find 함수는 상대방 리스폰될때 한번씩만 사용되게 변경 하였지만... 프레임 향상은 없음

 

3. 카메라 이동시 프레임 드랍

   - 서로 쌈박질 하거나 마지막에 결과 창이 뜨기 전, 카메라 이동이 없을때는 60fps 나옴

   - 카메라 이동 함수에 문제가 있다고 판단됨

 

3번이 가장 유력해 보였습니다. 근데.. 카메라 이동은 단순하게 첫번째, 마지막째 유닛 중앙을 목표로 Translate함수를 이용해서 이루어져 있는데...

별다른 연산도 안하는데 이거때문에 프레임 드랍이 발생하는거 같지는 않았습니다.

 

'대체 왜??!! 카메라가 움직이면 프레임 드랍이 발생하는건가???'

 

어제 오늘 회사에서도 고민... 퇴근해서도 고민... 

 

'그냥 저사양에서는 30fps 고정으로 갈까?'

 

그러던 와중에 눈에 들어온 카메라 옵션 "Occlusion Culling" ?! 이게 뭐지??



스크린샷 2016-09-21 오전 2.47.57.png

< 카메라 인스펙터 모습. 아래서 두번째 문제의 "Occlusion Culling"... >

 

기본으로는 체크가 되어 있는데.. 카메라에 보이지 않는 오브젝트는 렌더링 하지 않게 해주는 거라고 하네요. 

요걸 꺼보고 빌드해서 폰에 올려보니.. ㅠㅠ

 

올레~~!!!

 

60fps!!!! 잘 나옵니다 ㅠㅠ 그래~!! 내 게임 고사양인 게임이 절대 아니였어!!! 구닥다리 도트 게임이잖아~!!

 

으아~~~ 이거 때문에 이틀이 그대로 날아가 버렸네요ㅠㅠ

 

좀더 찾아보니까 2D게임에서는 그다지 필요가 없어보이는 기능인거 같습니다. 실제로 사양이 낮은 폰에서는 괜히 CPU연산량만 키워서 프레임 드랍 현상을 발생시키기도 하니까요.


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

- 추가 내용 -

 

단순히 Occlusion Culling 옵션을 끄는게 답이 아니라.. Culling Mask 를 제대로 설정해 주는게 정답이었습니다!!

Occlusion Culling 적용하고 싶은 레이어만 선택하고 나머지는 꺼버리면 되네요~ (60fps 잘나옵니다~ㅎㅎ)

 

tamaii님 감사합니다^^

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


그래도 이참에 코딩도 좀 최적화 시켜줬고.. Xcode에 있는 디버그 네비게이터 기능도 사용해 보고.. 나름 성과가 있었습니다!!그래도 이참에 코딩도 좀 최적화 시켜줬고.. Xcode에 있는 디버그 네비게이터 기능도 사용해 보고.. 나름 성과가 있었습니다!!그래도 이참에 코딩도 좀 최적화 시켜줬고.. Xcode에 있는 디버그 네비게이터 기능도 사용해 보고.. 나름 성과가 있었습니다!!


스크린샷 2016-09-21 오전 2.19.46.png  스크린샷 2016-09-21 오전 2.20.01.png

< Xcode 디버그 네비게이터. 아이폰 CPU, 메모리, 베터리 사용량, FPS등 한눈에 볼 수 있다 >

 

Occlusion Culling 옵션이 켜져있을 때는 CPU가 100%가 되면서 프레임 드랍이 되었는데, 지금은 60%정도 수준입니다.

(아이폰6에서는 약 45%정도?)

 

최적화는 이쯤에서 잠시 접어두고 빨리 다음 작업에 들어가야겠습니다. 아직 할게 산더미처럼 쌓여있지만.. 

 

ps1. 혼자서 퇴근후 만들다 보니 의욕도 시들시들해지고 피곤도해서 작업속도가 더뎠는데, 요즘에는 마이피에서 활동하시는 개발자 분들의 지속적인 개발일지에 저 또한 의욕이 다시 활활 타오르고 있네요 ㅎㅎ 시들어지기전에 쭈욱 진도를 빼놔야지ㅋ

 

ps2. 지금 작업중인 결과 화면 떡밥을.. 

 

결과창.gif

< 작업중인 결과창.. 좀더 이쁘장하게 꾸미고 싶다... >

댓글 : 14 개
오 카메라 워크에도 저렇게 무겁게 만드는 옵션이 있었군요... 카메라는 거의 신경안썼었는데 한번 만져봐야겠습니다. 오늘은 께임 스샷이 없네유ㅜㅜ
카메라 이동이 잦고 2D게임이면 꺼두시는게 좋은거 같아요ㅎㅎ
게임 스샷을 원하시면...ㅎㅎ
오 레벨업 했을 때 텍스트 뿜뿜하는게 진짜 레벨업했단 느낌이 듭니다.
뭔가 빵빵~ 터지는 이펙트도 넣고, 보물상자도 넣어주고, 보물상자 이펙트도 넣어주고... 재시도, 다음 스테이지, 마을로 아이콘도 만들어서 넣어주고...
할게 너무 많네요 ㅠㅠ
헉 저희회사 플젝에도 끄니 프레임상승이!! 감사합니다!
아쉽게도 아이폰5c에서는 프레임이 큰폭으로 증가했는데, 갤럭시s3는 그렇게 크게 오르지는 않네요ㅎㅎ
심오한 최적화의 세계...
오클루젼 컬링이 원래 3디 객체에 많이 쓰는 기술이긴 하죠.

앞에 큰 건물이 있어서 뒤에 오브젝트들이 랜더링 해도 안보이는 상황이거나

와우 할 때 건물들 보면 꺾어서 들어가는 경우가 많자나요.. 그때 같은 상황이거나 할때 쓰이는 기술이죠. ( 완전히 들어가지 않으면 안쪽은 랜더링 안되죠 , 반대도 마찬가지 )

근데 2디 게임에 오클루젼 설정 같은거 아무것도 안했는데 프레임이 낮게 나온건 저도 첨 알았네요.

그냥 무시 될줄 알았는데 그게 아니였군요.ㅋ
제대로 비교를 해봐야지 알 수 있겠지만...
아이폰의 경우는 옵션을 끄고 켜는거에 따라서 프레임이 크게 바뀌네요ㅎㅎ;; 이게 원래 최적화를 위한 옵션이라고 알고 있는데.. (당연히 안보이는곳 렌더링을 안하면 그만큼 자원이 남으니... 이게.. 유니티 버그일지도?!!?!?)
안드로이드 같은 경우는 갤럭시s3를 테스트폰으로 사용중인데.. 40fps에서 55fps정도로 오르네요..
기회가 되면 좀더 자세하게 비교를 해봐야겠습니다.
레벨 오를때 Lv xxx 의 색이 커질때 초록색이나 다른 색으로 변했다가 서서히 검은색으로 다시 돌아오는것도 괜찮을듯? 아니면 경험치 바 색에 맞춰서 한다던지? (이러면 좀 복잡해 보이려나...)
오오오~ 좋은 아이디어네요~
이게 만들다 보면 머리가 굳어진다고 해야하나... 이런 좋은 아이디어들이 생각이 안나는데 ㅠㅠ (구현하기 귀찮아서 생각이 안나는걸 수도...ㅋ)
한번 색깔이 변하게 적용해봐야겠네요~ 감사합니다~^^ㅎ
호오 좋은 팁입니다~!
저도 사용해 봐야겠어요^^
생각할 수록.. 유니티 버그인가? 싶기도 하네요ㅎㅎ
여튼 프레임 향상이 되니 우선 이렇게 사용하기로~ㅋ
제작기 잘 보고 있어요. : )
개인적으로는 Occlusion Culling을 끄는 것 보다는
위의 Culling Mask를 이용해서 필요한 레이어만 보이게 하는 방식이 더 유연한것으로 보여요
나중에 확장성을 생각하신다면, 한번 연구해 보시는것도 좋을것 같아요.
액션도 좋던데 UI도 귀엽네요 : )
뜨아~~!!!ㅠㅠ
Culling Mask!!!! 이거였군요??!!!
필요없는거 다 끄니까 Occlusion Culling 옵션켜도 프레임 유지 되네요 ㅠㅠ 감사합니다~~!!!!^^ㅎ
친구글 비밀글 댓글 쓰기