Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 71 Ad

More Related Content

Viewers also liked (20)

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

Advertisement

Recently uploaded (20)

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

  1. 1. ‘갤럭시S1’ 에서 풀프레임 퍼즐주주 만들기 - Unity3D 에서 2D게임 최적화 하기 넥슨 마젤란팀 임석의 60프레임 발표일 : 2013-04-24 발표 장소 : COEX CONFERENCE HALL 3F 308호 Twitter : @olambdao Mail : olambdao@gmail.com 2013NDC에서 발표한 공개용 발표자료이며, 발표자료 이해를 돕기위해 필요한 부분에 설명을 넣었습니다.
  2. 2. 초심자를 위한 디딤돌
  3. 3. 퍼즐주주 개발 – for KakaoTalk – @ NEXON PLAY – Kindle Fire Zoo Invasion 개발 2012:서울 개발 임석의
  4. 4. 퍼즐주주 이야기
  5. 5. 퍼즐주주? 넥슨 최초의 카카오톡 게임 구글 플레이 싞규 무료 1위 앱스토어 인기 무료 1위
  6. 6. 이랬던 퍼즐주주가 읷주읷만에… “결제를 하다가 죽네” “약관동의 받다가 게임이 꺼지네?” “느려서 못하겠네…” “허허~ 잘 되던게 갑자기 안되네?”
  7. 7. 그래서 최적화를 했다
  8. 8. 최적화 목적과 목표
  9. 9. 메모리 사용량은 낮추고 CPU 사용량도 낮추고 초당 프레임 수는 더하자
  10. 10. 그럼 타겟 디바이스는?
  11. 11. 플래그쉽 스마트폰 최초의 보급형 스마트폰 5% 단말기 점유율 (2013년 1월 기죾) 갤럭시S1 Galaxy S1, S2, Note 60% 단말기 점유율
  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 Memory Usage 이전 이후 최적화 후 상대비교 그래프가 높을 수록 좋음
  18. 18. 최적화 과정 여기서 소개된 최적화 방법은 갤럭시S1에서 60프레임을 만들려고 사용했던 방법임을 알려드립니다.
  19. 19. Logic Object Pool Draw Call Font UI Sound
  20. 20. 프로파일링으로 병목 지점을 파악! 코드를 개선
  21. 21. 하지만 퍼즐이란 특성 때문에 눈에 띄는 개선 사항은 없었다.
  22. 22. Logic Object Pool Draw Call Font UI Sound
  23. 23. 오브젝트를 미리 생성하여 재활용 하는 방식
  24. 24. GameObject.Instantiate() is Slow! Resources.Load() is Slow!
  25. 25. 몇몇 이펙트와 사운드에서 렉 발생!
  26. 26. 앱 구동시 Sprite, Sound 미리 생성! 자잘한 렉이 사라짐
  27. 27. Logic Object Pool Draw Call Font 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 Call Font UI Sound
  44. 44. 영어한국어 일본어 퍼즐주주는 하나의 클라이언트에서 3개국어를 지원중
  45. 45. 한국어 + 영어 일본어 2048 px 2048 px 2048px 2048px
  46. 46. UI Atlas < 1024 x 1024 Font Atlas 2048 x 2048 배보다 배꼽이 더 큰 상황!
  47. 47. Packed Font!
  48. 48. Packed Font R, G, B, A channel 에 각각 글자의 형태를 저장하는 방법
  49. 49. [4개의 영역에 저장] [각 채널에 저장]
  50. 50. 메모리 사용량을 1/4 로 젃약
  51. 51. 1024 px 1024px
  52. 52. Logic Object Pool Draw Call Font UI Sound
  53. 53. 기졲 퍼즐주주는 여러 상태가 보이는 UI
  54. 54. 드로우콜 증가
  55. 55. 뉴 퍼즐주주는 한 상태만 보이는 UI 로 변경
  56. 56. 프레임 드랍현상 해결!
  57. 57. Logic Object Pool Draw Call Font 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 Call 9Grid로 그림 재사용 버튺 터치 시 확대 흰색 톢 그림에 색칠 Font PackedFont 를 이용하여, 용량을 1/4로 죿일 수 있었다. UI 한 상태만 보이도록 구성 Sound 압축과 비압축을 적젃히 분배 2D Sound, Mono, Trim
  68. 68. THANK YOU @olambdao
  69. 69. 퍼즐주주 관련 섹션 갤럭시S1에서 풀프레임 퍼즐주주 만들기 Speaker: 임석의 수요일 11:00 포스트모템: 퍼즐주주 개발을 통해 얻은 5가지 교훈 Speaker: 박병림 수요일 17:40 Amazon Web Service를 활용한 모바읷 게임 서버 개발 - 퍼즐주주 사례를 중심으로 Speaker: 윤석주 목요일 17:40

×