• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
모바일 엔진 개발기
 

모바일 엔진 개발기

on

  • 1,648 views

kasas

kasas

Statistics

Views

Total Views
1,648
Views on SlideShare
1,542
Embed Views
106

Actions

Likes
1
Downloads
11
Comments
0

1 Embed 106

http://devilchen.tistory.com 106

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    모바일 엔진 개발기 모바일 엔진 개발기 Presentation Transcript

    • (모바일) 엔진 개발기Kasastudy (2013.05.16)이창희(cagetu79@gmail.com)
    • 모바일• 시장의 변화를 감지• 처음에는 적극적으로 대응하지 않음• 간단하게 OpenGL ES 를 지원하도록 해보자… 정도• 엔진을 크게 수정하지 않고, OpenGL ES 만 추가적으로 적용• 모바일이라도 특별하게 엔진을 줄이지 않음• 포팅하면서 겪은 이야기 여기로!!!
    • 모바일에 대한 이해•하드웨어 성격•OpenGL ES 성격
    • 하드웨어 특징• GPU 아키텍쳐 / 성능 / 메모리에 따라서,고려해야 할 것이 다름
    • OpenGL ES 2.0 간단 리뷰• 한 프레임의 구성• http://cagetu.egloos.com/5737164
    • OpenGL ES 2.0 간단 리뷰• Designing a High-Performance• http://cagetu.egloos.com/5737210• Summary• Static Resource 사용하라• Rendering 결과 얻기를 피하라• glGetXXX
    • 정리하면…• Alpha Test 보다는 Alpha Blend!• Alpha Blend 사용 영역을 최소화!!!!!!• RenderTarget 전환을 줄여야 함• 사용하지 않는 RenderTarget 내용은 제거하라• Draw Call을 줄여라!• Render State / Shader Switch 등을 줄여라• Static Buffer / Texture을 사용하라• 프레임 중간에 렌더링 상태를 얻어오지 말아라!• 버텍스 사이즈를 줄여라!• …
    • 사례 발표이슈 및 해결
    • 사례 1. 폰트 텍스쳐 오류• 입력이 들어오면 즉시 Dynamic Texture에 기록!!• glTexSubImage2D• 입력을 일괄적으로 기록하도록 변경으로 해결
    • 사례 2. 배칭• Draw Call을 줄이자!• Sorting• Distance (Front->Back, Back->Front)• RenderState• ShaderState• Mesh ID• Batching• 전통적인 모아서 찍기!• Static Mesh : 버텍스 64개 이하• Skinned Mesh : 320개 정도의 작은 것들 모음
    • 사례 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
    • 사례 4. 알파 블랜딩• 화면에서 알파 블랜딩이 차지하는 비중에 높을수록 느려짐• Present에서 지연 됨 (FillRate)• CPU는 놀고, GPU는 죽고 있음• 특히, iPhone4 / iPad1과 같이 FillRate가 낮은 기기에서는 최악!• 해결책• 알파를 사용하는 부분을 줄이는 것이 최선!• 작은 렌더타겟에 그려서 늘여찍는 방법• 파티클과 같이 동적인 알파객체들에게는 적합함• http://blog.naver.com/sorkelf/40186066235
    • 사례 5. 렌더타겟• 렌더타겟 사이즈가 작으면 작을수록 비용 절감!• 렌더타겟 전환은 굉장히 비용이 많이 들어감!• 해결책• 패스를 늘리지 않는다.• 렌더타겟 전환을 최소화!• 적당히 늘여찍기!• 렌더타겟 재사용• PowerVR에서는 같은 렌더타겟을 읽고 쓰기가 가능! (DirectX 불가능)• 렌더타겟 전환을 하지 않고, Viewport만 변경해서 렌더링이 가능• Post Processing에 사용하면 굿!!!• http://blog.naver.com/sorkelf/40186066235
    • 사례 6. 셰이더• 복잡한 연산은 버텍스 셰이더에서 처리하자!• 내부 함수은 너무 느리다!!!• Pow(x, 4) 와 x*x*x*x 는 같은 결과지만 속도는 천지차이!• Shader 컴파일 시간은 오래 걸린다.• 셰이더 빌드 바이너리 캐쉬 기능이 있기는 하지만, 사용할 수 없음• 일반적으로 로딩할 때, 미리 컴파일 하는 방식 (로딩 길다!)• 동적 분기는 사용하기 어렵다고 봐야 함
    • 사례 7. 디버깅• Xcode OpenGL Driver 프로파일러 굿!• HUD 측정장치 간단하게!• Gpg에 소개된 정도면…• 하지만,• 모니터링을 위한 더 많은 장치가 필요!• 아쉽다!!!
    • 정리
    • 정리• 기본적으로 DirectX 기반에서 크게 벗어나지는 않는다.• 하드웨어 특성이나 OpenGL 작동 방식을 잘 알아두면 최적화 방향을 찾을 수 있다.• 모바일 하드웨어의 성능은 생각보다 상당히 좋다.• PC 기반 고퀄리티 그래픽은 기술적보다 “미학적”으로 어렵더라• http://cagetu.egloos.com/5636186
    • 아쉬운 점• 2D를 이렇게 많이 사용하게 될 줄은 몰랐다.• 3D에 관련된 내용을 중심으로 엔진을 구성했는데, 정작 게임은 2D 기반이 상당히 많다!•툴!!!!! 디버깅!!!!• 성능/기능 등은 괜찮았으나, 게임 개발을 빠르게 해줄 수 있는 장치들이얼마나 중요한지 절감함!
    • 앞으로 어떻게?• 현재 추세• PC < Mobile• 3D < 2D• 대중적인 엔진• Unity3D / Cocos2D• 무엇이 강점인가?•게임 엔진도 패러다임의 전환이 필요한 시점!!!!• 고성능 / 다기능?• 빠른 개발!!!!!• (게임) 개발시간을 빠르게 할 수 있는 장치!!!!
    • 많이 배웠다!• 하지만, 잘하지는 못했다!