Weiche Schatten in Echtzeit
|
|
|
|
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:
|
|
|
|
|