[박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

20
3D RENDERING OPTIMIZING #4 - 박 박 박 ( 박박 ) DEVROOKIE(CAFÉ.NAVER.COM/DEVROOKIE) 박박박박 & 박박박박 1 DevRookie 박박박 ( 박박 )

Transcript of [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

Page 1: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

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

임포스터 & 인스턴싱

1DevRookie 박민근 ( 민군 )

Page 2: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 2

Imposter 사기꾼 , 다른 사람의 행세를 하는 사람

Page 3: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 3

Simple is Best!가장 적은 수의 폴리곤을 그리는 것이 가장 빠르다 .

Page 4: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 4

3D 모델 -> 2D 빌보드-퀄리티를 떨어트리지 않는 LOD 비용↓ 성능↑

실제 모델 임포스터

Page 5: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 5

임포스터 적용전

Page 6: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 6

임포스터 적용후

Page 7: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 7

모델을 렌러 타겟에 렌더링

빌보드 생성

빌보드에 렌러 타겟을 맵핑

빌보드를 백버퍼에 렌더링

임포스터 갱신

Page 8: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 8

트럭으로부터 생성된 임포스터 .녹색라인은 임포스터를 생성하는 데 사용되는 카메라 위치로 모은다 .

텍스처에 렌더링된 4 개의 3D 오브젝트 이미지

임포스터 빌보드에 투영되는 3D 오브젝트

Page 9: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 9

Alpha Blending

ONE : INVSRCALPHA

일반 Mesh 는 SRCALPHA : INVSRCALPHA

임포스터 빌보드는이미 알파가 계산되어 있기 때문에ONE : INVSRCALPHA

Page 10: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 10

Regenarate

임포스터 갱신

거리 ( 해상도 )카메라 앵글조명 , 애니메이션 변화시간

Page 11: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 11

2D Imposter or 3D Imposter

< 2D 빌보드의 문제점 > < 바운딩 박스를 이용한 3D 임포스터 >

Page 12: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 12

Instancing

모아찍기

배치는 크게 , 렌더링은 적게

Page 13: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 13

렌더링은 나누는것보다 모으는게 빠르다(Batch Rendering)

Before

After

렌더링 파이프라인

렌더링 파이프라인

오브젝트 A 오버헤드오브젝트 B

Page 14: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 14

인스턴싱 적용전

Page 15: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 15

인스턴싱 적용 후

Page 16: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 16

오버헤드의 원인

캐시 미스Render-StateTexture

풀 ,

나무 ,

비행기

같은 텍스쳐와 같은 렌더 스테이트를

사용하는 것들은

단지 위치와

회전만

다르다 .

하나의 버텍스 버퍼에 몰아 넣어 , DP Call 을 최소화

Page 17: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 17

최적화의 원칙배치는 크게 DP Call 은 작게

Reduce!! DP CallReduce!! Cache Miss.Reduce!! SetRenderStateReduce!! SetTexture

Page 18: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 18

Using Vertex Shader

장점 .  1. Buffer 에 Lock 을 걸지 않아도 구현이 가능 2. 빠른 속도를 보장

단점 .  1. 쉐이더 상수 개수 제한으로 한꺼번에 수백개 이상은 그리지 못함 2. Skinning Shader 등 쉐이더 상수를 많이 사용하는 방법과 병행하기 힘듬 3. DP 콜이 Dynamic Buffer 에 비해 상대적으로 많음 .

Page 19: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

DevRookie 박민근 ( 민군 ) 19

Using Dynamic Buffer

장점 .  1. 버퍼 크기만큼 인스턴싱이 가능하므로 Shader 보다 더 많이 가능 2. 스키닝 애니메이션등 , Shader 와 연계 되지 않음 .  3, DP 콜이 Shader 보다 상대적으로 적음

단점 .  1. Lock 을 걸어야 하기 때문에 부하가 상당히 큼 .

Page 20: [박민근] 3 d렌더링 옵티마이징_4 임포스터_인스턴싱

10. 참고 자료1. grass engine using instancing - 한글

블로그

2. Instancing.

3. Instancing – KGC 2005 최우영 ( 지티스 동영상 )

4. 리얼타임 렌더링

20DevRookie 박민근 ( 민군 )