툴/유니티

GPU병목, Overdraw

스튜디오 오버그래픽스 2023. 2. 11. 19:49

-GPU병목

병목 : 전체 시스템의 성능이나 용량이 하나의 구성요소로 인해 제한을 받는 현상
병목을 제거하는 것 = 최적화
드로우콜에 의한 병목 = CPU Bottleneck
병목지점을 찾는 과정 : 프로파일링

기기마다 병목의 상황이 다를수 있음

측정 단위 -> ms/frame

-Profiler = Profiling Tool
어느 부분에서 GPU가 시간을 많이 소비하는지, 어떤 부분을 바꾸면 속도가 향상되는지 보여주는 도구

-Shader Instructions
대부분의 GPU작업은 Shader에서 수행(shader에서 많은 병목의 주요 원인이 발생)
진단 : 쉐이더가 복잡한지, 너무 많은 데이터를 처리하는지 -> overdarw발생

*Pixel shader 병목인 경우 : 복잡한 머테리얼, 포스트프로세싱 처럼 픽셀에 관여 -> 해상도를 줄여보면서 진단 가능
*Vertex shader 병목인 경우 : 정점 수를 줄여보면서 진단 가능

shader문제가 아닌 경우도 많음 -> 오버드로우 문제

-Overdraw
같은 프레임 내에서 두번 이상 같은 픽셀을 그리는것,다수의 드로우콜 발생
어차피 가려져서 표현이 안될 먼 오브젝트를 그리고 또 그위에 가까운 오브젝트를 그림으로서 픽셀 연산을 낭비하는것

렌더파이프라인 depth test 단계에서 z-buffer를 통해 먼저 그릴값을 구분함
이런 방식이 있음에도 Overdraw가 발생하는 경우가 있음
ex)반투명 물체(두 물체의 픽셀이 혼합되야 하는 경우), z(depth)구분이 애매한 불투명 물체

*Overdraw측정(Unity)
Unity : Overdraw Visualization Mode
기술적으로 부정확하지만 쓸만함
Window - RenderPipeLine - Render Pipleline Debug - Rendering - Fullscreen Debug Mode(TransparencyOverdraw)

*Overdraw줄이기(불투명물체)
카메라와 각 물체의 센터(바운딩 박스 센터) 사이의 거리를 기반으로 z(depth)정렬이 이루어짐
그리고 depth test 단계가 있기 때문에 일반적으로 불투명 물체는 Overdraw가 발생하지 않으나 메시의 형태에 따라서 오버드로우 발생
ex)큰 돔,구 형태 중앙에 카메라가 있는 경우(센터가 카메라와 같아서 가장 가까운 물체로 인식 가장 먼저 그림) -> 수동으로 sorting
ex)하나의 메시지만 복잡하게 생겨서 자기 자신의 일부를 가리는 형태의 메시 -> 메시를 나눠서 저장
ex)배칭된 경우 하나의 덩어리로 보기때문에 가려진 부분에서 오버드로우 발생(정적배칭,동적배칭,GPU인스턴싱 모두 해당) -> 뚜렷한 해결책X, 배칭과 오버드로우 중에 선택해야함

*Overdraw줄이기(투명물체)
반투명물체의 경우 a(알파값)에 따라 추가적인 연산인 Alpha Blending도 필요
반투명 물체는 굳이 sorting될 필요 없으므로 Z-Buffer에 기록되지 않음
해결책 -> 투명 레이어 수 줄이기, 투명한 물체가 차지하는 스크린 사이즈 줄이기

*Overdraw줄이기(파티클 렌더)
보통 파티클은 투명하고 오버랩이 심함 -> 파티클 갯수 줄이기,텍스쳐애니메이션으로 대체, 파티클 범위에 맞춰 빈영역 박스 줄이기(Particle Trimming)

 

출처 - https://youtube.com/playlist?list=PLyuV91SJJre7DeREVCzx8VG599PCGTtL2 

 

게임 아티스트를 위한 CG 최적화이론

 

www.youtube.com