Sur cette page

Cartographie des ombres

Introduction

Lacartographie des omb res est une technique courante qui permet de créer des ombres en temps réel dans une scène 3D. Elle consiste à rendre une texture de carte de profondeur du point de vue de la source lumineuse. Ensuite, lors de l'ombrage d'un pixel d'un modèle 3D, sa valeur de profondeur est comparée à la carte de profondeur et il est ombré plus sombre s'il est dans l'ombre ou plus clair s'il est éclairé par la lumière.

Les ombres ajoutent au réalisme perceptif d'une scène et facilitent l'évaluation de la position relative des objets.

Comparaison d'une scène sans ombres et avec ombres activées

Remarquez que dans la scène de gauche de l'image, il est impossible de savoir à quelle distance du plan se trouvent les objets, alors que dans la scène de droite, les ombres facilitent cette tâche.

Qt XML prend en charge le mappage des ombres pour nos trois types de lumière, DirectionalLight, PointLight et SpotLight. Pour activer les ombres dans votre scène, vous devez d'abord configurer la lumière pour qu'elle projette des ombres en réglant castsShadow sur true. Vous pouvez ensuite contrôler les modèles qui projettent et reçoivent des ombres en réglant castsShadows et receivesShadows sur true ou false.

Lumières directionnelles

La lumière directionnelle émet de la lumière dans une direction à partir d'une source non identifiable située à une distance infinie. Ce fonctionnement est similaire à celui de la lumière du soleil dans la vie réelle. Une lumière directionnelle a une portée infinie et ne diminue pas.

Cartes d'ombres en cascade

L'un des problèmes du site DirectionalLight est qu'il rend l'ensemble de la scène du point de vue de la lumière. Cela peut conduire à des ombres de forme irrégulière lorsque la taille de la carte d'ombres n'est pas suffisante. Une option pour obtenir une meilleure qualité de rendu est d'utiliser des cartes d'ombres en cascade (CSM). Qt supporte une version de CSM appelée Parallell Split Shadow Maps (PSSM). La PSSM fonctionne en divisant le frustum de la vue en plusieurs parties et en rendant une carte d'ombres pour chaque partie.

Diagramme du spectre visuel divisé en cascades pour le mappage des ombres

Cette image montre une image abstraite d'un frustum de vue avec des divisions PSSM. Il y a deux divisions qui aboutissent à trois cascades.

De cette manière, vous pouvez obtenir une meilleure résolution de la carte d'ombres près de la caméra, où la qualité visuelle est plus perceptible, et une résolution plus faible loin de la caméra, où la qualité visuelle est moins perceptible.

Comparaison de la qualité des ombres avec les cartes d'ombres en cascade 0 et 3

L'image ci-dessus montre une carte d'ombres sans aucun fractionnement (à gauche) et une carte d'ombres avec 3 fractionnements (à droite).

Vous pouvez contrôler le nombre de séparations en cascade à l'aide de la propriété csmNumSplits et l'emplacement des séparations à l'aide des propriétés csmSplit1, csmSplit2 et csmSplit3. Pour obtenir des transitions agréables entre les séparations, vous pouvez spécifier une certaine quantité de mélange entre elles à l'aide de la propriété csmBlendRatio.

Scène montrant des artefacts de jointure d'ombre entre les cascades

L'image ci-dessus montre une vue agrandie d'un joint en cascade sans que le mélange soit actif.

Gardez à l'esprit que pour chaque séparation que vous ajoutez, l'application doit rendre un autre shadowmap, ce qui affecte négativement les performances. La taille de la zone de fusion a une incidence sur les performances ; elle doit donc être aussi petite que possible.

Lumière ponctuelle

Le site PointLight peut être décrit comme une sphère, émettant de la lumière avec la même force dans toutes les directions à partir du centre de la lumière jusqu'à un rayon donné. Cela ressemble à la façon dont une ampoule émet de la lumière.

Scène avec lumière ponctuelle projetant des ombres

Le site PointLight effectue le rendu de sa carte d'ombres dans une cubemap, ce qui signifie qu'il effectue six passes de rendu. Cela peut s'avérer très coûteux en termes de calcul.

Lumière ponctuelle

Le site SpotLight émet de la lumière dans une seule direction, sous la forme d'un cône défini par la propriété coneAngle. L'intensité de la lumière diminue à l'approche de la propriété coneAngle. L'angle auquel l'intensité de la lumière commence à diminuer est défini par la propriété innerConeAngle. Ce phénomène est similaire à la façon dont une lampe de poche ou un spot lumineux émet de la lumière.

Scène avec éclairage ponctuel projetant des ombres

Contrairement à PointLight, SpotLight rend sa carte d'ombres en une seule carte de profondeur.

