Condividi tramite


Tecniche comuni per migliorare la profondità dell'ombreggiatura Mappe

Le mappe d'ombra, introdotte per la prima volta nel 1978, sono una tecnica comune per aggiungere ombre ai giochi. Tre decenni dopo, nonostante i progressi nell'hardware e nel software, gli artefatti di ombreggiatura, ovvero bordi scintillanti, alias prospettica e altri problemi di precisione, persistono.

Questo articolo tecnico offre una panoramica di alcuni algoritmi comuni di mappe di profondità ombreggiatura e artefatti comuni e illustra diverse tecniche, che vanno da base a intermedia, che possono essere usate per aumentare la qualità delle mappe ombreggiature standard. L'aggiunta di mappe ombreggiature di base a un titolo è in genere semplice, ma la comprensione delle sfumature degli artefatti dell'ombreggiatura può risultare complessa. Questo articolo tecnico è scritto per lo sviluppatore di grafica intermedio che ha implementato le ombreggiature, ma non comprende completamente il motivo per cui vengono visualizzati elementi specifici e non è sicuro come risolverli.

La selezione delle tecniche corrette per attenuare gli artefatti specifici non è un tentativo. Quando vengono risolte le carenze della mappa delle ombre, la differenza nella qualità può essere impressionante (figura 1). L'implementazione corretta di queste tecniche migliora drasticamente le ombre standard. Le tecniche illustrate in questo articolo vengono implementate nell'esempio CascadedShadowMaps11 in DirectX SDK.

Figura 1. Ombreggiatura con artefatti gravi (a sinistra) e ombreggiature dopo l'implementazione delle tecniche descritte in questo articolo (a destra)

ombreggiatura con artefatti gravi (a sinistra) e ombreggiature dopo l'implementazione delle tecniche descritte in questo articolo (a destra)

Revisione delle mappe di profondità ombreggiatura

L'algoritmo mappa di profondità ombreggiatura è un algoritmo a due passaggi. Il primo passaggio genera una mappa di profondità nello spazio chiaro. Nel secondo passaggio, questa mappa viene usata per confrontare la profondità di ogni pixel nello spazio di luce con la corrispondente profondità nella mappa di profondità dello spazio chiaro.

Figura 2. Parti chiave di una scena dell'ombreggiatura

parti chiave di una scena dell'ombreggiatura

Passaggio 1

La scena è illustrata nella figura 2. Nel primo passaggio (Figura 3), il rendering della geometria viene eseguito in un buffer di profondità dal punto di vista della luce. In particolare, il vertex shader trasforma la geometria nello spazio di visualizzazione della luce.

Il risultato finale di questo primo passaggio è un buffer di profondità contenente le informazioni di profondità della scena dal punto di vista della luce. Questo ora può essere usato in pass 2 per determinare quali pixel sono occlusi dalla luce.

Figura 3. Primo passaggio del mapping delle ombreggiature di base

primo passaggio del mapping delle ombreggiature di base

Passaggio 2

Nel secondo passaggio (figura 4) il vertex shader trasforma ogni vertice due volte. Ogni vertice viene trasformato nello spazio di visualizzazione della fotocamera e passato al pixel shader come posizione. Ogni vertice viene trasformato anche dalla matrice view-projection-texture della luce e passata al pixel shader come coordinata della trama. La matrice view-projection-texture è la stessa matrice usata per eseguire il rendering della scena in pass 1 con una trasformazione aggiuntiva. Si tratta di una trasformazione che ridimensiona e converte i punti dallo spazio di visualizzazione (-1 a 1 in X e Y) allo spazio trama (da 0 a 1 in X e da 1 a 0 in Y).

Il pixel shader riceve la posizione interpolata e le coordinate della trama interpolata. Tutto ciò che serve per eseguire il test di profondità è ora in questa coordinata della trama. Il test di profondità può ora essere eseguito indicizzando il buffer di profondità dal primo passaggio con le coordinate della trama X e Y e confrontando il valore di profondità risultante con la coordinata della trama Z.

Figura 4. Secondo passaggio del mapping delle ombreggiature di base

