W jaki sposób silniki gier 3D renderują środowiska 3D na ekran 2D?

9

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?

Kim Jong Woo
źródło
18
Matematyka, dużo.
spowolniłaviar
3
Magic Imps projektują ziemię, a następnie strzelają obrazem na ekran za pomocą magicznych różdżek.
Math.PI, dużo tego.
Nick Bedford

Odpowiedzi:

10

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źć:

wprowadź opis zdjęcia tutaj

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.

Leftium
źródło
2
Diagram mi się przydał. Obraz jest wart tysiąca słów.
Kim Jong Woo,
17

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 .

Firas Assaad
źródło
5

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

  • Oblicz kierunek patrzenia (zgodnie z projekcją), to w zasadzie wektor 3D
  • Znajdź najbliższy obiekt w scenie, który jest „widoczny” w tym kierunku (po prostu zgadnij, które obiekty są przecięte z wektorem i zachowaj najbliższy)
  • Oblicz kolor tego obiektu, masz kolor piksela!

Oczywiście jest to prosty model, nie mówię o obiektach odblaskowych / refrakcyjnych / półprzezroczystych o efektach specjalnych, takich jak dym ...

Takhiarel
źródło
2

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.


Model

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.


Widok

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.

wprowadź opis zdjęcia tutaj

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.


Występ

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.

wprowadź opis zdjęcia tutaj

Nick Bedford
źródło