Performances et optimisation de la scène

Bien que Qt essaie de fournir des valeurs par défaut raisonnables pour les propriétés liées au shadowmapping, il est souvent nécessaire de les modifier pour les adapter à la scène spécifique. En particulier si vous avez une scène qui est beaucoup plus petite ou plus grande que ce qui est attendu. La section suivante explique plus en détail comment vous pouvez modifier les valeurs pour que la carte des ombres soit belle tout en conservant les meilleures performances possibles.

Le biais des ombres

Shadow bias est un moyen d'éliminer ce que l'on appelle l'acné des ombres, c'est-à-dire les fausses ombres qui apparaissent généralement dans certains motifs. Le biais d'ombre décale la texture de profondeur de la carte des ombres de manière à ce que les ombres apparaissent plus loin de l'objet ombré, ce qui corrige souvent l'acné de l'ombre. L'inconvénient est que si vous avez trop de biais d'ombre, vous pouvez obtenir un effet appelé "peter panning" où l'ombre est trop éloignée de l'objet qui fait de l'ombre. Il est également possible de réduire l'acné des ombres en augmentant la résolution de la carte des ombres.

Comparaison des effets de l'ajustement du biais de l'ombre

L'image ci-dessus montre une scène avec un biais d'ombre de 0 (à gauche) contre un biais d'ombre de 10 (à droite). La scène de gauche présente de fausses ombres sur le dessus des cônes et des cylindres.

Résolution de la carte d'ombres

La résolution/qualité de la carte des ombres est contrôlée par la propriété shadowMapQuality. Une qualité de shadowmap plus élevée diminue l'effet de bloc des ombres, mais est plus coûteuse à rendre ; il faut donc la régler aussi bas que possible tout en conservant la qualité visuelle nécessaire.

Comparaison des cartes d'ombres à basse et haute résolution

L'image ci-dessus montre une scène avec une résolution de shadowmap faible et une résolution de shadowmap élevée.

Qualité des ombres douces

Les ombres douces sont un moyen d'approcher l'aspect des ombres dans la vie réelle, où elles s'estompent en passant de plus dures à plus douces sur les bords. La qualité des ombres douces est contrôlée par la propriété softShadowQuality. Elle prend en charge les ombres dures sans douceur ainsi que les ombres douces avec filtrage en pourcentage (PCF) de qualité variable. Les ombres dures sont les moins chères à rendre et le PCF devient de plus en plus coûteux au fur et à mesure que la qualité augmente. Pour contrôler le rayon de l'ombre douce, utilisez la propriété pcfFactor. La valeur de pcfFactor n'a pas d'impact sur la vitesse de rendu, mais plus elle est élevée, plus la qualité de l'ombre douce doit être bonne.

Comparaison des ombres à bords durs et des ombres douces

L'image ci-dessus montre une scène avec une ombre softShadowQuality Light.Hard à gauche et une scène avec une ombre softShadowQuality Light.PCF32 et pcfFactor 10 à droite.

Carte d'ombres à grande distance

La propriété shadowMapFar peut être utilisée pour contrôler la distance maximale de la carte d'ombres. Cette propriété fonctionne de manière légèrement différente pour PointLight et SpotLight par rapport à DirectionalLight.

Pour PointLight/SpotLight, elle détermine la taille de la boîte de délimitation de l'ombre rendue, mais pour DirectionalLight, elle définit à quelle distance de la caméra de la scène la carte d'ombres doit être couverte dans la scène.

Comparaison des ajustements des plans d'ombre proches et éloignés

L'image ci-dessus montre la même scène avec la même lumière directionnelle mais deux valeurs différentes pour shadowMapFar.

Profondeur de la carte d'ombres

Dans certains cas, lorsque la scène est très grande, la carte des ombres doit couvrir une grande zone dans son axe de profondeur. Par exemple, si vous avez de nombreux objets éloignés de la caméra qui projettent encore des ombres et qui doivent faire partie des limites de la carte d'ombres. Ce qui peut arriver dans ce cas, c'est que même avec une adresse shadowBias plus élevée, la scène présente encore des artefacts de banding. Une façon d'y remédier est d'utiliser une profondeur de 32 bits sur la carte d'ombres. La définition de la propriété use32BitShadowmap à true permet d'activer cette fonction pour la lumière en question.

Comparaison de la précision des cartes d'ombres 32 bits et 16 bits

L'image ci-dessus montre la même scène avec la même lumière directionnelle, mais l'une utilisant une shadowmap 32 bits et l'autre une shadowmap 16 bits.

Voir également Utilisation de l'éclairage basé sur l'image, Lightmaps et illumination globale, et Qt Quick 3D - Exemple de cartes d'ombres en cascade.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.