W jaki sposób do generowania terenu używana jest funkcja hałasu 3D perlin?

20

Mogę owinąć głowę za pomocą funkcji szumu 2d perlin, aby wygenerować wartość wysokości, ale nie rozumiem, dlaczego miałaby być używana funkcja szumu 3d perlin. Na blogu Notcha , http://notch.tumblr.com/post/3746989361/terrain-generation-part-1 , wspomniał o użyciu funkcji szumu perlin 3d do generowania terenu w Minecraft. Czy ktoś wie, jak można to zrobić i dlaczego byłoby to przydatne? Jeśli przekazujesz wartości x, y i z, czy to nie oznacza, że ​​masz już wysokość?

Xavier
źródło

Odpowiedzi:

19

Szum perlinowy 2D jest dobry dla map wysokości, ale w tym przypadku wydaje się, że nie używa mapy wysokości. Zamiast tego ma siatkę 3D, w której dowolna komórka może być pusta. Umożliwia to jaskinie i takie formacje, w których wysokość gruntu nie jest pojedynczą wartością dla danej lokalizacji 2D.

sprzedać
źródło
14

Zamiast próbkowania „wysokości gruntu” potraktowałem wartość hałasu jako „gęstość”, w której wszystko niższe niż 0 byłoby powietrzem, a wszystko wyższe lub równe 0 byłoby gruntem.

Mówiąc najprościej, dla każdego miejsca, w którym może znajdować się blok, oceniana jest funkcja szumu, a jeśli jest> 0, blok jest umieszczany. Funkcja hałasu wycięcia jest wypaczona przez dodanie wysokości od poziomu wody do jego wartości, dlatego dolne obszary są w większości stałe (wysokość jest dużym ujemnym, więc wysokość + hałas również jest ujemna), a wyższe obszary są w większości puste (wysokość jest duża dodatnia, więc wysokość + hałas też jest pozytywny).

Prawdopodobnie istnieje pewna dodatkowa alchemia, aby zdecydować, jaki rodzaj bloku zostanie wygenerowany, i rzeźbić jaskinie. Ale chyba nie jest to bezpośrednio związane z tą funkcją szumu.

Zauważ też, że ta metoda działa dla Notch, ponieważ Minecraft ma teren oparty na wokselach. Jeśli spróbujesz to zrobić w świecie opartym na wielokącie, po prostu funkcja próbkowania szumu nie wystarczy. Musisz użyć jakiegoś algorytmu, aby zamienić próbki w powierzchnię i utworzyć wielokąty zbliżone do tej powierzchni. Jednym z takich algorytmów jest marszowanie kostek .

Nieważne
źródło
8

Hałas 3D staje się obowiązkowy, jeśli teren wymaga sieci jaskiń i nawisów.

Aby wyodrębnić powierzchnię izosupcji z informacji o gęstości, dwie najpopularniejsze techniki to Marching Cubes (MC) i nowsza funkcja Dual Contouring (DC). Potrzebna struktura danych jest różna w zależności od wybranej metody.

Jak wcześniej wspomniano, artykuł Geissa o GPU Gems 3 jest bardzo pouczającym punktem wyjścia do zrozumienia i wdrożenia terenów MC na GPU (zauważ, że jego podejście MC działa całkowicie na GPU i wymaga co najmniej SM4 - GS).

Ponieważ dane gęstości dla wokseli MC mogą pozostać tylko na krawędziach wokseli, klasyczny MC może konturować głośność bez zachowania cech ostrych krawędzi. DC nie ma tej wady, ponieważ informacja o gęstości jest wyrażona jako punkt 3D (minimalizator QEF) leżący w dowolnym miejscu wewnątrz woksela plus znak w każdym rogu.

Z drugiej strony MC nie cierpi na przecinające się twarze, ponieważ wszystkie wygenerowane trójkąty są zamknięte w odpowiednich wokselach, podczas gdy DC potrzebuje dodatkowych obliczeń, aby zapobiec przecięciom między wygenerowanymi ścianami. Autorzy DC rozwiązali ten problem w ulepszonej wersji swojego algorytmu.

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

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

Ten facet proponuje również prawdopodobnie czystsze podejście oparte na analizie wypukłej / wklęsłej w celu uniknięcia autostrad. Używa również lepszych reguł podziału quadów, aby pomóc zachować orientację krawędzi:

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

Classic MC nie jest również fabrycznie „wolny od pęknięć” i może wymagać łatania pęknięć, jeśli działa na nieograniczonych oktetach. DC nie cierpi z powodu tego ostatniego problemu.

Oto całkiem ładna i kompletna ankieta dotycząca większości technik ekstrakcji siatki: http://www.cs.berkeley.edu/~jrs/mesh/

Podejście oktree / woksel jest z natury „przyjazne dla CSG”, co ułatwia zaplanowanie zgrabnej, w pełni „możliwej do zniszczenia” strategii na poziomie gry, ale jeśli trzeba wdrożyć to wszystko w grze, głębokość oktawy również będzie musiała być frustum -zależny.

Jeśli cała zawartość mieści się w pamięci lub jest poprawnie przesyłana strumieniowo, dane można również wykorzystać do renderowania AO i obliczania fizyki / kolizji.

Okr
źródło
„Hałas 3D staje się obowiązkowy, jeśli teren wymaga sieci jaskiń i nawisów”. Obowiązkowy? Czy to jedyny sposób na generowanie jaskiń i nawisów? Nie. Generuję mapę wysokości na podstawie szumu 2D perlin, a następnie rzeźbię w niej jaskinie i zwisy jako osobny krok, aby uzyskać bardziej naturalny wygląd. Mówiąc, że początkujący młodzi twórcy gier wprowadzają w błąd, jest to JEDYNY sposób generowania jaskiń i nawisów w proceduralnie generowanym świecie.
Domarius
5

Domyślam się, że w tym konkretnym przykładzie użył wartości z, aby określić, jaki rodzaj materiału: podłoże skalne, kamień, brud lub powietrze.

Tetrad
źródło
-3

Minecraft wykorzystuje algorytm marszowych kostek do generowania terenu 3D. Przykro mi, ale nie mam na to ochoty. Nie jestem do końca pewien, o czym mówił Notch, kiedy wspomniał o funkcji Perlin Noise - być może ziarno dla algorytmu marszowych kostek. Więcej informacji tutaj:

I świetny artykuł na temat Klejnotów GPU, jeśli jesteś zainteresowany marszowymi kostkami:

Aaron Snoswell
źródło
2
Kostki marszowe to algorytm służący do generowania siatki z pola skalarnego. Oznacza to, że najpierw musi mieć dane, a następnie generuje siatkę pasującą do danych. Nie służy do generowania danych ani terenu.
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
      }
    } 
  } 
} 
Maxim DC
źródło
2
-1; Nawet po dodaniu wyjaśnienia jest to dość zła odpowiedź, nie wyjaśnia jasno celu fragmentu kodu ani jego semantycznego wpływu na powstałe dane, a także nie rozwiązuje większości pytań, które faktycznie miał użytkownik.
Zredagowałem kod, a może teraz?
Maxim DC,
Wyjaśnia, w jaki sposób hałas 3D jest wykorzystywany do ukształtowania terenu, jest to moim zdaniem poprawne
Maxim DC
Następnie wyjaśnij to w swojej odpowiedzi i odpowiedz na pytania zadane przez użytkownika. W przeciwnym razie jest to odpowiedź na kod.
Tom 'Blue' Piddock