Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog
Schatten
-
Allgemeines
-
Schatten nötig für Realismus
-
Schatten machen 3D-Situation verständlich
-
Punkt- und Richtungs-Lichtquellen erzeugen harte Schatten
-
ausgedehnte Lichtquellen erzeugen weiche Schatten (Kernschatten: Umbra;
Halbschatten: Penumbra)
-
Thema heute: Zoo der Standard-Verfahren für Schatten beim Offline-
und für Echtzeit-Rendering
-
Verfahren zur Offline-Berechnung von Schatten
-
Ray Tracing
-
harte Schatten
-
gefärbte Schatten unter bunt-transparenten Objekten (ohne Brechung)
-
Demo: Cinema 4D
-
Distribution Ray Tracing
-
physikalisch korrekte weiche Schatten
-
Bildrauschen contra Rechenzeit
-
gefärbte Schatten unter bunt-transparenten Objekten (ohne Brechung)
-
Demo: Cinema 4D
-
Radiosity
-
physikalisch korrekt
-
keine Transparenz
-
Demo: ausgedehnte Körper, die andere Körper beleuchten und weiche
Schatten werfen, in Cinema 4D (auch wenn das kein Radiosity-Verfahren in
Reinkultur verwendet). Vorsicht: ohne Lichtquellen oder bei schwarzen Lichtquellen
setzt Cinema 4D ein Standard-Licht in die Szene (abschaltbar)
-
Verfahren zur Echtzeit-Berechnung von Schatten (aber auch offline einsetzbar)
-
geplättete Objekte
-
drücke Objekt flach (geht per Matrix; in Direct3D eingebaut)
-
rendere das z.B. halbtransparent in Grau über den Untergrund
-
geht nur für ebenen Untergrund
-
Shadow Volumes
-
Idee: Betrachte die Menge aller Raumpunkte, die von einem Objekt abgeschattet
werden, als Schattenvolumen. Wenn ein Sehstrahl außerhalb dieses
Volumens startet und genauso oft aus einem Schatten austritt wie er in
einen Schatten eintritt, landet er in einem Gebiet ohne Schatten,
sonst im Schatten.
-
Erzeuge die Schattenvolumina als 3D-Objekte: Finde die Silhouette des Objekts
aus Sicht der Lichtquelle; extrudiere die ins Unendliche.
-
Realisierung typischerweise per Stencil Puffer: Rendere Szene normal, aber
nur mit Umgebungslicht. Setze den Stencil-Puffer überall auf 0. Dann
rendere die Schattenvolumina, aber nur mit Z-Vergleich und ohne in den
Farb- oder den Z-Puffer zu schreiben. Inkrementiere den Stencil-Puffer
auf Vorderseiten, dekrementiere ihn auf Rückseiten. Zum Schluss rendere
die Szene beleuchtet, aber nur da, wo der Stencil-Puffer gleich null ist.
-
Probleme: Erzeugung der Schattenvolumina nötig; schwierig für
offene Körper; keine weichen Schatten; keine Transparenz
-
Demo aus dem Direct3D-SDK (C# -> Stencil Buffer).
-
Shadow Map
-
Rendere aus Sicht der Lichtquelle; es reicht der z-Puffer. Rendere dann
normal aus der Sicht des Betrachters und benutze die zuvor gerenderten
Tiefeninformationen als "Shadow Map": Um zu entscheiden, ob ein Raumpunkt
im Schatten liegt, betrachte den Strahl aus der Lichtquelle durch diesen
Punkt. Diesem Strahl entspricht ein Pixel in der Shadow Map. Wenn der Wert
dieses Pixels für eine kleinere Entfernung von der Lichtquelle steht
als die Entfernung des aktuellen Punkts, liegt der im Schatten, sonst nicht.
-
Probleme: zusätzlicher Render-Durchgang zur Vorbereitung der Shadow-Map
nötig; Texturpixel in Schattenkante sichtbar; weiche Schatten durch
Betrachtung mehrerer Pixel der Shadow Map (unphysikalisch und in Echtzeit
schwierig); keine Transparenz
-
wesentliches Problem: Bias nötig, um nicht schon Schatten auf den
beleuchteten Flächen selbst zu haben (Auflösung der Shadow Map!);
Schatten fängt zu spät an
-
Demo: Cinema 4D (Kann hier Transparenz, anders als das lehrbuchmäßige
Verfahren!)
-
Demo: Maya (Nimmt statt der Vorderseite standardmäßig die Mittelebene
eines Objekts: Weniger Probleme mit Bias.)
-
Demo: C4Dfx (Schattenstreifen of beleuchteten Flächen bei zu geringer
Texturauflösung)
-
Nvidia-Karten können direkt einen z-Puffer als Textur für Off-Screen-Rendering
ansprechen. Das habe ich aber unter Managed DirectX noch nicht zum Laufen
gekriegt.
Stereoskopie
-
Prinzip
-
erzeuge ein Bild pro Auge: "echtes" 3D
-
Problem: Betrachter kann nicht selbst steuern, was er fixiert (Konvergenzpunkt
der Augenrichtungen); oft deshalb parallel ins Unendliche blickende Augen
eingestellt
-
Problem: Akkomodation auf wahren Betrachtungsabstand <-> Konvergenz
der Augenrichtung im virtuellen Raum
-
Problem bei Displays, die mit dem Kopf verbunden sind: Bei Kopfdrehung
schwenkt die Szene mit. Head Tracker nötig, um Lage des Kopfes zu
berücksichtigen.
-
Problem: Schwindengefühl usw., wenn die 3D-Welt nicht schnell genug
auf Kopfbewegungen usw. reagiert ("VR Sickness")
-
Ausgabe
-
Zwei Bilder nebeneinander mit parallelem Blick ins Unendliche oder aber
über Kreuz geschielt ansehen
-
Rot-Grün-Brille und entsprechende Bilder (anaglyphisches Verfahren)
-
LC-Shutterbrille und Monitor mit hoher Bildwechselfrequenz: Zeige abwechselnd
linkes und rechtes Bild
-
zwei Beamer (DLP, nicht TFT) mit Polarisationsfolien auf spezielle, polarisationserhaltende
Leinwand richten; Brillen mit Polarisationsfolien
-
Head-Mounted Display mit Head-Tracker
-
Riffellinsen auf dem Papier
-
Riffellinsen vor dem Display (Lenticular Displays)
-
Streifenmaske vor dem Display, ggf. mit Head-Tracker
-
komplexe Streifenmaske, die mehrere (z.B. acht) verschiedene Bilder in
den Raum strahlt (Demo: X3D-Display); Probleme: nur noch geringe Auflösung
pro Bild; dunkel, weil Helligkeit auf x Bilder verteilt
-
Programmierung
-
Quad-Buffering in OpenGL
-
Front und Back Buffer getrennt für links und rechts (vier Puffer,
deshalb "quad"); vor dem Rendern gibt man an, in welchen Puffer es gehen
soll.
-
nur auf größeren OpenGL-Karten zu haben (im Labor eine verfügbar);
klares Zeichen: Ausgang für 3D-Brille auf der Karte
-
Nvidia Stereo-Treiber
-
zusätzlich zu Grafiktreiber installieren
-
rendert im Vollschirmmodus intern alles doppelt und baut daraus zwei Bilder
für eine Shutterbrille oder ein Bild für eine Rot-Grün-Brille
-
Verwendung mit "normaler" 3D-Software
-
Ansteuerung der Brille über VGA-Kabelpeitsche