Upload
mingeun-park
View
2.609
Download
0
Embed Size (px)
Citation preview
3D RENDERING OP-TIMIZING #5
- 박 민 근 ( 민군 )Devrookie(café.naver.com/devrookie)
최적화 전략
1DevRookie 박민근 ( 민군 )
렌더링 옵티마이징최적화
1.3D 렌더링 파이프라인을 제대로 이해한다2. 올바른 3D 렌더링 프로그래밍 습관을 들인다3. 보틀넥을 분석한다4. 문제가 있는 부분을 파악하여 최적화 한다5.3~4 부분을 반복한다
렌더링 파이프라인이란 ?
From 3D 정점 데이터
TO 2D PIXEL( 의 색상 )
렌더링 파이프라인 구조
DirectX Pipeline
보틀넥이 발생하는 이유 ?
• 렌더링에 영향을 주는 요소 - 가속 하드웨어와의 병렬성 - 하드웨어의 대역폭 한계
• 렌더링 병목 요소 - 프레임 버퍼 대역폭 - 텍스처 대역폭 - 셰이더 - 버텍스 , 폴리곤의 수 - 시스템 메모리 전송 대역폭
보틀넥은 언제나 존재한다 .
더 이상 줄일 수 없는때는 보틀넥외의 부분을 맘껏 활용하라 !
Batch! Batch! Batch!(Nvidia GDC 03)
Batch 의 크기는 늘리고Batch 의 개수는 줄여라 !!
• 모든 DrawIndexedPrimitive() 함수 콜을 말한다 . – N 개의 삼각형을 GPU 로 보낸다 . – Batch 안의 모든 폴리곤은 같은 RenderState 의 영향을 받는다 . – SetState 함수 호출도 batch 의 일부이다 .
• Batch 의 최적화를 다른 말로 표현한다면 HAL 함수를 최대한 적게 부르는 것이라 할 수 있다
Batch 란 무엇인가 ?
배치 크기에 대한 그래프
• What makes an app ‘batchy’? – Too many state changes
• What kinds of state changes?
• Techniques to reduce batches
This Year: Son Of A Batch(Nvidia GDC 04)
COLOROP
MAGFILTER
MINFILTER
WRAP0
SetVertexShaderConstant
SetTexture
SetMaterial
SetTransform
ZENABLE
SetLight
SetIndices
SetStreamSource
SetRenderTarget
SetPixelShader
SetPixelShaderConstant
LightEnable
SetFVF
SetVertexDeclaration
SetVertexShader
0 2000 4000 6000 8000 10000 12000 14000
21002400250027002700
3100370037503900
510056005800
62507000
90009000
1120011250
12100
API Call
Average number of Cycles
• Render State Sorting• Texture Sorting• Texture 의 크기를 줄임 .• Texture 압축 (DDS)• Mipmapping 의 사용
Texture 의 대역폭을 줄입시다
• 가시거리 순으로 그림 .
• 알파 블렌딩을 최소화• 가능하다면 depth write 를 끔 (light
map)
• 가능하다면 16 비트 깊이 버퍼를 사용– 스텐실 버퍼를 사용 하지 않을 때 .
• 가능하다면 16 비트 컬러 사용– Render To Texture 때 .
- clear 가 필요 없다면 clear 하지 않는다
Frame Buffer 의 대역폭을 줄입시다
- lock/unlock 을 최소로 줄이며 , 아예 안 한다- lock 을 할 때에도 read 는 하지 않는다- lock 을 할 경우 D3DLOCK_NOOVERWRITE 등의 옵션으로 최대한 병렬성을 살린다- 셰이더를 활용한다
비디오 메모리 접근을 줄입시다
Instancing
DirectX 9 Instancing API
What do you need?
– DirectX 9.0c
– VS 3.0/PS 3.0 support
10. 참고 자료1. Optimization for DirectX9 Graphics – Nvidia2. [KGC] 렌더링 파이프라인 최적화 – 현호진3. [KASA] 렌더링 퍼포먼스 옵티마이징 – 김성익4. [KGC] 소프트웨어 렌더러개발 - 김성완
23DevRookie 박민근 ( 민군 )
경청해 주셔서 감사합니다
Q & A