게임용 공간 분할의 최신 기술은 무엇입니까? [닫은]


18

오랫동안 사용했던 BSP 트리, Octrees 및 Portal에 대해 알고 있습니다. 그러나 현대 게임은 여전히이 시스템을 사용하거나 새로운 것을 사용하고 있습니까?

장단점으로 가능하다면 렌더링 및 충돌 감지를 고려하십시오.


완전한 해답을 보증하지는 않지만 공간 해싱 은 새로운 아이디어로 보입니다. 또는 호의에 빠졌다. 모든 것이 아니라 큰 장점은 구현하기 쉬운 먼지입니다.
Jonathan Dickinson

답변:


15

예, 예를 들어 언리얼 엔진 3은 여전히 ​​BSP를 사용합니다. 주로 CSG 프로세스 중에 사용되기 때문입니다. Doom3 / id tech 4는 포털을 사용하며 id Tech 5가 BSP 트리로 돌아간 내용을 읽은 것 같습니다. octree를 사용하는 게임도 있습니다. 게임에서, UE3는 오 클루 전 쿼리를 통해보다 역동적 인 접근 방식으로 이동했지만, BSP를 사용하여 어떤 정적 메시가 보이는지를 결정하지 않으면 놀랄 것입니다. 다른 게임은 view-frustum culling (예 : 문명)을 사용할 수도 있습니다. 실제로 어떤 게임 유형에 따라 달라집니다.

BSP와 물건이 여전히 존재하는 이유는 더 잘 할 수 없기 때문입니다. 정적 지오메트리가 있다면 BSP를 올바르게 구성하면 좋습니다. BSP 빌더를 작성해야하지만 까다 롭습니다 (그러나 CSG 솔루션이 하나를 사용하면 무료로 발생할 수 있습니다!) Octrees 및 더 동적 인 솔루션 (모든 것에 대한 오 클루 전 쿼리에 의존하는 것과 같은)은 구현하기가 더 쉽고 런타임이 높습니다. 비용이 들지만 레벨을 (비싸게) 사전 처리 할 필요는 없습니다. 이는 일부 게임이 기꺼이하는 일입니다 (예를 들어, 크라이 텍은 모든 것이 실시간으로 실행되기를 원하므로 정적 가속 구조를 구축하는 데 시간을 소비하지 않습니다). 다른 런타임 방식은 소프트웨어 래스터 화와 같은 것입니다. CPU 및 CPU에서 오 클루 전 쿼리 수행 (이는 Frostbite 엔진에서 사용됨)

실제로 현대적인 접근 방식을 보려면 가시성 쿼리를위한 미들웨어 인 Umbra를 살펴보십시오 . 웹을 약간 검색하면 Umbra의 초기 시작을 설명하는 마스터 논문이 있습니다.

결론 : BSP / Octree / no AS 사용 여부는 만들려는 게임 유형에 따라 크게 달라집니다. 레벨이 대부분 정적 인 경우이를 활용하여 정적 가속 구조를 만들어야합니다. 모든 것이 역동적이라면 물론 다른 접근법이 필요합니다.

충돌 감지를 위해 Bullet 및 PhysX와 충돌 감지 알고리즘을 살펴 보겠습니다. 그러나 필자는 물리 솔루션이 예전보다 가시성에 덜 묶여 있다고 생각합니다. 물리적 솔루션은 GPU 기반 BVH를 사용하려고 할 수 있습니다.이 경우 가시성 쿼리에 사용하려고 시도하는 것은별로 의미가 없습니다.


15

나는 요즘 차세대 엔진이 무엇을 사용하고 있는지 잘 모르겠지만, 내가 아는 것을 말해 줄 것입니다. 최적화와 해당 최적화를 지원하는 데 사용되는 데이터 구조간에 혼동되기 쉽습니다. 아래에 언급 된 모든 것은 최적화를위한 것이지만, 데이터 구조 중 어느 것이 구체적인지 지적 할 것입니다.

