Aby wygenerować teren wokseli
(a) Powszechną metodą jest generowanie mapy wysokości za pomocą szumu Perlina. Mapa wysokości jest w zasadzie obrazem monochromatycznym przedstawiającym różne wysokości przez ciemność lub jasność pikseli.
Na tej mapie wysokości będziesz patrzył na poszczególne piksele, aby utworzyć „stosy” wokseli do różnych wysokości (oś Z) w różnych lokalizacjach (x, y), zgodnie z jasnością tego piksela na obrazie mapy wysokości. Ponieważ obraz szumu Perlina jest gładki (brak ostrych krawędzi światła w stosunku do ciemności), dzięki temu będziesz mieć łagodnie toczący się teren.
(b) Możesz budować go stopniowo, tworząc krajobraz z różnych wielościanów. Utwórz wielościenny kształt wektorowy, który będzie zbliżony do kształtu wokseli, który chcesz. Za pomocą dowolnej metody 3D-punkt-w-wielościanie (najczęściej punkt-wypukły-kadłub) sprawdź, które punkty siatki światowej mieszczą się w tej wielościennej objętości. Na przykład zdefiniuj piramidę w przestrzeni. Po sprawdzeniu każdego punktu w lokalnym obszarze twojego świata względem piramidalnej objętości, będziesz wiedział, które punkty w nim mieszczą się, i możesz ustawić te komórki jako „obecne”, co oznacza, że stają się wokselami, a nie pustą przestrzenią. Masz teraz piramidę woksela w swojej przestrzeni. W ten sposób możesz nadal dodawać kształty, dopóki nie utworzysz terenu.
(c) (Naprawdę to samo co b ) Napisz narzędzie do modelowania. Voxatron pokazuje, jak by to wyglądało. To tylko tworzenie formularzy wokseli w zastępczym świecie (edytor), a następnie importowanie ich do rzeczywistego świata gier. Wierzę, że Voxlap miał pierwszy edytor open source dla wokseli. Możesz umieszczać pojedyncze woksele lub użyć „pędzla” wokseli o różnych kształtach / objętościach, aby narysować woksele w swoim świecie.
Czego potrzebujesz, aby zbudować własną grę opartą na wokselach
Zamieszczam ten odcinek, ponieważ droga wokselowa nie jest łatwa, a przynajmniej nie w chwili obecnej. Ostatnio duzi gracze ponownie przeprowadzają wiele badań w silnikach wokseli, w zakresie renderowania i zastosowań fizycznych.
Prostota może stanowić problem, ponieważ dynamiczne konstruowanie świata z surowych wokseli jest proceduralnym podejściem do konstruowania świata i nie jest z natury proste . Przepraszam, będzie kilka terminów technicznych tutaj. Pisanie silnika wokseli jest dość poważnym przedsięwzięciem i wymaga wiedzy w wielu obszarach rozwoju silnika gry, szczególnie w zakresie koncepcji przestrzennych, a to oznacza zrozumienie matematyki wektorowej 3D, macierzy i rachunku podstawowego do pewnego rozsądnego poziomu.
Powiedziawszy to, twoja „generacja terenu wokselowego” wymaga kontekstu, w którym może działać, ponieważ silniki wokselowe nie są dokładnie rozpowszechnione. Przejdźmy do podstawowego opisu działania silnika wokselowego.
Woksele są podstawowymi elementami budującymi twój świat. Ich pozycje są definiowane przez siatkę 3D (macierz) z indeksowaną liczbą całkowitą, a nie przez ciągłą zmiennoprzecinkową przestrzeń (stosowaną w grach 3D wektorowych). To będą „atomy” waszego świata. Mogą mieć wysokość 3 stóp, jak w grach takich jak Minecraft, lub mogą być mniejsze niż oko twojej wirtualnej postaci, chyba że skupione w dużych ilościach - trochę bardziej jak cząsteczki. Istnieją dwa rodzaje:
- Woksele oparte na siatce sześciennej ( przykład ) - są to nowsze rodzaje, używane dla uproszczenia i łatwe do użycia w połączeniu z nowoczesną technologią graficzną. Używany w grach takich jak MineCrat i Dungeon Keeper.
- Punktowe woksele ( przykład , przykład ) - woksel oryginalny. Każdy z nich jest indywidualnym, zderzalnym punktem w przestrzeni, chociaż może być otoczony kulistą objętością ograniczającą. Są prostsze, więc możesz mieć ich o wiele więcej w swoim świecie, a tym samym możesz je zmniejszyć, co jest ogólnie korzystne. Dwie gry, które je wykorzystały, to Comanche i remake Lords of Midnight z lat 90.
Tak czy inaczej, twoje podejście do manipulowania wokselami w twoim świecie jest prawie takie samo, jak poniżej.
Aby konstruować i przenosić obiekty w twoim świecie, potrzebujesz narzędzi matematycznych wymienionych powyżej. Na przykład, aby utworzyć ścianę: Zbuduj pudełko o odpowiednich wymiarach w przestrzeni 3D, używając wektorów. Użyj matematyki matematycznej, aby przekształcić pole do rotacji i pożądanej pozycji w świecie 3d (w ciągłej przestrzeni wektorowej). W przypadku silnika wokselowego dodatkowym krokiem jest teraz użycie algorytmu punkt-w-wielościanie 3D, aby określić, który z wokseli wchodzi w obróconą przestrzeń.
Zasadniczo w ten sposób konstruujesz większość obiektów w swoim świecie. Poza tym możesz napisać własne narzędzia do „modelowania” postaci w sposób, w jaki można powiedzieć, Maya lub 3DS Max. Ale ponieważ modelujesz swoją postać z wokseli zamiast punktów, krawędzi i ścian, twoje metody będą się zasadniczo różnić. Jeśli zdecydujesz się następnie obrócić te obiekty w swoim świecie, musisz w podobny sposób użyć transformacji macierzowych.
Zniszczalny teren jest tak prosty, jak usunięcie jednego woksela na raz zgodnie z wybraną metodą lub użycie operacji CSG (Constructive Solid Geometry) na dużych objętościach wokseli, aby je usunąć zgodnie z pewną wcześniej określoną objętością; na przykład, jeśli strzelasz wiązką laserową przez skałę, możesz użyć cylindrycznej objętości, aby odjąć woksele tutaj, wiązka strzela przez skałę. CSG jest stosunkowo prostym procesem, w którym wykorzystuje się przestrzenne siatki 3D, które tworzą świat wokseli, i sprawdza każdą komórkę w części siatki bazowej (w tym przypadku skały) względem innej siatki (w tym przypadku wiązki laserowej)
Aby mieć „przepływy” materiałów (jak zauważył Vigil w swoim komentarzu do piasku), musisz przyjrzeć się dynamice płynów i automatom komórkowym. Używał ich autor Dwarf Fortress, Tarn Adams, w gruncie rzeczy także w świecie wokseli (chociaż woksele są w tym przypadku znacznie większe, porównywalne z Dungeon Keeper, zasada pozostaje ta sama). Są to najnowocześniejsze tematy, a nie konieczność definiowania silników wokseli, więc zostawię to jako „odgałęzienie” do własnych badań.
CSG i dynamika płynów doprowadzają mnie wreszcie do optymalizacji. Obecnie opracowywane silniki Voxel prawie wyłącznie wykorzystują rzadkie oktony wokseli (SVO), które są metodą dzielenia przestrzeni wokseli na różne rozdzielczości, o czym świadczy ten film pokazujący nadchodzący silnik Atomontage. Używanie oktetów / SVO jest bardziej koniecznością niż wyborem optymalizacyjnym, ze względu na koszty ogólne przetwarzania związane z przetwarzaniem jednej ogromnej, jednolitej siatki. Oktree jest zasadniczo drzewem (ukierunkowany wykres acykliczny), w którym każdy węzeł ma 8 lub zero węzłów potomnych, w zależności od tego, czy reprezentowana przestrzeń zawiera jakieś woluminy fizyczne. Schematy pokazujące jak octrees dzielące przestrzeń, tworząc woksele są tutaj .
Najlepszą implementacją wokseli, jaką znam, jest silnik Voxlap Kena Silvermana , który został użyty w Voxelstein3D. Jest napisany w C ++ i implementuje operacje CSG na deformację terenu.