[1106 조진현] if you( batch rendering )

Preview:

Citation preview

조 진현

정적인 오브젝트에만 국한된 얘기들이다.

3D RENDERING OPTIMIZING #4- 박 민 근 (민군)DEVROOKIE(CAFÉ.NAVER.COM/DEVROOKIE)

5DevRookie박민근(민군)

별도의 작업없이그냥 렌더링만 하게

해주세요~~~

Future GPUs will make it better!? Really?

과거에는 CPU 사이클을 줄이는 것.

현재는 병목 현상을 제거하는 것.

대역폭

Vertex

Format

(Byte)

Half

16bit순차적접근

GPU 활용Lock

Cache

Memory

POOL

텍스쳐옵션압축

폴리곤을 그리지 않는 것!

폴리곤을 효과적으로 렌더링 하는 것!

DrawXXXPrimitiveUp

DrawPrimitive

파이프라인은 필연적으로 통과한다.

즉, 할만큼 다 제거했다… 그 이후의 작업~

Object : 11개

Texture : 4장

Material : 5개

Shader : 2종

For( 오브젝트 개수 만큼 )

{

스테이트 셋팅()

행렬 셋팅()

텍스쳐 바인딩()

버퍼 바인딩()

그리기 명령()

}

오브젝트 정렬 후…

For( 오브젝트 개수 만큼 )

{

스테이트 셋팅()

행렬 셋팅()

텍스쳐 바인딩()

버퍼 바인딩()

그리기 명령()

}

Material 별로 정리 후 정렬.

( 같은 Material 별로 그룹화 )

For( Material 그룹화 개수 만큼 )

Material 바인딩.

for( 그룹내 오브젝트 개수 만큼 )

행렬세팅()

버퍼 바인딩()

그리기 명령()

투명한 오브젝트와 불투명한 오브젝트로 분류. ( 투명 그룹, 불투명 그룹 )

For ( 각 투명 그룹에 대하여 )

알파 관련 셋팅

각각에 대해서 Material 별로 정리

Material 별로 정리 후 정렬.

( 같은 Material 별로 그룹화 )

For( Material 그룹화 개수 만큼 )

Material 바인딩.

for( 그룹내 오브젝트 개수 만큼 )

행렬세팅()

버퍼 바인딩()

그리기 명령()

되도록 많은 것을 하나의 버퍼로 묶어라.

복수의 Stream 에 연결하라~

반드시 Strip 화 시켜라.

H/W

Designers

Driver

Architects

API / Runtime

Architects

Application

Developers

Application

Driver

Core API / HLSL / Runtime

Hardware

시스템에서 목적으로 하는 효과를 얻기 위해

본질적인 것은 아니지만 요구되는 작동,

또는 그 때문에 필요한 자원.

필연적인 것!!!

DrawIndexedPrimitive()

GPU 에게 n개의 폴리곤을 렌더링을 명령하는 작업.

같은 State들을 가지는 삼각형들의 묶음

Batch를 렌더링 하기 위해서는

반드시 State 들이 먼저 설정되어야 한다.

State가 변경되면, 최소 2개의 Batch가 필요.

어떤 State 변화가일어나는가?

얼마나 많은 State 변화가

일어나는가?

잠재적 State 변화의 요인들은

무엇인가?

State의 변화는 소모적인 명령.

GPU의 잦은 Tri-SetUp 비용.

OS 커널의 명령어 전송 증가.

CPU에 의존적인 최적화.

( CPU 성능에 좌우 )

얼마나 많은 폴리곤이 Batch에 들어있는지는

중요하지 않음. ( 이것은 GPU의 몫 )

되도록 많은 폴리곤을 하나의 Batch에 넣어라.

CPU는 계속 성능이 증가!!! But…

많으면 그냥 좋음!!!

Texture 교체.

Transform 변화.

스키닝.

Material 교체.

선행 처리가 필요.( Strip 기반의 버퍼 최적화 )

버퍼를 셋팅.

투명한 오브젝트와 불투명한 오브젝트로 분류. ( 투명 그룹, 불투명 그룹 )

For ( 각 투명 그룹에 대하여 )

알파 관련 셋팅

각각에 대해서 Material 별로 정리 및 정렬

( 같은 Material 별로 그룹화 )

For( Material 그룹화 개수 만큼 )

Material 바인딩.

for( 그룹내 오브젝트 개수 만큼 )

행렬세팅()

그리기 명령()

Texture Atlas.

병렬 프로그래밍과의 결합.

Strip 기반으로 엔진을 구성할 것.

질문 주세요~~~

Recommended