BSP : Data Structure-동적 움직이는 객체와 정적 월드 지오메트리 간의 교차를 감지합니다. zbuffer없이 충돌 감지 및 형상의 렌더링에 올바르게 사용되었지만, 이제는 z z 버퍼를위한 충분한 메모리가 있기 때문에 더 이상 렌더링에 사용되지 않습니다. 기술적으로 약간 다르게 생성되지만 여전히 동일한 트리 유형으로 간주됩니다. 전처리가 필요합니다.

Octree 또는 Kd-Tree : 데이터 구조-모든 동적 인 객체에 대해 n ^ 2 점검을 피하기 위해 동일한 "셀"또는 영역에있는 객체를 결정하는 데 사용됩니다.

이것 만이 유일한 것은 아니지만 아마도 가장 일반적 일 것입니다. 엔진이 일반적으로 렌더링 지오메트리를 피할 수 있도록 최적화가 많이 있습니다. 그러나 다음은 지오메트리를 제거하는 데 사용되며 일반적으로 모든 것이 사용됩니다.

포털 : 기술적으로 데이터 구조는 아니지만 컬링을 수행하려면 특별한 구조가 필요합니다. 월드 지오메트리 및 동적 객체 지오메트리의 가시성 컬링에 사용됩니다. 세상을 내가 생각하는 영역으로 나누려면 전처리가 필요합니다. 그러나 실제로 이것을 구현하지 않았으므로 알 수 없습니다.

오 클루 전 컬링 (Occlusion Culling) : 최적화-동적 오브젝트와 같이 원하는 대상에 대한 가시성 컬링에 사용됩니다.

일반 뷰포트 컬링 : 최적화-카메라 뷰에없는 오브젝트를 컬링합니다.

더 많은 뷰포트 컬링 : 최적화-옥트리를 사용하여 정기적 인 뷰포트 컬링을 더욱 최적화 할 수 있습니다. 카메라 뒤에 있거나보기에없는 octree의 전체 셀을 제거 할 수 있습니다. 여기에는 지형 패치가 포함됩니다 (외부인 경우). octree에 의해 컬링되지 않은 것은 무엇이든 "일반적인 뷰포트 컬링"을 수행 할 것입니다. 그런 다음 남은 것이 있으면 렌더링합니다.

후면 컬링 : 최적화-래스터 화를 방지하기 위해 카메라에서 멀어지는 형상을 잘라냅니다. 일반적으로 렌더링 상태가 올바르게 설정된 경우 하드웨어에서 수행됩니다.

특수 사례 데이터 구조 :

AABB 나무 또는 구 나무 : 일종의 특수 사례 데이터 구조입니다. 그들은 오목한 모양을 볼록한 모양으로 바꿉니다. 예를 들어 뼈가있는 캐릭터는 기술적으로 오목합니다. 그것은 작은 볼록한 조각으로 나뉩니다. 충돌 감지, 동적 객체의 가시성 컬링 (보통)을 최적화하는 데 사용할 수 있으며 볼록하므로 교차 테스트를보다 쉽게 ​​수행 할 수 있습니다. 이것들은 일반적으로 동적 객체이기 때문에 옥트리 안에 들어갑니다. 이것들은 또한 오 클루 전 컬링 최적화를 돕기 위해 사용될 수 있습니다.

모든 것을 표현하기 위해 하나의 구조를 사용해야하는 이유는 없습니다 (예 : 장면 그래프). 제 생각에는 일종의 범용 트리를 사용하는 대신 다른 작업에 다른 데이터 구조를 사용하는 것이 좋습니다. 예를 들어, 현재 작업중인 엔진은 다음 최적화를 통해 BSP / Octree / AABB Tree 조합을 구현할 계획입니다. 오 클루 전 컬링, 뷰포트 및 &, 물론 후면 컬링. 즉, 하나의 bsp 트리, 하나의 octree 및 해당 octree 내에 여러 aabb 트리가있을 것입니다.

최상의 데이터 구조와 알고리즘 / 최적화를 선택하는 것은 아마도 엔진을 위해 할 수있는 가장 크고 가장 유익한 일일 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.