Jak zrobić „opadający” teren 3D, taki jak Animal Crossing?

15

Animal Crossing ma unikalny sposób przewijania mapy świata: gdy postać porusza się w dół, świat toczy się w kółko na górze, jakby przykleił się do tekturowej tuby:

Animal Crossing to świat cylindrów

Ten film pokazuje, jak się porusza.

Jak mogę stworzyć ten efekt?

Chris
źródło
1
Nie wygląda mi to na efekt, wygląda jak bardzo prosty świat 3D, za którym podąża kamera.
James
Hakowanie gry może spowodować kolizję, która pozwala wejść do oceanu, gdzie kończy się świat. Możesz zobaczyć fragmenty świata „wygięte do tyłu” w pustce za krańcem świata. Wideo tutaj .
Anko

Odpowiedzi:

6

Po zagraniu Deathspank eksperymentowałem trochę, co ma podobny efekt. Chociaż nigdy nie zagłębiłem się w to wystarczająco, aby sprawdzić, czy można go dostroić, aby działał bardzo dobrze, jedną z możliwości jest po prostu modyfikowanie elementów w module cieniującym wierzchołków na podstawie głębokości. Działa funkcja mapowania cos (głębokość) na modyfikację osi Y. Możesz to ustawić tak, aby świat nie tylko opadał w oddali, ale także, jeśli był bliżej niż na pewnej głębokości, dzięki czemu świat jest wyjątkowo okrągły. Możesz zrobić to samo dla wartości osi X, aby wyglądała na bardziej kulistą. Nie jestem pewien, czy tak właśnie robią takie gry; moje eksperymenty dały niezadowalające wyniki, ale nie bawiłem się zbytnio stosunkami, więc może to być tak proste, jak zmiana tempa wypadania, aby było lepiej.

Sean Middleditch
źródło
+1, ponieważ tak bym to zrobił. Możesz jednak wyjaśnić, co rozumiesz przez „głębokość”. Może to być odległość od kamery lub odległość od postaci. Myślę, że dobrze byłoby z nimi eksperymentować.
DaleyPaley
Przepraszam za spóźnienie na imprezę - jak 6 lat spóźnienie - ale w przypadku AC „głębokość” jest obliczana na podstawie odległości od kamery ... ale ponieważ pozycja kamery jest oparta na pozycji postaci, wszystko jest trochę połączony.
lvictorino
5

Wygląda na to, że po prostu bierze „płaski świat” i odwzorowuje na współrzędne cylindryczne . Zasadniczo owijanie świata w cylinder. Zrobiłem coś podobnego z płaskim światem, ale owinąłem to kulą:

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Sposób, w jaki to zrobiłem dla kuli, jest podobny do tego, w jaki zrobiłbyś to dla cylindra. Wybierz odpowiedni promień (ρ lub „rho” we współrzędnych cylindrycznych) dla swojego świata. Dla każdego wierzchołka weź współrzędne XZ swojego świata (zakładając, że Y jest wysokością), a następnie ukryj się do współrzędnych cylindrycznych, używając XZ i promienia plus Y. Jeśli nie dodasz Y, otrzymasz płaski cylinder. Następnie wróć do współrzędnych kartezjańskich, aby narysować grę.

MichaelHouse
źródło
3
Inną rzeczą, o której należy wspomnieć, wymiar Y świata w Animal Crossing jest znacznie większy niż obwód cylindra (wystarczy spojrzeć na niego, ponieważ linia horyzontu jest bardzo blisko). Dlatego część mapy świata jest przycinana tylko do obszarów najbliższych postaci i ten przycięty obszar jest owijany wokół całego cylindra. Jest to podobne do przycinania opartej na kafelkach mapy 2D tylko do widocznych części.
ChrisC
Doskonały punkt Wyobrażam sobie, że można by to również wykorzystać do utrzymania małego obszaru pamięci poprzez ładowanie / rozładowywanie świata w razie potrzeby.
MichaelHouse
5

Chcesz przejść ze świata płaskiego do cylindrycznego.

Obrót wokół osi x (w jednorodnych współrzędnych) wygląda następująco:

     | 1   0   0   0 |
Rx = | 0  ca  -sa  0 |
     | 0  sa   ca  0 |
     | 0   0    0  1 |

Gdzie:

ca = cos(angle) and sa = sin(angle)

Aby obliczyć kąt, spójrz na obraz. Pi / 2 anuluje się, a Ty pozostaniesz z:

angle = offset_from_character.z - radius

Spójrz również na obraz. Kąt rzutowanego punktu zależy od poziomej odległości od znaku, odległość od kuli zależy od pionu.

new_position = character_position - vec3(0,radius,0) + Rx * vec3(0,radius+_old_position.y,0)

pamiętajcie, aby zabić rzeczy, które są nad horyzontem, w przeciwnym razie cały świat się zawinie.

Oświadczenie: Nie testowałem tego i nie jestem ekspertem w dziedzinie matematyki, ale odpowiedź brzmi mniej więcej tak. Niech ktoś mnie poprawi, jeśli się mylę.

sferyczny świat

DaleyPaley
źródło