Perspektive
Zentralprojektion: Festgelegt durch Projektionszentrum (CoP, center of projection)
- Parallele Geraden, die nicht parallel zur Projektionsebene verlaufen, werden auf sich schneidende Geraden abgebildet
- Verzerrte Darstellung von Objekten im Bildraum
- Verkleinerung dargestellter Objekte mit zunehmender Entfernung vom Projektionszentrum
- Vermittlung realistischer Ansichten dreidimensionaler Objekte und Raumeindruck
- Strahlensatz anwendbar

Virtuelle Kamera

View-Transformation
- Kamerastandpunkt (look-from bzw. eye)
- Kamerablickrichtung (look-to bzw. center)
- Aufwรคrtsrichtung (up)
- Transformation des 3D-Welt-Koordinatensystems in das 3D-Kamera-Koordinatensystem

- Translation von in den Ursprung
- Rotation in das Koordinatensystem รผber Orthonormalbasis (LookAt-Transformation):
- Verwendung der inversen -Transformation
- danach ist das Sichtvolumen (Pyramidenstumpf) im Ursprung zentriert und die Look-Richtung verlรคuft entlang der negativen -Achse
Dabei ist
Sonderfรคlle:
- : Falls , berechne z.B. neu durch
- : Falls , betrachte z.B. die frรผheren bzw.
Projection-Transformation
- Projektion auf planare Sicht- oder Bildebene
- Clipping (front / back bzw. near / far clipping pane)
- findet vor der Rasterisierung statt
- reduziert Rendering-Aufwand, indem Objekte nahe an oder hinter der Kamera sowie weit entfernte Objekte ignoriert werden
- Sichtwinkel (width angle bzw. height angle)
- Verhรคltnis von Breite und Hรถhe des Bildes (aspect ratio)

Sichtvolumen (view frustum):
- Konisches Sichtvolument: rund, zu teuer (Lรถsen quadratischer Gleichungen)
- Pyramidensychtvolumen: perspektivische Projektion, Clipping mit 6 Halbebenen
- Rechtwinkliges Sichtvolumen (3D-Block): Parallelprojektion, Clipping mit 6 Halbebenen
- allgemein: durch zwei Halbebenen abgeschnittenes Solid (Clipping)

1. Winkelรคnderung des Sichtvolumens
- Frustum hat รffnungswinkel und sollen auf skaliert werden ( in jede Richtung)
- Dazu Skalierung in - und -Koordinaten (Tiefe bezรผglich der Kamera bleibt unverรคndert)
2. Skalierung des Sichtvolumens
- Far-Clipping-Plane soll bei liegen
- Uniforme Skalierung ( und ), um Proportionen zu erhalten
- Abstand der Near-Clipping-Plane danach:
3. Perspektivische Transformation
- Punktkoordinaten mรผssen entsprechend ihrere Tiefe perspektivisch verkรผrzt werden
- Mittels homogenen Koordinaten: resultierende 2D-Punkte haben eine -Komponente, die bei der Umwandlung in nicht-homogene Koordinaten eine perspektivische Verkรผrzung bewirken
- Sichtbarkeitsermittlung: meist mittels -Buffer mit Wertebereich (DirectX) oder (OpenGL) Tiefenbereich muss entsprechend abgebildet werden
Sei
Ein Punkt wird dadurch abgebildet auf , wobei bei der Umwandlung in nicht-homogene Koordinaten die ersten drei Komponenten durch geteilt werden
- ein Punkt auf der Far-Clipping-Plane () wird dadurch final auf abgebildet
- ein Punkt auf der Near-Clipping-Plane () auf

Gesamttransformation
- sowohl die Teil- als auch die Gesamttransformation lassen sich als -Matrix darstellen
- homogene Koordinaten ermรถglichen Darstellung perspektivischer Verkรผrzung
- perspektivische Transformation ist nicht affin (sie verzerrt das Frustum zu einem Quader)
Transformation des Frustums in den Einheitswรผrfel
- fรผr left, right, top, bottom, near, far
- Punkte mit werden auf abgebildet
- Punkte mit werden auf abgebildet
- OpenGL: spiegelt die -Koordinate, sodass

