2. 모바일
• 시장의 변화를 감지
• 처음에는 적극적으로 대응하지 않음
• 간단하게 OpenGL ES 를 지원하도록 해보자… 정도
• 엔진을 크게 수정하지 않고, OpenGL ES 만 추가적으로 적용
• 모바일이라도 특별하게 엔진을 줄이지 않음
• 포팅하면서 겪은 이야기 여기로!!!
19. 사례 2. 배칭
• Draw Call을 줄이자!
• Sorting
• Distance (Front->Back, Back->Front)
• RenderState
• ShaderState
• Mesh ID
• Batching
• 전통적인 모아서 찍기!
• Static Mesh : 버텍스 64개 이하
• Skinned Mesh : 320개 정도의 작은 것들 모음
20. 사례 3. Buffer Object
• OpenGL ES에서의 “버텍스/인덱스 버퍼”
• (일반적으로) 사용을 권장!
• But,
• iPhone4로 테스트 결과, 엄청나게 느려지는 문제 발생
• Cocos2D의 경우도 이런 문제가 있었음
• http://www.cocos2d-iphone.org/forum/topic/21829
• 증상> 대략 xcode 4 로 업데이트 했더니 느려졌다!!!
• 해결
• Static 버퍼 with VBO / IBO
• Dynamic 버퍼 without VBO / IBO
21. 사례 4. 알파 블랜딩
• 화면에서 알파 블랜딩이 차지하는 비중에 높을수록 느려짐
• Present에서 지연 됨 (FillRate)
• CPU는 놀고, GPU는 죽고 있음
• 특히, iPhone4 / iPad1과 같이 FillRate가 낮은 기기에서는 최악!
• 해결책
• 알파를 사용하는 부분을 줄이는 것이 최선!
• 작은 렌더타겟에 그려서 늘여찍는 방법
• 파티클과 같이 동적인 알파객체들에게는 적합함
• http://blog.naver.com/sorkelf/40186066235
22. 사례 5. 렌더타겟
• 렌더타겟 사이즈가 작으면 작을수록 비용 절감!
• 렌더타겟 전환은 굉장히 비용이 많이 들어감!
• 해결책
• 패스를 늘리지 않는다.
• 렌더타겟 전환을 최소화!
• 적당히 늘여찍기!
• 렌더타겟 재사용
• PowerVR에서는 같은 렌더타겟을 읽고 쓰기가 가능! (DirectX 불가능)
• 렌더타겟 전환을 하지 않고, Viewport만 변경해서 렌더링이 가능
• Post Processing에 사용하면 굿!!!
• http://blog.naver.com/sorkelf/40186066235
23. 사례 6. 셰이더
• 복잡한 연산은 버텍스 셰이더에서 처리하자!
• 내부 함수은 너무 느리다!!!
• Pow(x, 4) 와 x*x*x*x 는 같은 결과지만 속도는 천지차이!
• Shader 컴파일 시간은 오래 걸린다.
• 셰이더 빌드 바이너리 캐쉬 기능이 있기는 하지만, 사용할 수 없음
• 일반적으로 로딩할 때, 미리 컴파일 하는 방식 (로딩 길다!)
• 동적 분기는 사용하기 어렵다고 봐야 함
24. 사례 7. 디버깅
• Xcode OpenGL Driver 프로파일러 굿!
• HUD 측정장치 간단하게!
• Gpg에 소개된 정도면…
• 하지만,
• 모니터링을 위한 더 많은 장치가 필요!
• 아쉽다!!!
26. 정리
• 기본적으로 DirectX 기반에서 크게 벗어나지는 않는다.
• 하드웨어 특성이나 OpenGL 작동 방식을 잘 알아두면 최적화 방
향을 찾을 수 있다.
• 모바일 하드웨어의 성능은 생각보다 상당히 좋다.
• PC 기반 고퀄리티 그래픽은 기술적보다 “미학적”으로 어렵더라
• http://cagetu.egloos.com/5636186
27. 아쉬운 점
• 2D를 이렇게 많이 사용하게 될 줄은 몰랐다.
• 3D에 관련된 내용을 중심으로 엔진을 구성했는데, 정작 게임은 2D 기반
이 상당히 많다!
•툴!!!!! 디버깅!!!!
• 성능/기능 등은 괜찮았으나, 게임 개발을 빠르게 해줄 수 있는 장치들이
얼마나 중요한지 절감함!
28. 앞으로 어떻게?
• 현재 추세
• PC < Mobile
• 3D < 2D
• 대중적인 엔진
• Unity3D / Cocos2D
• 무엇이 강점인가?
•게임 엔진도 패러다임의 전환이 필요한 시점!!!!
• 고성능 / 다기능?
• 빠른 개발!!!!!
• (게임) 개발시간을 빠르게 할 수 있는 장치!!!!