Lumières et matériaux (Direct3D 9)
Les lumières sont utilisées pour illuminer les objets d’une scène. Lorsque l’éclairage est activé, Direct3D calcule la couleur de chaque vertex d’objet en fonction d’une combinaison des éléments suivants :
Notes
Cette section concerne uniquement le pipeline à fonction fixe. Les nuanceurs programmables exécutent tout l’éclairage explicitement.
- Couleur de matériau actuelle et les texels dans une carte de texture associée.
- Couleurs diffuses et spéculaires au sommet, si elles sont spécifiées.
- Couleur et intensité de la lumière produite par les sources de lumière dans la scène ou le niveau de lumière ambiante de la scène.
Lorsque vous utilisez l’éclairage et les matériaux Direct3D, vous autorisez Direct3D à gérer les détails de l’éclairage pour vous. Les utilisateurs avancés peuvent effectuer l’éclairage par eux-mêmes, si vous le souhaitez.
La façon dont vous travaillez avec l’éclairage et les matériaux fait une grande différence dans l’apparence de la scène rendue. Les matériaux définissent la façon dont la lumière se reflète sur une surface. La lumière directe et les niveaux de lumière ambiante définissent la lumière qui est réfléchie. Vous devez utiliser des matériaux pour restituer une scène si l’éclairage est activé. Les lumières ne sont pas nécessaires pour restituer une scène, mais les détails d’une scène rendue sans lumière ne sont pas visibles. Au mieux, le rendu d’une scène non éclairée aboutit à une silhouette des objets de la scène. Ce n’est pas assez détaillé pour la plupart des fins.
Lumière directe par rapport à la lumière ambiante
Bien que la lumière directe et ambiante éclaire les objets d’une scène, ils sont indépendants les uns des autres, ils ont des effets très différents, et ils nécessitent que vous les travailliez de manière complètement différente.
La lumière directe est juste cela: direct. La lumière directe a toujours une direction et une couleur, et elle est un facteur pour les algorithmes d’ombrage, comme l’ombrage de Gouraud. Différents types de lumières émettent de la lumière directe de différentes manières, créant des effets d’atténuation spéciaux. Vous créez un ensemble de paramètres de lumière pour la lumière directe en appelant la méthode IDirect3DDevice9::SetLight .
La lumière ambiante est effectivement partout dans une scène. Vous pouvez le considérer comme un niveau général de lumière qui remplit une scène entière, quels que soient les objets et leurs emplacements dans cette scène. La lumière ambiante n’a ni position ni direction, uniquement la couleur et l’intensité. Chaque lumière ajoute à la lumière ambiante globale d’une scène. Définissez le niveau de lumière ambiante avec un appel à la méthode IDirect3DDevice9::SetRenderState , en spécifiant D3DRS_AMBIENT comme paramètre State et la couleur RVBA souhaitée comme paramètre Value.
La couleur de lumière ambiante prend la forme d’une valeur RVBA, où chaque composant est une valeur entière comprise entre 0 et 255. Cela est différent de la plupart des valeurs de couleur dans Direct3D.
Vous pouvez utiliser la macro D3DCOLOR_RGBA pour générer des valeurs RVBA. Les composants rouge, vert et bleu se combinent pour créer la couleur finale de la lumière ambiante. Le composant alpha contrôle la transparence de la couleur. Lors de l’utilisation de l’accélération matérielle ou de l’émulation RVB, le composant alpha est ignoré.
Direct3D Light Model vs. Nature
Dans la nature, lorsque la lumière est émise à partir d’une source, elle est reflétée sur des centaines, voire des milliers ou des millions d’objets avant d’atteindre l’œil de l’utilisateur. Chaque fois qu’elle est réfléchie, une partie de la lumière est absorbée par une surface, d’autres sont dispersées dans des directions aléatoires, et le reste passe à une autre surface ou à l’œil de l’utilisateur. Ce processus se poursuit jusqu’à ce que la lumière soit réduite à rien ou qu’un utilisateur perçoit la lumière.
Évidemment, les calculs nécessaires pour simuler parfaitement le comportement naturel de la lumière prennent trop de temps pour être utilisés pour les graphiques Direct3D en temps réel. Par conséquent, avec la vitesse à l’esprit, le modèle de lumière Direct3D se rapproche de la façon dont la lumière fonctionne dans le monde naturel. Direct3D décrit la lumière en termes de composants rouges, verts et bleus qui se combinent pour créer une couleur finale.
Dans Direct3D, lorsque la lumière se reflète sur une surface, la couleur de lumière interagit mathématiquement avec la surface elle-même pour créer la couleur affichée à l’écran. Pour plus d’informations sur les algorithmes que Direct3D utilise, consultez Mathématiques de l’éclairage (Direct3D 9).
Le modèle de lumière Direct3D généralise la lumière en deux types : la lumière ambiante et la lumière directe. Chacun a des attributs différents et interagit avec le matériau d’une surface de différentes manières. La lumière ambiante est une lumière qui a été tellement diffusée que sa direction et sa source sont indéterminées : elle maintient un faible niveau d’intensité partout. L’éclairage indirect utilisé par les photographes est un bon exemple de lumière ambiante. La lumière ambiante dans Direct3D, comme dans la nature, n’a pas de direction ou de source réelle, seulement une couleur et une intensité. En fait, le niveau de lumière ambiante est complètement indépendant des objets d’une scène qui génèrent de la lumière. La lumière ambiante ne contribue pas à la réflexion spéculaire.
La lumière directe est la lumière générée par une source dans une scène ; il a toujours la couleur et l’intensité, et il se déplace dans une direction spécifiée. La lumière directe interagit avec le matériau d’une surface pour créer des surbrillances spéculaires, et sa direction est utilisée comme facteur dans les algorithmes d’ombrage, y compris l’ombrage de Gouraud. Lorsque la lumière directe est réfléchie, elle ne contribue pas au niveau de lumière ambiante dans une scène. Les sources d’une scène qui génèrent de la lumière directe ont des caractéristiques différentes qui affectent la façon dont elles éclairent une scène.
En outre, le matériau d’un polygone a des propriétés qui affectent la façon dont ce polygone reflète la lumière qu’il reçoit. Vous définissez un trait de réflectance unique qui décrit la façon dont le matériau reflète la lumière ambiante, et vous définissez des traits individuels pour déterminer la réflectance spéculaire et diffuse du matériau. Pour plus d’informations, consultez Matériaux (Direct3D 9).
Valeurs de couleur pour les lumières et les matériaux
Direct3D décrit la couleur en termes de quatre composants (rouge, vert, bleu et alpha) qui se combinent pour créer une couleur finale. La structure C++ D3DCOLORVALUE est définie pour contenir des valeurs pour chaque composant. Chaque membre est une valeur à virgule flottante qui varie généralement de 0,0 à 1,0, inclus. Bien que les lumières et les matériaux utilisent la même structure pour décrire la couleur, les valeurs de la structure sont utilisées un peu différemment par chacun.
Les valeurs de couleur pour les sources de lumière représentent la quantité d’un composant lumineux particulier qu’elle émet. Étant donné que les lumières n’utilisent pas de composant alpha, seuls les composants rouge, vert et bleu de la couleur sont pertinents. Vous pouvez visualiser les trois composants sous forme de lentilles rouges, vertes et bleues sur un téléviseur de projection. Chaque lentille peut être désactivée (une valeur de 0,0 dans le membre approprié), elle peut être aussi brillante que possible (une valeur 1.0) ou elle peut être d’un certain niveau entre les deux. Les couleurs qui traversent les lentilles se combinent pour faire la couleur finale de la lumière. Une combinaison comme R(1.0), G(1.0), B(1.0) crée une lumière blanche, où R(0.0), G(0.0), B(0.0) n’émet aucune lumière. Vous pouvez créer une lumière qui n’émet qu’un seul composant, ce qui donne une lumière rouge, verte ou bleue pure; ou, la lumière pourrait utiliser des combinaisons pour émettre des couleurs comme le jaune ou le violet. Vous pouvez même définir des valeurs de composant de couleur négative pour créer une « lumière foncée » qui supprime la lumière d’une scène. Vous pouvez également définir les composants sur une valeur supérieure à 1.0 pour créer une lumière extrêmement vive.
Avec les matériaux, d’autre part, les valeurs de couleur représentent la quantité d’un composant lumineux est réfléchie par une surface qui est rendue avec ce matériau. Un matériau dont les composants de couleur sont R(1.0), G(1.0), B(1.0), A(1.0) reflète toute la lumière qui s’affiche. De même, un matériau avec R(0.0), G(1.0), B(0.0), A(1.0) reflète toute la lumière verte qui lui est dirigée. Les matériaux ont plusieurs valeurs de réflectance pour créer différents types d’effets.
Des informations supplémentaires sont contenues dans : Types de lumière (Direct3D 9) et Propriétés de la lumière (Direct3D 9)..
Rubriques connexes