Di recente, mentre cercavo di risolvere il problema dell'acne nell'ombra della tradizionale mappatura dell'ombra, ho implementato mappe d'ombra esponenziali. Ha fatto il trucco (niente acne) ma allo stesso tempo ha introdotto altri errori inaccettabili.
Per la sfocatura della mappa di profondità uso la sfocatura gaussiana con sigma più piccolo = 1.
Test per la mappa ombra:
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);
con piccolo fattore c c=100.0
:
Sanguinamento della luce inaccettabile
con alto fattore c c=5000.0
:
Nessun sanguinamento luminoso ma i dettagli ad alta frequenza appaiono "gonfi".
Non riesco a trovare un'emorragia c-light ottimale anche in corrispondenza c=3000.0
dell'errore di ombra ad alta frequenza già presente. Non sfocare la mappa di profondità aiuta, ma si verifica aliasing.
E la mia domanda è: come posso migliorare questa tecnica (ESM) o dovrei cercarne un'altra? Penso che ombre di buona qualità con buone prestazioni siano sicuramente possibili - come si vede nei giochi moderni come Witcher 3 o Fallout 4.