Connexion
Pour récupérer votre compte, veuillez saisir votre adresse email. Vous allez recevoir un email contenant une adresse pour récupérer votre compte.
Inscription
En vous inscrivant, vous acceptez les conditions d'utilisation du site et de nous vendre votre âme pour un euro symbolique. Amusez vous, mais pliez vous à la charte.

Un Rédacteur Factornews vous demande :

ARTICLE

The Physical Based Rendering Dossier - Partie I

Ze_PilOt par Ze_PilOt,  email  @Ze_PilOt
 
La lumière réfléchie est définie par le matériau qui reçoit la lumière. Rendre cette lumière est le boulot du shader. Le shader est souvent séparé en deux parties distinctes : la diffusion (diffuse) et les réflections spéculaires (specular reflection) (2). Mais pourquoi? Quel est le phénomène réel derrière tout ça?

Quand un rayon de lumière frappe un objet, une partie de cette lumière est absorbée par le matériau, et une autre partie est immédiatement réfléchie.

Comment connait-on la part de lumière absorbée et de lumière réfléchie? Grâce aux recherches d'Augustin Jean Fresnel, qui au XVIIIème siècle s'intéressa grandement à la lumière et notamment les phénomènes de réflexion et de réfraction.
A ce propos je vous conseille la vision de l'excellente série "Cosmos" qui aborde et explique ces découvertes bien mieux que je ne pourrait le faire.


Lorsque la lumière frappe un objet une partie est réfléchie et une autre est déviée. Les équations de Fresnel permettent de connaître l'intensité de chaque part. La déviation du rayon refracté est calculée grâce aux équations trouvées par Descartes (qui adorait mater des gouttes d'eau, chacun son truc).

Mais la réfraction n'est pas limitée au verre. Entre l'air et le bois par l'exemple, il y a une réfraction et une réflexion, et c'est mesurable. La lumière qui est réfractée (une fraction de la lumière reçue, définie par l'équation de Fresnel) "rebondit" à l'intérieur du materiau.
Il se peut qu'une partie trouve son chemin vers l'autre coté de la surface (c'est très visible dans les matériaux dit translucides, comme votre peau ou une feuille), mais c'est valable pour quasiment tous les matériaux pour peu qu'ils soient suffisamment fins et que la source soit suffisamment forte.
Bien plus souvent, la lumière ressortira du côté par où elle est entrée après plusieurs rebonds.


A gauche, une approximation lorsque la lumière pénètre très peu l'objet. A droite, la lumière pénètre plus fortement l'objet, rebondit à l'intérieur, et finit par ressortir. Dans les deux cas, la réflexion est très diffuse. La méthode de gauche ("réflexion lambertienne" ou plus communément "shader lambert") est couramment employée par les moteurs de rendu temps réel car peu chère à évaluer contrairement à celle de droite.

Voici donc l'explication d'un autre buzzword : le sub-surface scattering (SSS), ou transluscence.
Ce qu'on appelle communément diffuse dans un moteur de rendu est une approximation très simple d'un SSS restant très en surface. En pré-calculé on oubliera la plupart du temps ces approximations (lambert,...) pour préférer un réel calcul de SSS. Le SSS prend notamment en compte la teinte que prendra le rayon sortant selon les couches traversées dans l'objet.


A gauche, une réflexion floue, approximée avec une équation de lambert. Au centre, un calcul de subsurface scattering restant très en surface est effectué, donnant un résultat identique au shader "lambert". A droite, le même calcul de subsurface scattering mais pénétrant bien plus loin dans l'objet.

La teinte et l'intensité finale de la lumière réfractée et ensuite diffusée (qu'elle passe en transluscence ou non) dépendra de quelles longueurs d'onde lumineuse ont été absorbées par la matière. Cette quantité s'appelle l'albedo. Dans un rendu PBR, on essayera de faire une map de diffusion correspondant à cet albedo (ne prenant donc pas en compte l'intensité de lumière reçue).

