[박민근] 3 d렌더링 옵티마이징_3 공간분할

23
3D RENDERING OPTIMIZING #3 - 박 박 박 ( 박박 ) DEVROOKIE(CAFÉ.NAVER.COM/DEVROOKIE) 나나나 나나나 , 나나나 나나나 !! 1 DevRookie 나나나 ( 나나 )

Transcript of [박민근] 3 d렌더링 옵티마이징_3 공간분할

Page 1: [박민근] 3 d렌더링 옵티마이징_3 공간분할

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

나눌수 있다면 , 가능한 나눠라 !!

1DevRookie 박민근 ( 민군 )

Page 2: [박민근] 3 d렌더링 옵티마이징_3 공간분할

CONTENTS1.CULLING 이란 ?

2.BACKFACE CULLING

3.VIEW FRUSTUM CULLING

4.HARDWARE OCCLUSION CULLING

5. 공간 분할 CULLING

6.BSP

7.PVS, PORTAL

8.QUADTREE

9.OCTREE

10.참고 자료

2DevRookie 박민근 ( 민군 )

Page 3: [박민근] 3 d렌더링 옵티마이징_3 공간분할

5. 공간 분할 Culling

DevRookie 박민근 ( 민군 ) 3

옆방에서 무슨일이 벌어지는지 난 모른다 ! 공간 분할 컬링 !

게임상의 월드를 특정 기준으로 공간적으로 분할하여 , 보이지 않는 공간을 컬링한다 .

분할된 공간은 트리로 구성되어 , 상위 트리가 컬링되면 하위 트리도 컬링된다 .

Page 4: [박민근] 3 d렌더링 옵티마이징_3 공간분할

6. BSP

DevRookie 박민근 ( 민군 ) 4

Binary Space Partitioning

하나의 공간을 2 개의 공간으로 재귀적으로 분할하는 기법

FPS 와 같은 인도어 게임에서 유용하다 .

벽이나 오브젝트를 기준으로 비균등 분할된다 .

실시간 보다는 미리 만들어 두는 경우가 많다 .

Page 5: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 5

6. BSP

하나의 공간을 두개로 분할해 나간다

Page 6: [박민근] 3 d렌더링 옵티마이징_3 공간분할

6. PVS / Portal

DevRookie 박민근 ( 민군 ) 6

Potentially Visible Set ( 보일 가능성이 있는 것들의 세트 )

어떤 위치가 주어 졌을때 그 위치에서 보일 가능성이 있는 공간및 오브젝트들의 집합

프리컴파일에서 , 공간별로 보일 가능성이 있는 것들을 미리 선별하여 구별한다 .

BSP 트리의 단점을 보완하는 형태로 BSP 와 같이 쓰이는 경우가 많다 .

문이나 창문등을 기준으로 Visible Set 을 결정하는 것을 Portal Rendering 이라고 한다 .

 

Page 7: [박민근] 3 d렌더링 옵티마이징_3 공간분할

6. PVS / Portal

DevRookie 박민근 ( 민군 ) 7

실내공간에서의 뛰어난 성능

Page 8: [박민근] 3 d렌더링 옵티마이징_3 공간분할

6. PVS / Por-tal

DevRookie 박민근 ( 민군 ) 8

Page 9: [박민근] 3 d렌더링 옵티마이징_3 공간분할

6. PVS / Portal

DevRookie 박민근 ( 민군 ) 9

문 (Door) 만이 Portal 이 아니다

Page 10: [박민근] 3 d렌더링 옵티마이징_3 공간분할

7. QuadTree

DevRookie 박민근 ( 민군 ) 10

하나의 공간을 4 개씩 재귀분할여 트리를 만드는 기법

4 개의 하위 트리는 상위 트리에 포함되기 때문에 상위 트리가 컬링되면 하위 트리는 무조건 컬링된다 .

지형과 같은 2D 공간에서 주로 사용된다 .

4 개의 공간은 균등 분할된다 .

Height Map 을 이용한 아웃도어에서 주로 사용된다 .

Page 11: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 11

7. QuadTree

오브젝트는 자신을 완전히 포함하는 가장 작은 노드에 저장됩니다

