Techniques courantes pour améliorer les cartes de profondeur d’ombre
Les cartes d’ombres, introduites en 1978, sont une technique courante pour ajouter des ombres aux jeux. Trois décennies plus tard, malgré les progrès réalisés dans le matériel et les logiciels, les artefacts d’ombre, à savoir les bords scintillants, l’alias de perspective et d’autres problèmes de précision, persistent.
Cet article technique fournit une vue d’ensemble de certains algorithmes courants de mappage de profondeur d’ombre et d’artefacts communs, et explique plusieurs techniques, allant de de base à intermédiaire, qui peuvent être utilisées pour augmenter la qualité des cartes d’ombre standard. L’ajout de cartes d’ombres de base à un titre est généralement simple, mais comprendre les nuances des artefacts d’ombre peut être difficile. Cet article technique est écrit pour le développeur graphique intermédiaire qui a implémenté des ombres, mais ne comprend pas entièrement pourquoi des artefacts spécifiques apparaissent et ne sait pas comment les contourner.
La sélection des techniques appropriées pour atténuer les artefacts spécifiques n’est pas une valeur non dérivée. Lorsque les lacunes de la carte d’ombre sont traitées, la différence de qualité peut être impressionnante (Figure 1). L’implémentation correcte de ces techniques améliore considérablement les ombres standard. Les techniques expliquées dans cet article sont implémentées dans l’exemple CascadedShadowMaps11 dans le Kit de développement logiciel (SDK) DirectX.
Figure 1. Ombres avec des artefacts graves (à gauche) et ombres après l’implémentation des techniques décrites dans cet article (à droite)
Examen des cartes de profondeur d’ombre
L’algorithme de la carte de profondeur d’ombre est un algorithme à deux passes. La première passe génère une carte de profondeur dans l’espace clair. Dans la deuxième passe, cette carte est utilisée pour comparer la profondeur de chaque pixel dans l’espace clair par rapport à sa profondeur correspondante dans la carte de profondeur de l’espace clair.
Figure 2 : Parties clés d’une scène d’ombre
Passer 1
La scène est illustrée dans la figure 2. Dans la première passe (Figure 3), la géométrie est rendue dans une mémoire tampon de profondeur du point de vue de la lumière. Plus précisément, le nuanceur de vertex transforme la géométrie en espace d’affichage clair.
Le résultat final de cette première passe est une mémoire tampon de profondeur contenant les informations de profondeur de la scène du point de vue de la lumière. Cela peut maintenant être utilisé à la passe 2 pour déterminer quels pixels sont obstrués par la lumière.
Figure 3. Première passe du mappage d’ombres de base
Pass 2
Dans la deuxième passe (Figure 4), le nuanceur de vertex transforme chaque vertex deux fois. Chaque vertex est transformé en espace d’affichage de la caméra et transmis au nuanceur de pixels comme position. Chaque vertex est également transformé par la matrice de texture de projection de vue de la lumière et transmise au nuanceur de pixels en tant que coordonnée de texture. La matrice de texture de projection d’affichage est la même matrice que celle utilisée pour restituer la scène dans la passe 1 avec une transformation supplémentaire. Il s’agit d’une transformation qui met à l’échelle et traduit les points de l’espace d’affichage (–1 à 1 en X et Y) en espace de texture (0 à 1 en X et 1 à 0 en Y).
Le nuanceur de pixels reçoit la position interpolée et les coordonnées de texture interpolées. Tout ce qui est nécessaire pour effectuer le test de profondeur se trouve désormais dans cette coordonnée de texture. Le test de profondeur peut maintenant être effectué en indexant la mémoire tampon de profondeur à partir de la première passe avec les coordonnées de texture X et Y et en comparant la valeur de profondeur obtenue par rapport à la coordonnée de texture Z.
Figure 4. Deuxième passe de mappage d’ombres de base
Artefacts de la carte d’ombre
L’algorithme de la carte de profondeur d’ombre est l’algorithme d’ombre le plus utilisé en temps réel, mais produit toujours plusieurs artefacts nécessitant une atténuation. Les types d’artefacts qui peuvent se produire sont résumés ensuite.
Alias de perspective
L’alias de perspective, un artefact commun, est illustré dans la figure 5. Il se produit lorsque le mappage de pixels dans l’espace d’affichage aux texels dans la carte d’ombres n’est pas un rapport un-à-un. Cela est dû au fait que les pixels proches du plan proche sont plus proches et nécessitent une résolution de carte d’ombre plus élevée.
La figure 6 montre une carte d’ombres et un frustum d’affichage. Près de l’œil, les pixels sont plus proches et de nombreux pixels sont mappés aux mêmes texels d’ombre. Les pixels du plan lointain sont répartis, réduisant ainsi l’alias de perspective.
Figure 5. Alias de perspective élevée (à gauche) et alias de faible perspective (à droite)
Pour l’image à gauche, l’alias de perspective est plus élevé ; trop de pixels oculaires mappés aux mêmes texels de la carte d’ombre. Dans l’image à droite, l’alias de perspective est faible, car il existe un mappage de 1:1 entre les pixels d’espace oculaire et les texels de la carte d’ombre.
Figure 6. Afficher le frustum avec la carte d’ombres
Les pixels lumineux dans le plan lointain représentent des alias de faible perspective, et les pixels sombres dans le plan proche représentent l’alias de perspective élevée.
La résolution de la carte d’ombres peut également être trop élevée. Bien qu’une résolution plus élevée soit moins visible, elle peut néanmoins entraîner de petits objets, tels que des câbles téléphoniques, et non des ombres. En outre, une résolution trop élevée peut entraîner de graves problèmes de performances en raison de modèles d’accès de texture.
Les cartes d’ombres de perspective (PSM) et les cartes d’ombres de perspective de lumière (LSPSM) tentent d’aborder l’alias de perspective en émettant la matrice de projection de la lumière afin de placer plus de texels près de l’œil où ils sont nécessaires. Malheureusement, aucune technique n’est en mesure de résoudre l’alias de perspective. Le paramétrage de la transformation nécessaire pour mapper des pixels d’espace oculaire aux texels dans la carte d’ombre ne peut pas être lié par une asymétrie linéaire. Un paramétrage logarithmique est requis. Les PSM mettent trop de détails près de l’œil, provoquant des ombres distantes de faible qualité ou même disparaître. Les LSPSM font un meilleur travail de trouver un milieu entre l’augmentation de la résolution près de l’œil et laissant suffisamment de détails pour les objets éloignés. Les deux techniques dégénèrent en ombres orthographiques dans certaines configurations de scène. Cette dégénération peut être contrecarré en rendant une carte d’ombre distincte pour chaque face du frustum de vue, bien que cela soit coûteux. Les mappages d’ombres de perspective logarithmique (LogPSMs) affichent également une carte distincte par face du frustum d’affichage. Cette technique utilise la rastérisation non linéaire pour placer plus de texels près de l’œil. Le matériel de classe D3D10 et D3D11 ne prend pas en charge la rastérisation non linéaire. Pour plus d’informations sur ces techniques et algorithmes, consultez la section Références.
Les cartes d’ombre en cascade (CSM) sont la technique la plus populaire pour gérer l’alias de perspective. Bien que les machines virtuelles cloud puissent être combinées avec des modules PSM et des LSPSM, il n’est pas nécessaire. L’utilisation de CSM pour corriger les erreurs d’alias de perspective est traitée dans l’article complémentaire, Cascaded Shadow Maps.
Alias projectif
L’alias projectif est plus difficile à afficher que l’alias de perspective. Les ombres distendues mises en surbrillance dans la figure 7 illustrent les erreurs d’alias projectives. L’alias projectif se produit lorsque le mappage entre les texels dans l’espace de caméra et les texels dans l’espace clair n’est pas un rapport un-à-un ; cela est dû à l’orientation de la géométrie par rapport à la caméra légère. L’alias projectif se produit lorsque le plan tangent de la géométrie devient parallèle aux rayons lumineux.
Figure 7. Alias projetif élevé et alias faible projetif
Les techniques utilisées pour atténuer les erreurs d’alias de perspective atténuent également l’alias projectif. L’alias projectif se produit lorsque la surface normale est orthogonale à la lumière ; ces surfaces doivent recevoir moins de lumière en fonction des équations d’éclairage diffuse.
Acné de l’ombre et ombre erronée auto-ombrage
L’acné de l’ombre (Figure 8), un terme synonyme d’auto-ombre erronée, se produit lorsque la carte d’ombres quantifie la profondeur sur un texel entier. Lorsque le nuanceur compare une profondeur réelle à cette valeur, il est aussi susceptible d’être ombré qu’il ne doit pas être éclipsé.
Une autre raison pour l’acné de l’ombre est que le texel dans l’espace clair est si proche de la profondeur du texel correspondant dans la carte de profondeur que les erreurs de précision provoquent l’échec erroné du test de profondeur. Une des raisons de cette différence de précision est que la carte de profondeur a été calculée par le matériel de rastérisation de fonction fixe, tandis que la profondeur comparée a été calculée par le nuanceur. L’alias projectif peut également provoquer l’acné de l’ombre.
Figure 8. Artefact d’acné de l’ombre
Comme illustré dans l’image de gauche, certains pixels ont échoué le test de profondeur et ont créé des artefacts et des modèles moiré. Afin de réduire l’ombre erronée de l’auto-ombre, les limites sur le plan proche et le plan lointain pour le frustum de vue de l’espace clair doivent être calculées aussi étroitement que possible. Le biais de profondeur basé sur l’échelle de pente et d’autres types de biais sont d’autres solutions utilisées pour atténuer l’acné de l’ombre.
Peter Panning
Le terme Peter Panning dérive son nom d’un personnage de livre d’enfants dont l’ombre est devenue détachée et qui pourrait voler. Cet artefact rend les objets avec des ombres manquantes semblent être détachés et flottants au-dessus de la surface (Figure 9).
Figure 9. Artefact Peter Panning
Dans l’image à gauche, l’ombre est détachée de l’objet, créant un effet flottant.
Une technique pour supprimer l’acné de surface consiste à ajouter une valeur à la position de pixels dans l’espace clair ; il s’agit de l’ajout d’un décalage de profondeur. Peter Panning résultats lorsque le décalage de profondeur utilisé est trop grand. Dans ce cas, le décalage de profondeur entraîne la réussite erronée du test de profondeur. Comme l’acné de l’ombre, Peter Panning est aggravé lorsqu’il y a une précision insuffisante dans la mémoire tampon de profondeur. Le calcul de plans proches et de loin permet également d’éviter Peter Panning.
Techniques d’amélioration des mappages instantanés
L’ajout d’ombres à un titre est un processus. La première étape consiste à obtenir des cartes d’ombres de base qui fonctionnent. La seconde consiste à garantir que tous les calculs de base sont effectués de manière optimale : le frusta s’adapte aussi étroitement que possible, les plans proches/éloignés s’adaptent étroitement, le biais à l’échelle de la pente est utilisé, et ainsi de suite. Une fois que les ombres de base sont activées et qu’elles sont aussi bonnes que possible, le développeur a une meilleure idée de ce que les algorithmes sont nécessaires pour obtenir les ombres à une fidélité suffisante. Des conseils de base qui peuvent être nécessaires pour obtenir des mappages d’ombres de base regardant leurs meilleurs sont donnés dans cette section.
Biais de profondeur à l’échelle de la pente
Comme mentionné précédemment, l’ombre peut entraîner l’acné de l’ombre. L’ajout d’un trop grand biais peut entraîner Peter Panning. En outre, les polygones avec pentes raides (par rapport à la lumière) souffrent davantage d’alias projectif que de polygones avec des pentes peu profondes (par rapport à la lumière). En raison de cela, chaque valeur de carte de profondeur peut avoir besoin d’un décalage différent en fonction de la pente du polygone par rapport à la lumière.
Le matériel Direct3D 10 a la possibilité de biaiser un polygone en fonction de sa pente par rapport à la direction de la vue. Cela a l’effet de l’application d’un biais important à un polygone qui est affiché bord-on à la direction de la lumière, mais qui n’applique pas de biais à un polygone face directement à la lumière. La figure 10 illustre la façon dont deux pixels voisins peuvent alterner entre ombres et non éclipsées lors des tests sur la même pente non biaisée.
Figure 10. Biais de profondeur mis à l’échelle de pente par rapport à la profondeur non biaisée
Calcul d’une projection serrée
L’ajustement serré de la projection de la lumière à la frustum de vue augmente la couverture de la carte d’ombre. La figure 11 illustre que l’utilisation d’une projection arbitraire ou l’ajustement de la projection aux limites de la scène entraîne un alias de perspective plus élevé.
Figure 11. Frustum d’ombre arbitraire et frustum d’ombre s’adaptent à la scène
La vue est du point de vue de la lumière. Le trapézoïde représente le frustum de la caméra de vue. La grille dessinée sur l’image représente la carte d’ombres. L’image à droite montre que la même carte d’ombres de résolution crée plus de couverture texel lorsqu’elle est plus étroitement adaptée à la scène.
La figure 12 illustre les frustums appropriés. Pour calculer la projection, les huit points qui composent le frustum de vue sont transformés en espace clair. Ensuite, les valeurs minimales et maximales dans X et Y sont trouvées. Ces valeurs constituent les limites d’une projection orthographique.
Figure 12. Projection d’ombre adaptée à la vue frustum
Il est également possible de découper le frustum à la scène AABB pour obtenir une limite plus serrée. Cela n’est pas conseillé dans tous les cas, car cela peut changer la taille de la projection de la caméra légère du cadre au cadre. De nombreuses techniques, telles que celles décrites dans la section Déplacement des incréments de taille light Texel, donnent de meilleurs résultats lorsque la taille de la projection de la lumière reste constante dans chaque image.
Calcul du plan proche et du plan lointain
Le plan proche et le plan lointain sont les éléments finaux nécessaires pour calculer la matrice de projection. Plus les plans sont étroitement regroupés, plus les valeurs sont précises dans la mémoire tampon de profondeur.
La mémoire tampon de profondeur peut être 16 bits, 24 bits ou 32 bits, avec des valeurs comprises entre 0 et 1. En règle générale, les mémoires tampons de profondeur sont des points fixes, avec les valeurs proches du plan proche regroupées plus étroitement que les valeurs proches du plan lointain. Le degré de précision disponible pour la mémoire tampon de profondeur est déterminé par le rapport du plan proche au plan lointain. L’utilisation du plan proche/lointain le plus serré possible peut permettre l’utilisation d’une mémoire tampon de profondeur 16 bits. Une mémoire tampon de profondeur 16 bits peut réduire l’utilisation de la mémoire tout en augmentant la vitesse de traitement.
Plan proche basé sur AABB et plan lointain
Un moyen simple et naïf de calculer le plan proche et lointain consiste à transformer le volume englobant de la scène en espace clair. La plus petite valeur de coordonnée Z est le plan proche et la plus grande valeur de coordonnée Z est le plan lointain. Pour de nombreuses configurations de la scène et de la lumière, cette approche est suffisante. Toutefois, le pire scénario peut entraîner une perte significative de précision dans la mémoire tampon de profondeur ; La figure 13 montre un tel scénario. Ici, la plage du plan proche du plan lointain est quatre fois plus grande que nécessaire.
La vue frustum dans la figure 13 a été choisie de manière à être petite. Une petite vue frustum est montrée dans une très grande scène composée de piliers s’étendant à partir de la caméra de vue. L’utilisation de la scène AABB pour les plans proches et lointains n’est pas optimale. L’algorithme CSM décrit dans l’article technique Cascaded Shadow Maps doit calculer des plans proches et éloignés pour des frustums très petits.
Figure 13. Plans proches et lointains basés sur scène AABB
Plan proche basé sur frustum et plan lointain
Une autre technique pour calculer les plans proches et lointains consiste à transformer le frustum en espace léger et à utiliser les valeurs minimales et maximales en Z comme les plans proches et lointains, respectivement. La figure 14 illustre les deux problèmes liés à cette approche. Tout d’abord, le calcul est trop conservateur, comme indiqué lorsque le frustum s’étend au-delà de la géométrie de la scène. Deuxièmement, le plan proche peut être trop serré, ce qui entraîne l’rognage des casters d’ombre.
Figure 14 : Plans proches et lointains basés uniquement sur la vue frustum
Frustum lumineux croisé avec scène pour calculer des plans proches et lointains
La méthode appropriée pour calculer les plans proches et lointains est illustrée dans la figure 15. Quatre des plans du frustum de lumière orthographique ont été calculés à l’aide du minimum et du maximum des coordonnées X et Y de la vue frustum dans l’espace clair. Les deux derniers plans de la vue orthogonale frustum sont les plans proches et lointains. Pour trouver ces plans, les limites de la scène sont clippées contre les quatre plans de frustum légers connus. Les plus petites et les plus grandes valeurs Z de la limite nouvellement clippée représentent respectivement le plan proche et le plan lointain.
Le code qui effectue cette opération se trouve dans l’exemple CascadedShadowMaps11. Les huit points qui composent l’AABB du monde sont transformés en espace léger. La transformation des points en espace clair simplifie les tests de découpage. Les quatre plans connus du frustum léger peuvent maintenant être représentés sous forme de lignes. Les scènes englobant le volume dans l’espace clair peuvent être représentées sous la forme de six quadrilatères. Ces 6 quadrilatérales peuvent ensuite être transformés en 12 triangles pour le découpage basé sur des triangles. Les triangles sont coupés par rapport aux plans connus de la vue frustum (il s’agit de lignes horizontales et verticales dans X et Y dans l’espace clair). Lorsqu’un point d’intersection est trouvé dans X et Y, le triangle 3D est coupé à ce stade. Les valeurs Z minimales et maximales de tous les triangles clippés sont le plan proche et le plan lointain. L’exemple CascadedShadowMaps11 montre comment effectuer cette capture dans la fonction ComputeNearAndFar .
Il existe deux techniques supplémentaires qui pourraient être utilisées pour calculer les plans les plus proches et lointains possibles les plus serrés. Ces techniques ne sont pas affichées dans l’exemple CascadedShadowMaps.
Même des plans plus proches et éloignés peuvent être calculés en croisant une hiérarchie d’une scène ou d’objets individuels dans une scène contre le frustum lumineux. Il s’agirait d’un calcul plus complexe. Bien qu’il ne soit pas illustré dans l’exemple CascadedShadowMaps11, il peut s’agir d’une technique valide pour certaines vignettes.
Le plan lointain peut être calculé en prenant le minimum de :
- La plus grande profondeur de la vue frustum dans l’espace clair.
- La plus grande profondeur de l’intersection de la vue frustum et la scène AABB.
Cette approche peut être problématique lorsqu’elle est utilisée avec des mappages d’ombres en cascade où il est possible d’indexer en dehors d’un frustum d’affichage. Dans ce cas, la géométrie de la carte d’ombre peut être manquante.
Figure 15 : Plans proches et lointains basés sur l’intersection des quatre plans calculés du frustum lumineux et de la géométrie englobante de la scène
Déplacement de la lumière par incréments de taille Texel
Un artefact courant dans les cartes d’ombres est l’effet de bord chatoyant. Lorsque l’appareil photo se déplace, les pixels le long des bords des ombres s’éclairent et s’assombrent. Cela ne peut pas être vu dans des images encore, mais il est très visible et distrait en temps réel. La figure 16 met en évidence ce problème et la figure 17 montre comment les bords d’ombre doivent ressembler.
L’erreur de bord scintillement se produit, car la matrice de projection lumineuse est recalculée chaque fois que la caméra se déplace. Cela crée des différences subtiles dans les cartes d’ombre générées. Tous les facteurs suivants peuvent influencer la matrice créée pour lier la scène.
- Taille de la vue frustum
- Orientation de la vue frustum
- Emplacement de la lumière
- Emplacement de la caméra
Chaque fois que cette matrice change, les bords des ombres peuvent changer.
Figure 16 : Bords d’ombre mijotants
Les pixels le long de la bordure de l’ombre entrent et sortent de l’ombre à mesure que la caméra passe de gauche à droite.
Figure 17 : Ombres sans bords chatoyants
Les bords d’ombre restent constants à mesure que la caméra passe de gauche à droite.
Pour les lumières directionnelles, la solution à ce problème consiste à arrondir la valeur minimale/maximale en X et Y (qui composent les limites de projection orthographique) aux incréments de taille de pixels. Cela peut être fait avec une opération de division, une opération de plancher et une multiplication.
vLightCameraOrthographicMin /= vWorldUnitsPerTexel;
vLightCameraOrthographicMin = XMVectorFloor( vLightCameraOrthographicMin );
vLightCameraOrthographicMin *= vWorldUnitsPerTexel;
vLightCameraOrthographicMax /= vWorldUnitsPerTexel;
vLightCameraOrthographicMax = XMVectorFloor( vLightCameraOrthographicMax );
vLightCameraOrthographicMax *= vWorldUnitsPerTexel;
La valeur vWorldUnitsPerTexel est calculée en prenant une limite du frustum de vue et en divisant la taille de la mémoire tampon.
FLOAT fWorldUnitsPerTexel = fCascadeBound /
(float)m_CopyOfCascadeConfig.m_iBufferSize;
vWorldUnitsPerTexel = XMVectorSet( fWorldUnitsPerTexel, fWorldUnitsPerTexel, 0.0f, 0.0f );
La délimitation de la taille maximale du frustum de vue entraîne un ajustement plus faible pour la projection orthographique.
Il est important de noter que la texture est de 1 pixel plus grande en largeur et hauteur lors de l’utilisation de cette technique. Cela empêche l’indexation des coordonnées d’ombre en dehors de la carte d’ombres.
Face arrière et face avant
Les mappages d’ombre doivent être rendus avec un culage arrière standard, un processus qui ignore la rastérisation des objets que la visionneuse ne peut pas voir et accélère le rendu de la scène. Une autre option courante consiste à restituer des mappages d’ombres avec le culling frontal activé, ce qui signifie que les objets face à la visionneuse sont éliminés. L’argument pour cela est qu’il aide à l’ombre automatique, car la géométrie constituant la sauvegarde des objets est légèrement décalée. Il y a deux problèmes avec cette idée.
- Tout objet avec une géométrie frontale ou arrière incorrecte provoque des artefacts dans la carte d’ombres. Toutefois, l’utilisation d’une géométrie frontale ou arrière incorrecte entraîne d’autres problèmes. Il peut donc être sûr de supposer que la géométrie avant-face et face arrière est effectuée correctement. Il peut être difficile de créer des visages arrière pour la géométrie basée sur sprite, telle que le feuillage.
- Peter Panning et les lacunes d’ombre près de la base d’objets tels que les murs sont plus susceptibles de se produire parce que la disparité de profondeur de l’ombre est trop petite.
Géométrie conviviale de la carte d’ombre
La création d’une géométrie qui fonctionne bien dans les cartes d’ombres permet une plus grande flexibilité lors de la lutte contre les artefacts tels que Peter Panning et l’acné de l’ombre.
Les arêtes dures sont problématiques pour l’ombre de soi. La disparité de profondeur près de l’extrémité du bord est très petite. Même un petit décalage peut entraîner la perte des ombres des objets (figure 18).
Figure 18 : Les arêtes nettes provoquent des artefacts provenant d’une disparité à faible profondeur avec des décalages
Les objets étroits tels que les murs doivent avoir des dos même s’ils ne sont jamais visibles. Cela augmentera la disparité de profondeur.
Il est également important de s’assurer que la direction de la géométrie est correcte ; autrement dit, l’extérieur d’un objet doit être à l’arrière et l’intérieur d’un objet doit être à l’avant. Cela est important pour le rendu avec le culling arrière activé, ainsi que pour lutter contre les effets du biais de profondeur.
Cartes d’ombre en cascade
Consultez également les mappages d’ombres en cascade et l’exemple d’application CascadedShadowMaps11. L’exemple illustre l’algorithme CSM (Shadow Map) en cascade, ainsi que plusieurs techniques qui peuvent être utilisées pour utiliser efficacement la carte d’ombres.
Vous trouverez l’exemple dans le Kit de développement logiciel (SDK) DirectX. Vous pouvez également effectuer une recherche web pour la trouver sur GitHub.
Résumé
Les techniques décrites dans cet article peuvent être utilisées pour augmenter la qualité des cartes d’ombre standard. L’étape suivante consiste à examiner les techniques qui peuvent fonctionner correctement avec les cartes d’ombre standard. Les machines virtuelles cloud sont recommandées comme une technique supérieure pour combattre l’alias de perspective. Le pourcentage de filtrage plus proche ou de mappages d’ombres de variance peut être utilisé pour adoucir les bords d’ombre. Pour plus d’informations, consultez l’article technique Cascaded Shadow Maps .
Donnelly, W. et Lauritzen, A. Mappages d’ombres de variance. Symposium on Interactive 3D Graphics, Proceedings of the 2006 Symposium on Interactive 3D Graphics and Games. 2006, pp. 161-165.
Engel, Woflgang F. Section 4. Cartes d’ombre en cascade. ShaderX5, Advanced Rendering Techniques, Wolfgang F. Engel, Ed. Charles River Media, Boston, Massachusetts. 2006. pp. 197-206.
Stamminger, Marc et Drettakis, George. Perspective Shadow Maps. Conférence internationale sur les graphismes informatiques et les techniques interactives, procédure de la 29e Conférence annuelle sur les graphiques informatiques et les techniques interactives. 2002, pp 557-562.
Wimmer, M., Scherzer, D., et Purgathofer, W. Plan d’ombre de perspective d’espace clair. Symposium Eurographics sur le rendu. 2004. Révision du 10 juin 2005. Technische Universität Wien.