W przypadku gier sprite 2D mogę zrozumieć, że duszki poruszają się na osi X i Y. Jednak w przypadku gier 3D, w jaki sposób silniki gier obliczają sposób renderowania środowiska 3D na płaskim monitorze komputerowym 2D?
Math.PI
, dużo tego.
W przypadku gier sprite 2D mogę zrozumieć, że duszki poruszają się na osi X i Y. Jednak w przypadku gier 3D, w jaki sposób silniki gier obliczają sposób renderowania środowiska 3D na płaskim monitorze komputerowym 2D?
Math.PI
, dużo tego.
Odpowiedzi:
Duszki 3D otrzymują nową oś Z, która przechowuje głębokość, rozmiar skalowania i ruchy w płaszczyźnie X / Y. Duszek, który jest dalej, ma większą wartość Z. Teraz podziel rozmiar duszka i ruchy osi X / Y przez oś Z. Jak zauważyli inni, jest to rzut perspektywiczny 3D . Oto najlepsza ilustracja, jaką mogłem znaleźć:
Ma to sens koncepcyjny, ponieważ rzeczy znajdujące się dalej wyglądają na mniejsze. Ich pozorne ruchy również wyglądają na mniejsze.
Ponadto obiekty znajdujące się w pobliżu należy narysować na obiektach dalekich. Ponownie, ma to sens koncepcyjny, ponieważ w pobliżu obiektów przesłania się widok obiektów znajdujących się za nimi.
Te techniki można wdrożyć na poziomie duszka. Jednak dla najbardziej realistycznej projekcji każdy duszek ma model 3D i jest renderowany na poziomie pikseli.
Przypomina to sposób robienia zdjęć 2D naszego świata za pomocą aparatu. Środowisko 3D jest opisane w kategoriach współrzędnych X, Y i Z, ale ostatecznie musisz odwzorować to na ekran 2D z tylko osią X i Y. Odbywa się to przez rzutowanie , w którym każdy punkt 3D jest rzutowany na płaszczyznę widoku 2D.
Mówiąc najprościej, można sobie wyobrazić linie projekcyjne przechodzące z wirtualnej kamery w przestrzeni 3D do każdego punktu 3D, przechodząc przez płaszczyznę widoku. Punkt, w którym linia projekcji przecina płaszczyznę 2D, jest rzutem punktu 3D. W rzucie ortograficznym wszystkie te linie rzutowania są równoległe; odległość między obiektem a kamerą nie ma znaczenia dla rzutowanego kształtu. Ten typ projekcji nie jest realistyczny, ale jest użyteczny w niektórych przypadkach, takich jak rysowanie grafiki 2D za pomocą silnika 3D (na przykład HUD). Innym rodzajem projekcji jest rzut perspektywiczny, w którym linie te zbiegają się, dzięki czemu bardziej odległe obiekty wydają się mniejsze i dają bardziej realistyczne wyniki. Ta strona zawiera kilka liczb, które mogą pomóc w wizualizacji procesu.
Rzutowanie jest jednym z kilku obiektów transformacji przechodzących w potoku graficznym i zwykle odbywa się za pomocą macierzy rzutowania . Zauważ, że chociaż rzutowanie oznacza odrzucenie współrzędnej Z, w rzeczywistości przekształcona wartość Z jest nadal stosowana do pomiaru głębokości ekranu, abyśmy mogli stwierdzić, które obiekty są widoczne, a które są zasłonięte przez inne obiekty. Jest to znane jako bufor z .
Chodzi o projekcję , operację geometryczną, która pozwala zdefiniować przestrzeń z innej przestrzeni o wyższym wymiarze (w twoim przypadku opisujesz obraz 2D ze środowiska 3D).
Krótko mówiąc, w ten sposób silniki renderujące 3D generują obraz (na podstawie sceny 3D i projekcji):
Dla każdego piksela wynikowego obrazu
Oczywiście jest to prosty model, nie mówię o obiektach odblaskowych / refrakcyjnych / półprzezroczystych o efektach specjalnych, takich jak dym ...
Matryca . A raczej dużo matematyki matematycznej.
To przerażające rzeczy dla niewtajemniczonych. Zazwyczaj trzy matryce 4x4 biorą udział w przekształcaniu wiązki współrzędnych 3D w przestrzeni w współrzędne 2D na ekranie (w tym głębokość w ekranie jako Z).
Matryce 3D to zestaw 16 wartości zmiennoprzecinkowych ułożonych w siatkę 4x4. Algorytmy są używane do generowania wymaganych wartości, a następnie przy użyciu mnożenia macierzy-wektora liczby te przekształcają trójwymiarowy wektor (X, Y, Z).
[ 1, 0, 0, 0 ]
[ 0, 1, 0, 0 ]
[ 0, 0, 1, 0 ]
[ 0, 0, 0, 1 ]
To jest matryca tożsamości . Zasadniczo nie robi nic ze współrzędnymi wektora.
Pierwszy to macierz światowa lub modelowa . Ta macierz pobiera wierzchołki w indywidualnym modelu (takim jak skrzynia) modelowanym wokół początku (0, 0, 0) i przekształca je we współrzędne wierzchołków świata. Może to obejmować skalowanie obiektu, obracanie go wokół jego początku i wreszcie przeniesienie go do miejsca, w którym znajduje się na scenie.
Druga matryca to matryca widoków . To bierze współrzędne świata i przekształca je tak, aby były w kontekście widoku. Koncepcja kamery jest zwykle używana do generowania tej matrycy.
Aparat zwykle zawiera wektor pozycji, wektor kierunku lub celu oraz wektor w górę . Ten wektor do góry opisuje „obrót” aparatu.
Wektory te służą do generowania tak zwanego spojrzenia na macierz.
Wpływ ten jest podobny do matrycy świata , ponieważ zasadniczo obraca on świat i przemieszcza go wokół kamery, aby „ustawić” kamerę.
Kamera, która ma 10 jednostek wzdłuż osi X, przetłumaczy współrzędne świata o 10 jednostek w przeciwnym kierunku.
Ostatnim elementem układanki jest matryca projekcyjna . W rzutowaniu perspektywicznym podobnym do kamery matryca przekształca prawie współrzędne ekranu, dając iluzję perspektywy o polu widzenia x stopni.
Jeśli myślisz w kategoriach narożników ekranu (w przypadku gry 640x480), w ten sposób rzut „wyrównuje” współrzędne wzdłuż osi Z w obrębie współrzędnych 2D ekranu. W przypadku projekcji ortograficznej skalowanie nie odbywa się wzdłuż osi Z na ekranie. Dla perspektywy, im dalej obiekt, tym mniejszy staje się w stosunku do zasięgu ekranu.