Question

Si je comprends bien, la cartographie de l'ombre est faite en rendant la scène du point de vue de la lumière pour créer une carte de profondeur. Ensuite, vous rendant la scène du POV de la caméra et pour chaque point (fragment dans GLSL) dans la scène, vous calculez la distance entre la source de la lumière; Si cela correspond à ce que vous avez dans votre carte d'ombre, alors c'est à la lumière, sinon c'est dans l'ombre.

Je ne faisais que lire via ce tutoriel pour avoir une idée de la façon de faire la cartographie des ombres avec une lumière ponctuelle / omnidirectionnelle.

en vertu de la section 12.2.2 Selon:

Nous utilisons une carte d'ombre unique pour toutes les sources de lumière

et ensuite sous 12.3.6, il dit:

1) Calculez la distance au carré du pixel actuel sur la source de lumière.
...
4) Comparez la valeur de distance calculée avec la valeur de la carte ombre extraite pour déterminer si nous sommes ou non à l'ombre.

qui est à peu près ce que j'ai énoncé ci-dessus.

Ce que je ne reçois pas, c'est si nous avons cuissé toutes nos lumières dans une carte d'ombre, alors quelle lumière devons-nous comparer la distance à la distance? La distance cuite au four dans la carte ne doit pas correspondre à rien, car c'est un mélange de toutes les lumières, n'est-ce pas?

Je suis sûr que je manque quelque chose, mais j'espère que quelqu'un peut m'expliquer cela.


En outre, si nous utilisons une carte ombre unique, comment le mélangez-nous pour toutes les sources lumineuses?

Pour une seule source de lumière, la carte d'ombre stocke simplement la distance de l'objet le plus proche de la lumière (c'est-à-dire une carte de profondeur), mais pour plusieurs sources de lumière, que contiendraient-t-il?

Était-ce utile?

La solution

Vous avez coupé la phrase courte prématurément:

Nous utilisons une carte d'ombre unique pour toutes les sources de lumière, créant une image avec rendu multipass et effectuer une passe pour chaque lumière source.

Donc, la carte d'ombre contient les données d'une seule source de lumière à la fois, mais elles n'utilisent qu'une seule carte car elles ne rendent qu'une seule lumière à la fois.

Je pense que cela s'écoule dans votre deuxième question - Lumière est additif afin de combiner les résultats de plusieurs lumières simplement en les ajoutant ensemble. Dans le cas de GPU GEMS, ils s'ajoutent directement dans la mémoire tampon de cadre, sans aucun doute en raison du nombre relativement limité d'échantillonneurs de texture de stockage disponibles sur les GPU à l'époque. De nos jours, vous voulez probablement faire une combinaison de combiner dans le tampon de cadre et directement dans le shader de fragment.

Vous appliquez également généralement le test de "pixel est allumé s'il est inférieur ou égal à la distance dans la mémoire tampon d'ombre plus un peu" plutôt que exactement égale, en raison de l'accumulation d'erreur de point flottant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top