Kamera: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Florian (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Wernerj (Diskussion | Beiträge)
veraltete MSDN Link entfernt
 
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Stub}}
{{Review}}


Kameras in Computerspielen bestimmen aus welcher Sicht die Spieler die virtuelle Welt eines Spiels erleben. Sie entscheiden wie die Spielwelt auf den Monitor gerendert wird. Dazu gibt es eine ganze Reihe von verschiedenen Kameratypen und Verhaltensweisen die für verschiedene Arten von Spielen oder zum Erzeugen verschiedener Effekte verwendet werden. Neben der Betrachter-Perspektive gehört dazu unter anderem auch die Art und Weise wie die Kamera auf Benutzereingaben oder andere Spielelemente reagiert.
Kameras in Computerspielen bestimmen aus welcher Sicht die Spieler die virtuelle Welt eines Spiels erleben. Sie entscheiden wie die Spielwelt auf den Monitor gerendert wird. Dazu gibt es eine ganze Reihe von verschiedenen Kameratypen und Verhaltensweisen die für verschiedene Arten von Spielen oder zum Erzeugen verschiedener Effekte verwendet werden. Neben der Betrachter-Perspektive gehört dazu unter anderem auch die Art und Weise wie die Kamera auf Benutzereingaben oder andere Spielelemente reagiert.
Zeile 51: Zeile 51:
; Field of View
; Field of View
: Das field of View (kurz: FOV) bezieht sich auf den Winkel zwischen der oberen und unteren Grenze des View Frustums. Damit bestimmt es die Höhe der projizierten Sicht auf die Spielwelt.
: Das field of View (kurz: FOV) bezieht sich auf den Winkel zwischen der oberen und unteren Grenze des View Frustums. Damit bestimmt es die Höhe der projizierten Sicht auf die Spielwelt.
{{BA|Florian|TODO: View- und Projection Matrix hier mit aufnehmen und erklären}}


<br clear="All">
<br clear="All">
Zeile 60: Zeile 62:
[[Datei:orthographic_camera_presentation.jpg|thumb|250px|Typische Orthographische Kameradarstellung: Super Mario World von Nintendo]]
[[Datei:orthographic_camera_presentation.jpg|thumb|250px|Typische Orthographische Kameradarstellung: Super Mario World von Nintendo]]


Der Name der 2D Darstellung kommt von der verwendeten Projektion beim Renderprozess, typischerweise eine parallele orthographische Projektion. Bei dieser Art der Projektion bleiben parallele Linien parallel, was bei einer perspektifischen Projektion nicht der Fall ist. Durch das Verwenden verschiedener Ebenen lässt sich auch hier ein Eindruck von Tiefe erzeugen.
Der Name der 2D Darstellung kommt von der verwendeten Projektion beim Renderprozess, typischerweise eine parallele orthographische Projektion. Bei dieser Art der Projektion bleiben parallele Linien parallel, was bei einer perspektivischen Projektion nicht der Fall ist. Durch das Verwenden verschiedener Ebenen lässt sich auch hier ein Eindruck von Tiefe erzeugen.


<br clear="All">
<br clear="All">


=== Perspektifische Darstellung (3D-Kamera) ===
=== Perspektivische Darstellung (3D-Kamera) ===


[[Datei:camera_perspective_projection.png|thumb|250px|Typische dreidimensionale perspektifische Projektion]]
[[Datei:camera_perspective_projection.png|thumb|250px|Typische dreidimensionale perspektifische Projektion]]


Die meisten Spiele verwenden eine Darstellungsart, die eine dreidimensionale Sicht der Spielwelt in einer Art simuliert, die der menschlichen optischen Wahrnehmung sehr ähnlich ist. Dies wird durch eine perspektifische Projektion ermöglicht, bei der parallele Linien so gerendert werden, dass sie in Fluchtpunkten zusammenlaufen. Diese Art der Projektion erzeugt beim Abbilden von Punkten der Spielwelt auf eine flache Ebene Verzerrungen die von der Position des Betrachters, also der Kamera, abhängig sind.
Die meisten Spiele verwenden eine Darstellungsart, die eine dreidimensionale Sicht der Spielwelt in einer Art simuliert, die der menschlichen optischen Wahrnehmung sehr ähnlich ist. Dies wird durch eine perspektivische Projektion ermöglicht, bei der parallele Linien so gerendert werden, dass sie in Fluchtpunkten zusammenlaufen. Diese Art der Projektion erzeugt beim Abbilden von Punkten der Spielwelt auf eine flache Ebene Verzerrungen die von der Position des Betrachters, also der Kamera, abhängig sind.


