하이트 맵, 복셀, 다각형 (형상) 지형


15

하이트 맵, 복셀 및 다각형 (형상) 지형과 관련하여 :

  1. 이 세 가지의 주요 차이점은 무엇입니까?
  2. 복셀로 "부드러운"지형을 만들 수 있습니까? 예를 들어 복셀로 부드러운 산을 구할 수 있습니까, 아니면 복셀이 큐브로 제한되어 있습니까?
  3. 현명한 성능, 세계 2000x2000 단위, 하이트 맵 지형, 복셀 지형 또는 다각형 기반의 지형 지형은 무엇입니까? (모든 가능성에 대해 렌더링하기 위해 "합리적인"성능 향상 / 최적화가 있다고 가정)
  4. 지형 생성에 사용되는 기술이 더 있습니까?
  5. 각 유형을 나타내는 좋은 제목이 있습니까?

PS Polygon 기반 지형은 완전히 훈련되고 사각형이 아니어야합니다.

답변:


30

하이트 맵

하이트 맵을 사용하면 각 정점에 대한 높이 구성 요소 만 저장하고 (보통 2D 텍스처) 전체 쿼드에 대해 한 번만 위치 및 해상도를 제공합니다. 랜드 스케이프 지오메트리는 지오메트리 쉐이더 또는 하드웨어 테셀레이션을 사용하여 각 프레임에서 생성됩니다. 하이트 맵은 충돌 감지를 위해 가로 데이터를 저장하는 가장 빠른 방법입니다.

장점 :

  • 상대적으로 낮은 메모리 사용량 : 꼭짓점 당 하나의 값만 저장하고 인덱스는 저장하지 않아도됩니다. 디테일 맵 또는 노이즈 필터를 사용하여 인식 된 디테일을 증가시켜이를 더욱 개선 할 수 있습니다.

  • 상대적으로 빠름 : 하이트 맵의 지오메트리 셰이더가 작고 빠르게 실행됩니다. 그래도 지오메트리 지형만큼 빠르지는 않습니다.
    삼각형 기반 3D 가속이없는 시스템에서는 광선 마칭 하이트 맵이 지형을 렌더링하는 가장 빠른 방법입니다. 이것은 오래된 게임에서 복셀 그래픽으로 불 렸습니다.

  • Dynamic LOD / terrain : 카메라와의 거리에 따라 생성 된 메시의 해상도를 변경할 수 있습니다. 해상도가 너무 떨어지면 (약 0:40) 변하는 지오메트리가 발생하지만 재미있는 효과에 사용될 수 있습니다.

  • 손쉬운 지형 생성 / 생성 : 프랙탈 Perlin Noise 와 같은 노이즈 기능을 혼합하여 하이트 맵을 쉽게 만들 수 있으며 하이트 맵 편집기는 빠르고 사용하기 쉽습니다. 두 가지 접근 방식을 결합 할 수 있습니다. 또한 편집기에서 작업하기도 쉽습니다.

  • 효율적인 물리학 : 수평 위치는 메모리의 1-4 개 위치에 직접 매핑되므로 물리학의 지오메트리 조회가 매우 빠릅니다.

단점 :

  • x / y 좌표 당 정확히 하나의 높이 : 일반적으로지면이나 돌출 된 절벽에는 구멍이있을 수 없습니다.

  • 적은 제어 : 그리드 크기가 텍스처 좌표와 일치하는 경우 각 포인트의 정확한 높이 만 제어 할 수 있습니다.

  • 아티팩트 : 하위 쿼드를 정의하는 4 개의 정점이 동일한 평면에 있지 않으면 두 정점 사이의 분할이 표시됩니다. 이것은 보통 기본 방향을 따르지 않는 가장자리가있는 가파른 절벽에서 발생합니다.

하이트 맵은 지금까지 지형을 렌더링하는 가장 효율적인 방법이며 고급 지형 기능에 의존하지 않고 넓은 야외 공간이있는 많은 최신 게임에서 사용됩니다. 위키 백과는 프로그램이 사용하는 하이트의 목록을 가지고 있지만, 그 의미는 그들이 단지, 그래서 여기에 렌더링 또한, 일부 게임 리소스로 사용하거나 있는지 확실하지 않습니다 가능성 을 사용하는 방법을 :

  • 정당한 원인 2 : 영역이 정사각형 섹터에로드되고 지형에 구멍이 없습니다. 데모에는 일반적으로 건물이있는 가장자리를 따라 삼각형이 늘어난 깊은 구멍이 있습니다. (이 영역은 일반적으로 액세스 할 수 없지만 데모의 제한 사항 중 일부를 제거하는 모드가 있습니다 ...)

  • 심즈 2 ( 어쩌면 ) : 이웃 지형은 하이트 맵으로로드되지만 로트 (건물 부지)가 배치되는 구멍이 있습니다. 그러나 절벽을 많이 만들면 전형적인 인공물이 있으며 집에 지하실을 추가하고 절벽을 베란다 아래에 숨기는 것은 매우 지루합니다.

  • Valve의 소스 엔진 게임 : 사각형 브러시 (정적 레벨 지오메트리)는면에 높이 매핑 된 지형을 가질 수 있습니다. 이 게임에서 일반적인 특징은 종종 다른 브러시 나 소품으로 숨겨져 있습니다.

