Jak zrobić naturalnie wyglądający woksel

11

Tworzę grę wokselową, ale myślę, że używam niewłaściwej techniki. Obecnie używam płaskich płytek do robienia bloków i myślę, że jest to lepszy i bardziej wydajny sposób.

Widziałem grę wokselową, która ma naturalnie wyglądający teren. Rozumiem przez to, że nie jest blokowy. Gra ma 4 * 4 * 4 bloki na metr sześcienny, a bloki takie jak brud, piasek i kamień mają okrągłe krawędzie i jakby stopiły się ze sobą (jak w zwykłych grach). Oto zrzut ekranu wprowadź opis zdjęcia tutaj

Jak to się osiąga?

KaareZ
źródło
czy wiesz, która to gra? skąd możesz mieć pewność, że to woksele? Ok, znalazłem to sam, gra nazywa się Blockscape: indiedb.com/games/blockscape
Babis
Istnieje blog na procworld.blogspot.com, który zawiera różnego rodzaju szczegółowe posty na blogu o tym, jak powstał jego silnik wokseli. Posty sięgają kilku lat wstecz od momentu, gdy silnik był w powijakach, do chwili, gdy jest obecnie licencjonowany na Everquest Next.
stokastic

Odpowiedzi:

14

Osiąga się to poprzez interpolację ramp między kostkami o różnej wysokości.

Gdy masz taką scenerię (widok z boku)

  #
 ####   ##
############

dodamy wielokąty, aby wyglądało to tak:

 /#\
/####\ /##\
############

Algorytmem do obliczania tych ramp jest algorytm marszowych kostek .

Jeśli chcesz, aby był jeszcze piękniejszy, nie używaj pojedynczych wielokątów do interpolacji między sześcianami, używaj krzywych wielu wielokątów. Pamiętaj jednak, że doda do sceny całkiem sporo wielokątów, więc powinieneś to zrobić tylko dla tych kostek, które znajdują się blisko kamery.

Philipp
źródło
Dziękuję Ci! Czy znasz miejsce, które wyjaśnia, jak to zrobić w OpenGL, lekkiej bibliotece gier Java? Edycja: A jeśli znasz dobrą technikę dodawania wykrywania kolizji w marszowym terenie, to też byłoby to mile widziane.
KaareZ
@KaareZ Przepraszamy, nigdy nie współpracowałem z LWJGL.
Filip
@Filipp możesz być zainteresowany tą odpowiedzią
1
Lub możesz całkowicie pominąć marszową kostkę i przejść do znacznie bardziej interesującego frankpetterson.com/publications/dualcontour/dualcontour.pdf mniej skomplikowanego, możesz także po prostu dodać funkcję szumu jako przesunięcie do wierzchołka końcowego fragmentu. Nadal masz blok, ale teraz mają właściwość toczących się wzgórz, ponieważ nie są ściśle wyrównane w linii prostej ... łącząc podwójne konturowanie i to w celu uzyskania jeszcze bardziej interesującego wyniku (z modyfikatorem przesunięcia wierzchołka, aby kontrolować mniej więcej generację organiczną) .
user29244,
forum.unity3d.com/attachments/captura-jpg.23795 Oto zdjęcie „toczącego się bloku” (przesunięcie zastosowane jako przesunięcie pionowe) Oto więcej zdjęć, ale z przesunięciem zastosowanym w każdym kierunku forum.unity3d.com/attachments/t1- jpg.23871 forum.unity3d.com/attachments/t2-jpg.23872 vimeo.com/27976287
user29244
6

Istnieją dwie przeszkody, z którymi trzeba się zmierzyć, aby osiągnąć podobną jakość, jak ta na zdjęciu, pierwsza jest artystyczna, a druga techniczna (pamięć, przetwarzanie). Najpierw zakładam, że już rozwiązałeś swój problem artystyczny, możesz tworzyć modele, sztukę i shadery itp. (Częściowo dlatego, że nie mogę rozwiązać problemów artystycznych)

Głównym problemem technicznym jest to, że podczas wokselowania modeli stworzonych z wysokim poziomem szczegółowości powstanie ogromna liczba małych wokseli. Przetwarzanie i renderowanie ogromnej liczby wokseli nie jest trywialne. Odpowiedź na to nazywa się Sparse Voxel Octrees

SVO daje możliwość renderowania bardzo szczegółowych modeli bez przetwarzania wszystkich wokseli, ale tylko tych widocznych. Pamiętaj, że aby wyrenderować SVO, będziesz musiał użyć rzutowania promieniowego zamiast zwykłej techniki rasteryzacji.

Więcej informacji na temat SVO w tym dokumencie

Oto open-source z implementacją licencji BSD SVO https://code.google.com/p/efficient-sparse-voxel-octrees/

Oto wideo, które wyjaśnia rendering oparty na wielokącie kontra SVO (zalety i wady).

concept3d
źródło
To jest niesamowite! Spójrz także na sauerbraten.org , używa podobnej techniki (ale nie implementuje marszowych kostek, ta część jest pozostawiona projektantowi poziomów)
Kroltan