UDN
Search public documentation:

VFXOptimizationConceptsKR
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 홈 > 파티클과 이펙트 > 파티클 시스템 > UE3 의 VFX 최적화 > VFX 최적화: 핵심 개념
UE3 홈 > FX 아티스트 > UE3 의 VFX 최적화 > VFX 최적화: 핵심 개념

VFX 최적화: 핵심 개념


문서 변경내역: Jeff Wilson 작성. 홍성진 번역.

GPU, 렌더 스레드, 게임 스레드 이슈 식별하기


UE3 에는 이펙트 아티스트가 퍼포먼스 이슈를 해결하기 위해 사용할 수 있는 기능이 여럿 있습니다. 우선 이펙트 어디에 병목현상이 있는지 알아보면 문제 해결 최적화에 큰 도움이 되며, 그 여력으로 시각적 완성도와 질을 유지할 수 있는 것입니다.

레벨을 플레이하면서 이슈를 모니터링하는 한 가지 방법은, STAT UNIT 디버그 오버레이를 띄우는 것입니다.

  1. 콘솔에서 게임을 실행합니다.
  2. tab 키를 치고 'stat unit' 이라 입력합니다.
    statunit.jpg

stat unit 명령은 게임 스레드에서 현재 프레임에 소모된 시간, 레더 스레드에 소모된 시간, GPU 에 소모된 시간을 나타내 줍니다. stat unit 으로 업데이트된 여러가지 시간을 모니터링하여 퍼포먼스 문제가 있는 레벨 구간을 파악할 수도 있습니다.

여러가지 스레드 시간을 눈여겨 보되, 목표로 삼는 프레임율이 30 fps 라면 모든 스레드는 33.3 ms 이하를 유지해야 합니다.

33 ms 를 넘어서는 스레드가 있는데 파티클이 용의선상에 올랐다, 그러면 STAT PARTICLES 명령을 사용하여 여러가지 스레드에서의 파티클 시간을 측정합니다.

statparticles.jpg

STAT PARTICLES 은 게임 스레드와 렌더 스레드에 관계된 통계를 여럿 출력합니다. 드로 콜 (렌더 스레드) 과 틱 시간 (게임 스레드) 에 주목해 보십시오.

게임 스레드 관련 이슈 집어내기


게임 스레드 이슈가 있는 것으로 판명된 경우, STAT PARTICLES 명령으로 알아낸 것을 확인합니다.

이 통계는 정보가 꽤 나오니 링크된 페이지의 설명을 좀 읽어 보시면 비용이 가장 높은 곳이 어디인지 파악하는 데 도움이 됩니다. 파티클 틱 시간과 파티클 카운트를 눈여겨 보시기 바랍니다.

ALERT! 주: 기억할 것 한가지, 파티클 시스템은 이펙트를 이루는 컴포넌트(이미터/모듈)의 합이라는 점입니다. 시스템에 있는 이미터와 모듈의 고유성이 높을 수록, 씬에 그러한 시스템이 많아 지면 게임 스레드 비용 역시 높아집니다.

틱 시간이 높다면 ParticleTickStats 명령을 사용하여 어느 시스템이 문제아인지 알아볼 수 있습니다.

ParticleTickStats 명령에는 인수가 셋 있습니다:

  • Single - 한 프레임을 캡처하여 파일로 출력합니다.
  • Start - 통계 캡처를 시작합니다.
  • Stop - 통계를 끝내고 일정 기간동안의 틱 시간을 볼 수 있습니다.

ParticleTickStats 리포트는 다음 디렉토리로 출력됩니다:

[UE3 디렉토리]\[게임명]\Profiling\PSTick-[sys time].csv

스프레트 시트는 이펙트의 비용을 개략적으로 나타내는 행과 열로 나뉩니다.

particletickstats.jpg

Total Tick ms
그 파티클 시스템의 모든 인스턴스를 틱하는 데 걸린 총 시간입니다.
Avg Tick ms
그 파티클 시스템을 틱하는데 걸린 평균 시간입니다. (총 틱 / 틱)
Max Tick ms
그 파티클 시스템의 인스턴스에 대해 가장 높은 틱 시간입니다.
Ticks
그 파티클 시스템의 인스턴스 수 입니다.
Avg Active/Tick
그 파티클 시스템의 틱 도중 활성 파티클 평균 수 입니다. (총 파티클 / 틱)
Max Active/Tick
그 파티클 시스템(의 한 인스턴스)의 틱 도중 활성 파티클 최대 수 입니다.

플랫폼에 따라 알맞는 방법으로 디렉토리를 찾아가야 합니다. 이 파일은 쉼표로 구분되며, 엑셀 등으로 열 수 있습니다.

문제아 게임 스레드 시스템을 알아내고나면, 취할 수 있는 방법이 여러가지 있습니다.

  1. 사용되고 있는 시스템의 파티클 방출 횟수를 줄입니다.
  2. 씬의 파티클 시스템 수를 줄입니다.
  3. 일부 이미터에 대한 수명(파티클 평가가 계산되는 기간)을 줄입니다.
  4. 콜리전 등 비싼 계산을 검사하여 최적의 세팅을 사용중인가 확인하고, 콜리전이나 충돌하는 파티클/메시 양을 줄입니다.
  5. 필요하면 콜리전, 다이내믹 파라미터 등 비싼 계산을 없앱니다.
  6. 가능하면 게임 스레드 계산되는 파티클 이펙트를 스태틱 메시 이펙트로 대체합니다.
  7. 파티클 시스템에 고정 바운드를 설정하여 매 프레임마다 계산되지 않도록 합니다.
  8. (LODMethod 를 automatic 으로 설정한 루핑 이펙트에 대해) LodDistanceCheckTime 을 늘려 LOD 검사 빈도를 낮춥니다.

