NDC2013 - ‘갤럭시S1’ 에서 풀프레임 퍼즐주주 만들기

6,646 views

Published on

Unity3D 에서 2D 게임 최적화 하기

Published in: Education
0 Comments
33 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,646
On SlideShare
0
From Embeds
0
Number of Embeds
140
Actions
Shares
0
Downloads
0
Comments
0
Likes
33
Embeds 0
No embeds

No notes for slide

NDC2013 - ‘갤럭시S1’ 에서 풀프레임 퍼즐주주 만들기

  1. 1. ‘갤럭시S1’ 에서 풀프레임 퍼즐주주 만들기- Unity3D 에서 2D게임 최적화 하기넥슨 마젤란팀임석의60프레임발표일 : 2013-04-24발표 장소 : COEX CONFERENCE HALL 3F 308호Twitter : @olambdaoMail : olambdao@gmail.com2013NDC에서 발표한 공개용 발표자료이며, 발표자료이해를 돕기위해 필요한 부분에 설명을 넣었습니다.
  2. 2. 초심자를 위한 디딤돌
  3. 3. 퍼즐주주 개발– for KakaoTalk– @ NEXON PLAY– Kindle FireZoo Invasion 개발2012:서울 개발임석의
  4. 4. 퍼즐주주 이야기
  5. 5. 퍼즐주주?넥슨 최초의 카카오톡 게임구글 플레이 싞규 무료 1위앱스토어 인기 무료 1위
  6. 6. 이랬던 퍼즐주주가 읷주읷만에…“결제를 하다가 죽네”“약관동의 받다가게임이 꺼지네?”“느려서 못하겠네…”“허허~ 잘 되던게갑자기 안되네?”
  7. 7. 그래서 최적화를 했다
  8. 8. 최적화 목적과 목표
  9. 9. 메모리 사용량은 낮추고CPU 사용량도 낮추고초당 프레임 수는 더하자
  10. 10. 그럼 타겟 디바이스는?
  11. 11. 플래그쉽 스마트폰최초의 보급형 스마트폰5% 단말기 점유율 (2013년 1월 기죾)갤럭시S1Galaxy S1, S2, Note60% 단말기 점유율
  12. 12. 사실… ‘갤럭시S1’ 에서 잘~ 돌아갂다면,어떠한 ‘스마트폰’ 에서도 잘 돌아 갈 것 같은 근거 없는믿음!
  13. 13. 잠시!그럼 갤럭시S1 에서 최적화 젂의퍼즐주주는 어떤 상태인가요?최적화 젂, 갤럭시S1에서 퍼즐주주는 “게임을 원활하게돌리기 힘들 정도였다.메모리가 부족하여 ActivityManager 에 의하여 자동으로죽고, 20~40 프레임이 나오던 상태
  14. 14. 최적화 결과
  15. 15. 최적화 대성공!잘~ 익었습니다!갤럭시S1에서 발생했던 문제들을 다 해결한 상태,원활하게 게임을 할 수 있을 정도로 개선이 됨.
  16. 16. 로그읶 화면 친구 리스트
  17. 17. Draw Calls VBO Total Textures Memory Meshes Materials Total Objects Audio MemoryUsage이전이후최적화 후 상대비교그래프가 높을 수록 좋음
  18. 18. 최적화 과정여기서 소개된 최적화 방법은 갤럭시S1에서 60프레임을만들려고 사용했던 방법임을 알려드립니다.
  19. 19. Logic Object Pool Draw CallFont UI Sound
  20. 20. 프로파일링으로 병목 지점을 파악!코드를 개선
  21. 21. 하지만 퍼즐이란 특성 때문에눈에 띄는 개선 사항은 없었다.
  22. 22. LogicObjectPoolDraw CallFont UI Sound
  23. 23. 오브젝트를 미리 생성하여 재활용 하는 방식
  24. 24. GameObject.Instantiate() is Slow!Resources.Load() is Slow!
  25. 25. 몇몇 이펙트와 사운드에서 렉 발생!
  26. 26. 앱 구동시 Sprite, Sound 미리 생성!자잘한 렉이 사라짐
  27. 27. Logic Object PoolDrawCallFont UI Sound[Draw Calls 의 정의는 사람마다 조금씩 다를 수 있습니다]
  28. 28. Draw Call화면에 객체를 그리기 위해,CPU 에서 GPU 로 명령어를 젂달하는 비용화가가 그림을 계속 그리기 위해,붓 또는 팔레트를 교체하는 비용
  29. 29. Unity3d는 비용을 최소화하기 위해Batching 을 지원한다단, 객체들은 같은 메터리얼을 공유해야함!
  30. 30. 비용을 최소화 해보자!구퍼즐주주의 Draw Call 은 조금 높은 상태제가 생각하는 적정 DrawCall 은 1~20 정도, 최적화 젂의퍼즐주주는 그것보다 많이 높은 상태
  31. 31. 하나의 텍스처에 최대한 많은 그림을 넣는다.• 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기
  32. 32. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기같은 그림을 최대한 많이 사용!
  33. 33. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기퍼즐주주에서 사용하는 백판9GRID 로 늘리고 줄이자
  34. 34. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기예시1 예시2 예시3 예시4
  35. 35. 이벤트 안내읷시정지튜토리얼 하트충전• 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기실제로 퍼즐주주에서 사용하고 있는 백판의 모습. 모두같은 백판을 사용하고 있다.
  36. 36. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기버튼 터치 상태 그림을따로 사용하지 않기
  37. 37. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기버튼 터치 시 확대
  38. 38. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기흰색 톤의 그림에 색칠 하기
  39. 39. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기색칠하여 UI 에 다양성 확보
  40. 40. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기하트충전창 코읶충전창
  41. 41. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기이런 방법을 총 동원하여1024 x 1024 텍스쳐에 127개의 그림넣는데 성공
  42. 42. • 그림 재활용 하기• 버튼 스케읷 하기• 색칠 하기그 결과 Draw Call 이 절반으로 떨어짐!
  43. 43. Logic Object Pool Draw CallFont UI Sound
  44. 44. 영어한국어 일본어퍼즐주주는 하나의 클라이언트에서 3개국어를 지원중
  45. 45. 한국어 + 영어 일본어2048 px 2048 px2048px2048px
  46. 46. UI Atlas<1024 x 1024Font Atlas2048 x 2048배보다 배꼽이 더 큰 상황!
  47. 47. Packed Font!
  48. 48. Packed FontR, G, B, A channel 에 각각 글자의 형태를 저장하는 방법
  49. 49. [4개의 영역에 저장] [각 채널에 저장]
  50. 50. 메모리 사용량을 1/4 로 젃약
  51. 51. 1024 px1024px
  52. 52. Logic Object Pool Draw CallFont UI Sound
  53. 53. 기졲 퍼즐주주는여러 상태가 보이는 UI
  54. 54. 드로우콜증가
  55. 55. 뉴 퍼즐주주는한 상태만 보이는 UI 로 변경
  56. 56. 프레임 드랍현상 해결!
  57. 57. Logic Object Pool Draw CallFont UI Sound
  58. 58. 최적화를 마무리 하던 도중…
  59. 59. 갤럭시S1 에서 사운드를 켰을 시,60에서 30프레임으로 떨어집니다…
  60. 60. [갤럭시S1 Audio 프로파일링]혼자서 30% 를 차지
  61. 61. 그랬던 것이다.메모리를 절약하고자 압축한 사운드는CPU 를 잡아 먹고 있었다...?그렇다고 압축을 하지않으면 메모리가늘어나고…진퇴양난
  62. 62. 비압축 사운드빈도수가 높거나 느리면 앆됨• 우주선 효과음• 블록 효과음• 파괴 효과음• 동물 효과음압축 사운드빈도수가 낮거나 느려도됨• 배경음악• 부스터 발동 효과음• 유아이 효과음
  63. 63. 사운드 자르기Mono 사운드스마트폰의 스피커는 모노스피커2D Sound퍼즐주주는 2D Game!사운드 자르기- 필요없는 부분은 과감하게 삭제
  64. 64. [갤럭시S1 Audio 프로파일링]이젠 10% 를 차지
  65. 65. 메모리와 CPU 사용량을 줄여서
  66. 66. 퍼즐주주 60프레임 성공!
  67. 67. 필요할 것 같아서 만들어본요약로직큰 개선은 없었다Object Pool잘 적용하여, 렉을 없앨 수 있었다Draw Call9Grid로 그림 재사용버튺 터치 시 확대흰색 톢 그림에 색칠FontPackedFont 를 이용하여, 용량을1/4로 죿일 수 있었다.UI한 상태만 보이도록 구성Sound압축과 비압축을 적젃히 분배2D Sound, Mono, Trim
  68. 68. THANK YOU@olambdao
  69. 69. 퍼즐주주 관련 섹션갤럭시S1에서 풀프레임 퍼즐주주 만들기Speaker: 임석의수요일 11:00포스트모템: 퍼즐주주 개발을 통해 얻은 5가지 교훈Speaker: 박병림수요일 17:40Amazon Web Service를 활용한 모바읷 게임 서버 개발- 퍼즐주주 사례를 중심으로Speaker: 윤석주목요일 17:40

×