secondo passaggio del mapping delle ombreggiature di base

Artefatti mappa ombreggiatura

L'algoritmo di mappa della profondità dell'ombreggiatura è l'algoritmo di ombreggiatura in tempo reale più diffuso, ma produce ancora diversi artefatti che richiedono la mitigazione. I tipi di artefatti che possono verificarsi vengono riepilogati successivamente.

Aliasing prospettica

L'aliasing prospettica, un artefatto comune, è illustrato nella figura 5. Si verifica quando il mapping dei pixel nello spazio di visualizzazione ai texel nella mappa shadow non è un rapporto uno-a-uno. Ciò è dovuto al fatto che i pixel vicini al piano vicino sono più vicini e richiedono una risoluzione più elevata della mappa delle ombreggiature.

La figura 6 mostra una mappa ombreggiatura e un frustum di visualizzazione. Vicino all'occhio, i pixel sono più vicini e molti pixel mappano agli stessi texel ombreggiatura. I pixel del piano lontano vengono distribuiti, riducendo così l'aliasing prospettica.

Figura 5. Aliasing con prospettiva elevata (a sinistra) e aliasing con prospettiva bassa (destra)

aliasing con prospettiva elevata (a sinistra) e aliasing con prospettiva bassa (a destra)

Per l'immagine a sinistra, l'aliasing prospettica è superiore; Troppi pixel di spazio oculare mappati agli stessi texel della mappa ombreggiatura. Nell'immagine a destra, l'aliasing prospettica è basso perché esiste un mapping 1:1 tra i pixel dello spazio oculare e i texel della mappa ombreggiatura.

Figura 6. Visualizzare frustum con mappa ombreggiatura

visualizzare frustum con mappa ombreggiatura

I pixel di luce nel piano lontano rappresentano aliasing con prospettiva bassa e i pixel scuri nel piano vicino rappresentano aliasing con prospettiva elevata.

Anche la risoluzione della mappa ombreggiatura può essere troppo elevata. Anche se una risoluzione più elevata è meno evidente, tuttavia può comportare oggetti di piccole dimensioni, ad esempio cavi telefonici, non gettando ombre. Inoltre, la presenza di una risoluzione troppo elevata può causare gravi problemi di prestazioni a causa di modelli di accesso alle trame.

Le mappe delle ombreggiature prospettiche (PSM) e le mappe shadow della prospettiva dello spazio chiaro (LSPSMs) tentano di gestire l'aliasing prospettica inclinando la matrice di proiezione della luce per posizionare più texel vicino all'occhio dove sono necessari. Sfortunatamente, nessuna tecnica è in grado di risolvere l'aliasing prospettica. La parametrizzazione della trasformazione necessaria per eseguire il mapping dei pixel dello spazio oculare ai texel nella mappa ombreggiatura non può essere associata da un'asimmetria lineare. È necessaria una parametrizzazione logaritmica. I PSM mettono troppo dettagli vicino all'occhio, causando ombre distanti di bassa qualità o addirittura scomparire. LSPSMs fa un lavoro migliore per trovare un terreno intermedio tra l'aumento della risoluzione vicino all'occhio e lasciando abbastanza dettagli per gli oggetti lontani. Entrambe le tecniche degenerano per le ombreggiature ortografiche in alcune configurazioni della scena. Questa generazione può essere contrastata eseguendo il rendering di una mappa ombreggiatura separata per ogni viso del frustum di visualizzazione, anche se questo è costoso. Anche le mappe shadow della prospettiva logaritmica (LogPSM) eseguono il rendering di una mappa separata per viso del frustum di visualizzazione. Questa tecnica usa la rasterizzazione non lineare per posizionare più texel vicino all'occhio. L'hardware di classe D3D10 e D3D11 non supporta la rasterizzazione non lineare. Per altre informazioni su queste tecniche e algoritmi, vedere la sezione Riferimenti.

Le mappe shadow a catena (CSM) sono la tecnica più comune per gestire l'aliasing prospettica. Anche se i csm possono essere combinati con i moduli DIM e gli LSPSM, non è necessario. L'uso di CSM per correggere gli errori di aliasing prospettica viene risolto nell'articolo complementare Mappe shadow cascaded.

