Kürzlich habe ich bei der Suche nach der Lösung des Schattenakneproblems der traditionellen Schattenkartierung exponentielle Schattenkarten implementiert. Es hat den Trick gemacht (überhaupt keine Akne), aber gleichzeitig andere inakzeptable Fehler eingeführt.
Für Tiefenkartenunschärfe verwende ich Gaußsche Unschärfe mit kleinstem Sigma = 1.
Test auf Schattenkarte:
float occluder = texture(shadowMap lightCoords.xy).r;
float c = 5000.0;
float receiver = lightCoords.z;
float shadow = exp(c*(occluder-receiver));
shadow = clamp(shadow, 0.0, 1.0);
mit kleinem c-Faktor c=100.0
:
Inakzeptable leichte Blutungen
mit hohem c-Faktor c=5000.0
:
Keine leichten Blutungen, aber hochfrequente Details erscheinen "geschwollen".
Kann keine optimale c - Lichtblutung finden, selbst wenn ein c=3000.0
hochfrequenter Schattenfehler bereits vorhanden ist. Das Nicht-Verwischen der Tiefenkarte hilft, aber dann tritt Aliasing auf.
Und meine Frage ist: Wie kann ich diese Technik (ESM) verbessern oder sollte ich nach einer anderen suchen? Ich denke, gute Schatten mit guter Leistung sind definitiv möglich - wie in modernen Spielen wie Witcher 3 oder Fallout 4 zu sehen.