MISE AU POINT: L'effet de lumière sur les contours des personnages de Mario Galaxy, bien que joli, n'est pas un effet fresnel. Il ressemble à ce que donnerait le résultat de la formule (mais ce résultat est un pondérateur, il n'est jamais utilisé tel quel), mais il n'y aucune notion physique derrière, et il n'utilise aucune équation physique pour y parvenir (au mieux une approximation batarde). Vous pourrez être pédant dans n'importe quel forum désormais.


Voilà (brièvement) pour la lumière réfractée. Pour la lumière réfléchie, c'est bien plus simple : on prend la lumière frappant l'objet et on la pondère par l'équation de Fresnel (ou une autre).

Dans les deux cas, mais surtout pour la lumière réfléchie, l'intensité va dépendre de l'angle défini par votre oeil, la surface de l'objet (la normale) et la source de lumière.

En effet, si vous vous rappelez vos cours d'optique, dans un miroir la lumière se réflechit comme ceci: :


L'angle d'entrée est identique à l'angle de sortie.

Et bien c'est également ce qui se passe dans n'importe quel matériau autre qu'un miroir. La plupart des moteurs de rendu physiquement corrects (temps réel ou non) considèrent qu'une surface est composée de petites facettes, microscopiques, réagissant comme des miroirs.


En jaune, la lumière arrivant sur l'objet. En gris, la surface perturbée de l'objet. En cyan, la lumière réfléchie par ces micro-miroirs. Ces rayons partent tous dans des directions différentes, donnant une réflexion plus ou moins floue. Pour chaque rayon jaune, il y a également une partie réfractée non indiquée sur le schéma, que nous avons abordé plus haut. Les micro-facettes vont également influencer la diffusion de ces rayons.

Et ça fait flou même si le rayon traverse le matériau!

Et voilà un autre buzzword expliqué : Microfacet. C'est encore une approximation (en l'occurence, la perturbation de la surface du matériau), mais bien plus juste que celle définie par Johann Heinrich Lambert (XVIIIème siècle).
On pourrait citer d'autres équations, telles celles de Kenneth Torrance (Cook-Torrance, GGX), de Michael Oren and Shree K. Nayar (Oren-Nayar) ou de E.M. Sparrow, mais les principes restent les mêmes :
  • Si les facettes sont bien alignées, les rayons vont tous dans la même direction, on a donc une réflection miroir (comme un beau chrome bien poli).
  • Si les facettes sont perturbées, les rayons vont dans des directions plus ou moins différentes, et selon cette perturbation, on peut aller d'une réflexion légèrement floue à une réflexion complétement diffuse.
  • Une facette peut faire de l'ombre à une autre, diminuant ainsi la quantité de lumière ré-émise.

Chaque facette doit respecter l'équation de Fresnel. Si cet effet est connu pour produire des contours plus clairs sur les bords des objets, cet effet est très largement atténué si l'on a une surface perturbée :


A droite, la lumière réfléchie prend une teinte rougeatre. A gauche, la même chose arrive mais la surface est très perturbée, rendant le rendu très diffus. L'effet "fresnel" en est visuellement diminué. Au centre, une sphère chromée (réflection 100% miroir, très peu d'absorption).

Pour terminer, il est rare qu'un objet ne soit composé que d'un seul materiau. Un bois peut être plus ou moins verni, votre peau, sans parler des couches de dermes, a une fine pellicule humide, ...
Et chaque couche influence la suivante: La quantité de lumière reçue par le bois n'est plus la lumière émise par la source de lumière, mais la quantité de lumière refractée par le vernis.

Voilà pour un rapide survol des propriétés d'un matériau physiquement plausible. Les équations sont connues, et une fois celles-ci intégrées dans le code d'un shader, le côté artistique et productionnel est simplifié. On peut soit appliquer les données mesurées en laboratoire directement, soit le faire à l'oeil, le code s'occupant de respecter la conservation de l'énergie. Si le shader est bien conçu, les paramètres sont simples, instinctifs et très peu nombreux.
 
Par exemple, ici, au lieu de devoir rentrer chaque terme de l'équation de fresnel (IOR, K,...), l'artiste peut rentrer la teinte qu'il veut en reflexion, qui définira également l'intensité maximale voulue, ainsi que l'effet de "bord à la mario galaxy". Le code du shader s'occupera de retrouver les valeurs physiques plausibles qui donneront ces teintes en sortie.

Un matériau doré.


Un shader respectant la conservation de l'énergie se comportera logiquement quelque soit l'éclairage, et pour peu que vous travailliez à une échelle cohérente pour chaque asset, la ré-utilisation de shader/asset d'un projet/scène à l'autre est à portée de clic.

La partie deux parlera de la physique des sources de lumière et leur implication.

(2) Le terme "spéculaire" signifie que pour un rayon frappant une surface, il n'y qu'un seul rayon réfléchi. Seul le verre, l'eau calme, certains métaux polis, ... provoquent cet effet. Ce terme est galvaudé dans la plupart des moteurs de rendu.
Les moteurs de jeu sortent péniblement de l'âge de pierre. Bien qu'extrêmement complexes à première vue, cette façon d'aborder l'image est au final bien plus simple pour l'artiste qui, si le travail du codeur est bien fait, n'aura pas à se soucier de la réalité physique des choses.
Cependant une connaissance des mécaniques cachées est toujours un plus : un artiste arrivera plus vite à son but si il sait vers quoi il veut aller. L'inclusion d'un léger cours de physique dans les écoles de jeu vidéo sera nécessaire à l'avenir.

Dans la deuxième partie de ce dossier, nous verrons en quoi les mecs de l'éclairage sont également embêtés par des équations, bien que leur travail tend (enfin) plus vers celui d'un directeur photo que d'un technicien.
 
Rechercher sur Factornews