Weiche Schatten in Echtzeit

aktuellste Version | Changelog | Version History | Hardwarevoraussetzungen | Screenshots

Im Rahmen der Teamorientierten Projektarbeit sollen Algorithmen zur schnellen Berechnung von weichen Schatten in Echtzeitanwendungen implementiert werden.

aktuellste Version:

>> aktuelles Visual Studio 6 Projekt (2.9 MB - 24.01.2005)
>> ausführbares Programm (2.3 MB - 24.01.2005)
>> BorgCube.3ds (1.7 MB - ein 3ds-Modell mit etwa 700.000 Dreiecken)
>> Vorabversionen (30.09.2004)
>> Dokumentation (648 KB - 24.01.2005)

Version 1.0
(24.01.2005)
  • der Penumbra-Wedges-Algorithmus ist so gut es geht implementiert
  • die Doku ist vollständig

Changelog:

(nicht vollständig, da ich nur die mir bekannten Probleme aufgenommen habe)

Beschreibung Modul Priorität Fortschritt Verantwortlicher
Schattenalgorithmen
Volumenschatten volume_shadow hoch 100% Frank
Shadow Mapping shadow_mapping hoch 100% Jens
Cluster Lichtquelle cluster_light_shadow hoch 100% Frank
Smoothies smoothie_shadow hoch 100% Jens
Penumbra Wedges volume_penumbra_shadow hoch 90% Marco
Features
Klasse für Silhouette, die je Mesh Silhouette zurückgibt silhouette hoch 100% Frank
On-Screen-Menü (für Informationen, Einstellungen, Abschalten optionaler Extension) on_screen_display mittel 100% Frank
Lichtquellenklasse erweitern (Lichtcluster, Animation, ...) class_light mittel 100% Frank
Approximation einer Kugellichtquelle volume_penumbra_shadow hoch 100% Marco
Übertragung des Volumenschattenalgorithmus für Nutzung von Vertex- und Fragmentprogrammen volume_penumbra_shadow hoch 100% Marco
Bugs
Abfrage nach ARB_shadow funktioniert u.a. bei GeForce4MX nicht - Programm nicht gleich beenden schatten niedrig 100% Frank
Fullscreen Modus ist kaputt schatten niedrig 100% Frank
im Menü kann eine 3ds-Datei nicht geöffnet werden, wenn nur ein Ordner existiert on_screen_display niedrig 100% Frank
Fehler, wenn man Volumenschatten wählt und kein 3ds-Objekt geladen ist volume_shadow niedrig 100% Frank
LightSource::HasMoved Antwort ist nur bei erster Abfrage korrekt class_light mittel 100% Frank
Fehler bei Verwendung von EXT_stencil_wrap und EXT_stencil_two_side volume_shadow mittel 100% Frank
Probleme bei Silhouettenbestimmung (Silhouette stimmt nicht ganz) silhouette hoch 100% Frank
Meshes werden ausgeblendet, wenn man ins Menü geht unklar mittel 100% Frank
"halbtransparente" Schatten bei Shadow Mapping funktioniert nicht bei jeder GraKa shadow_mapping mittel 100% Jens
Artefakte beim Shadow Mapping shadow_mapping mittel 100% Jens
Selfshadowing bei Verwendung von Z-Fail inkorrekt + andere Artefakte volume_shadow niedrig 100% Frank
Fehler bei Anzeige des Schattens im durch Stencil Buffer gegebenem Wert volume_penumbra_shadow hoch 100% Marco
Vertex-Artefakte bei Penumbra-Schatten volume_penumbra_shadow hoch 100% Marco
Optimierungen
Kantenbasierter Ansatz für Silhouettenfindung silhouette hoch 100% Frank
3ds-Dateiliste nach Namen sortieren und vor jedem Anzeigen neu erstellen schatten niedrig 100% Jens
3ds-Dateien auch ohne Ordner zulassen schatten, l3ds niedrig 100% Jens
Z-Fail Ansatz implementieren volume_shadow mittel 100% Frank
Szenen-Funktionen in Klasse auslagern scene hoch 100% Frank
Light Frustum bei Shadow Mapping anzeigen shadow_mapping niedrig 100% Frank
weglassen von Display-Listen und Verwendung von Vektoroperationen und Vertex-Shader zur Erhöung der Performance volume_penumbra_shadow mittel 100% Marco

