3d 펄린 노이즈 기능은 지형을 생성하는 데 어떻게 사용됩니까?


20

높이 값을 생성하기 위해 2d 펄린 노이즈 함수를 사용하여 머리를 감쌀 수 있지만 3d 펄린 노이즈 함수가 사용되는 이유를 이해할 수 없습니다. Notch의 블로그 ( http://notch.tumblr.com/post/3746989361/terrain-generation-part-1 )에서 Minecraft의 지형 생성에 3d 펄린 노이즈 기능을 사용한다고 언급했습니다. 누구나 그것이 어떻게 수행되고 그것이 왜 유용한 지 알고 있습니까? x, y 및 z 값을 전달하면 이미 높이가 있음을 의미하지 않습니까?

답변:


19

2D 펄린 노이즈는 높이 맵에 적합하지만이 경우에는 높이 맵을 사용하지 않는 것 같습니다. 대신 그는 3D 격자를 가지고 있으며, 어떤 셀도 비어있을 수 있습니다. 이것은 지상 높이가 주어진 2D 위치에 대한 단일 값이 아닌 동굴과 구조물을 허용합니다.


14

“접지 높이”를 샘플링하는 대신 노이즈 값을“밀도”로 처리했습니다. 여기서 0보다 작은 것은 공기가되고 0 이상의 값은 접지가됩니다.

간단히 말해서, 블록이있을 수있는 모든 장소에 대해 노이즈 함수가 평가되고> 0보다 크면 블록이 배치됩니다. 노치의 소음 기능은 수위에서 높이를 값에 추가하여 왜곡됩니다. 따라서 낮은 영역은 대부분 단단하고 (높이는 큰 음수이므로 높이 + 소음도 음수입니다) 높은 영역은 대부분 비어 있습니다 (높이는 큰 양수이므로 높이) + 소음도 긍정적입니다).

어떤 종류 의 블록이 생성 되는지 결정하고 동굴을 개척 하는 추가 연금술이있을 수 있습니다. 그러나 나는이 소음 기능과 직접 관련이없는 것 같아요.

또한 Minecraft에는 복셀 기반 지형이 있기 때문에이 방법은 Notch에서 작동합니다. 다각형 기반의 세계에서 그것을 없애려고 시도하면 단순히 노이즈 함수 샘플링만으로는 충분하지 않습니다. 샘플을 표면으로 바꾸고이 표면에 가까운 다각형을 만들려면 일부 알고리즘을 사용해야합니다. 이러한 알고리즘 중 하나는 큐브를 행진하는 것 입니다.


8

지형에 동굴 네트워크와 돌출부가 필요한 경우 3D 노이즈가 필수가됩니다.

밀도 정보에서 등면을 추출하기 위해 가장 널리 사용되는 두 가지 기술은 Marching Cubes (MC)와 최신 Dual Contouring (DC)입니다. 필요한 데이터 구조는 선택한 방법에 따라 상당히 다릅니다.

앞에서 언급했듯이 Geiss의 GPU Gems 3 기사는 GPU에서 MC 지형을 이해하고 구현하기위한 매우 유용한 시작점입니다 (그의 MC 방식은 GPU에서 완전히 실행되며 SM4-GS 가능 버전이 필요합니다).

MC 복셀의 밀도 데이터는 복셀의 가장자리에만있을 수 있기 때문에 클래식 MC는 날카로운 모서리 기능을 유지하지 않고 볼륨의 윤곽을 그릴 수 있습니다. 밀도 정보는 복셀 내부의 각 위치에 각 코너의 부호를 더한 3D 포인트 (QEF 최소화 기)로 표현되므로 DC는 이러한 단점을 겪지 않습니다.

반면에, MC는 생성 된 모든 삼각형이 해당 복셀로 묶여 있기 때문에 자체 교차면을 겪지 않으며 DC는 생성 된면 사이의 교차를 막기 위해 추가 계산이 필요합니다. DC 작성자는 알고리즘의 개선 된 버전에서이 문제를 해결했습니다.