Unreal Frontend 를 사용하여 콘솔에서 빌드 런치하기

Unreal Frontend 는 프로젝트의 Binaries 폴더에서 찾을 수 있습니다.

[UE3 디렉토리]\Binaries\UnrealFrontend.exe

Unreal Frontend 는 타겟 플랫폼에서의 로컬 데이터 결과를 확인하기 위해 어떠한 규칙으로도 빌드나 레벨을 빠르게 쿠킹하여 디플로이(배치)할 수 있는 GUI 입니다. Unreal Frontend 는 에디터나 다른 툴과의 링크도 포함해서 프로젝트를 런치하는 곳으로 사용할 수도 있습니다. 이 툴에 관련된 상세 정보는 Unreal Frontend KR 페이지를 참고하십시오.

이펙트의 퍼포먼스에 관해서, 게임이 얼마나 잘 돌아가고 있는지 비교적 정확하게 측정하기 위해 게임을 실행할 때는 두 가지 파라미터를 집중해서 사용하게 됩니다. Launch Options 박스에서 명령에 -novsync, -noverifygc, -noailogging 입니다.

-novsync 는 (30 fps 로 고정시키는) 수직 동기화를 꺼서 씬에 부하가 얼마나 걸리는지 볼 수 있으며, -noverifygc 는 주기적인 가비지 콜렉션을 꺼서 버벅임이 자주 발생하지 않도록 하고, -noailogging 은 게임을 꽤나 느리게 만드는 ai 로깅을 끕니다. ai 로깅과 가비지 콜렉션을 켜면 백그라운드로 실행되어 퍼포먼스가 낮아집니다. 이 옵션들을 꺼 주면 디스크 로드 시간만 뺀 상태로 최종 릴리스 빌드에서 실제에 가까운 프레임율을 얻을 수 있습니다.

frontend.jpg

디버그 빌드에서 이 테스트를 할 때 중요한 점은, 최종 릴리스 빌드에서는 보이지 않는 비용이 디버그로 게임을 실행할 때 발생한다는 점입니다. stat overlays 같은 툴에도 비용이 있어 결과가 약간 틀어지게 됩니다.

FX 배치(batch) 문제해결


이펙트 배치(batch)의 일반적인 문제를 검사하여 문제아를 스프레드시트로 출력해 주는 커맨드렛이 여럿 있습니다.

커맨드렛에 대한 개요, 여러가지 내장 커맨드렛에 대한 설명 등은 Commandlet Home KR 페이지를 참고하십시오.

그 커맨드렛에는 다음과 같은 것들이 있습니다:

ParticleSystemAudit

이 커맨드렛은 MineCookedPackages 결과로 생기는 데이터베이스에 포함된 모든 파티클 시스템에 대해 심사를 합니다.

주: 'On DVD' 태그를 사용하도록, 단순히 모든 기존 파티클 시스템을 검사하도록 변경될 것입니다.

콘텐츠 최적화/수정을 돕기 위해 다음과 같은 부분이 포함된 csv 파일을 생성합니다:

All particle systems w/ NO LOD levels
NO LOD 레벨이란 파티클 시스템이 '비어' 있다는 뜻입니다.
All particle systems w/ a single LOD level
이 시스템을 검토해서 배경 (레벨에 놓인) 이펙트가 아닌지 확인합니다. 그러한 경우 보통 LOD 를 활용하여 원거리의 이미터를 끄는 것이 좋습니다.
All particle systems w/out fixed bounds set
고정된 상대 바운드를 활용할 모든 파티클 시스템입니다.
All particle systems w/ LOD Method of Automatic & a check time of 0.0
파티클 시스템이 매 프레임마다 LOD 를 검사함을 나타냅니다.
All particle systems w/ bOrientZAxisTowardCamera enabled
게임이 분할화면을 지원한다면 이 시스템은 문제를 일으킵니다.
All particle systems w/ missing materials
이 시스템은 디폴트 머티리얼로 렌더합니다.
All particle systems w/ no emitters
이 시스템은 '비어' 있습니다. 지워야 할까요?
All particle systems w/ collision on in at least one emitter
현재 콜리전 메서드로는 파티클에 대한 연산 비용이 매우 높습니다.

FindOnDvDPsysDynamicParameter

이 커맨드렛은 다이내믹 파라미터 모듈을 사용하는 이펙트를 찾아내어, 제 기능을 하는 다이내믹 파라미터 머티리얼 표현식 없는 머티리얼을 리퍼런스합니다. 이 프로세스는 완전무결하지 않으니, 다이내믹 파라미터 모듈을 제거하기 전 머티리얼 에디터로 결과를 확인하는 것이 좋습니다.

VFX Optimization KR 페이지로 돌아가기.