Projective Aliasing

Il projective aliasing è più difficile da mostrare rispetto all'aliasing prospettica. Le ombreggiature automatiche evidenziate nella figura 7 illustrano errori di aliasing proiettato. L'aliasing projectivo si verifica quando il mapping tra texel nello spazio della fotocamera a texel nello spazio leggero non è un rapporto uno-a-uno; ciò è dovuto all'orientamento della geometria rispetto alla fotocamera della luce. L'aliasing projectivo si verifica quando il piano tangente della geometria diventa parallelo ai raggi di luce.

Figura 7. Aliasing a progetto elevato rispetto all'aliasing a basso progetto

aliasing high-projective e aliasing a basso progetto

Le tecniche usate per alleviare gli errori di aliasing prospettica attenuano anche l'aliasing proiettato. L'aliasing projectivo si verifica quando la normale superficie è ortogonale alla luce; queste superfici dovrebbero ricevere meno luce in base alle equazioni di illuminazione diffuse.

Acne d'ombra e auto-ombreggiatura errata

L'acne dell'ombra (figura 8), un termine sinonimo di auto-ombreggiatura errata, si verifica quando la mappa dell'ombreggiatura quantizza la profondità su un intero texel. Quando lo shader confronta una profondità effettiva con questo valore, è probabile che l'ombreggiatura sia auto-ombreggiata come deve essere oscurata.

Un altro motivo per l'acne dell'ombra è che il texel nello spazio leggero è così vicino alla profondità del texel corrispondente nella mappa di profondità che gli errori di precisione causano erroneamente il test di profondità. Un motivo per questa differenza di precisione è che la mappa di profondità è stata calcolata dall'hardware di rasterizzazione a funzione fissa, mentre la profondità confrontata è stata calcolata dallo shader. L'aliasing projectivo può anche causare l'acne dell'ombra.

Figura 8. Artefatto di acne ombreggiatura

artefatto di acne ombreggiatura

Come illustrato nell'immagine a sinistra, alcuni pixel hanno superato il test di profondità e creato artefatti e modelli moiré. Per ridurre l'auto-ombreggiatura errata, i limiti sul piano vicino e il piano lontano per il frustum di visualizzazione dello spazio leggero devono essere calcolati il più strettamente possibile. La distorsione della profondità basata sulla scala angolare e altri tipi di distorsione sono altre soluzioni usate per attenuare l'acne dell'ombra.

Peter Panning

Il termine Peter Panning deriva il suo nome dal personaggio di un libro per bambini la cui ombra si staccava e che poteva volare. Questo artefatto rende gli oggetti con ombreggiature mancanti sembrano essere scollegati da e per galleggiare sopra la superficie (Figura 9).

Figura 9. Artefatto Peter Panning

artefatto peter panning

Nell'immagine a sinistra l'ombreggiatura viene scollegata dall'oggetto, creando un effetto mobile.

Una tecnica per rimuovere l'acne della superficie consiste nell'aggiungere un valore alla posizione pixel nello spazio chiaro; viene chiamato aggiunta di un offset di profondità. Peter Panning restituisce quando l'offset di profondità usato è troppo grande. In questo caso l'offset di profondità fa sì che il test di profondità superi erroneamente. Come l'acne dell'ombra, Peter Panning è aggravato quando c'è precisione insufficiente nel buffer di profondità. Il calcolo di aerei stretti e di lontano aiuta anche a evitare Peter Panning.

Tecniche per migliorare le mappe ombreggiature

L'aggiunta di ombreggiature a un titolo è un processo. Il primo passaggio consiste nell'ottenere il funzionamento delle mappe shadow di base. Il secondo consiste nell'assicurare che tutti i calcoli di base vengano eseguiti in modo ottimale: frusta adattarsi il più strettamente possibile, i piani vicini/lontani si adattano strettamente, viene usata la distorsione in scala angolare e così via. Una volta abilitate le ombreggiature di base e il più possibile, lo sviluppatore ha un'idea migliore degli algoritmi necessari per ottenere le ombre in modo da ottenere una fedeltà sufficiente. I suggerimenti di base che potrebbero essere necessari per ottenere mappe shadow di base esaminando i loro migliori sono forniti in questa sezione.

