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
Jak to się osiąga?
opengl
rendering
voxels
terrain-rendering
KaareZ
źródło
źródło
Odpowiedzi:
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.
źródło
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).
źródło