posted by 나무꾼! 2013. 10. 16. 17:36

Vision Engine for Mobile?


이번 챕터에서는 Vision 엔진 에서 모바일 환경에 특화시킨 기능들에 대해 설명하도록 하겠다.

모바일 환경 에서는 PC나 콘솔 기기에 비해 상대적으로 하드웨어에 제약이 존재하고, 터치 인터페이스나 센서 같은 다른 입력 방식을 지원해야 하는 등 모바일 환경에 특화된 기능과 워크플로우가 꼭 필요하다.프로젝트 아나키에서는 Vision 엔진의 전체 기능중에 모바일에서 사용에 가능한 기능만 활성화 되어 있다. 

예를 들어, 다음과 같은 기능은 하드웨어의 제약으로 인해 모바일에서는 사용할 수 없고 PC나 콘솔 에서만 사용가능한 기능들이다. 하지만 모바일 환경에 적합한 대안 기능들이 지원되므로 걱정할 필요는 없다.

  • Deferred Renderer 와 Forward Renderer : Mobile Forward Renderer 제공
  • 표준 셰이더(Shader) 라이브러리 : Mobile 용 Shader 라이브러리 및 GLSL 자동 변환 기능 제공
  • 표준 Material 라이브러리 : Mobile 용 Material 라이브러리 제공
  • Occlusion Queries : 현존하는 모바일 환경에서는 아직 사용이 불가능함. 그외 다양한 가시성 선별(Visibility Culling) 기능 제공
  • Terrain : Terrain to Mesh Export 기능을 통해 높이맵 기반의 Terrain Data를 Static 메쉬로 변환.

셰이더 (Shader) 라이브러리


모바일 환경에서는 OpenGL ES 2 기반으로 동작이 가능한GLSL을 사용해야만 한다. Vision 엔진은 자동 컨버팅 도구를 통해 기존에 HLSL 이나 Cg 등의 다른 셰이더 개발 언어로 작성되었던 라이브러리를 GLSL 로 변환할 수 있기 때문에 모든 플랫폼에서 동일한 셰이더를 사용할 수 있다. 단, 모바일 환경에서 복잡한PC용 셰이더를 사용하면 퍼포먼스 이슈가 발생할 가능성이 있으므로 주의가 필요하다.    


모바일 용 Material 라이브러리


PC나 콘솔에서 사용되던Material 라이브러리를 사양이 떨어지는 모바일 환경에서 그데로 사용하기에는 어려움이 크다. Vision 엔진은 기존 Material 라이브러리에서 지원하던 기능을 대부분 지원하면서도 모바일 환경에 최적화된 전용Material 라이브러리를 제공하고 있다. 물론 원하는데로 수정하거나 새로운 Material 라이브러리를 만드는것도 가능하다.

    

Standard Material을 사용한 경우                       Mobile Material을 사용한 경우


정적 라이팅(Static lighting)


모바일 환경에서는 완전한 동적 라이팅를 구현하기에는 아직 하드웨어 성능에 제약이 많기 때문에 정적 라이팅을 최대한 활용하면서 제한적으로 동적 라이팅을 사용하는것을 추천한다. Vision 엔진에서는 다음과 같은 정적 라이팅 기능을 제공하고 있다.

  • Full Radiosity : 사실적인 라이트맵을 생성해 준다
  • Dot3 (Bump) light mapping : 최신 모바일기기에서 지원되느 범프맵을 생성할 수 있다
  • Mobile Light grids : 모바일에 최적화된 라이트 그리드(Light Grid)를 생성해준다. 이 기능은 라이트 프로브(Light Probe) 라고 불리우기도 한다.
  • LOD : 라이트맵 과 라이트 그리드에서LOD(Level of detail) 를 지원 한다.

라이트 그리드 (Light Grid)


지정된 영역의 모든 라이트 정보가 라이트맵 생성 과정에서 자동으로 저장되기 때문에 좀 쉽게 사용이 가능하다. 라이트 프로브(Light Probe)라고도 불리우는 기능으로, 라이트 그리드를 사용하게 되면 영역안에서 다이내믹 하게 이동하는 엔티티(Entity) 들의 위치에 따라 그림자 밝기가 변하거나 색상이 다른 조명 근처에서 엔티티의 음영(Shading)이 변하는 것을 확인할 수 있다.

라이트 그리드는 성능과 품질 요구사항에 따라 세부 조정이 가능하기 때문에 하드웨어의 사양에 맞춰 선택적으로 사용이 가능하다.

아래 그림과, 같이 각 셀마다 6방향에서의 라이트 방향(Light Direction) 정보를 모두 저장하는 라이트 그리드는 사양이 높은 최신 모바일 기기에서 사용하기에 적합하다.

 