Distorsione della profondità della scala angolare

Come accennato in precedenza, l'auto-ombreggiatura può portare all'acne dell'ombra. L'aggiunta di una distorsione eccessiva può comportare Peter Panning. Inoltre, i poligoni con pendii ripidi (relativamente alla luce) soffrono più di aliasing proiettato rispetto ai poligoni con pendii superficiali (rispetto alla luce). Per questo motivo, ogni valore della mappa di profondità potrebbe richiedere un offset diverso a seconda della pendenza del poligono rispetto alla luce.

L'hardware Direct3D 10 ha la possibilità di distorsione di un poligono in base alla sua pendenza rispetto alla direzione di visualizzazione. Questo ha l'effetto di applicare una distorsione grande a un poligono che viene visualizzato bordo-on alla direzione della luce, ma non applicando alcuna distorsione a un poligono rivolto direttamente alla luce. La figura 10 illustra il modo in cui due pixel adiacenti possono alternarsi tra ombreggiati e non ombreggiati durante il test sullo stesso coefficiente angolare non distorto.

Figura 10. Distorsione della profondità in scala angolare rispetto alla profondità non distorta

distorsione della profondità in scala angolare rispetto alla profondità non distorta

Calcolo di una proiezione stretta

Adattare strettamente la proiezione della luce al frustum di visualizzazione aumenta la copertura della mappa ombreggiatura. La figura 11 illustra che l'uso di una proiezione arbitraria o l'adattamento della proiezione ai limiti della scena comporta un aliasing prospettica superiore.

Figura 11. Frustum di ombreggiatura arbitraria e frustum ombra adattarsi alla scena

frustum d'ombra arbitrario e frustum ombra adattarsi alla scena

La vista è dal punto di vista della luce. Il trapezoio rappresenta il frustum della fotocamera di visualizzazione. La griglia disegnata sull'immagine rappresenta la mappa ombreggiatura. L'immagine a destra mostra che la stessa mappa d'ombra di risoluzione crea una copertura di texel maggiore quando si adatta più strettamente alla scena.

La figura 12 illustra i frustum che sono adatti correttamente. Per calcolare la proiezione, gli otto punti che costituiscono il frustum di visualizzazione vengono trasformati in spazio leggero. Vengono quindi trovati i valori minimo e massimo in X e Y. Questi valori costituiscono i limiti per una proiezione ortografica.

Figura 12. Proiezione shadow adatta per visualizzare frustum

proiezione shadow adatta per visualizzare frustum

È anche possibile ritagliare il frustum alla scena AABB per ottenere un limite più stretto. Questo non è consigliato in tutti i casi perché questo può modificare le dimensioni della proiezione della fotocamera della luce da fotogramma a fotogramma. Molte tecniche, ad esempio quelle descritte nella sezione Spostamento degli incrementi di dimensioni del texel chiaro, offrono risultati migliori quando le dimensioni della proiezione della luce rimangono costanti in ogni fotogramma.

Calcolo del piano vicino e dell'aereo lontano

Il piano vicino e il piano lontano sono i pezzi finali necessari per calcolare la matrice di proiezione. Più strettamente insieme i piani sono, più precisi sono i valori nel buffer di profondità.

Il buffer di profondità può essere a 16 bit, a 24 bit o a 32 bit, con valori compresi tra 0 e 1. In genere, i buffer di profondità sono a virgola fissa, con i valori vicini al piano vicino raggruppati più strettamente rispetto ai valori vicini al piano lontano. Il grado di precisione disponibile per il buffer di profondità è determinato dal rapporto tra il piano vicino e il piano lontano. L'uso del piano più stretto possibile vicino/lontano potrebbe consentire l'uso di un buffer di profondità a 16 bit. Un buffer di profondità a 16 bit potrebbe ridurre l'uso della memoria aumentando la velocità di elaborazione.

