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?
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źć:
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.
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 .
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 ...
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.
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.
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.
źródło
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 .
źródło
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 ...
źródło
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).
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.
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.
źródło