Wie rendern 3D-Game-Engines 3D-Umgebungen auf einem 2D-Bildschirm?
9
Bei 2D-Sprite-Spielen kann ich verstehen, dass sich Sprites auf der X- und Y-Achse bewegen. Wie berechnen Game Engines für 3D-Spiele, wie eine 3D-Umgebung auf einem flachen 2D-Computermonitor gerendert wird?
Magic Imps entwerfen das Land und schießen das Bild dann mit ihren Zauberstäben auf den Bildschirm.
Math.PI, viel davon.
Nick Bedford
Antworten:
9
3D-Sprites erhalten eine neue Z-Achse, die Tiefe, Skalierungsgröße und Bewegungen in der X / Y-Ebene speichert. Ein weiter entferntes Sprite hat einen größeren Z-Wert. Teilen Sie nun die Größe des Sprites und die Bewegungen der X / Y-Achse durch die Z-Achse. Wie andere angemerkt haben, handelt es sich um eine perspektivische 3D-Projektion . Hier ist die beste Illustration, die ich finden konnte:
Dies ist konzeptionell sinnvoll, da weiter entfernte Dinge kleiner aussehen. Ihre scheinbaren Bewegungen sehen auch kleiner aus.
Außerdem müssen nahe Objekte über ferne Objekte gezeichnet werden. Auch dies ist konzeptionell sinnvoll, da nahe Objekte die Sicht auf Objekte hinter ihnen verdecken.
Diese Techniken können auf Sprite-Ebene implementiert werden. Für die realistischste Projektion verfügt jedoch jedes Sprite über ein 3D-Modell und wird auf Pixelebene gerendert.
Das Diagramm hat mich gereizt. Ein Bild sagt mehr als tausend Worte.
Kim Jong Woo
17
Es ist ähnlich wie Sie 2D-Bilder unserer Welt vor der Kamera aufnehmen können. Die 3D-Umgebung wird in Form von X-, Y- und Z-Koordinaten beschrieben. Letztendlich müssen Sie diese jedoch auf einen 2D-Bildschirm mit nur X- und Y-Achse abbilden. Dies erfolgt durch Projektion , wobei jeder 3D-Punkt auf eine 2D-Ansichtsebene projiziert wird.
Einfach ausgedrückt können Sie sich Projektionslinien vorstellen, die von der virtuellen Kamera im 3D-Raum zu jedem 3D-Punkt verlaufen, indem Sie durch die Ansichtsebene verlaufen. Der Punkt, an dem eine Projektionslinie die 2D-Ebene schneidet, ist die Projektion des 3D-Punkts. Bei der orthografischen Projektion sind diese Projektionslinien alle parallel; Der Abstand zwischen dem Objekt und der Kamera spielt für die projizierte Form keine Rolle. Diese Art der Projektion ist nicht realistisch, aber in bestimmten Fällen nützlich, z. B. beim Zeichnen von 2D-Grafiken mit einer 3D-Engine (z. B. dem HUD). Die andere Art der Projektion ist die perspektivische Projektion, bei der diese Linien konvergieren, wodurch weiter entfernte Objekte kleiner erscheinen und realistischere Ergebnisse erzielt werden. Diese Seite enthält einige Abbildungen , die Ihnen bei der Visualisierung des Prozesses helfen können.
Die Projektion ist eines von mehreren Transformationsobjekten, die in der Grafikpipeline durchlaufen werden , und wird normalerweise mithilfe einer Projektionsmatrix durchgeführt . Beachten Sie, dass, obwohl die Projektion das Verwerfen der Z-Koordinate impliziert, in der Realität immer noch ein transformierter Z-Wert als Maß für die Bildschirmtiefe verwendet wird, damit wir erkennen können, welche Objekte sichtbar sind und welche von anderen Objekten verdeckt werden. Dies ist als Z-Pufferung bekannt .
Es geht um Projektion , eine geometrische Operation, mit der Sie einen Raum aus einem anderen Raum höherer Dimension definieren können (in Ihrem Fall beschreiben Sie im Grunde ein 2D-Bild aus einer 3D-Umgebung).
Einfach ausgedrückt, so erzeugen 3D-Rendering-Engines ein Bild (bei einer 3D-Szene und einer Projektion):
Für jedes Pixel des resultierenden Bildes
Berechnen Sie die Blickrichtung (gemäß der Projektion), es ist im Grunde ein 3D-Vektor
Suchen Sie das nächste Objekt in Ihrer Szene, das in dieser Richtung "gesehen" wird (raten Sie einfach, welche Objekte mit dem Vektor geschnitten werden, und behalten Sie das nächste bei).
Berechnen Sie die Farbe dieses Objekts, Sie haben die Farbe des Pixels!
Natürlich ist dies ein einfaches Modell, ich spreche nicht von reflektierenden / brechenden / durchscheinenden Objekten mit Spezialeffekten wie Rauch ...
Die Matrix . Oder besser gesagt, viel Matrixmathematik.
Es ist beängstigend für Uneingeweihte. Es gibt normalerweise drei 4x4-Matrizen, die eine Reihe von 3D-Koordinaten im Raum in 2D-Koordinaten auf dem Bildschirm umwandeln (einschließlich der Tiefe des Bildschirms als Z).
3D-Matrizen sind ein Satz von 16 Gleitkommawerten, die in einem 4x4-Raster angeordnet sind. Algorithmen werden verwendet, um die erforderlichen Werte zu erzeugen, und dann transformieren diese Zahlen unter Verwendung einer Matrixvektormultiplikation einen dreidimensionalen Vektor (X, Y, Z).
[1,0,0,0][0,1,0,0][0,0,1,0][0,0,0,1]
Dies ist die Identitätsmatrix . Es hat im Wesentlichen nichts mit den Koordinaten eines Vektors zu tun .
Modell
Die erste ist die Welt- oder Modellmatrix . Diese Matrix nimmt die Eckpunkte in einem einzelnen Modell (z. B. einer Kiste), das um den Ursprung (0, 0, 0) modelliert ist, und transformiert sie in Weltscheitelpunktkoordinaten. Dies kann das Skalieren des Objekts, das Drehen um seinen Ursprung und das endgültige Übersetzen an die Stelle in der Szene umfassen.
Aussicht
Die zweite Matrix ist die Ansichtsmatrix . Dies nimmt die Weltkoordinaten und transformiert sie so, dass sie sich im Kontext der Ansicht befinden. Das Konzept einer Kamera wird typischerweise verwendet, um diese Matrix zu erzeugen.
Die Kamera enthält gewöhnlich einen Positionsvektor, eine Richtung oder Zielvektor und eine up vector. Dieser Aufwärtsvektor beschreibt den "Spin" der Kamera.
Diese Vektoren werden verwendet, um eine sogenannte Blick auf die Matrix zu erzeugen .
Die Auswirkungen auf diese hat , ist ähnlich die Welt Matrix in der Tatsache , dass es im Wesentlichen dreht , und die Welt zu übersetzen um die Kamera auf „Position“ die Kamera.
Eine Kamera mit 10 Einheiten entlang der X-Achse übersetzt die Weltkoordinaten um 10 Einheiten in die andere Richtung.
Projektion
Das letzte Puzzleteil ist die Projektionsmatrix . Bei einer kameraähnlichen perspektivischen Projektion transformiert die Matrix die fast Bildschirmkoordinaten, um die Illusion einer Perspektive mit einem Sichtfeld von x Grad zu erzeugen.
Wenn Sie in Ecken des Bildschirms denken (für ein 640x480-Spiel), "richtet" die Projektion die Koordinaten entlang der Z-Achse innerhalb der 2D-Koordinaten des Bildschirms aus. Bei der orthografischen Projektion erfolgt keine Skalierung entlang der Z-Achse in den Bildschirm. Je weiter das Objekt entfernt ist, desto kleiner wird es in Bezug auf die Ausdehnung des Bildschirms.
Math.PI
, viel davon.Antworten:
3D-Sprites erhalten eine neue Z-Achse, die Tiefe, Skalierungsgröße und Bewegungen in der X / Y-Ebene speichert. Ein weiter entferntes Sprite hat einen größeren Z-Wert. Teilen Sie nun die Größe des Sprites und die Bewegungen der X / Y-Achse durch die Z-Achse. Wie andere angemerkt haben, handelt es sich um eine perspektivische 3D-Projektion . Hier ist die beste Illustration, die ich finden konnte:
Dies ist konzeptionell sinnvoll, da weiter entfernte Dinge kleiner aussehen. Ihre scheinbaren Bewegungen sehen auch kleiner aus.
Außerdem müssen nahe Objekte über ferne Objekte gezeichnet werden. Auch dies ist konzeptionell sinnvoll, da nahe Objekte die Sicht auf Objekte hinter ihnen verdecken.
Diese Techniken können auf Sprite-Ebene implementiert werden. Für die realistischste Projektion verfügt jedoch jedes Sprite über ein 3D-Modell und wird auf Pixelebene gerendert.
quelle
Es ist ähnlich wie Sie 2D-Bilder unserer Welt vor der Kamera aufnehmen können. Die 3D-Umgebung wird in Form von X-, Y- und Z-Koordinaten beschrieben. Letztendlich müssen Sie diese jedoch auf einen 2D-Bildschirm mit nur X- und Y-Achse abbilden. Dies erfolgt durch Projektion , wobei jeder 3D-Punkt auf eine 2D-Ansichtsebene projiziert wird.
Einfach ausgedrückt können Sie sich Projektionslinien vorstellen, die von der virtuellen Kamera im 3D-Raum zu jedem 3D-Punkt verlaufen, indem Sie durch die Ansichtsebene verlaufen. Der Punkt, an dem eine Projektionslinie die 2D-Ebene schneidet, ist die Projektion des 3D-Punkts. Bei der orthografischen Projektion sind diese Projektionslinien alle parallel; Der Abstand zwischen dem Objekt und der Kamera spielt für die projizierte Form keine Rolle. Diese Art der Projektion ist nicht realistisch, aber in bestimmten Fällen nützlich, z. B. beim Zeichnen von 2D-Grafiken mit einer 3D-Engine (z. B. dem HUD). Die andere Art der Projektion ist die perspektivische Projektion, bei der diese Linien konvergieren, wodurch weiter entfernte Objekte kleiner erscheinen und realistischere Ergebnisse erzielt werden. Diese Seite enthält einige Abbildungen , die Ihnen bei der Visualisierung des Prozesses helfen können.
Die Projektion ist eines von mehreren Transformationsobjekten, die in der Grafikpipeline durchlaufen werden , und wird normalerweise mithilfe einer Projektionsmatrix durchgeführt . Beachten Sie, dass, obwohl die Projektion das Verwerfen der Z-Koordinate impliziert, in der Realität immer noch ein transformierter Z-Wert als Maß für die Bildschirmtiefe verwendet wird, damit wir erkennen können, welche Objekte sichtbar sind und welche von anderen Objekten verdeckt werden. Dies ist als Z-Pufferung bekannt .
quelle
Es geht um Projektion , eine geometrische Operation, mit der Sie einen Raum aus einem anderen Raum höherer Dimension definieren können (in Ihrem Fall beschreiben Sie im Grunde ein 2D-Bild aus einer 3D-Umgebung).
Einfach ausgedrückt, so erzeugen 3D-Rendering-Engines ein Bild (bei einer 3D-Szene und einer Projektion):
Für jedes Pixel des resultierenden Bildes
Natürlich ist dies ein einfaches Modell, ich spreche nicht von reflektierenden / brechenden / durchscheinenden Objekten mit Spezialeffekten wie Rauch ...
quelle
Die Matrix . Oder besser gesagt, viel Matrixmathematik.
Es ist beängstigend für Uneingeweihte. Es gibt normalerweise drei 4x4-Matrizen, die eine Reihe von 3D-Koordinaten im Raum in 2D-Koordinaten auf dem Bildschirm umwandeln (einschließlich der Tiefe des Bildschirms als Z).
3D-Matrizen sind ein Satz von 16 Gleitkommawerten, die in einem 4x4-Raster angeordnet sind. Algorithmen werden verwendet, um die erforderlichen Werte zu erzeugen, und dann transformieren diese Zahlen unter Verwendung einer Matrixvektormultiplikation einen dreidimensionalen Vektor (X, Y, Z).
Dies ist die Identitätsmatrix . Es hat im Wesentlichen nichts mit den Koordinaten eines Vektors zu tun .
Modell
Die erste ist die Welt- oder Modellmatrix . Diese Matrix nimmt die Eckpunkte in einem einzelnen Modell (z. B. einer Kiste), das um den Ursprung (0, 0, 0) modelliert ist, und transformiert sie in Weltscheitelpunktkoordinaten. Dies kann das Skalieren des Objekts, das Drehen um seinen Ursprung und das endgültige Übersetzen an die Stelle in der Szene umfassen.
Aussicht
Die zweite Matrix ist die Ansichtsmatrix . Dies nimmt die Weltkoordinaten und transformiert sie so, dass sie sich im Kontext der Ansicht befinden. Das Konzept einer Kamera wird typischerweise verwendet, um diese Matrix zu erzeugen.
Die Kamera enthält gewöhnlich einen Positionsvektor, eine Richtung oder Zielvektor und eine up vector. Dieser Aufwärtsvektor beschreibt den "Spin" der Kamera.
Diese Vektoren werden verwendet, um eine sogenannte Blick auf die Matrix zu erzeugen .
Die Auswirkungen auf diese hat , ist ähnlich die Welt Matrix in der Tatsache , dass es im Wesentlichen dreht , und die Welt zu übersetzen um die Kamera auf „Position“ die Kamera.
Eine Kamera mit 10 Einheiten entlang der X-Achse übersetzt die Weltkoordinaten um 10 Einheiten in die andere Richtung.
Projektion
Das letzte Puzzleteil ist die Projektionsmatrix . Bei einer kameraähnlichen perspektivischen Projektion transformiert die Matrix die fast Bildschirmkoordinaten, um die Illusion einer Perspektive mit einem Sichtfeld von x Grad zu erzeugen.
Wenn Sie in Ecken des Bildschirms denken (für ein 640x480-Spiel), "richtet" die Projektion die Koordinaten entlang der Z-Achse innerhalb der 2D-Koordinaten des Bildschirms aus. Bei der orthografischen Projektion erfolgt keine Skalierung entlang der Z-Achse in den Bildschirm. Je weiter das Objekt entfernt ist, desto kleiner wird es in Bezug auf die Ausdehnung des Bildschirms.
quelle