Piano vicino basato su AABB e piano lontano

Un modo semplice e ingenuo per calcolare l'aereo vicino e l'aereo lontano consiste nel trasformare il volume di delimitazione della scena nello spazio leggero. Il valore più piccolo della coordinata Z è il piano vicino e il valore più grande della coordinata Z è il piano lontano. Per molte configurazioni della scena e della luce, questo approccio è sufficiente. Lo scenario peggiore, tuttavia, può comportare una perdita significativa di precisione nel buffer di profondità; La figura 13 mostra uno scenario di questo tipo. Qui l'intervallo del piano vicino al piano lontano è quattro volte più grande del necessario.

Il frustum di visualizzazione nella figura 13 è stato scelto appositamente per essere piccolo. Un piccolo frustum di vista è mostrato in una scena molto grande costituita da pilastri che si estendono dalla fotocamera di visualizzazione. L'uso di Scene AABB per i piani vicini e lontani non è ottimale. L'algoritmo CSM descritto nell'articolo tecnico di Mappe shadow a catena deve calcolare piani vicini e lontani per frustum molto piccoli.

Figura 13. Aereo vicino e lontano basato su Scene AABB

aereo vicino e lontano basato sulla scena aabb

Frustum-Based Near Plane e Far Plane

Un'altra tecnica per calcolare i piani vicini e lontani consiste nel trasformare il frustum nello spazio leggero e usare rispettivamente i valori minimi e massimi in Z come piani vicini e lontani. La figura 14 illustra i due problemi relativi a questo approccio. In primo luogo, il calcolo è troppo conservativo, come illustrato quando il frustum si estende oltre la geometria della scena. In secondo luogo, il piano vicino potrebbe essere troppo stretto, causando il ritaglio delle ombreggiature.

Figura 14. Piani vicino e lontano basati esclusivamente sul frustum di visualizzazione

piani vicino e lontano basati esclusivamente sul frustum di vista

Frustum chiaro intersecato con la scena per calcolare piani vicini e lontani

Il modo corretto per calcolare i piani vicini e lontani è illustrato nella figura 15. Quattro dei piani del frustum di luce ortografica sono stati calcolati utilizzando le coordinate minime e massime delle coordinate X e Y del frustum di visualizzazione nello spazio leggero. Gli ultimi due piani del frustum di vista ortogonale sono i piani vicini e lontani. Per trovare questi piani, i limiti della scena vengono ritagliati contro i quattro piani di frustum luce noti. I valori Z più piccoli e più grandi del limite appena ritagliato rappresentano rispettivamente il piano vicino e il piano lontano.

Il codice che esegue questa operazione si trova nell'esempio CascadedShadowMaps11. Gli otto punti che costituiscono l'AABB mondiale vengono trasformati in spazio leggero. La trasformazione dei punti nello spazio chiaro semplifica i test di ritaglio. I quattro piani noti del frustum leggero possono ora essere rappresentati come linee. Il volume di delimitazione delle scene nello spazio leggero può essere rappresentato come sei quadrilateri. Questi 6 quadrilateri possono quindi essere trasformati in 12 triangoli per il ritaglio basato su triangoli. I triangoli vengono ritagliati rispetto ai piani noti del frustum di visualizzazione (si tratta di linee orizzontali e verticali in X e Y nello spazio chiaro). Quando si trova un punto di intersezione in X e Y, il triangolo 3D viene ritagliato in quel punto. I valori Z minimi e massimi di tutti i triangoli ritagliati sono il piano vicino e il piano lontano. L'esempio CascadedShadowMaps11 mostra come eseguire questo ritaglio nella funzione ComputeNearAndFar .

Esistono altre due tecniche che possono essere usate per calcolare i piani più vicini e lontani possibili. Queste tecniche non vengono visualizzate nell'esempio CascadedShadowMaps.

  • Anche i piani più stretti e lontani possono essere calcolati intersecando una gerarchia di una scena o di singoli oggetti in una scena contro il frustum leggero. Questo sarebbe più complesso dal livello di calcolo. Anche se non illustrato nell'esempio CascadedShadowMaps11, questa potrebbe essere una tecnica valida per alcuni riquadri.

  • Il piano lontano può essere calcolato prendendo il minimo di:

    • Profondità più grande del frustum di visualizzazione nello spazio leggero.
    • Profondità più grande dell'intersezione del frustum di visualizzazione e della scena AABB.