모든 하이트 맵 지형을 메쉬로 렌더링 할 수 있기 때문에 셰이더를 보지 않고도 확실하게 말할 수 없습니다.

복셀

복셀 지형은 각 점에 대한 지형 데이터를 3D 그리드에 저장합니다. 이 방법은 스파 스 옥트리와 같은 압축 방법을 사용하더라도 의미있는 표면 세부 사항마다 항상 가장 많은 저장 공간을 사용합니다.

"Voxel 엔진"이라는 용어는 종종 오래된 3D 게임에서 일반적으로 사용되는 지형 높이 맵을 레이 마킹하는 방법을 설명하는 데 사용되었습니다.이 섹션은 복셀 데이터로 저장된 지형에만 적용됩니다.

장점 :

  • 연속 3D 데이터 : 복셀은 광맥과 같은 숨겨진 지형 지형에 대한 지속적인 데이터를 저장하는 유일한 방법입니다.

  • 손쉬운 수정 : 압축되지 않은 복셀 데이터를 쉽게 변경할 수 있습니다.

  • 고급 지형 기능 : 돌출부를 만들 수 있습니다. 터널은 매끄 럽습니다.

  • 흥미로운 지형 생성 : Minecraft 는 미리 정의 된 지형 기능 (트리, 던전)으로 노이즈 기능과 그라디언트를 오버레이하여이를 수행합니다. ( 자세한 정보는 Notch의 블로그에서 Terrain Generation, Part 1 을 읽으십시오 . 05.8.2011 기준으로 Part 2는 없습니다.)

단점 :

  • 느리게 : 복셀 데이터를 렌더링하려면 광선 추적기사용 하거나 마칭 큐브 와 같은 메시를 계산해야합니다 (아티팩트가 있음). 인접 복셀은 메시 생성에 독립적이지 않으며 셰이더는 더 복잡하며 일반적으로 더 복잡한 지오메트리를 생성합니다. LOD가 높은 복셀 데이터 렌더링은 매우 느릴 수 있습니다.

  • 방대한 스토리지 요구 사항 : 복셀 데이터 저장에는 많은 메모리가 사용 됩니다 . 이러한 이유로 보셀 데이터를 VRAM에로드하는 것은 실용적이지 않습니다. 최신 하드웨어에서도 더 작은 텍스처를 사용하여 보상해야하기 때문입니다.

변형 가능한 지형과 같은 복셀 기능에 의존하지 않는 게임에는 복셀을 사용하는 것이 실용적이지 않지만 경우에 따라 재미있는 게임 메커니즘을 허용 할 수 있습니다. 복셀 엔진은 오래된 게임에서 더 일반적 이지만 새로운 예도 있습니다.

  • Atomontage 엔진 : 복셀 렌더링.

  • 웜 4 : "poxels"를 사용합니다. Wikipedia에 따르면 복셀과 다각형이 혼합되어 있습니다.

  • Minecraft : 복셀을 사용하여 RAM의 지형을 나타내며 그래픽은 다각형 그래픽입니다. 그것은 주로 소프트웨어 계산입니다.

  • Terraria : 2D 복셀의 예입니다. 어떻게 렌더링되는지 모르겠습니다.

  • 물리학과 결합 된 복셀 : 게임이 아닙니다. 그러나 그것은 파괴 가능성을 멋지게 보여줍니다.

  • Voxatron : 메뉴와 HUD를 포함한 거의 모든 그래픽에 복셀을 사용하는 게임.

메시

다각형 메쉬는 지형을 저장하고 렌더링하는 가장 유연하고 정확한 방법입니다. 이들은 정밀한 제어 또는 고급 지형 기능이 필요한 게임에서 종종 사용됩니다.

