UDN
Search public documentation:

GPUProfilingHomeKR
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 홈 > 퍼포먼스, 프로파일링, 최적화 > GPU 퍼포먼스와 프로파일링

GPU 퍼포먼스와 프로파일링


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

개요


GPU 프로파일링에는 복잡한 특징이 많이 있습니다. GPU 퍼포먼스에 관련된 불문율이라면, 당연히 실험입니다. GPU 가 주로 시간을 잡아먹는 작업은 픽셀 셰이딩입니다. 다른 GPU 비용은 트랜스폼/스키닝인데, 메시의 버텍스 수에 영향을 받습니다. 스킨드 버텍스는 스태틱 메시 버텍스보다 비용이 훨씬 비쌉니다.

픽셀 셰이딩


오버드로

반투명 머티리얼은 GPU 퍼포먼스에 큰 문제가 될 수 있는데, 여러 개의 반투명 머티리얼이 겹칠 때, 또는 오버드로(overdraw) 때문에 더욱 그렇습니다. 일반적으로 어느 때고 반투명 머티리얼을 차지하는 화면공간 양을 제한하는 것이 좋을 텐데, 특히나 반투명 머티리얼이 겹칠 수 있을 때는 더욱 그러합니다.

파티클 시스템은 이 부분에 더욱 큰 영향을 끼칩니다. 파티클에 사용되는 머티리얼은 보통 반투명이기에, 어느 한 시스템에 파티클이 많이 그려진다 치면 오버드로가 엄청날 수 있는 것입니다. 파티클의 오버드로를 제한하기 위한 팁 몇 가지는 아래와 같습니다:

  • 복잡한 파티클을 조금 - 단순한 파티클을 많이 두는 것 보다는 복잡한 파티클을 조금 사용하는 파티클 시스템이 퍼포먼스면에서 좋습니다. 다수의 파티클이 만들어내는 이펙트를 머티리얼 안에서 만들 수 있다면, 하나의 파티클에 적용하는 것이 낫습니다.
  • 화면공간 범위 제한 - 어느 파티클 이펙트가 화면상에서 차지하는 공간을 제한할 수 있다면, 그 이펙트의 오버드로 악영향도 제한됩니다.
  • 겹치는 이펙트 제한 - 이펙트가 여럿 겹치면 어느 한 이펙트의 오버드로 영향이 증폭됩니다. 가능하면 동일 위치에 스폰해되는 다수의 이펙트를 찾아내어 그 대신 하나의 이펙트만 스폰하십시오.

불투명 마스킹

마스크드 머티리얼은 GPU 퍼포먼스 낭비의 원흉이 될 수 있는데, 지오메트리의 표면 각 픽셀은 결국 표시가 되든 안되든 평가(evaluation)를 거쳐야 하기 때문입니다. 마스크드 머티리얼 부하량을 최소화하기 위한 최적화 방법이 몇 있습니다.

  • 지오메트리를 표시 머티리얼 구역에 일치 - 픽셀이 엄청나게 낭비되는 단순 지오메트리를 사용하는 것 보다는, 메시에 디테일을 추가하여 그에 적용되는 머티리얼의 표시 구역에 가깝게 일치시키는 것이 훨씬 효율적입니다.
  • 스페큘러 제거 - 꼭 필요하지 않다면, 마스크드 머티리얼에는 스페큘러 컴포넌트를 제거하여 픽셀 계산 낭비를 가급적 줄이는 것이 좋습니다.
  • Non-Directional Lighting 사용 - 논-디렉셔널 라이트를 사용하면 낭비 픽셀 라이팅 계산에 필요한 인스트럭션을 줄일 수 있어서 퍼포먼스가 나아집니다.

다이내믹 라이팅


스태틱-라이팅과 라이트맵은 단연코 가장 효율적인 표면 라이팅 방법입니다. 레벨 표면에 영향을 끼치는 다이내믹 라이트의 수는 줄이는 것이 언제나 좋습니다. 목표는 항상 가급적 대부분의 레벨에 다이내믹 라이트가 영향을 끼치지 않도록 하는 것이며, 플레이어가 자세히 볼 수 없는 부분은 더욱 그렇습니다. 표면에 영향을 끼치는 다이내믹 라이트의 수를 월드에 나타내 주는 라이트 복잡도 뷰 모드가 파악하기에 좋습니다.

다이내믹 오브젝트의 라이팅은 퍼포먼스를 크게 저하시킬 수 있습니다. SkeletalMeshActor, KActor, InterpActor 등은 월드에 큰 부분을 차지할 수 있기에 이런 오브젝트를 별 생각 없이 라이팅했다간 큰 코 다칠 수 있습니다. DynamicLightEnvironment (다이내믹 라이트 인바이언먼트)를 통해 GPU 에 악영향을 제한하면서 다이내믹 오브젝트를 라이팅할 수 있습니다. 각 오브젝트의 각각 라이트에 대한 패스를 만들기 보다는, 모든 라이팅을 하나의 라이트와 패스에 응축시킵니다. 물론 여기에는 라이팅과 섀도잉이 100% 정확할 수 없다는 약점이 따릅니다. 가능하면 항상 다이내믹 라이트 인바이언먼트를 사용하는 것을 사용할 것을 권하나, 정확도나 품질이 우선시되는 시네마틱과 같은 경우에 대해서는 유동적으로 대처하시기 바랍니다.