Questo approccio può essere problematico quando viene usato con mappe ombreggiate a cascata in cui è possibile indicizzare all'esterno di un frustum di visualizzazione. In questo caso, la mappa ombreggiatura potrebbe non essere geometria mancante.

Figura 15. Piani vicini e lontani in base all'intersezione dei quattro piani calcolati del frustum di luce e della geometria di delimitazione della scena

piani vicini e lontani in base all'intersezione dei quattro piani calcolati del frustum di luce e della geometria di delimitazione della scena

Spostamento della luce in incrementi di dimensioni texel

Un artefatto comune nelle mappe ombreggiature è l'effetto bordo scintillante. Mentre la fotocamera si muove, i pixel lungo i bordi delle ombre illuminano e scurino. Questo non può essere visto in immagini ancora, ma è molto evidente e distratto in tempo reale. La figura 16 evidenzia questo problema e la figura 17 mostra l'aspetto dei bordi dell'ombreggiatura.

L'errore del bordo scintillante si verifica perché la matrice di proiezione di luce viene ricalcolata ogni volta che la fotocamera si muove. In questo modo si creano piccole differenze nelle mappe shadow generate. Tutti i fattori seguenti possono influenzare la matrice creata per associare la scena.

  • Dimensioni del frustum della vista
  • Orientamento del frustum di visualizzazione
  • Posizione della luce
  • Posizione della fotocamera

Ogni volta che questa matrice cambia, i bordi delle ombreggiature potrebbero cambiare.

Figura 16. Bordi ombreggiatura scintillante

bordi ombreggiatura scintillante

I pixel lungo il bordo dell'ombreggiatura provengono dall'ombreggiatura quando la fotocamera si sposta da sinistra a destra.

Figura 17. Ombre senza bordi scintillanti

ombre senza bordi scintillanti

I bordi dell'ombreggiatura rimangono costanti man mano che la fotocamera si sposta da sinistra a destra.

Per le luci direzionali, la soluzione a questo problema consiste nell'arrotondare il valore minimo/massimo in X e Y (che costituiscono i limiti di proiezione ortografica) agli incrementi delle dimensioni dei pixel. Questa operazione può essere eseguita con un'operazione di divisione, un'operazione di pavimento e una moltiplicazione.

        vLightCameraOrthographicMin /= vWorldUnitsPerTexel;
        vLightCameraOrthographicMin = XMVectorFloor( vLightCameraOrthographicMin );
        vLightCameraOrthographicMin *= vWorldUnitsPerTexel;
        vLightCameraOrthographicMax /= vWorldUnitsPerTexel;
        vLightCameraOrthographicMax = XMVectorFloor( vLightCameraOrthographicMax );
        vLightCameraOrthographicMax *= vWorldUnitsPerTexel;

Il valore vWorldUnitsPerTexel viene calcolato prendendo un limite del frustum della vista e dividendo per le dimensioni del buffer.

        FLOAT fWorldUnitsPerTexel = fCascadeBound /
        (float)m_CopyOfCascadeConfig.m_iBufferSize;
        vWorldUnitsPerTexel = XMVectorSet( fWorldUnitsPerTexel, fWorldUnitsPerTexel,                            0.0f, 0.0f );

Il delimitazione delle dimensioni massime del frustum di visualizzazione comporta un adattamento più debole per la proiezione ortografica.

È importante notare che la trama è di 1 pixel maggiore in larghezza e altezza quando si usa questa tecnica. In questo modo le coordinate dell'ombreggiatura non vengono indicizzate all'esterno della mappa ombreggiatura.

Viso posteriore e viso anteriore

