24
3D RENDERING OPTIMIZING #5 - 박 박 박 ( 박박 ) Devrookie(café.naver.com/devrookie) 최최최 최최 1 DevRookie 박박박 ( 박박 )

[박민근] 3 d렌더링 옵티마이징_5 최적화 전략

Embed Size (px)

Citation preview

Page 1: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

3D RENDERING OP-TIMIZING #5

- 박 민 근 ( 민군 )Devrookie(café.naver.com/devrookie)

최적화 전략

1DevRookie 박민근 ( 민군 )

Page 2: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

렌더링 옵티마이징최적화

1.3D 렌더링 파이프라인을 제대로 이해한다2. 올바른 3D 렌더링 프로그래밍 습관을 들인다3. 보틀넥을 분석한다4. 문제가 있는 부분을 파악하여 최적화 한다5.3~4 부분을 반복한다

Page 3: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

렌더링 파이프라인이란 ?

From 3D 정점 데이터

TO 2D PIXEL( 의 색상 )

Page 4: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

렌더링 파이프라인 구조

Page 5: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

DirectX Pipeline

Page 6: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

보틀넥이 발생하는 이유 ?

• 렌더링에 영향을 주는 요소 - 가속 하드웨어와의 병렬성 - 하드웨어의 대역폭 한계

• 렌더링 병목 요소 - 프레임 버퍼 대역폭 - 텍스처 대역폭 - 셰이더 - 버텍스 , 폴리곤의 수 - 시스템 메모리 전송 대역폭

Page 7: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

보틀넥은 언제나 존재한다 .

더 이상 줄일 수 없는때는 보틀넥외의 부분을 맘껏 활용하라 !

Page 8: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

Batch! Batch! Batch!(Nvidia GDC 03)

Batch 의 크기는 늘리고Batch 의 개수는 줄여라 !!

Page 9: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

• 모든 DrawIndexedPrimitive() 함수 콜을 말한다 . – N 개의 삼각형을 GPU 로 보낸다 . – Batch 안의 모든 폴리곤은 같은 RenderState 의 영향을 받는다 . – SetState 함수 호출도 batch 의 일부이다 .

• Batch 의 최적화를 다른 말로 표현한다면 HAL 함수를 최대한 적게 부르는 것이라 할 수 있다

Batch 란 무엇인가 ?

Page 10: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

배치 크기에 대한 그래프

Page 11: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

• 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)

Page 12: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

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

Page 13: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략
Page 14: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략
Page 15: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

• Render State Sorting• Texture Sorting• Texture 의 크기를 줄임 .• Texture 압축 (DDS)• Mipmapping 의 사용

Texture 의 대역폭을 줄입시다

Page 16: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략
Page 17: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략
Page 18: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략
Page 19: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

• 가시거리 순으로 그림 .

• 알파 블렌딩을 최소화• 가능하다면 depth write 를 끔 (light

map)

• 가능하다면 16 비트 깊이 버퍼를 사용– 스텐실 버퍼를 사용 하지 않을 때 .

• 가능하다면 16 비트 컬러 사용– Render To Texture 때 .

- clear 가 필요 없다면 clear 하지 않는다

Frame Buffer 의 대역폭을 줄입시다

Page 20: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

- lock/unlock 을 최소로 줄이며 , 아예 안 한다- lock 을 할 때에도 read 는 하지 않는다- lock 을 할 경우 D3DLOCK_NOOVERWRITE 등의 옵션으로 최대한 병렬성을 살린다- 셰이더를 활용한다

비디오 메모리 접근을 줄입시다

Page 21: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

Instancing

DirectX 9 Instancing API

What do you need?

– DirectX 9.0c

– VS 3.0/PS 3.0 support

Page 22: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략
Page 23: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

10. 참고 자료1. Optimization for DirectX9 Graphics – Nvidia2. [KGC] 렌더링 파이프라인 최적화 – 현호진3. [KASA] 렌더링 퍼포먼스 옵티마이징 – 김성익4. [KGC] 소프트웨어 렌더러개발 - 김성완

23DevRookie 박민근 ( 민군 )

Page 24: [박민근] 3 d렌더링 옵티마이징_5 최적화 전략

경청해 주셔서 감사합니다

Q & A