UDN
Search public documentation:
VFXOptimizationResultsKR
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
日本語訳
中国翻译
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 최적화: 결과 내기
UE3 홈 > FX 아티스트 > UE3 의 VFX 최적화 > VFX 최적화: 결과 내기
VFX 최적화: 결과 내기
문서 변경내역: Jeff Wilson 작성. 홍성진 번역.
캐스케이드의 코어 시스템 - GPU/게임 스레드/렌더 스레드
- 파티클 시뮬레이션 시간 (틱) 은 게임 스레드에서 계산됩니다. (gamethread)
- 파티클 데이터 마무리(지오메트리 패킹, 드로 콜 따위)는 렌더 스레드에서 계산됩니다.
- 파티클 비주얼(셰이더 복잡도, 오버드로 등)은 GPU 에서 계산됩니다.
오버드로 - GPU
오버드로 = 픽셀 셰이더 비용 = 레이어 수 * 레이어에 영향받는 픽셀 평균 수 * 레이어에 대한 인스트럭션 평균 수본질적으로 스프라이트의 표면에 머티리얼을 추가할 때, 그 머티리얼은 인스트럭션 수에 따른 비용이 드는데, 그 수치는 콘텐츠 브라우저와 머티리얼 에디터에서 확인할 수 있습니다. 반투명 오브젝트의 경우 이 인스트럭션 비용은 반투명이 쌓여감에 따라 비용이 추가되어, 오버드로가 생깁니다. 반투명 레이어가 많을수록 비용도 높아집니다. 셰이더 복잡도 모드로 보면 쉽게 확인할 수 있지요. 밝은 빨강은 300 인스트럭션, 분홍은 600 인스트럭션, 하양은 900 인스트럭션 입니다. PC 에서 F5 키를 치면 셰이더 복잡도 모드를 볼 수 있습니다. 셰이더 복잡도는 한 시스템의 비용 추정치를 출력하지만, 반투명은 불투명 오브젝트 앞에 있을 때도 비용이 있으므로, 그 비용은 씬에 따라 달라지기도 합니다. 이펙트 사용량을 검사하는 것은 중요합니다. 어느 주어진 상황에서 호출가능한 이펙트는 (무기 임팩트 등) 일반적으로 특정 상황에 맞추기 위해 커스텀 빌드할 수 있는 이펙트보다 가벼울 필요가 있습니다. 비용적인 동요가 심한 상황에서 그려질 것이기 때문입니다. 제어 가능한 수준의 오버드로 임팩트를 내기 위해 취해볼 수 있는 방법은:
- 방출(emission) 속도 감소
- 머티리얼 인스트럭션 수 감소
- 파티클 스케일 감소 (화면 덜 차지)
- 다양한 뷰 거리에서 비용 절감을 위해 근처/먼거리 파티클 방출용 LOD 생성
- 일직선으로 놓아 서로 쌓여 있는 이미터 검사 (정적으로 놓인 이펙트)
LOD - 레벨 오브 디테일 - GPU/게임 스레드
LOD 거리 검사 시간
LOD Distance Check Time 은 게임에서 사용할 LOD 결정을 위해, 플레이어와 씬에 놓인 이미터까지의 거리를 얼마나 자주 검사할지 나타냅니다. LOD Method 가 자동(automatic)으로 설정되어 있을 때 작동합니다. 자동은 본질적으로 게임이 LOD 를 결정하게 만드는 것입니다. LOD Distance Check Time 을 늘리면, 검사 간격이 늘어납니다. LOD Distance Check Time 은 초 단위로 계산되므로, 이 설정을 할 때는 플레이어의 최대 이동 속력을 고려해야 합니다. LOD Distance Check Time 를 0.00 으로 설정하면 매 프레임마다 거리가 계산되어, 퍼포먼스가 낮아질 수 있습니다.LOD 메서드 - 게임 스레드
LOD Method 의 적절한 세팅은 퍼포먼스와 비주얼에 매우 중요할 수 있습니다. Automatic (자동) - 게임은 LOD Distance Check Time 세팅을 사용하여 이펙트에 지정된 거리 파라미터에 따라 LOD 를 설정합니다. 전형적으로 루핑되면서 게임 코드로 호출되지는 않는 앰비언트 이펙트(배경 효과)에 사용됩니다. Direct Set (직접 설정) - 이펙트가 스폰될 때 (보통 게임 코드로) LOD 가 결정된 후 정의된 LOD 에 남아 있습니다. 전형적으로 폭발이나 충격처럼 터지는 이펙트에 사용됩니다. Activate Automatic (능동형 자동) - 이펙트가 스폰될 때 LOD 에 정의된 거리 파라미터에 따라 LOD 가 결정됩니다. 전형적으로 한 번 스폰되면 절대 바뀔 일이 없는 LOD 를 요하는, 키즈멧 등에 의해 호출되는 폭발 이펙트에 사용됩니다.고정 vs 비고정 바운드 - 게임 스레드
바운드(경계)는 엔진이 이펙트의 표시여부를 결정하는 방법 중 하나입니다. 이러한 보이지 않는 좌표를 통해 엔진더러 한 이펙트가 시야에 있는지 없는지 일러 줍니다. 바운드의 구석이 보인다면 엔진은 이펙트의 컴포넌트를 필요한 만큼 계산합니다. 바운드는 매 프레임마다의 값비싼 검사와 업데이트이므로, 바운드를 고정되게 설정하고 얼마나 크게 할 지를 결정하는 것이 좋습니다. 어떤 경우에는 바운드를 꽤 크게 잡아 폭발에 흩날리는 파편을 모두 보고 싶을 때가 있습니다. 비용을 낮추려는 경우 바운드를 핵심 컴포넌트에 꼭 맞게 잡으면, 바운드가 시야를 벗어났을 때 이펙트가 튀어나올 수 있다는 위험만 감수하면 퍼포먼스를 높일 수 있습니다. 고정 vs 비고정 바운드에 관해 유의해야 할 고려사항이 약간 있습니다. 로켓 자취나 트레이서나 프로젝타일 같은 것에 붙는 그 무엇이든, 빠르게 움직이는 이펙트는 고정 바운드를 설정하지 말거나, 고정 바운드를 설정하더라도 꽤 크게 하여 이미터가 바운드 밖을 날지 않도록 해야 합니다. 바운드를 설정할 때는 시스템에 정의된 좌표계가 로컬인지 월드인지에 유의하십시오. 이미터가 바운드 반대 방향으로 회전되면, 이펙트의 엘리먼트가 바운드 밖으로 날아가서, 엘리먼트가 뷰 밖으로 튀어나가는 현상이 발생할 수 있습니다.드로 콜 - 렌더 스레드
- 파티클 시스템 A 구성: 스프라이트를 12 개 스폰하고, 1 패스 머티리얼을 사용하는 이미터가 1 개인 경우, 전체 시스템 비용은 1 드로 입니다.
- 파티클 시스템 B 구성: 스프라이트를 12 개 스폰하고, 2 패스 머티리얼을 사용하는 이미터가 1 개인 경우, 전체 시스템 비용은 2 드로 입니다.
- 파티클 시스템 C 구성: 메시를 12 개 스폰하고, 2 패스 머티리얼을 사용하는 이미터가 1 개인 경우, 전체 시스템 비용은 24 드로 입니다. (콜 당 2 패스 * 메시마다 드로 콜 하나씩이니 12 메시 = 24 드로)
- 파티클 시스템 D 구성: 메시를 6 개 스폰하고, 2 패스 머티리얼을 사용하는 이미터 하나, 스프라이트를 10 개 스폰하고, 1 패스 머티리얼을 사용하는 이미터도 하나 있는 경우, 전체 시스템 비용은 13 드로 입니다. (콜 당 2 패스 * 6 메시 = 12 드로, 1 패스 * 10 스프라이트 = 1 드로)
반투명 머티리얼 = 1 패스 베이스
- 디스토션(왜곡)에 +2
- bUseLitTranslucencyDepthPass(릿 반투명 뎁스 패스 사용)에 +1
- bUseLitTranslucencyPostRenderDepthPass(릿 반투명 포스트 렌더 뎁스 패스 사용)에 +1
- bUsedWithFogVolumes(포그 볼륨과 사용됨)에 +2
DumpParticleFrameRenderingStats
명령으로 확인할 수 있습니다. 이 명령은 드로 콜 비용을 자세히 나열하는 스프레드 시트를 출력합니다.
드로 콜의 영향은 렌더되고 있는 뷰의 수에 비례하여 증가합니다. 즉 분할화면에서는 효과가 배가된다는 뜻입니다. 분할화면에서의 이펙트 최적화하기 관련 상세 정보는 VFX 최적화: 분할화면 페이지를 참고하시기 바랍니다.
이펙트를 구성할 때나 최적화할 때는 이러한 비용을 염두에 두는 것이 중요합니다. 렌더 스레드가 드로 콜때문에 높고, 배경은 예산 내에 있다면 여기서부터 찾아보기 시작하는 것이 좋겠습니다.
메시 방출 - 게임 스레드 / 렌더 스레드
콜리전 - 게임 스레드
- MaxCollisions: 이 값은 가급적 낮게 잡으십시오.
- Collision Completion Option: 이 옵션을 HaltCollisions/Freeze 로 설정하면, MaxCollisions 값에 도달했을 때 씬에 대한 콜리전 검사를 중지합니다.
- Damping Factor 는 콜리전을 따르는 오브젝트의 튕김을 결정, 값이 낮을 수록 오브젝트를 빨리 쉬게 만들 수 있습니다 (더 낮은 Max Collisions 값).
유닛별 스폰 - GPU/게임 스레드
- Unit Scalar 값을 가급적 높게 유지하되 방출 속도(emission rate) 와 보조를 맞추어, 이펙트를 너무 무겁게 만들지 않는 선에서 원하는 필(fill)을 얻어냅니다.
- Spawn Per Unit 을 사용하여 방출 속도가 높을 것으로 예상되는 경우, 인스트럭션 카운트가 낮은 머티리얼을 사용해 보십시오.
- 방출 가능한 파티클 수를 제한하기 위해 Max Frame Distance 를 조절합니다. 이미터가 이 최대 프레임 거리를 벗어나면, Spawn Per Unit 은 그 거리 안으로 돌아오기 전까지 방출을 중지합니다. 이미터가 씬에 다량의 스프라이트를 쏟아붓는 것을 방지해 줍니다.
메모리 비용
- 시스템의 모듈 갯수를 필요한 행위에 딱 필요한 만큼 줄입니다.
- 루핑 이펙트는 Loop Time/Duration 을(루프당 할당되는 파티클 수를) 줄입니다
- 수명을 (전체적인 파티클 수를) 줄입니다.
- 가급적 많은 모듈을 공유합니다.
틱 시간 - 게임 스레드
논-디렉셔널 라이팅 비용 - 게임 스레드
- 이펙트의 고유 색 변종을 메모리에 저장하는 비용
- 실행 시간에 고유 색 변종을 로드하는 비용
- 캐스케이드에 각각의 색 변종을 만드는 비용
- 게임 스레드에서 논-디렉셔널 라이팅과 배경을 맞추기 위해 이펙트를 라이팅하는 비용