Il rendering delle mappe ombreggiature deve essere eseguito con il culling back-face standard, un processo che ignora la rasterizzazione di oggetti che il visualizzatore non può visualizzare e accelera il rendering della scena. Un'altra opzione comune consiste nel eseguire il rendering delle mappe ombreggiature con il culling anteriore abilitato, il che significa che gli oggetti rivolti al visualizzatore vengono eliminati. L'argomento per questo è che aiuta con l'auto-ombreggiatura mentre la geometria che costituisce il backup degli oggetti è leggermente sfalsata. Ci sono due problemi con questa idea.

  • Qualsiasi oggetto con geometria anteriore o posteriore non corretta causa artefatti nella mappa ombreggiatura. Tuttavia, la geometria anteriore o posteriore non corretta causerà altri problemi, quindi potrebbe essere sicuro presupporre che la geometria del viso anteriore e posteriore sia eseguita correttamente. Può essere poco pratico creare facce posteriore per geometria basata su sprite, ad esempio fogliame.
  • Peter Panning e spazi di ombreggiatura vicino alla base di oggetti come le pareti sono più probabili perché la disparità di profondità dell'ombreggiatura è troppo piccola.

Mappa ombreggiatura - Geometria amichevole

La creazione di geometria che funziona bene nelle mappe d'ombra consente una maggiore flessibilità quando combattono artefatti come Peter Panning e acne dell'ombra.

I bordi duri sono problematici per l'auto-ombreggiatura. La disparità di profondità vicino alla punta del bordo è molto piccola. Anche un piccolo offset può causare la perdita delle ombreggiature degli oggetti (figura 18).

Figura 18. I bordi taglienti causano artefatti derivanti dalla disparità di profondità bassa con offset

i bordi taglienti causano artefatti derivanti dalla disparità di profondità bassa con offset

Oggetti stretti come le pareti devono avere backs anche se non sono mai visibili. Ciò aumenterà la disparità di profondità.

È anche importante assicurarsi che la direzione in cui si trova la geometria sia corretta; ovvero l'esterno di un oggetto deve essere rivolto verso il retro e l'interno di un oggetto deve essere anteriore. Questo aspetto è importante per il rendering con la culling posteriore abilitata, nonché per combattere gli effetti della distorsione della profondità.

Mappe delle ombreggiature a cascata

Vedi anche Mappe ombreggiate a cascata e l'app di esempio CascadedShadowMaps11. L'esempio illustra l'algoritmo CSM (Cascaded Shadow Map), oltre a diverse tecniche che possono essere usate per usare in modo efficiente la mappa ombreggiatura.

È possibile trovare l'esempio in DirectX Software Development Kit (SDK). In alternativa, è possibile eseguire una ricerca Web per trovarla in GitHub.

Riepilogo

Le tecniche descritte in questo articolo possono essere usate per aumentare la qualità delle mappe ombreggiate standard. Il passaggio successivo consiste nell'esaminare le tecniche che possono funzionare bene con le mappe ombreggiature standard. I csm sono consigliati come tecnica superiore per combattere l'aliasing prospettica. Per ammorbidire i bordi dell'ombreggiatura, è possibile usare le mappe di filtro o varianza più vicine. Per altre informazioni, vedere l'articolo tecnico sulle mappe shadow a cascata.

Donnelly, W., e Lauritzen, A. Mappe ombreggiature di varianza. Simposio sulla grafica 3D interattiva, Atti del simposio del 2006 su grafica e giochi 3D interattivi. 2006, pp. 161–165.

La Sezione 4. Mappe ombreggiate a cascata. ShaderX5, Tecniche avanzate di rendering, Wolfgang F. Buffer, Ed. Charles River Media, Boston, Massachusetts. 2006. pp. 197–206.

Stamminger, Marc e Drettakis, George. Mappe ombreggiature prospettica. Conferenza internazionale sulle tecniche informatiche e interattive, atti della 29a conferenza annuale sulle tecniche informatiche e interattive. 2002, pp 557–562.

Wimmer, M., Scherzer, D., e Purgathofer, W. Mappe ombreggiature della prospettiva dello spazio chiaro. Simposio eurografico sul rendering. 2004. Revisione del 10 giugno 2005. Technische Universität Vienna.