"청크 수준의 디테일"이해하기


17

최근에는 Unity에서 청크 수준의 세부 시스템을 구현하려고했습니다. 각각 높이 맵이있는 4 개의 메쉬 평면을 생성 할 것입니다. 그러나 현재로서는 그렇게 중요하지 않은 것 같습니다. 이 기술에 대해 읽은 후에는 많은 질문이 있습니다. 이것이 한 번에 모두 묻기에는 너무 많지 않기를 바랍니다. 그러나 누군가 가이 기술을 이해하도록 도와 주면 대단히 감사하겠습니다.

1 : Chunked LOD 파이프 라인 의 어느 지점 에서 메쉬가 청크로 분할 되는지 이해할 수 없습니다 . 초기 메시 생성 중에 발생합니까, 아니면이를 수행하는 별도의 알고리즘이 있습니까?

2 : Quadtree 데이터 구조가 Chunked LOD 데이터 를 저장하는 데 사용된다는 것을 이해합니다. 포인트가 누락되었다고 생각하지만 quadtree는 각 세분화 레벨에 대해 정점 및 삼각형 데이터를 저장합니까?

3a : 카메라 거리는 일반적으로 어떻게 계산됩니까? 쿼드 트리에 대해 읽을 때 축 정렬 경계 상자가 많이 언급됩니다. 이 경우 각 청크에 카메라 나 플레이어가 가까이 있다는 것을 감지하는 충돌 경계 상자가 있습니까? 아니면 더 좋은 방법이 있습니까? (어쩌면 레이 캐스트?)

3b : 청크가 카메라 거리 자체를 계산합니까?

4 : 각 청크가 동일한 "해상도"를 갖습니다. 예를 들어 최상위 레벨에서 메시는 32x32가되고 각 세분화 된 노드는 32x32가됩니다. 아래 예 :

청크 된 LOD의 예


누구나 절차 적 행성에 대한 더 나은 LOD 접근 방식을 알고 있다면 흥미로울 것입니다.
Caius Eugene

Thatcher Ulrich의 오리지널 SIGGRAPH 논문과 관련 프로그램을 이미 보신 것으로 추정됩니다. tulrich.com/geekstuff/chunklod.html
drxzcl

나는 그것이 정보에 이르기까지 매우 유익하지만 세부적인 유형이나 구현 방법에 들어 가지 않습니다. 감사합니다
Caius Eugene

1
행성 LOD에는 여러 가지 옵션이 있습니다. vterrain.org/LOD/spherical.html
OriginalDaemon

답변:


12

1 : Chunked LOD 파이프 라인의 어느 지점에서 메쉬가 청크로 분할되는지 이해할 수 없습니다. 초기 메시 생성 중에 발생합니까, 아니면이를 수행하는 별도의 알고리즘이 있습니까?

그것은 중요하지 않습니다. 예를 들어 청킹을 메시 생성 알고리즘에 통합 할 수 있습니다. 플라즈마와 같은 다듬기 알고리즘을 사용하여 더 낮은 레벨이 동적으로 추가되도록 (예 : 플레이어가 가까이 다가 갈 때)이를 동적으로 수행 할 수도 있습니다. 아티스트 입력 또는 고도 측정 데이터에서 고해상도 메시를 생성하고 자산 마무리 시간에 모든 LOD 청크로 집계 할 수 있습니다. 또는 믹스 앤 매치 할 수 있습니다. 실제로 응용 프로그램에 따라 다릅니다.

2 : Chunked LOD 데이터를 저장하는 데 Quadtree 데이터 구조가 사용된다는 것을 이해합니다. 점을 약간 누락했다고 생각하지만 quadtree는 각 세분화 레벨에 대해 정점 및 삼각형 데이터를 저장합니까?

반드시 그런 것은 아닙니다. 트리에는 지오메트리 및 렌더링 방법에 대한 정보 만 저장됩니다. 이것은 모든 트리 노드에 꼭짓점 /면 목록이 있음을 의미 할 수 있습니다. 이 시대에보다 현실적으로 메시 / 인스턴스 핸들을 GPU 메모리에 저장합니다.