<br clear="All">
<br clear="All">


=== Hybride Darstellung (2.5D-Kamera) ===
=== Hybride Darstellung (2.5D-Kamera) ===
Zeile 79: Zeile 80:
Der Unterschied in der Darstellung zu einem rein zweidimensionalen Ansatz ist der, dass einige Elemente eine dreidimensionale Ansicht simulieren, obwohl das Spiel hauptsächlich als eine orthographische Projektion dargestellt wird. Dies können Spielobjekte oder auch genauso Teile des Hintergrunds sein.
Der Unterschied in der Darstellung zu einem rein zweidimensionalen Ansatz ist der, dass einige Elemente eine dreidimensionale Ansicht simulieren, obwohl das Spiel hauptsächlich als eine orthographische Projektion dargestellt wird. Dies können Spielobjekte oder auch genauso Teile des Hintergrunds sein.


Die am häufigsten verwendete parallele Projektion zum Erzeugen von peuso-dreidimensionalen Ansichten ist die isometrische Projektion. Diese Projektion gibt eine pseudo 3D-Ansicht der Welt, wobei oft vorgerenderte Hintergrundgrafiken mit vorgerenderten oder dynamisch gerenderten Sprites kombiniert werden, welche zur selben Projektion passen. Die isometrische Projektion wird oft aufgrund dieser Illusion der Tiefe als 2.5D bezeichnet.
Die am häufigsten verwendete parallele Projektion zum Erzeugen von peuso-dreidimensionalen Ansichten ist die isometrische Projektion. Diese Projektion gibt eine pseudo 3D-Ansicht der Welt, wobei oft vorgerenderte Hintergrundgrafiken mit vorgerenderten oder dynamisch gerenderten Sprites kombiniert werden, welche zur selben Projektion passen. Die isometrische Projektion wird aufgrund dieser Illusion der Tiefe oft als 2.5D bezeichnet.


<br clear="All">
<br clear="All">
Zeile 106: Zeile 107:


=== Third Person Cameras ===
=== Third Person Cameras ===
[[Datei:third_person_camera.jpg|thumb|250px|Beispiel für eine Third Person Kamera: Tomb Raider Underworld von Crystal Dynamics]]