중선에 걸친 오브젝트는 한단계 상위의 노드에 저장됩니다

노드의 깊이는 임의로 정합니다

Page 12: [박민근] 3 d렌더링 옵티마이징_3 공간분할

8. Oc-Tree

DevRookie 박민근 ( 민군 ) 12

하나의 공간을 8 개씩 재귀분할여 트리를 만든다

쿼드트리를 3D 공간으로 확장한 것 . (Y 축 확장 )

비행 시뮬레이션과 같은 3D 공간 게임에서 사용된다 .

구현 및 내용은 쿼드트리와 거의 동일

Page 13: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 13

공간을 8 개씩 분할해 나간다

8. Oc-Tree

Page 14: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 14

9. 직접 접근 쿼드 트리

What is Problem??

게임 데이터가 동적으로 변하는 경우에 트리의 특성상수많은 Node 를 거쳐야 되기때문에캐시 적중 실패율이 대단히 크게 올라갑니다

참조 : GPG 2 권 4.5 – 직접 접근 쿼드 트리 참조

Page 15: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 15

9. 직접 접근 쿼드 트리

노드의 중선에 걸치는 객체는 자식 노드에 저장될 수 없다 .

중선사이의 거리는 트리의 깊이와 2의 제곱관계

-> 객체의 영역이 걸처있는 가장 큰 2 의 제곱수를 구한다

-> 제곱수의 지수는 객체가 완전히 포함될수 있는 가장 낮은 수준

-> 제곱수의 걸침이란 이진수에서 0에서 1 로 변하는 상황

-> XOR 의 결과비트중 1 인비트가 처음으로 나타나는 위치가 노드 수준

Page 16: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 16

9. 직접 접근 쿼드 트리0 128 160 192 256

127.8 ~ 128.3

128.3 ~ 128.8

155.4 ~ 166.1

X1 127

01111111

X2 128

10000000

XOR

255

11111111

X1 128

10000000

X2 128

10000000

XOR

0 00000000

X1 155

10011011

X2 166

10100110

XOR

255

00111101

Page 17: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 17

9. 직접 접근 쿼드 트리

Page 18: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 18

9. 느슨한 옥트리

What is Problem??깐깐한 평면 문제 = 중선에 걸리는 노드는 크기에 관계없이상위 노드에 포함된다

참조 : GPG 1 권 4.11 느슨한 옥트리

Page 19: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 19

9. 느 슨 한 옥 트 리

노드의 영역을 원래 영역보다 한단계 높은 크기를 사용한다 .

각자의 노드가 겹치기 때문에 중선이 사라지고 ,

객체는 하위노드중의 하나에 포함된다 .

Page 20: [박민근] 3 d렌더링 옵티마이징_3 공간분할

DevRookie 박민근 ( 민군 ) 20

9. 느 슨 한 옥 트 리

보인다고 판정된 객체들 실제로 보이는 객체들 체크한 노드들0

2000

4000

6000

8000

10000

12000

14000

16000

18000

20000 18859

6883

2976

9442

6883 7024

일반 쿼드 트리 느슨한 쿼드 트리

Page 21: [박민근] 3 d렌더링 옵티마이징_3 공간분할

감사합니다 .Q & A

21DevRookie 박민근 ( 민군 )

Page 22: [박민근] 3 d렌더링 옵티마이징_3 공간분할

10. 참고 자료1.Real Time Rendering 2 판

2.GPG 1, 2 권

3.마이크로소프트 2002 년 4 월호 - 폴리곤 수를

줄이는 가시면 결정 기법

4.Nvidia SDK

5.Occlusion Culling Using DirectX 9

6.BSP Tree 논문 번역

22DevRookie 박민근 ( 민군 )

Page 23: [박민근] 3 d렌더링 옵티마이징_3 공간분할

다음주 예고1. 간단한 시야거리 제한으로 퍼포먼스 올리기2. 같은 객체를 한번에 모아서그리자 ! 인스턴싱 !

3. 멀리 있는 객체는 자세히 그릴필요 없지 . 임포스터 !

4. 렌더링 파이프라인 최적화 전략

23DevRookie 박민근 ( 민군 )