alla ricerca di tecniche di mappatura dell'ombra di qualità accettabile


8

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:

inserisci qui la descrizione dell'immagine

Sanguinamento della luce inaccettabile

con alto fattore c c=5000.0:

inserisci qui la descrizione dell'immagine

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.0dell'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.

Risposte:


2

Beh non importa. Ho fatto delle ricerche e in realtà ho intenzione di:

  • campiona ESM usando il campionamento di Poisson in modo PCF (grazie a Bart Wronski per la fantastica app del generatore di campioni Poisson) ed estendi questo alla tecnica PCSS (penombra variabile). Rendering alla trama.
  • sfocatura opzionalmente sensibile alla profondità per ammorbidire - EDIT non così veloce questa opzione non funziona come previsto, peccato. Invece, la rotazione del kernel PCF sembra funzionare bene.

E peccato non tanto di discussione qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.