Viele 3D Spiele bieten eine Kamera bei der der Ausgangspunkt vom Spielercharakter getrennt ist, für gewöhnlich hinter und über ihm. Diese Art von Kamera wird typischerweise als Third Person Kamera bezeichnet, da die Sicht auf die Spielwelt von einer Position aus präsentiert wird, die ausserhalb der Repräsentation des Spielers in der Spielwelt liegt.
Viele 3D Spiele bieten eine Kamera bei der der Ausgangspunkt vom Spielercharakter getrennt ist, für gewöhnlich hinter und über ihm. Diese Art von Kamera wird typischerweise als Third Person Kamera bezeichnet, da die Sicht auf die Spielwelt von einer Position aus präsentiert wird, die ausserhalb der Repräsentation des Spielers in der Spielwelt liegt.
Zeile 123: Zeile 126:
Third Person Kamera ist der Oberbegriff für die Mehrheit der in Spielen oder Filmsequenzen verwendeten Kameras. Sie bieten daher eine Vielfalt an unterschiedlichen Positionierungs- und Orientierungsverhalten. Es folgt eine Übersicht über verbreitete Implementierungen:
Third Person Kamera ist der Oberbegriff für die Mehrheit der in Spielen oder Filmsequenzen verwendeten Kameras. Sie bieten daher eine Vielfalt an unterschiedlichen Positionierungs- und Orientierungsverhalten. Es folgt eine Übersicht über verbreitete Implementierungen:
* '''Hinter dem Charakter:''' Die Position der Kamera ist mit der Orientierung des Spielecharakters verknüpft (meist über und hinter dem Charakter um zu verhindern dass er die Sicht auf die Spielwelt verdeckt).
* '''Hinter dem Charakter:''' Die Position der Kamera ist mit der Orientierung des Spielecharakters verknüpft (meist über und hinter dem Charakter um zu verhindern dass er die Sicht auf die Spielwelt verdeckt).
* '''Über der Schulter:''' Die Kamera wird so positioniert dass sie eine Sicht über die Schulter des Spielecharakters zeigt, meist mit geringer oder gar keiner Verzögerung bei der Orientierung. Dieser Ansatz wird oft in hybriden first person/third person Präsentationsarten verwendet um beim Zielen zu helfen.
* '''Sichtbare Füße:''' Die Kamera wird so weit vom Spielecharakter entfernt dass die Animationen noch gut sichtbar sind und gleichzeitig eine gute Sicht auf die Umgebung gegeben ist. Dies schließt die Möglichkeit ein die Füße des Charakters sehen zu können, was oft wichtig ist um Sprünge oder andere Positionierungen einschätzen zu können. Dies ist prinzipiell ein Spezialfall der "Hinter dem Charakter" Kamera.
* '''Weite Entfernung:''' Die Kamera befindet sich weit hinter dem Spielcharakter. Dieser Ansatz ist stark von der Spielumgebung abhängig, da Verdeckungen für gewöhnlich vermieden werden sollen, und ist eine gängige Lösung für Rennspiele. Die Orientierung der Kamera ist gegenüber der Bewegung des Spielers oft stark verzögert um rasche Neuausrichtungen zu vermeiden und um es zu Ermöglichen den Charakter als dreidimensional zu sehen.
* '''Charakter Bezogen:''' Die Kamera behält ihre Position relativ zu der des Spielcharakters. Wird oft für Replay-Kameras verwendet. Beispiele sind nach Hinten oder zur Seite gerichtete Kameras (bei Flugsimulatoren) oder Stoßstangenkameras (bei Rennspielen).
* '''Stationär:''' Die Kamera ist an einem günstigen (meist hohen) Ausgangspunkt positioniert und unbeweglich. Um den Spielecharakter oder andere Zielobjekte in der Sicht zu behalten wird lediglich die Orientierung angepasst.
* '''Pfad-basiert:''' Die Kamera ist darauf beschränkt einem vordefinierten Pfad durch die Umgebung zu folgen.
<br clear="All">


=== Hybrid Cameras ===
=== Hybrid Cameras ===
[[Datei:hybrid_camera.jpg|thumb|250px|Beispiel für eine Hybride Kamera: Dead Space von EA Redwood Shores]]
Manche Spiele versuchen die ästhetischen Qualitäten von First Person Kameras zu verbessern, indem sie den Charakter von einer externen Position zeigen, dabei aber die Kontrolle und die Bestimmung der Orientierung von First Person Kameras beibehalten. Meist wird die Kamera dazu nahe der Schultern des Protagonisten positioniert, die exakte Position kann aber abhängig von den Anforderungen des Spiels auch variieren. Manche Spiele verwenden auch eine gewöhnliche Third Person Kamera bis der Spieler eine Waffe zieht oder in einen "Zielmodus" wechselt, erst dann wird die Kamera näher an den Spielecharakter bewegt. Die Kamerasicht könnte genauso auch verändert werden um dem Spieler eine Interaktion mit Elementen der Spielwelt zu ermöglichen. Eine ähnliche Positionsänderung (oder sogar der Wechsel in eine First Person Kamera) kann bei Third Person Kameras auch verwendet werden wenn der Spieler rückwärts mit einem Teil der Spielwelt kollidiert. Dadurch kann das Eindringen der Kamera in andere Objekte vermieden werden und auch das Gameplay verbessert werden.
Hybride Ansätze sind eine interessante Herangehensweise um das Problem von Interaktionen auf weite Distanzen, welches bei Third Person Kameras oft auftritt, zu lösen. Ein weiterer Vorteil ist dass sie das Eintauchen des Spielers in die Spielwelt verbessern, wenn auch nur bis zu einem bestimmten Grad da die Sicht immernoch ausserhalb des Spielecharakters liegt. Die Bewegung der Kamera ist im Gegensatz zu traditionellen Third Person Kameras ein kleineres Problem, vor allem wenn die Position der Kamera innerhalb des Kollisionsradius des Spielecharakters bleibt. Verzögerungen bei der Positionierung um den Spielecharakter und bei der Orientierung können weiterhin angewendet werden.
<br clear="All">


