툴/유니티

메모리 대역폭 최적화

스튜디오 오버그래픽스 2023. 2. 11. 22:18

-메모리 대역폭 최적화

Mesh와 Texture는 GPU의 Shader 프로세스와 별개로 물리적으로 Memory상에 저장
메모리에 접근하면 정해진 대역폭에따라 특정 시간,속도로 데이터를 가져오게됌
GPU Memory Access도 동일하게 Index/vertex bufffer,Texture 또한 GPU가 access하는데 시간이 걸리고 메모리 대역폭을 공유
많은 텍스쳐에 접근하는 shader의 경우 제시간에 모든 data를 전송할 대역폭(Bandwidth)를 가졌는지가 성능에 영향 -> Memory Bandwidth Bottleneck 발생

Cache : 컴퓨터 시스템의 성능을 향상시키기 위해 별도로 탑재된 일종의 메모리이자 하드웨어 캐시
대부분 프로그램은 한번 사용한 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가짐
캐시 메모리의 경우 가격이 비싸고 성능이 빠름

굳이 자주사용할 데이터를 매번 GPU Memory에서 가져오지 않고 훨씬 빠른 Cache 메모리에 저장해두고 가져오면서 대역폭 성능을 개선함

-밉맵

하나의 texel을 참조할떄 주위 texel들 또한 캐시에 탑재
GPU는 다음에 주위 texel이 필요할때 먼저 캐시에 있는지 확인하고 texel을 가져옴
캐시에서 가져올경우 거의 실시간으로 이루어지고 bandwidth를 사용하지 않음
texel : 텍스쳐의 화소 단위

만약 2k 사이즈의 텍스쳐를 쓰는 오브젝트가 매우 멀거나 작아서 아주 작은 픽셀로 표현된다면?
굳이 화면상에 적은 픽셀에 그리기 위해 2k사이즈 텍스쳐를 다 불러오는건 비효율적!
-> 이럴 경우 Mipmapping 밉맵을 사용

밉맵: 원본텍스쳐를 단계별로 작은 사이즈로 만들어서 저장해두고 상황에 맞게 효율적으로 불러옴
대신 공간은 더 사용, 캐시미스(cache miss, 캐시에 없는 경우) 가능성 낮아짐 -> 메모리 대역폭 병목 줄임
Prefiltering되므로 aliasing(계단현상)을 줄임

-텍스쳐 압축/최적화

텍스쳐는 Memory Access를 하기 때문에 압축/최적화 해야지 Bandwidth를 줄일수 있음

Bit/Pixel(BPP)
24bit color(RGB), 32bit color(RGBA)
32bit color인 2048x2048 텍스쳐 = 134,217,728bit(약 16mb)
ex)블록기반 압축(DXT compression) : 용량을 1/4~1/6로 줄임

*텍스쳐 최적화
1.Mipmap사용
2.텍스쳐압축
3.텍스쳐필터링
4.필요하지 않은 텍스쳐 수 줄이기
5.텍스쳐 해상도 줄이기
6.사용할 데이터만 저장하기(RGBA중 일부만 쓴다면 안쓰는 채널 빼기)

-쉐도우맵

메시 데이터(vertex & index buffers) 또한 메모리로부터 로드되며 텍스쳐에 비해 비중이 적지만 Shadow Passes는 병목에 영향이 있음

Shadow mapping : 그림자를 만드는 기법
빛의 관점에서 볼때 보이는 곳은 빛이 비춰지고 보이지 않는 곳은그림자가 생기는 영역
모든 ray를 계산하지 않고 depth buffer를 사용해서 생성
Light 관점에서 depth map -> shadow map
이때 shadow map은 2차원 정보로 texture와 같음!

*Cascaded shadow map
굳이 먼 거리에 그림자까지 고해상도일 필요는 없으므로 카메라 거리에 따라 단계별로 쉐도우맵 저장
대신, 텍스쳐의 수와 드로우콜이 늘어남

*그림자 생성의 부하
Shadow Map은 빛으로 부터 가장 가까운 메시까지의 거리를 나타내는 깊이 버퍼
vertex/index buffer를 가져와서 위치를 계산하고 각 mesh의 깊이를 다시 memory에 기록
vertex수와 shadow map 해상도에 민감 -> memory bandwidth 문제로 shader waiting -> 병목
Depth Map과 Shadow Map을 렌더링하기 위해 추가적인 드로우콜 발생 -> CPU Bound
화면에 보이는 모든 픽셀에 대해서 그림자 결과에 필요한 연산과 비교 분기 처리 -> GPU Bound

*그림자 생성의 부하 해결
그림자 적용할 오브젝트 줄이기
그림자 퀄리티 조정(Soft Shadow, Hard Shadow 등)
그림자 해상도 조정
그림자 생성 거리 조정

 

 

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

 

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

 

www.youtube.com

 

' > 유니티' 카테고리의 다른 글

VFX Graph guide e-book / 내용 정리  (2) 2023.02.18
그래픽스 파이프라인과 최적화  (0) 2023.02.13
GPU병목, Overdraw  (0) 2023.02.11
드로우콜 DrawCall 최적화  (0) 2023.02.11
셰이더 코드 작성시 편집기  (0) 2023.02.11