3a : 카메라 거리는 일반적으로 어떻게 계산됩니까? 쿼드 트리에 대해 읽을 때 축 정렬 경계 상자가 많이 언급됩니다. 이 경우 각 청크에 카메라 나 플레이어가 가까이 있다는 것을 감지하는 충돌 경계 상자가 있습니까? 아니면 더 좋은 방법이 있습니까? (어쩌면 레이 캐스트?)

매우 저렴하고 쉬운 옵션은 청크의 중심점까지의 거리를 사용한 다음 수정하는 것입니다. 이 거리는 항상 과소 평가된다는 것을 알고 있습니다. 중심점이 거리 Z에 있으면 청크의 절반이 그 거리 에 가깝다는 것을 의미합니다. 그러나 우리가 모르는 것은 오리엔테이션입니다. 너비가 큰 청크를 보는 경우 청크의 w가장 가까운 비트는 거리에 있습니다 Z-w. 그러나 가장 먼저 청크를 보는 경우 가장 가까운 비트는 거리에 있습니다 Z-sqrt(2)*w. 이 불확실성으로 살 수 있다면 (거의 항상 가능합니다) 끝났습니다. 기본 삼각법을 사용하여 시야각을 보정 할 수도 있습니다.

아티팩트를 최소화하기 위해 카메라에서 청크까지의 최소 거리를 계산하는 것이 좋습니다. 실제로 이것은 포인트-제곱 거리 테스트를 수행 하는 것을 의미 합니다. 중심점까지의 거리를 계산하는 것보다 약간 더 많은 작업이지만, 매 프레임마다 거대를하는 것은 아닙니다.

물리 엔진을 활용하여이를 수행 할 수 있다면 반드시 그렇게해야하지만 실제로는 "충돌"보다 "거리 쿼리"에 대해 더 많이 생각하고 싶을 것입니다.

3b : 청크가 카메라 거리 자체를 계산합니까?

그것은 실제로 엔진의 디자인에 달려 있습니다. 그래도 잎을 비교적 가볍게 유지하는 것이 좋습니다. 플랫폼에 따라 매 수천 개의 지형 청크가 호출마다 오버 헤드가 발생하면 매 프레임마다 자체 업데이트를 수행하여 성능에 심각한 영향을 줄 수 있습니다.

4 : 각 청크가 동일한 "해상도"를 갖습니다. 예를 들어 최상위 레벨에서 메시는 32x32가되고, 세분화 된 각 노드는 32x32가됩니다.

반드시 필요한 것은 아니지만 모든 청크가 같은 양의 공간을 차지하면 편리합니다. 그런 다음 "청크"단위로 (GPU) 메모리 관리를 수행 할 수 있습니다. 하나의 해상도가 다른 꼭지점을 공유하기 때문에 다른 해상도의 배수라면 크기가 다른 두 청크 사이의 이음새를 쉽게 제거하거나 숨길 수 있습니다. (예 : 32x32 및 64x64는 32x32 및 57x57보다 관리하기가 쉽습니다) 청크 지오메트리 크기를 변경해야 할 정당한 이유가 있다면 반드시 해결하십시오.


2
하나의 해상도가 다른 꼭지점을 공유하기 때문에 다른 해상도의 배수라면 크기가 다른 두 청크 사이의 이음새를 쉽게 제거하거나 숨길 수 있습니다. (예 : 32x32 및 64x64는 32x32 및 57x57보다 관리하기가 쉽습니다)
Alayric

훌륭한 답변, 그것은 많은 것들을 정리했습니다. 특히 많은 구현은 엔진의 기능을 고려하는 것입니다. 함께 3A 나는 아직도 경우에 관한 확실 해요 화재 의 거리 쿼리를, 나는 사운드 CPU의 무거운 간주 한 두 가지 구현, 나는이에 대한 몇 가지 더 많은 연구를 할 것입니다. 감사합니다
Caius Eugene

1
@ CaiusEugene : 나는 당신이 거리 결정을 지나치게 생각하고 있다고 생각합니다. 3a 지점의 답변에 매우 저렴하고 매우 기본적인 알고리즘을 추가하여 시작해야합니다.
drxzcl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.