다이내믹 섀도우


퍼포먼스 문제에 있어 또다른 용의자는 다이내믹 섀도잉 입니다. 다이내믹 섀도잉이 퍼포먼스에 어떤 영향을 끼치는가, SHOW DYNAMICSHADOWS 콘솔 명령으로 꺼 보면 빠르게 알아볼 수 있습니다. 키를 눌렀을 때 꺼지고 뗐을 때 켜질 수 있도록, 이 기능에 키를 지정하는 것도 추천할 만 하며, 다음 콘솔 명령으로 간단합니다: SETBIND F SHOW DYNAMICSHADOWS | ONRELEASE SHOW DYNAMICSHADOWS.

언리얼스크립트에서 생성된 액터에 대해 ShadowParenting (그림자 부모화)를 활용하려 합니다. 이는 기본적으로 한 액터가 어태치먼트를 많이 가질 수 있어도 (부착된 것이 많아도) 딱 하나의 다이내믹 섀도우만 드리우게 한다는 뜻입니다. 무기, 헬멧, 배낭, 기타 부착을 가진 폰이 있을 때, 그 모든 "부착" 그림자를 폰 자체에 부모화시키는 것이 좋습니다. 그 방법은: Attachment.SetShadowParent(Parent.Mesh)

다이내믹 섀도우 관련 퍼포먼스 제한

섀도우 버퍼의 GPU 비용은 그림자 절두체의 화면공간 크기와 정비례합니다. 즉 새도우 버퍼를 사용하는 근처 캐릭터는 원거리에 있는 것보다 훨씬 비싸다는 뜻입니다. 다이내믹 섀도우 버퍼 그림자를 드리우는 큰 오브젝트는 작은 것보다 훨씬 비싸다는 뜻이기도 합니다. 자세한 것은 Shadow Buffer Filtering Options KR 페이지를 참고하시기 바랍니다.

추가적인 그림자 최적화에 대해서는 Shadowing Reference KR 페이지와 Modulated Shadows KR 페이지를 참고하시기 바랍니다.

뷰 모드


언리얼 에디터 뷰포트는 씬의 특정 양상을 의미있는 방식으로 나타내는 데 사용되는 여러가지 뷰 모드 로 렌더링하도록 설정할 수 있습니다.

셰이더 복잡도

셰이더 복잡도(shader complexity) 뷰 모드는 각 픽셀을 셰이딩하는 데 얼마나 많은 픽셀 셰이더 인스트럭션이 필요한가에 따라 씬에 색을 입힙니다. 빨강은 매우 비쌈, 초록은 매우 쌈을 나타냅니다. 반투명 서광(translucent light shaft)은 그 뒤의 저렴한 불투명 머티리얼에 비용이 추가된다는 점에 유념하십시오.

shadercomplexity.jpg

이 뷰모드에 대한 전체적인 내용은 View Modes KR 페이지의 셰이더 복잡도 부분을 참고하시기 바랍니다.

라이트 복잡도

라이트 복잡도 뷰 모드는 표면에 영향을 끼치는 다이내믹 라이트의 수에 따라 씬에 색을 입힙니다. 검정은 영향을 끼치는 다이내믹 라이트가 없음을 뜻합니다. 초록에서 빨강까지 다양한 색/음영으로, 영향을 끼치는 다이내믹 라이트의 수를 순서대로 나타내 줍니다. 분명 항시 가능한 일은 아니겠지만, 언제나 목적은 전체 레벨이 검정으로 나타나게 하는 것입니다.

lightingcomplexity.jpg

이 뷰모드에 대한 전체 내용은 View Modes KR 페이지의 라이트 복잡도 부분을 참고하시기 바랍니다.

디테일 모드


가끔 멀티 플랫폼으로 발매할 때, 한 기종의 GPU가 다른 것 만큼 강력하지 않을 수가 있습니다. 그 플랫폼에 맞춰 레벨의 화려함을 떨어뜨리기 보다는, DetailMode 를 통해 맵의 디테일을 선택적으로 꺼 주면 됩니다. 이를 통해 같은 맵을 다중 플랫폼에서 사용할 수 있습니다. 추가적으로 GPU 를 정말 혹사시키는 분할화면같은 모드가 있을 수 있습니다. 비주얼-전용 디테일을 렌더링하지 않는 식으로 똑같은 맵을 분할화면에서도 그대로 사용할 수 있습니다.

모든 컴포넌트에 DetailMode 설정을 할 수 있습니다. High Detail 로 설정된 것은 High Detail 이 허용되었을 때만 렌더링됩니다.

detailmode_high.png