29
( 모모모 ) 모모 모모모 Kasastudy (2013.05.16) 모모모 ([email protected] )

모바일 엔진 개발기

Embed Size (px)

DESCRIPTION

kasas

Citation preview

Page 1: 모바일 엔진 개발기

( 모바일 ) 엔진 개발기 Kasastudy (2013.05.16)

이창희 ([email protected])

Page 2: 모바일 엔진 개발기

모바일• 시장의 변화를 감지• 처음에는 적극적으로 대응하지 않음• 간단하게 OpenGL ES 를 지원하도록 해보자… 정도

• 엔진을 크게 수정하지 않고 , OpenGL ES 만 추가적으로 적용• 모바일이라도 특별하게 엔진을 줄이지 않음

• 포팅하면서 겪은 이야기 여기로 !!!

Page 3: 모바일 엔진 개발기

모바일에 대한 이해

•하드웨어 성격

•OpenGL ES 성격

Page 4: 모바일 엔진 개발기

하드웨어 특징• GPU 아키텍쳐 / 성능 / 메모리에

따라서 , 고려해야 할 것이 다름

Page 5: 모바일 엔진 개발기
Page 6: 모바일 엔진 개발기
Page 7: 모바일 엔진 개발기
Page 8: 모바일 엔진 개발기
Page 9: 모바일 엔진 개발기
Page 10: 모바일 엔진 개발기
Page 11: 모바일 엔진 개발기
Page 12: 모바일 엔진 개발기
Page 13: 모바일 엔진 개발기
Page 14: 모바일 엔진 개발기

OpenGL ES 2.0 간단 리뷰• 한 프레임의 구성

• http://cagetu.egloos.com/5737164

Page 15: 모바일 엔진 개발기

OpenGL ES 2.0 간단 리뷰• Designing a High-Performance

• http://cagetu.egloos.com/5737210

• Summary• Static Resource 사용하라• Rendering 결과 얻기를 피하라

• glGetXXX

Page 16: 모바일 엔진 개발기

정리하면…• Alpha Test 보다는 Alpha Blend!• Alpha Blend 사용 영역을 최소화 !!!!!!• RenderTarget 전환을 줄여야 함• 사용하지 않는 RenderTarget 내용은 제거하라• Draw Call 을 줄여라 !• Render State / Shader Switch 등을 줄여라• Static Buffer / Texture 을 사용하라• 프레임 중간에 렌더링 상태를 얻어오지 말아라 !• 버텍스 사이즈를 줄여라 !• …

Page 17: 모바일 엔진 개발기

사례 발표이슈 및 해결

Page 18: 모바일 엔진 개발기

사례 1. 폰트 텍스쳐 오류• 입력이 들어오면 즉시 Dynamic Texture 에 기록 !!• glTexSubImage2D

• 입력을 일괄적으로 기록하도록 변경으로 해결

Page 19: 모바일 엔진 개발기

사례 2. 배칭• Draw Call 을 줄이자 !• Sorting• Distance (Front->Back, Back->Front)• RenderState• ShaderState• Mesh ID

• Batching• 전통적인 모아서 찍기 !

• Static Mesh : 버텍스 64 개 이하• Skinned Mesh : 320 개 정도의 작은 것들 모음

Page 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

Page 21: 모바일 엔진 개발기

사례 4. 알파 블랜딩• 화면에서 알파 블랜딩이 차지하는 비중에 높을수록 느려짐• Present 에서 지연 됨 (FillRate)• CPU 는 놀고 , GPU 는 죽고 있음• 특히 , iPhone4 / iPad1 과 같이 FillRate 가 낮은 기기에서는 최악 !

• 해결책• 알파를 사용하는 부분을 줄이는 것이 최선 !• 작은 렌더타겟에 그려서 늘여찍는 방법

• 파티클과 같이 동적인 알파객체들에게는 적합함• http://blog.naver.com/sorkelf/40186066235

Page 22: 모바일 엔진 개발기

사례 5. 렌더타겟• 렌더타겟 사이즈가 작으면 작을수록 비용 절감 !• 렌더타겟 전환은 굉장히 비용이 많이 들어감 !• 해결책

• 패스를 늘리지 않는다 .• 렌더타겟 전환을 최소화 !• 적당히 늘여찍기 !

• 렌더타겟 재사용• PowerVR 에서는 같은 렌더타겟을 읽고 쓰기가 가능 ! (DirectX 불가능 )• 렌더타겟 전환을 하지 않고 , Viewport 만 변경해서 렌더링이 가능

• Post Processing 에 사용하면 굿 !!!• http://blog.naver.com/sorkelf/40186066235

Page 23: 모바일 엔진 개발기

사례 6. 셰이더• 복잡한 연산은 버텍스 셰이더에서 처리하자 !• 내부 함수은 너무 느리다 !!!• Pow(x, 4) 와 x*x*x*x 는 같은 결과지만 속도는 천지차이 !

• Shader 컴파일 시간은 오래 걸린다 .• 셰이더 빌드 바이너리 캐쉬 기능이 있기는 하지만 , 사용할 수 없음• 일반적으로 로딩할 때 , 미리 컴파일 하는 방식 ( 로딩 길다 !)

• 동적 분기는 사용하기 어렵다고 봐야 함

Page 24: 모바일 엔진 개발기

사례 7. 디버깅• Xcode OpenGL Driver 프로파일러 굿 !• HUD 측정장치 간단하게 !• Gpg 에 소개된 정도면…

• 하지만 ,• 모니터링을 위한 더 많은 장치가 필요 !• 아쉽다 !!!

Page 25: 모바일 엔진 개발기

정리

Page 26: 모바일 엔진 개발기

정리• 기본적으로 DirectX 기반에서 크게 벗어나지는 않는다 .• 하드웨어 특성이나 OpenGL 작동 방식을 잘 알아두면 최적화

방향을 찾을 수 있다 .• 모바일 하드웨어의 성능은 생각보다 상당히 좋다 .• PC 기반 고퀄리티 그래픽은 기술적보다 “미학적”으로 어렵더라• http://cagetu.egloos.com/5636186

Page 27: 모바일 엔진 개발기

아쉬운 점• 2D 를 이렇게 많이 사용하게 될 줄은 몰랐다 .• 3D 에 관련된 내용을 중심으로 엔진을 구성했는데 , 정작 게임은 2D

기반이 상당히 많다 !

•툴 !!!!! 디버깅 !!!!• 성능 / 기능 등은 괜찮았으나 , 게임 개발을 빠르게 해줄 수 있는 장치들이 얼마나 중요한지 절감함 !

Page 28: 모바일 엔진 개발기

앞으로 어떻게 ?

• 현재 추세• PC < Mobile • 3D < 2D

• 대중적인 엔진• Unity3D / Cocos2D • 무엇이 강점인가 ?

•게임 엔진도 패러다임의 전환이 필요한 시점 !!!!• 고성능 / 다기능 ?• 빠른 개발 !!!!!• ( 게임 ) 개발시간을 빠르게 할 수 있는 장치 !!!!

Page 29: 모바일 엔진 개발기

많이 배웠다 !

• 하지만 , 잘하지는 못했다 !