== Die Bilderstellung ==
== Die Bilderstellung ==
Der Prozess der Bilderstellung wird auch als "Rendering Pipeline" bezeichnet. Sie lässt sich grob in feste Schritte aufteilen. In Abhängigkeit von der verfügbaren Grafikhardware können manche dieser Schritte parallel zur regulären Spiellogik oder auch parallel auf der Grafikhardware selbst ausgeführt werden.
# Die Spiellogik aktualisiert den internen Zustand aller aktiven Speilobjekte. Dazu gehört die Bestimmung der Position, der Orientierung, von Animationen oder andere Informationen die zur Repräsentation des zu erstellenden Objekts gehören.
# Die Logiken der Spielkameras werden aktualisiert um sicherzustellen dass ihre Positionen, Orientierungen und anderen Eigenschaften die die Bilderstellung beeinflussen auf dem aktuellen Stand sind.
# Für jede zu generierende Sicht auf das Spiel:
## Bestimme die Position und Orientierung der erforderlichen Spielkamera.
## Bestimme den Anteil des Anzeigegeräts der die zu erstellende Ansicht beinhalten wird (dies entspricht dem Viewport).
## Bestimme das Sichtvolumen bzw. das View Frustum, welches den Anteil der Welt bestimmt der von der Kameraposition und Orientierung aus sichtbar ist.
## Bestimme, anhand des View Frustums, welche Spielobjekte oder Elemente beim Rendern einfach weggelassen werden können. Dieser Vorgang wird auch als Culling bezeichnet.
## Für jedes darzustellende Spielobjekt oder Weltelement:
### Transformiere das Spielmodel (also die geometrischen Primitive die seine Form bestimmen, bei Spielen meistens Dreiecke) bezüglich der Kamera Sicht (also vom Object-Space in den Camera-Space).
### Füge Licht- und Schatteneffekte hinzu.
### Projiziere die Primitive vom dreidimensionalen Raum auf eine zweidimensionale Fläche (die Bildebene der Kamera).
### Verwerfe (sog. Culling) alle projizierten Primitive die außerhalb des sichtbaren Bereichs liegen und schneide die die ihn überkreuzen zurecht (sog. Clipping).
### Zeichne die Primitive. Dies erfolgt bei aktuellen Grafikkarten mittels Rasterisierung.
== Kameraberechnungen in XNA ==
; Berechnung der View Matrix:
<source lang="csharp">
Vector3 position;
Vector3 target;
Vector3 orientation;
Matrix orientationMatrix = Matrix.CreateFromYawPitchRoll(this.orientation.Y, this.orientation.X, this.orientation.Z);
//Berechnung der View Matrix für den Blick auf eine Zielposition
Matrix viewMatrix = Matrix.CreateLookAt(this.position, this.target, Vector3.Up);
//Oder alternativ Berechnung der View Matrix anhand der Orientierung der Kamera
Matrix viewMatrix = Matrix.CreateLookAt(this.position, this.position + this.orientationMatrix.Forward, Vector3.Up);
</source>
; Berechnung der Projection Matrix:
<source lang="csharp">
float fieldOfView;
float aspectRatio;
float nearPlane;
float farPlane;
Matrix projectionMatrix = Matrix.CreatePerspectiveFieldOfView(this.fieldOfView, this.aspectRatio, this.nearPlane, this.farPlane);
</source>
; Berechnung des View Frustums, z.B. zum Cullen nicht sichtbarer Objekte:
<source lang="csharp">
Matrix viewProjectionMatrix = this.viewMatrix * this.projectionMatrix;
BoundingFrustum viewFrustum = new BoundingFrustum(viewProjectionMatrix);
</source>


== Referenzen ==
== Referenzen ==


http://msdn.microsoft.com/en-us/library/bb975157.aspx
# '''Real-Time Cameras: A Guide for Game Designers and Developers''' von Mark Haigh-Hutchinson
 
[[Kategorie:Begriffe]]
[[Kategorie:MS01]]
[[Kategorie:MS02]]
[[Kategorie:MS03]]
[[Kategorie:MS04]]
[[Kategorie:Tutorials]]
Abgerufen von „https://sopranium.de/Kamera