UDN
Search public documentation:

OptimizingForSplitscreenKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 퍼포먼스, 프로파일링, 최적화 > 콘텐츠 프로파일링과 최적화 > 분할화면 콘텐츠 최적화

분할화면 콘텐츠 최적화


문서 변경내역: Daniel Wright 작성. 홍성진 번역.

개요


주: 이 페이지는 Xbox 360 이나 PS3 같은 현세대 콘솔을 대상으로 하므로, 다른 플랫폼에서는 맞교환 부분이 다를 수 있습니다.

분할화면은 두배나 그려야 하니 렌더링 스레드 부하가 큽니다. 렌더링 스레드의 주요 비용은 두 가지 있습니다: 먼저 렌더링에 고려할 프리미티브 컴포넌트 수 또는 "Processed primitives", 다음으로 보이는 메시를 렌더하는 데 사용되는 드로 콜의 총 수 또는 "Mesh draw calls" 로 통계에 나타나는 것입니다. 그렇다고 모든 드로 콜이 똑같은 것은 아닙니다. 파티클 드로 콜은 스태틱 메시나 BSP 드로 콜보다 3 배까지 비싸며, InterpActor / KActor / 스켈레탈 메시 액터같은 다이내믹 오브젝트는 스태틱 메시나 BSP 드로 콜보다 2 배까지 비쌉니다. 메시 이미터는 파티클마다 드로 콜을 생성하므로 씬에서 가장 비싼 애셋이 되는 경향이 있습니다.

분할화면이 어떻게 돌아가나 알아보는 최적의 방법은 분할화면 상태에서 콘솔에 'stat splitscreen' 이라고 치면 나오는 통계를 보는 것입니다. PIE 중에도 'debugcreateplayer 1' 이라 입력하면 분할화면 모드로 들어가니 이 방법을 활용할 수 있습니다. 콘트롤러를 둘 연결해도 되고, 'ssswapcontrollers' 를 통해 다른 플레이어 입력을 전환할 수도 있습니다. 최적화 전의 기어즈 3 SP 레벨 통계는 이와 같습니다:

StatSplitscreenSmall.jpg

위의 통계로 보면 Xbox 360 에서 렌더링 스레드 시간이 50ms 나오고 있습니다. 분할화면에서의 목표인 33ms 로 낮추기 위해서는 대략 이 정도가 되어야 합니다:

  • Mesh draw calls: 1600
  • Processed primitives: 1700
  • Particle Draw Calls: 150

가장 비싼 컴포넌트 찾기


먼저 레벨의 어느 부분이 예산을 초과했는지 알아야 합니다. 'stat splitscreen' 을 켠 상태에서 PIE 나 Xbox 분할화면으로 플레이한 다음, 위의 목표와 비교해 보면 알 수 있습니다.

스태틱 메시 액터의 경우, 아마도 프리미티브 스탯 브라우저가 최고의 툴일 듯 합니다. 바운딩 반경으로 소트해 보면 레벨에서 가장 작은 메시를 빠르게 찾아낼 수 있다는 점 참고하시고요. 열을 다중 선택하고 엔터키를 치면 관련 액터를 전부 선택할 수도 있습니다.

파티클의 경우, 콘솔 명령 'TRACKPARTICLERENDERINGSTATS' (트랙 파티클 렌더링 스탯스)를 입력한 다음 레벨을 플레이해 보고나서 'DUMPPARTICLERENDERINGSTATS' (덤프 파티클 렌더링 스탯스)를 입력하면, 어느 이미터와 파티클 시스템이 가장 비싼지 통계를 수집할 수 있습니다. 로컬 logs 디렉토리에 파티클 통계가 포함된 스프레드시트를 둘 덤프하는 명령입니다.

분할화면 콘텐츠 스케일 낮추기


최상책은 프리미티브의 MaxDrawDistance 나 Cull Distance 볼륨 셋업을 적극적으로 사용하는 것입니다. MaxDrawDistance 는 팝핑이 생길 수 있지만, 메시는 항상 바짝 가까이 렌더될 것이기에 디테일 모드를 설정하는 것보다는 문제가 덜할 것입니다. MaxDrawDistance 의 단점이라면 'Mesh draw calls' 통계만 낮출 뿐, 'Processed primitives' 를 줄이지는 못한다는 데 있습니다. Cull Distance 볼륨 셋업 관련해서는 UDN 문서 Visibility Culling KR 를 참고해 주십시오.

차선책은 컴포넌트의 DetailMode 를 High 로 설정하는 것인데, 분할화면에서는 전혀 렌더되지 않게 만드는 것입니다. 이 옵션은 우클릭 -> LOD 처리 -> 디테일 모드 설정 -> 높음 으로 설정할 수 있습니다. 그러나 메시가 라이트맵에 어두운 부분을 남기거나 구멍이 생겨 캐릭터가 바깥의 빛을 받게 되는 부작용이 생길 수도 있으니, 이 방법을 사용할 때는 조심해야 합니다. 분할화면에서는 어떻게 되나 미리보려면 보기 -> 디테일 모드 -> 중간으로 선택하고 PIE 에서 'debugcreateplayer 1' 을 입력해 보면 됩니다. 이런 식의 컴포넌트 제거가 퍼포먼스에 가장 효율적이기는 합니다. 'Processed primitives' 와 'Mesh draw calls' 를 둘 다 떨어뜨리기 때문입니다.

파티클 이미터(캐스케이드에서 열)에 MediumDetailSpawnRateScale (중간 디테일 스폰율 스케일)이라는 프로퍼티가 새로 생겼습니다. 분할화면의 파티클 카운트를 줄이거나, 0 으로 설정하면 이미터를 아예 끄거나 할 수도 있습니다. 메시 이미터는 파티클마다 드로 콜이 하나씩 들어가므로, 파티클 카운트 스케일의 영향이 큽니다. 어떤 이미터 타입도 MediumDetailSpawnRateScale=0 이면 상당한 퍼포먼스 절약이 있을 것입니다.