Normalized Screen Coordinates / Normalized Device Coordinates (NDC)
- Berechnung durch die Umwandlung von homogenen Clip-Koordinaten in nicht-homogene Koordinaten durch die Division mit der -Komponente
- Normalisiert fรผr den Wertebereich
Screen Coordinates:
- Abbildung der NDC auf das Fenster- bzw. Bildkoordinatensystem mit Hilfe der Viewport Transformation
- NDC werden transliert und skaliert, sodass die in den festgelegten Fensterausschnitt passen
- OpenGL legt den Fensterausschnitt mit
glViewport(x, y, width, height)fest - OpenGL legt den zu rendernden Tiefenbereich mit
glDepthRange(z_min, z_max)fest, wobei des Tiefeninterval auf des Interval abgebildet wird (mit Bit Genauigkeit des Depth Buffers) - Die Fensterkoordinaten sind die Grundlage fรผr die anschlieรende Rasterisierung
Transformationspipeline
3D Object Coordinates
- World Transform (Applikations-spezifisch) World Coordinates
- Look at (Vertex Shader) Eye Coordinates
- Projektion (Vertex Shader) Clip Coordinates NDC Coordinates
- Viewport, Depth Range (Fragment Shader) Window Coordinates
- Rasterisierung

Parallele Projektionen

- Festgelegt durch Projektionsrichtung (DOP, direction of projection) | alle Projektionsstrahlen besitzen diese gleiche Richtung
- Erhalten Grรถรen der parallel projizierten Objekte
- Anwendung bei technischen Illustrationen und Ingenieurszeichnungen (z.B. Konstruktionszeichnungen von Maschinen oder Bauzeichnungen)
Hauptrisse:
- Grundriss (top view)
- Aufriss (front view)
- Seitenriss (side view)
Vorteile:
- Genaue Lรคngen- und Winkelmessungen im Bild mรถglich
- Gleicher Maรstab fรผr alle Objekte im Bild
Nachteile:
- keine (photo-)realistische Darstellung fรผr 3D-Objekte und ihre Umgebung
- im Allgemeinen sind mehrere Ansichten notwendig, um einen Raumeindruck zu gewinnen
Transformation:
- Ausgangspunkt bildet die Spezifikation eines rechtwinkligen Sichtvoluments mit Hilfe einer 3D-Bounding-Box:
- es handelt sich um eine Axis-Aligned Bounding Box (AABB)
- Sichtrichtung entlang der negativen -Achse
- Mittels Translation und Skalierung wird die AABB in das kanonische Sichtvolumen mit einer Ausdehnung von bis abgebildet
- Durch die Transformation werden normalized device coordinates, NDC im Bereich bestimmt


Kameramodelle
- First-Person View: aus Sicht eines Objektes
- Third-Person View: direkt hinter einem Objekt
- High-Angle View: รผber einem Objekt, groรer Winkel nach unten
- Wide-View: groรe Entfernung zur Szene, vollstรคndige Sicht, wenige Details
- Birdโs Eye View: schwebt รผber Szene
Eine direkte Kamerakontrolle durch den Nutzer mit allen Freiheitsgraden ist i. Allg. nicht effektiv fรผr die Interaktion.
Z-Buffer
Sichtbarkeitsproblem: Gegeben eine Menge von Szenenobjekten und eine Kameraspezifikation. Entscheide, welche Teile der 3D-Objekte projiziert in der Projektionsebene sichtbar sind
- Annahme: Szenenobjekte sind opak, matt und liegen im Vakuum (z.B. nicht im Nebel)
Objektprรคzise Sichtbarkeitsalgorithmen
- jedes Objekt wir mit allen anderen Objekten z.B. durch 2D-Polygonรผberschneidungstests mit allen anderen Objekten
- Laufzeit bei Szenenobjekten
for(obj in sceneobjects)
{
visibleParts = determine_visible_surfaces(obj, sceneobjects)
render(visibleParts)
}
Bildprรคzise Sichtbarkeitsalgorithmen
- Sichtbarkeitsermittlung im Zuge der Rasterisierung (pro Pixel)
- Laufzeit bei Szenenobjekten und Pixeln
for(pixel in raster)
{
color = determine_object_closest_to_camera(pixel, sceneobjects)
set_color(pixel, color)
}
Vergleich
- Laufzeit: Bei รผberschaubaren Anzahl von Objekten (z. B. bis zu 1000 Szenenobjekte) erscheint zunรคchst der objektprรคzise Ansatz im Vorteil, da bildprรคzise Ansรคtze mit Pixelmengen von z. B. arbeiten
- Berechnung Verfahren der algorithmischen Geometrie besitzt numerische, robustheitsbezogene Schwรคchen und muss mit Sonderfรคllen umgehen
- bereits kleine รnderungen der Kameraeinstellung kรถnnen zu groรen รnderungen bei der ermittelten sichtbaren Geometrie fรผhren
- In der Praxis sind bildprรคzise Algorithmen fast immer im Vorteil, da die zum Einsatz kommenden Berechnungen (numerisch gesehen) wesentlich einfacher und Hardware-unterstรผtzt und hoch parallel ablaufen
- Verlagerung der Sichtbarkeitsermittlung auf die Fragmente ermรถglichte, historisch gesehen, erst die Echtzeitcomputergrafik
Z-Buffer-Algorithmus
- hardware-unterstรผtzt
- 2D-Raster, dessen Werte Tiefenwerte enthalten
- Tiefe ist der Abstand von der Near-Clipping-Plane zu einem sichtbaren Fragment in normalisierten Gerรคtekoordinaten
- Z-Buffer ist Teil des Framebuffers, d.h. fรผr jedes Pixel wird neben den Farbwerten auch der Tiefenwert abgelegt
- Z-Buffer besitzen i. Allg. 16โ32 Bits Genauigkeit, d.h. das Tiefenwerteinterval wird durch den Integerbereich dargestellt
Ablauf:
- Z-Buffer wird mit einem Hintegrundwert (z.B. ) initialisiert
- Fรผr jedes Objekt:
- Rasterisiere Objekt (Zerlegung in Fragmente)
- Fรผr jedes Fragment, berechne Z-Wert
- Falls der Z-Wert kleiner ist als der aktuelle Tiefenwert an der korrespondierenden Fragmentposition im Z-Buffer:
- Schreibe den Z-Wert in den Z-Buffer (Aktualisierung)
- รbertrage Fragmentfarbe in den Color-Buffer
- Andernfalls ignoriere Fragment und lasse Wert im Z-Buffer unverรคndert (Fragment liegt hinter einem weiter vorne liegenden, bereits gezeichneten Fragment)