Version History:

Version 0.9
(20.11.2004)
  • Fehler bei Smoothie Schatten beseitigt und verschiedene andere Verbesserungen
  • Fehler bei Schadow Mapping mit Cg beseitigt
  • Fehler im 3ds-Loader behoben (wenn kein Ordner im 3ds-samples-Ordner war, wurden auch 3ds-Dateien nicht gefunden)
  • Penumbra-Wedges-Algorithmus ist bald fertig
  • im Projektordner sind jetzt alle nötigen Dateien enthalten (auch 3ds-Modelle und dll's)
  • Benchmarkfunktion (Taste "b" und Taste "B")
  • Silhouette kann "sortiert" werden (aufeinanderfolgende Kanten kommen in der Liste nacheinander)
  • Beschleunigung von Volumenschatten durch Verwendung der sortierten Silhouette und GL_QUAD_STRIP für das Schattenvolumen
Version 0.8
(30.09.2004)
  • der zweite Soft Shadow Algorithmus ist fertig: Smoothies
  • verschiedene "Aufräumarbeiten"
  • verschiedene Bugfixes
  • Shadow Mapping Schatten sind (außer auf ATI-Karten) wieder heller
  • erster Ansatz des Penumbra-Wedges-Algorithmus
Version 0.7
(23.09.2004)
  • mit dem "Cluster Light Shadow" der erste Soft-Shadow-Algorithmus lauffähig
  • Beseitigung einiger Bugs
  • Unterstützung von SSE für Volumenschatten - leider wider erwarten ohne Geschwindigkeitsvorteile :-(
  • Geschwindigkeitsoptimierungen bei Silhouetten- und Schattenvolumenbestimmung
  • Light-Frustum kann angezeigt werden
Version 0.6
(08.09.2004)
  • verwendet wieder den alten Ansatz zur Silhouettenfindung (schneller bei identischem Ergebnis)
  • Z-Fail Ansatz für Volumenschatten integriert (funktioniert nur auf nVidia Hardware)
  • Fehler in Schattenvolumenbestimmung beseitigt
  • jeder Schattenalgorithmus hat ein eigenes Einstellungen-Menü (Taste: F9)
  • die ersten 3 Passes des Smoothie Algorithmus sind "sichtbar"
  • benötigte Header-Dateien werden "lokal" eingebunden und nicht länger aus dem Visual Studio Verzeichnis
  • Animation der Lichtquelle
  • Shadow Mapping als Klasse implementiert und überarbeitet
  • 3ds-Dateiliste ist jetzt nach Namen sortiert und wird bei jedem Aufruf aktualisiert (d.h. es können zur Laufzeit neue Dateien und Ordner hinzugefügt werden)
Version 0.5e
(28.06.2004)
  • neuer Ansatz für das Finden der Silhouette - ist aber leider immernoch nicht fehlerfrei :-(
  • ShadowMapping funktioniert jetzt weitestgehend korrekt
  • Auslagerung aller wesentlichen Funktionen in Klassen (auch Silhouettenbestimmung)
  • extreme Verringerung der Ladezeiten von 3ds-Dateien
  • einige Fehler behoben
Version 0.5d beta
(12.06.2004)
  • Unterstützung von Multitexturing
  • Verwendung von Cg in Hinsicht auf die Algorithmen für weiche Schatten
  • optionale Extensions können jetzt ausgeschaltet werden (Taste "F11")
Version 0.5c
(10.06.2004)
  • Implementierung einer neuen Klasse für alle Menüs
  • die Menüs sind jetzt "interaktiv" - man kann Werte der Einträge ändern
Version 0.5b
(06.06.2004)
  • OpenGL Extensions für Volumenschatten
  • aus Kompatibilitätsgründen werden nur noch geschlossene Objekte unterstützt
  • weitere Versuche, den Quelltext besser zu strukturieren
Version 0.5a
(06.06.2004)
  • verwendet wieder Display-Listen zum rendern der Szene
  • diese Version ist im Vergleich zu den Vorgängern 2 bis 8 mal so schnell :-) - Danke Jenk!
  • Shadow Mapping ist Im Ansatz (!) implementiert
  • hab versucht den Quelltext etwas aufzuräumen
Version 0.5
(05.06.2004)
  • Schatten sind jetzt nichtmehr schwarz sondern dunkler
  • fast alle Display-Listen durch Funktionsaufrufe ersetzt
  • deutliche Beschleunigung bei der Verwendung Display-Listen bei Schattenvolumen
  • Fortschrittsanzeige beim Laden von 3ds-Dateien
Version 0.5 alpha
(31.05.2004)
  • Fehler im 3ds-Loader behoben
  • Verbesserung der Benutzerfreundlichkeit beim laden von 3ds Dateien
  • Erweiterung auf "unendliche" Schattenvolumen
  • die Silhouettenbestimmung funktioniert jetzt auch für "offene" Objekte
  • "Robustere" Schattenvolumenbestimmung (funktioniert jetzt auch für "allgemeinere Fälle" - aber leider immernoch nicht für alle (z.B. den Teapot))
Version 0.4d
(29.05.2004)
  • Fehler beim Auswerten des Schattenvolumens behoben
Version 0.4c
(28.05.2004)
  • Fehler beim zeichnen der Silhouette (und damit dem berechnen des Schattenvolumens) behoben
Version 0.4b
(26.05.2004)
  • leicht verbesserte Silhouettenberechnung
Version 0.4
(25.05.2004)
  • erweiterte 3ds-Loader Funktionalität
  • Einführung einer Klasse für Lichtquellen
  • Verwendung von Display Listen
  • Implementierung des Algorithmus zur Silhouettenbestimmung
  • Berechnung von harten Schatten mittels Schattenvolumen (noch fehlerhaft!)
Version 0.3
(17.05.2004)
  • Einbindung der benötigten OpenGL-Extensions über die OpenGL Extension Wrangler Library
  • es gibt jetzt die Möglichkeit Screenshots im TGA-Format zu machen (Taste: s)
  • Fullscreen-Mode (Taste: f)
  • Änderung der Auflöung im Fullscreen-Mode (Taste: +/-)
  • Fehler bei den Queue-Operationen behoben
Version 0.2
(13.05.2004)
  • es können jetzt (theoretisch) .3ds Dateien geladen werden
Version 0.1
(28.04.2004)
  • erste Version des OpenGL-Programmrahmens
  • Modularisierte Version des Projekts aus Computergrafik I
  • Enthält alle wichtigen Funktionen zum Umgang mit OpenGL und der GLUT

Hardwarevoraussetzungen:

Die Grafikkarte muss mindestens das Shader Modell 2.0 unterstützen um alle Algorithmen darstellen zu können - also DirectX 9 kompatibel sein! Folgende Grafikkarten sollten also keine Probleme bereiten:

  • nVidia: ab GeForce FX
  • ATI: ab Radeon 9500

Für ältere nVidia Karten gibt es jedoch die Möglichkeit, die benötigte Funktionalität zu emulieren, was z.B. mit dem Tool aTuner aktiviert werden kann. (Achtung: Softwareemulation = laaangsaaam!)

Screenshots:

aktuellste Version | Changelog | Version History | Hardwarevoraussetzungen | Screenshots