Batch 란 무엇인가?
•모든 DrawIndexedPrimitive()함수 콜을 말한다.
– N개의 삼각형을 GPU로 보낸다.
– Batch 안의 모든 폴리곤은 같은
RenderState의 영향을 받는다.
– SetState 함수 호출도 batch의 일부이다.
• Batch의 최적화를 다른 말로 표현한다면 HAL 함
수를 최대한 적게 부르는 것이라 할 수 있다
This Year: SonOf A Batch
(Nvidia GDC 04)
• What makes an app ‘batchy’?
– Too many state changes
• What kinds of state changes?
• Techniques to reduce batches
Texture의 대역폭을 줄입시다
• Render State Sorting
• Texture Sorting
• Texture의 크기를 줄임.
• Texture 압축 (DDS)
• Mipmapping의 사용
19.
Frame Buffer의 대역폭을줄입시다
• 가시거리 순으로 그림.
• 알파 블렌딩을 최소화
• 가능하다면 depth write를 끔(light map)
• 가능하다면 16비트 깊이 버퍼를 사용
– 스텐실 버퍼를 사용 하지 않을 때.
• 가능하다면 16비트 컬러 사용
– Render To Texture 때.
- clear가 필요 없다면 clear 하지 않는다
20.
비디오 메모리 접근을줄입시다
- lock/unlock을 최소로 줄이며, 아예 안 한다
- lock 을 할 때에도 read는 하지 않는다
- lock 을 할 경우
D3DLOCK_NOOVERWRITE 등의 옵션으로
최대한 병렬성을 살린다
- 셰이더를 활용한다
21.
Instancing
DirectX 9 Instancing API
What do you need?
– DirectX 9.0c
– VS 3.0/PS 3.0 support
23.
10. 참고 자료
1. Optimization for DirectX9 Graphics – Nvidia
2. [KGC] 렌더링 파이프라인 최적화 – 현호진
3. [KASA] 렌더링 퍼포먼스 옵티마이징 – 김성익
4. [KGC] 소프트웨어 렌더러개발 - 김성완
DevRookie 박민근(민군) 23