Problem der Tiefenwert-Verteilung:
- Near-Clipping-Plane-Distanz und Far-Clipping-Plane-Distanz mรผssen geeignet gewรคhlt werden, soll die Tiefengenauigkeit optimal verteilt sein
- Zu nahe Near-Clipping-Plane fรผhrt zu hoher Tiefengenauigkeit in unmittelbarer Nรคhe der Kamera; Genauigkeit wird aber i. Allg. auf mittlerer Distanz benรถtigt
- Bei zu geringer Tiefengenauigkeit: Z-fighting (z-flickering), d.h. Bildartefakte bei nahestehenden Objekten
- Exakte Wahl der Near-Clipping-Plane notwendig!
Depth-Peeling
- arbeitet mit zweitem Z-Buffer
- ermรถglicht schrittweise Rendering bei รberlagerung transparenter Objekte
Abblรคttern der Oberflรคche:
- Extrahieren der Fragmente, die dem Betrachter am nรคchsten sind (Fragmente mit geringstem Z-Wert) im ersten Rendering-Durchlauf
- Extrahieren der nรคchst-tieferen Fragmente in jedem weiteren Rendering-Durchlauf
- Der -te Rendering-Durchlauf liefert die Fragmente zur -ten Tiefenebene
- Schrittweise Verfeinerung

Algorithmus: 1. Pass
- Rendere die Szene mit Tiefentest
- Regulรคres Tiefenbild mit Z-Buffer 1 entsteht
- Color-Buffer wird als Layer 1 in einer Textur gespeichert
2. Pass
- Rendere die Szene mit folgendem Tiefentest: verwerfe Fragmente, die eine geringere oder gleiche Tiefe haben als gegenwรคrtig im Z-Buffer 1
- Tiefenbild der Fragment in der zweiten โEbeneโ entsteht im Z-Buffer 2
- Color-Buffer wird als Layer 2 in einer Textur gespeichert
3. Pass
- Tausche Rolle von Z-Buffer 1 und Z-Buffer 2
- Verfahren wie in Pass 2
Letzter Pass: Kombiniere Layer 1 bis im Color-Buffer (screen-aligned textures)

Bewertung des Depth-Peelings
Vorteile:
- Keine Vorsortierung der Szenenobjekte erforderlich (Auswertung der Objekte in beliebiger Reihenfolge)
- Nicht auf polygonale Geometrien beschrรคnkt (alle raterisierbaren Objekte wie Kurven, Fraktale, etc. mรถglich)
- Einfache Implementierung
- Hardware-Unterstรผtzung selbst mit low-cost Hardware
- Optimal in die Rendering-Pipeline einbaubar
- Separate Speicherung des Z-Buffer-Inhalts (โTiefenbildโ) ermรถglicht Speicherung von Bildern mit Tiefeninformation
Nachteile:
- Unnรถtige Rasterisierung von nicht-sichtbarer Szenengeometrie
- Beschrรคnkte numerische Genauigkeit des Z-Buffers
- Nichtlineare Verteilung der Tiefengenauigkeit
- Zusรคtzlicher Z-Buffer als Ressource notwendig

Nichtplanare Projektionen einmal รผberfliegen?