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.
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.
źródło
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:
źródło
źródło