http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf

http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf

이 동료는 또한 자기 교차를 피하기 위해 볼록 / 오목 분석을 기반으로하는보다 깨끗한 접근법을 제안합니다. 그는 가장자리 방향을 유지하기 위해 더 나은 쿼드 분할 규칙을 사용합니다.

http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf

Classic MC는 기본적으로 "균열이없는"것이 아니며 제한되지 않은 octree에서 실행되는 경우 균열 패치가 필요할 수 있습니다. DC는이 마지막 문제를 겪지 않습니다.

다음은 대부분의 메쉬 추출 기술에 대한 아주 훌륭하고 완전한 설문 조사입니다. http://www.cs.berkeley.edu/~jrs/mesh/

옥트리 / 복셀 접근 방식은 본질적으로 "CSG 친화적"으로, 깔끔하고 완전히 "파괴 가능한"게임 레벨 전략을보다 쉽게 ​​계획 할 수 있지만, 게임에서이 모든 것을 구현해야하는 경우 옥트리 깊이도 절두체가되어야합니다. -매달린.

전체 내용이 메모리에 맞거나 올바르게 스트리밍되면 AO 렌더링 및 물리 / 충돌 계산에 데이터를 사용할 수도 있습니다.


"지형에 동굴 네트워크와 돌출부가 필요한 경우 3D 노이즈가 필수가됩니다." 필수? 마찬가지로, 이것이 동굴과 돌출부를 생성하는 유일한 방법입니까? 아니. 2D 펄린 노이즈에서 하이트 맵을 생성 한 다음보다 자연스러운 모양을 위해 별도의 단계로 동굴과 돌출부를 조각합니다. 어린 게임 개발자들이 이것이 절차 적으로 생성 된 세계에서 동굴과 돌출부를 생성하는 유일한 방법이라고 말하는 것은 잘못된 생각입니다.
Domarius

5

그 특정 예에서, 내 생각에 그는 z 값을 사용하여 암반, 돌, 흙 또는 공기와 같은 재료의 유형을 결정했습니다.


-3

Minecraft는 마칭 큐브 알고리즘을 사용하여 3D 지형을 생성합니다. 이것에 대한 언급이 없습니다, 죄송합니다. Notch가 Perlin Noise 함수를 언급했을 때 정확히 무엇을 말했는지 잘 모르겠습니다. 아마도 행진 큐브 알고리즘의 시드 일 것입니다. 여기에 더 많은 정보가 있습니다 :

큐브 마칭에 관심이 있다면 훌륭한 GPU Gems 기사가 있습니다.


2
마칭 큐브는 스칼라 필드에서 메쉬를 생성하는 알고리즘입니다. 즉, 먼저 데이터가 있어야하고 데이터에 맞는 메쉬를 생성합니다. 데이터 나 지형을 생성하기위한 것이 아닙니다.
MichaelHouse

-6
for (int x = 0; x < Width) 
{
  for (int y = 0; y < Depth) 
  {
    for (int z = 0; z < Height) 
    {
      if(z < Noise2D(x, y) * Height) 
      {
        Array[x][y][z] = Noise3D(x, y, z)
      } else {
        Array[x][y][z] = 0
      }
    } 
  } 
} 

2
-1; 당신이 추가 한 설명에도 불구하고 이것은 꽤 나쁜 대답이지만 코드 스 니펫의 목적이나 결과 데이터에 대한 의미 론적 영향을 명확하게 설명하지 않으며 사용자가 실제로 가진 대부분의 질문을 다루지 않습니다.

코드를 편집했습니다. 지금은 어떻습니까?
Maxim DC

3D 노이즈가 지형을 만드는 데 어떻게 사용되는지 설명합니다. 이것은 내 의견으로는 맞습니다
Maxim DC

그런 다음 답변에이를 설명하고 사용자가 가진 질문을 해결하십시오. 그렇지 않으면 데드 코드 답변입니다.
Tom 'Blue'Piddock
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.