장점 :

  • 매우 빠름 : 정점 셰이더에서 일반적인 투영 계산 만하면됩니다. 지오메트리 쉐이더가 필요하지 않습니다.

  • 매우 정확 : 모든 좌표는 각 정점에 대해 개별적으로 저장되므로 수평으로 이동하고 세부적인 부분이있는 곳에서 메쉬 밀도를 증가시킬 수 있습니다.

  • 낮은 메모리 영향 : 이는 메쉬가 일반적으로 작은 맵보다 적은 메모리를 필요로한다는 것을 의미합니다. 특징이 적은 영역에서는 꼭짓점이 더 희박 할 수 있기 때문입니다.
    ( Wikipedia의 삼각 불규칙 네트워크 참조 ).

  • 아티팩트 없음 : 메시는 그대로 렌더링되므로 결함이나 이상한 모양의 테두리가 없습니다.

  • 고급 지형 기능 : 구멍을 남기고 돌출부를 만들 수 있습니다. 터널은 매끄 럽습니다.

단점 :

  • 불쌍한 동적 LOD : 사전 계산 된 메시에서만 가능합니다. 이로 인해 추가 데이터없이 전환 할 때 이전 점을 새 정점에 매핑 할 때 "점프"가 발생합니다.

  • 수정하기 쉽지 않음 : 수정 해야 할 영역에 해당하는 정점을 찾는 것이 느립니다.

  • 충돌 감지에 매우 효율적이지 않음 : 하이트 맵 및 복셀 데이터와 달리 특정 위치의 메모리 주소는 일반적으로 직접 계산할 수 없습니다. 이는 정확한 표면 구조에 의존하는 물리 및 게임 로직이 다른 스토리지 형식보다 느리게 실행될 수 있음을 의미합니다.

다각형 지형은 넓은 영역이 없거나 정밀도와 돌출부가 없어 하이트 맵 지형을 사용할 수없는 게임에서 종종 사용됩니다. 나는 목록이 없지만 꽤 확신합니다.

  • 모든 3D 젤다

  • 모든 3D 마리오 게임

이것을 사용하십시오.

다른 방법

셰이더 파이프 라인에서 완전히 터 레인을 만들 수 있습니다. 알고리즘이 프래그먼트 / 픽셀 셰이더에서만 실행되는 경우 메모리 영향이 거의 제로인 반면 디테일은 사실상 무제한입니다. 명백한 단점은 카메라가 원래 렌더링 표면과 교차 할 때 모양과 문제를 거의 제어 할 수 없습니다. 플레이어가 행성 표면과 상호 작용하지 않는 우주 게임에서 여전히 유용합니다. 매개 변수 애니메이션은 이러한 종류의 지형에서 가장 잘 작동합니다.

그래픽 카드에서 생성 된 지형 지오메트리를 다운로드하여 나머지 게임 엔진에 사용할 수 있어야하지만, 그 성능이 어떤지 또는 지금까지 수행되었는지는 알 수 없습니다.

결론

모든 시나리오에 적합한 방법은 없지만 특정 작업에 적합한 방법을 선택하는 것은 매우 쉽습니다.

  • 지형 표면에 돌출부 또는 구멍이 필요하지 않고 물리 또는 동적 지형을 사용하는 경우 하이트 맵 이 가장 좋은 솔루션입니다. 확장 가능하며 대부분의 게임에서 잘 작동합니다.

  • 메시 는 가장 높은 정밀도를 가지며 돌출부, 구멍 및 터널을 설명 할 수 있습니다. 자주 변하지 않는 복잡한 지형이있는 경우 사용하십시오.

  • 복셀 은 복잡한 기능이 많은 매우 역동적 인 지형을 묘사하는 데 적합합니다. 많은 양의 메모리와 처리가 필요하므로 직접 렌더링하지 마십시오.

  • 지형과 상호 작용할 필요가 없거나 매우 상세한 그래픽이 필요한 경우 다른 방법 이 위의 방법 보다 낫습니다. 일반적으로 매우 특정한 시나리오에서만 작동합니다.

예를 들어 메쉬 지형을 하이트 맵으로 테셀 레이트하여 절벽의 세부 구조를 높이는 등 여러 방법을 결합하여 둘 이상의 기능을 얻을 수 있습니다.

동적 지형 생성 무겁게에 사용되는 절차 공간 시뮬레이션일부는 지난 몇 년 동안 정말 고급되고있다 . 이 프로젝트의 포럼에는 주제에 대한 자료가 있어야합니다.


3
소스 엔진은 지형에 하이트 맵을 사용하지 않습니다. 그들은 "변위"라는 테셀레이션 된 쿼드를 사용합니다. developer.valvesoftware.com/wiki/
Tetrad

1
그것은 거기에 달콤한 대답입니다. 가능하다면 이것에 +3을 줄 것입니다. 자세한 정보에 감사드립니다.
joltmode