아래 그림과 같이 단순화된 라이트 그리드를 사용하면, 평균화된 한개의 라이트의 방향(Direction) 과 주변광 색상 값 (Ambient Color) 만을 저장하기 때문에, 사양이 낮은 모바일 디바이스 에서도 빠르게 동작이 가능하다.


가시성 선별 (Visibility Culling) 기법


최적화를 위한 가장 좋은 방법은 랜더링 하지 않아도 되는 오브젝트를 제거하는 것이다. 가시성 검사(Visibility Test)를 통해 랜더링 대상 오브젝트의 개수를 줄이면 메모리 대역폭(Bendwidth), 정점 연산(Vertex Processing), CPU 점유율 에서 많은 성능 향상을 기대할 수 있다. 가시성 검사(Visibility Test) 에는 다음과 같은 기법들이 있다

  • 뷰 프러스텀 컬링(View Frustum Culling) : 카메라의 시야 범위를 나타내는 시각 절두체(View Frustum)를 벗어난 오브젝트를 제거하는 단순하면서 효과적인 기법으로 모바일 에서도 사용이 가능하다
  • 오클루젼 컬링(Occlusion Culling) : 모바일 디바이스에서 사용하기에는 아직 하드웨어 성능상의 제약으로 인해 사용하기 어려운 기능으로 모바일 버젼에서는 사용할 수 없다.
  • 포탈(Portals) : 실내 환경에서 매우 효율적인 기법이다. 포탈은 3dsMax 또는 Maya에서 쉽게 만들 수 있다.

    샘플로 포함된Hangar Scene 을 vForge로 열어서 디버그 뷰를 통해 확인해 보면 아래와 같이 화면에 표시되는 폴리곤 개수가 80% 이상 줄어든 것을 볼 수 있다.

            

   [포탈 사용 전 : ~80,000 triangles]                    [포탈 사용 후 : ~10,000 triangles]


입력 처리(Input handling)


모바일 환경에서 게임을 개발하기 위해서는 멀티 터치 스크린 입력과 가속도 센서, 기울기 센서 등 새로운 입력 방식을 지원해야 한다. iOS, Android, Tizen, Windows 등 다양한 모바일 플랫폼이 있고 각각 다른 방식으로 입력에 관한 라이브러리를 제공하는데 Vision 엔진 에서는 각 플랫폼에 맞춰서 컴파일을 하면 어느 플랫폼인지에 관계없이 동일한 방식으로 입력장치를 제어할 수 있다.

예를들어 아래와 같은 내장 함수를 통해 플랫폼에 관계없이 동일한 방식으로 터치 입력을 제어할 수 있다.

  • VInputDeviceManager::GetTouchScreen()
  • VInputDeviceManager:: GetMotionSensor()


PC에서 멀티 터치 입력 처리 vRemoteInput


vRemoteInput을 사용하면 PC에서 실행중인 게임을 네트워크로 연결된 모바일 디바이스로 컨트롤 할 수 있기 때문에, 멀티 터치나 가속도 센서 등을 이용한 게임을 개발할때 유용한 기능 이다.

아래 공식 홈페이지의 동영상 강의를 통해 설정 과정을 배울 수 있다.

http://www.projectanarchy.com/remote-input


모바일에 최적화된 워크플로우 vFileServe


게임 데이터가 변경되었을 경우 변경된 리소스를 디바이스에서 확인하기 위해 앱을 재설치 하다보면 복잡한 절차를 거져야 하고 반복 확인을 거치다 보면 많은 시간이 낭비된다.

vFileServe 기능을 사용하면 앱을 재설치 할 필요 없이 PC에서 개발하면서 변경되는 사항이 실시간으로 모바일 디바이스로 네트워크를 통해 스트리밍 되므로 바로 모바일 디바이스에서 변경된 리소스를 확인할 수 있다. 

아래 공식 홈페이지의 동영상 강의를 통해 설정 과정을 배울 수 있다.

http://www.projectanarchy.com/vfileserve-introduction


모바일에서 지형 사용하기Terrain to Mesh Export


Mesh Export 그래픽 처리 성능이 떨어지는 모바일 기기에서 지형 에디터(Terrain Editor) 작업한 데이터를 사용하기 위해서 제공되는 기능이다. 지형 에디터(Terrain Editor) 작업한 높이 (Height Map) 기반의 지형 데이터는 아직 모바일 GPU 처리하기에는 아직 무리가 있다. Mesh Export기능을 사용해서 높이 (Height Map) 기반의 지형 데이터를 폴리곤 기반의 Static Mesh 변환하면 모바일 디바이스에서도 충분히 사용이 가능하다.

프로젝트 아나키에 포함된 Mobile Offroad 데모를 실행해보면, Mesh Export 생성된 지형의 품질이나 성능이 모바일 에서도 떨어지지 않는다는 것을 확인 있다.