Obecnie próbuję wygenerować teren Minecraft, taki jak woksel, za pomocą 3D Simplex Noise, a także chcę wdrożyć jaskinie.
W tym wątku znalazłem metodę Perlin Worms , która generuje naprawdę fajne wyniki. Nie mam jednak pojęcia, jak wygenerować go na podstawie porcji. Czy jest to możliwe, czy są jakieś alternatywy, które wytwarzają podobną do robaka jaskinię w kawałkach po kawałku?
Edit: To jest problem, który nie wiem jak rozwiązać.
Edycja2: Jest to wynik połączenia wielopierścieniowego szumu 2D z mapą wysokości hałasu Simplex. Nadal wymaga drobnych poprawek, ale to prawie taki wynik, jaki chciałem. Dzięki Byte56.
terrain
minecraft-modding
voxels
perlin-noise
user000user
źródło
źródło
Odpowiedzi:
Większość algorytmów szumów Perlin pozwala na odzyskanie wartości hałasu w dowolnym miejscu, z czymś podobnym
noise(x,y,z)
. To sprawia, że generowanie hałasu na zasadzie fragmentu po kawałku jest dość proste. Wszystko, co musisz zrobić, to przekazać pozycję globalną zamiast pozycji fragmentu.Jak widać, generujemy teren dla fragmentu, wykonując iteracje ponad granicami fragmentu i sprawdzając, czy ta globalna pozycja jest stała, czy nie. Jest to prawdopodobnie ta sama metodologia, której używasz do generowania terenu w ogóle.
perlinNoise.get
zajmuje pozycję globalną i zwraca swoją gęstość. GdzieisSolid
byłby prosty test, aby sprawdzić, czy woksel jest „wystarczająco gęsty”, aby zakwalifikować się do substancji stałej.perlinNoise.get
może być bardziej złożony niż zwykły algorytm hałasu. Możesz mieć kontrole oparte na głębokości woksela w twoim świecie. Na przykład, jeśli woksel znajduje się poniżej poziomu absolutnego podstawowego podłoża, może użyć algorytmu perlin worms do zwrócenia gęstości, jeśli jest powyżej bezwzględnej podstawy, może użyć funkcji normalnej gęstości, aby uzyskać bardziej zróżnicowany teren. Poleciłbym jednak połączenie tych dwóch elementów.Łączenie różnych funkcji hałasu Perlina to po prostu coś, z czym musisz się bawić i zobaczyć, co działa. Najlepiej jest skonfigurować środowisko, aby można było po prostu zmienić niektóre wartości i zamienić teren bez konieczności ponownego ładowania gry. Miłego eksperymentowania.
źródło
Myślę, że tak to działa w Minecraft. Każdy robak ma maksymalną długość (nazwijmy go
M
). Główki każdego robaka są obliczane na podstawie pozycji porcji. Kiedy renderujesz każdą porcję, musisz sprawdzić wszystkie porcje wM
promieniu i podążać za wszystkimi robakami. Nie jest idealny pod względem wydajności, ale działa.źródło