Suche nach akzeptablen Qualitätsschatten-Mapping-Techniken

8

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:

Geben Sie hier die Bildbeschreibung ein

Inakzeptable leichte Blutungen

mit hohem c-Faktor c=5000.0:

Geben Sie hier die Bildbeschreibung ein

Keine leichten Blutungen, aber hochfrequente Details erscheinen "geschwollen".

Kann keine optimale c - Lichtblutung finden, selbst wenn ein c=3000.0hochfrequenter 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.

Narthex
quelle

Antworten:

2

Na egal. Ich habe einige Nachforschungen angestellt und werde tatsächlich:

  • Probieren Sie ESM mit Poisson-Sampling auf PCF-Art (danke Bart Wronski für die großartige Poisson-Sample-Generator-App) und erweitern Sie diese auf die PCSS-Technik (variable Halbschatten). Zur Textur rendern.
  • optional tiefenbewusste Unschärfe zum Erweichen - BEARBEITEN nicht so schnell Diese Option funktioniert nicht wie erwartet, schade. Stattdessen scheint der rotierende PCF-Kernel gut zu funktionieren.

Und schade, hier wird nicht viel diskutiert.

Narthex
quelle