@Tetrad 변위에 사용할 수있는 해상도는 2의 거듭 제곱 (텍스처 버퍼에 대한 일반적인 제한)이며 정점 당 저장된 유일한 좌표는 높이와 터 레인 하이트 맵이 공간 분할 된 쿼드로 렌더링됩니다. 위키는 또한 변위의 렌더링 비용이 일반 지오메트리의 렌더링 비용보다 낮다고 말합니다. 나는 그들이 다른 이름을 가진 동일한 것으로 가정하는 것이 공정하다고 생각합니다.
Tamschi

1
@NickWiggill "voxel"의 의미는 지난 10 년 동안 상당히 변한 것 같습니다. 나는 voxels 의 현재 Wikipedia 정의를 일반 3D 그리드의 값으로 사용하려고합니다 . 추방에 대한 항목은 의미의 차이를 언급하고있다. 이것을 명확히하기 위해 내 대답에 추가했습니다.
Tamschi

2
참고 사항 : "다각형 지형"은 GIS에서 " 삼각형 불규칙 네트워크 "( "TIN") 라고도합니다 . 그것은 크게 일반적으로 적게 는 데이터가없는 경우 중요하지 않은 데이터 나 장소를 기록 신경 쓰지 않기 때문에 같은 유효 분해능의 하이트보다 더 많이 메모리는. 첫 번째 고딕 게임은 그것을 사용했습니다 (다른 것에 대해서는 확실하지 않음).
Martin Sojka

8

언급 한 용어 중 서로 상호 배타적 인 용어가 없다는 것을 지적하고 싶습니다. 하이 맵을 사용하고 다각형을 사용하여 렌더링 한 복셀 기반 게임을 가질 수도 있습니다.

  1. 높이 맵은 각 특정 지점에서지면의 높이를 2 차원으로 표현한 것입니다. 그것들은 종종 회색조 이미지로 저장되는데, 여기서 밝기는 그 지점의 높이를 나타냅니다. 복셀은 기본적으로 3D 비트 맵입니다. 복셀 공간을 렌더링하는 데 사용되는 다양한 기술이 있습니다.

  2. 복셀로 부드러운 지형을 만들 수 있으며 큐브에만 국한되지 않습니다. 그러한 방법 중 하나 는 복셀 표현을 다각형 목록으로 변환 할 수있는 마칭 큐브 와 같은 알고리즘을 사용하는 것 입니다.

  3. 삼각형이 가장 적은 것이 가장 빠릅니다.

  4. Perlin 노이즈와 같은 프랙탈 알고리즘을 사용하여 풍경을
    상세하게 만들 수 있습니다 . Nurb와 같은 파라 메트릭 표면을 사용하여 영구적 인 저장 요구 사항이없는 부드러운 지형을 만들 수 있습니다.

  5. 델타 포스는 복셀을 사용하는 오래된 게임입니다. Minecraft는 복셀 스토리지를 사용하여 풍경을 표시 할 수 있습니다 (확실하지 않음). Sacrifice by Shiny는 하이트 맵을 사용하는 게임입니다. 풍경이있는 대부분의 게임은 지오메트리 지형을 사용합니다.


1
한 점은 3 지점에서 GPU는 다각형 수에만 관심을 두지 만 여전히 지오메트리 생성 측면이 있습니다. 복셀 필드의 지오메트리 생성은 일반적으로 하이트 맵 지형 (간단한 프로세스) 또는 다각형 기반 (명확히 기하 데이터 임)보다 느린 프로세스 (블록 / 마킹 큐브는 둘 다 더 복잡한 프로세스)입니다. 편집 : 지형을 변형 할 수 있는지 여부에 따라 다릅니다.
Michael

세 번째 점의 경우 ... 음, 여전히 하이트 맵을 처리해야 지오메트리가 형성됩니다. 이를 염두에두고 다각형 메쉬가 조금 더 빠를까요? 복셀을 렌더링하는 데 사용되는 기술 중 일부를 지적 해 주시겠습니까?
joltmode

2
지오메트리 셰이더를 사용하여 하이트 맵에서 메시를 생성 할 수 있습니다. 이렇게하면 셰이더 파이프 라인의 각 프레임에 지오메트리가 생성되는 동안 위치 및 해상도와 같은 하이트 맵과 매개 변수 만 저장할 수 있습니다. 행진 큐브보다 빠르며 다각형 메쉬보다 느립니다. Heighmaps의 장점은 메모리 소비가 적다는 것입니다. 메시에 필요한 것의 1/3 이상입니다. 단점은 유연하지 않다는 것입니다 (작은 세부 사항, 돌출부 없음). 생성 된 메시의 디테일을 동적으로 조정할 수 있지만 지오메트리가 이동합니다.
Tamschi

@ Tamschi, 당신이 그 답을 제공한다면 정확히 내가 찾던 것. :)
joltmode

@Tom 나는 이것을 형식화하고 몇 가지 예를 더 찾을 수 있는지 볼 것이다.
Tamschi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.