|
| Comprendre la 3D : les effets visuels (1ère partie) | | Auteur : JF Maquiné | Dernière révision : 16 Juin 2004 |
|

| | |
Il existe de nombreux effets visuels créés en informatique 3D, pour tenter de produire des images réalistes. Ces effets sont généralement bien connus des gens qui manipulent des logiciels haut de gamme d'animation 3D, comme Lightwave. Toutefois avec l'apparition de processeurs graphiques de plus en plus évolués (pixel shader 2.0 et plus) et de plus en plus puissants, ces effets vont commencer à voir le jour dans des logiciels d'animation temps réel pour le grand public, et donc dans les jeux.
L'effet glow que je présente aujourd'hui consiste à créer un halo lumineux autour d'une source de lumière. Ca c'est dans le cadre d'animation 3D. Mais l'effet glow est plus connu par les dessinateurs 2D et depuis plus longtemps pour mettre en valeur des objets et en particulier des lettres avec l'effet néon (lampe à néon).L'un des premiers jeux à avoir généralisé cet effet est : Jedi Knight : Jedi Academy dont voici quelques screenshots avec et sans effet glow.
Cliquez pour agrandirNotes : L'option qui permet de gérer le glow dans le jeu se nomme 'dynamic glow'. Le terme de dynamic correspond à la gestion des variations de la source lumineuse ce qui se produit par exemple dans le cadre d'un feu où les flammes n'ont pas toujours la même hauteur. Les possesseurs de cartes ATI doivent télécharger le patch 1.01 pour que cette option soit fonctionnelle.
L'effet glow est présent à chaque source lumineuse, lampe de sol, flambeau, sabre laser, tuyautière de vaisseau, ... Il améliore légèrement l'ambiance générale de ces jeux en donnant une impression de réalisme accru. Mais qui dit réalisme dit réalité et la question qui se pose alors est qu'est-ce qui dans la réalité produit cet effet de halo autour d'une source lumineuse ?
La physique de l'effet Glow Dans la première version j'avais donné une explication qui n'était pas satisfaisante. De plus expliquer l'effet Glow dans le brouillard ou sur la photo du laser ci-dessous impliquait des raisonnements un peu tortueux. Le déclic se fit en deux temps le premier lorsqu'un lecteur me fit remarquer que je ne parlais pas de l'effet de diffusion et un autre qu'un faisceau laser dans les boites de nuit ne peut se voir que dans un nuage de fumée. Je vais partir de ce dernier exemple pour donner l'explication physique du Glow, puis je ferais quelques extrapolations dans d'autres cas pratiques pour voir si elle tient la route.
Pourquoi ne peut-on voir le faisceau d'un laser ? Un laser émet un faisceau dont tous les photons ont la même direction. Or pour que nos yeux percoivent un phénomène lumineux, il est nécessaire que des photons de ce phénomène excitent notre rétine. Avec une lumière uni-directionnelle, impossible de voir un faisceau laser à moins de le pointer directement dans ses yeux (ATTENTION : A ne JAMAIS faire sous risque de perte visuelle définitive !!!). Pour voir un faisceau laser il faut que la densité de photons soit suffisamment importante de même que le milieu dans lequel se déplacent les photons. Pour de petits lasers de faible puissance comme ceux des boites de nuit il faut de la fumée, pour des lasers de labo l'air ambiant peut être suffisant.
 Pourquoi y a-t-il un effet Glow autour du laser ci-dessus ? Il y a un phénomène de diffusion, c'est-à-dire qu'une partie des photons émis par le laser vont se heurter aux atomes d'azote et d'oxygène qui composent l'air. Lorsqu'un atome reçoit un photon son équilibre énergétique est modifié. Les atomes recherchent avant tout l'équilibre et vont se dépêcher de réémettre un photon pour dégager le surplus d'énergie reçu. Mais la réémission d'un photon ne se fait pas nécessairement dans la même direction que le photon reçu. En fait elle se fait dans toutes les directions possibles. On dit que l'air est un milieu anisotropique c'est-à-dire qui ne privilégie pas une direction particulière. De fait il va y avoir des photons qui auront pour direction nos yeux. La diffusion explique donc qu'on peut voir le rayon laser et l'effet Glow.
Mais pourquoi l'effet Glow correspond-il à un dégradé lumineux ? La distance qui sépare deux atomes dans l'air par exemple est assez importante au regard de la taille des atomes. Pour qu'un photon ait la chance de heurter un atome pour être renvoyé dans une autre direction, il faut une très grande quantité de photons. Si les photons sont assez nombreux, les atomes les plus proches de la source vont en recevoir une grande quantité. S'ils en reçoivent assez ils vont eux-mêmes devenir des sources lumineuses ponctuelles, c'est-à-dire que les photons qu'ils réémettront auront toutes les chances d'heurter d'autres atomes. Il y a en fait un effet boule de neige, et un atome qui devient lui-même une source de lumière peut transformer d'autres atomes en source lumineuse si la quantité de photons est très importante. Maintenant s'il y a un dégradé dans l'effet Glow il s'arrête aussi brusquement au-delà d'une certaine distance. C'est parce qu'il y a un seuil de réception pour les yeux. Pour devenir une source lumineuse il ne suffit pas qu'un atome renvoie des photons vers nos yeux il faut aussi qu'il en renvoie suffisamment. Il y a donc un seuil. L'effet de diffusion se poursuit bien. Un atome renvoie des photons sur un atome qui renvoit des photons, etc ... mais au-delà d'un certain seuil, les photons envoyés à nos yeux ne sont plus suffisants même si l'effet de diffusion continue, d'où l'arrêt assez brusque de l'effet visuel Glow.
L'effet de diffusion explique qu'on ne peut pas voir de lumière dans l'espace sauf si les photons se dirigent vers nos yeux. Ainsi les combats au laser de vaisseaux spatiaux dans l'espace n'auraient rien de bien artistique. On ne verrait pas les faisceaux laser. A la question d'un effet Glow à la sortie des tuyautières d'un vaisseau, cela dépend. S'il s'agit d'atomes (hydrogène, hélium, ...) rejetés par les moteurs, on a toutes les chances d'avoir une diffusion, mais s'il s'agit uniquement d'un rejet de photons (moteur photonique ? ;)) alors on ne risque pas d'avoir un effet de diffusion. Dernière question, pourquoi l'effet Glow est-il si important lors de brouillard (feu de voiture par exemple) ? C'est du à l'existence de très fines gouttes d'eau qui densifient l'air et favorisent le phénomène de diffusion. Plus le milieu est dense pour un nombre de photons donné, plus la diffusion sera importante et donc étendra l'effet Glow. Dans le jeu paint Killer, il existe des effets Glow important car l'ambiance générale est assez brumeuse. |

| | |
Nous avons vu avec l'effet glow, l'existence d'un halo lumineux diffus autour des sources de lumière, pourvu que celles-ci soient suffisamment puissantes et le milieu ambiant soit suffisamment dense. Il existe un cas où un tel halo va être généré. Lorsqu'une surface très réfléchissante comme du chrome reçoit une très grande quantité de lumière, elle va réagir comme si elle devenait elle-même une source de lumière et un halo diffus va se former. Cet effet est nommé bloom.
L'utilisation de l'effet bloom par les jeux 3D a explosé en 2004 : Serious 2, Farcry, Toca racr drivers, Thief 3, ...Toutefois cet effet est connu depuis un certain temps du moins le moyen de le mettre en oeuvre, ainsi un lecteur du mini-article sur l'effet bloom me signalait que Deux Ex disposait d'un tel effet.
Explication physique : Lorsque la lumière rencontre une surface quatre phénomènes peuvent se produire. - La lumière est entièrement réfléchie (miroir)
- La lumière traverse la surface (transparence)
- La lumière est totalement absorbée
- La lumière est diffusée.
C'est ce dernier cas qui nous intéresse. Lorsque la lumière vient en contact de ce type de surface, elle va être renvoyée dans toutes les directions. On peut voir sur la photo ci-dessous un halo de diffusion se former. En même temps là où a lieu le point de rencontre entre la lumière et la surface, on peut voir une petite zone extrêmement lumineuse comme le serait une source lumineuse.C'est ce phénomène qui produit un éblouissement, chose que vous devriez pouvoir facilement observer sur les voitures avec le retour du soleil en cette fin de mars :).Bon évidemment les choses peuvent se compliquer. Par exemple la transparence du verre dépend de l'angle d'incidence de la lumière. Ainsi il est possible d'être ébloui par une vitre parfaitement transparente. Toutefois je ne crois pas que pour les jeux 3D temps réel cet effet pour les vitres soit à l'ordre du jour.

Si vous avez des suggestions à faire pour améliorer cet article n'hésitez pas :). Vous trouverez dans le lien ci-dessous d'intéressantes informations sur la propagation et la transmission de la lumière.
Généralisation de l'effet bloom L'effet bloom s'utilise normalement de manière ponctuelle sur certains objets ayant une surface fortement réfléchissante. Toutefois les développeurs de Farcry et Thief 3 ont tenté de généraliser son utilisation afin de donner un effet évanescent un peu comme un rêve. Mais voilà si le résultat est assez bon sous Farcry, pour Thief 3 ils auraient mieux fait de s'abtenir. La raison en est un problème de visibilité. Farcry est un jeu assez clair, même durant les étapes de nuit, cela signifie que la proportion des effets bloom sur l'ensemble de l'image ne dépasse pas 50%, le reste ne subissant pas l'effet bloom. Dans Thief 3, un jeu de furtivité assez sombre toutes les parties visibles ou presque subissent l'effet bloom. Ainsi les proportions des zones visibles subissant l'effet bloom peuvent ateindre 80% à 90%. Mais dans la mesure où l'effet blom génère un certain flou, la proportion de flou de l'image sous Thief 3 devient trop importante, alors qu'en mode paradis sous Farcry cela reste dans des proportions acceptables. Bref le bloom c'est bien, en abuser c'est pas génial.
Screenshots de Farcry sans et avec bloom (dans l'ordre)
Cliquez pour agrandir
Screenshots de Thief 3 sans et avec bloom
Cliquez pour agrandir |

| | |
L'effet DOF ou en français l'effet de profondeur de champ correspond à la génération d'un flou sur l'avant plan et l'arrière plan d'un objet sur lequel la caméra ou le regard de l'observateur se fixe. C'est un effet qui se produit naturellement dans la réalité, donc l'utiliser pour une animation 3D permet de lui donner plus de réalisme. Enfin à priori car nous verrons en fin de ce mini-article que ce n'est pas aussi simple que cela.
Comment est généré le DOF ?
DOF via accumulation buffer On fait 'n' rendus en déplaçant la camera. On les ajoute dans l'accumulation buffer. Cela nécessite pas mal de passes pour un bon résultat, c'est-à-dire une bonne qualité, mais c'est très (trop ?) lent.
En fait, c'est une simple moyenne entre les différents rendus. C'est pour ça que cette technique n'est pas top pour le temps réel, car il faut typiquement de 10 à 50 passes (suivant le flou que l'on veut) pour avoir un flou, et sans avoir l'impression d'avoir des images en sur-impression.
Forward mapped DOF On sauvegarde à chaque rendu le color buffer ET le Z-buffer. On rend ensuite une image ou chaque point = sprite dont la taille dépend de la valeur Z correspondante. Au niveau performances, ce n'est pas génial. Mais c'est cette technique qui est le plus souvent utilisée pour ajouter du DOF dans les logiciels de rendu offline.
L'image finale est calculée de la façon suivante : on affiche pour chaque point du framebuffer, un sprite (un disque en l'occurrence) dont le diamètre = Cercle de confusion, et un alpha inversement proportionnel à la surface du disque. Dans les zones floues, le sprite a un grand diamètre et un alpha petit, dans la zone nette, un diamètre de 1 pixel et un alpha de 1. Le blending est un peu rusé, car il ne faut pas 'blender' un pixel flou avec un pixel net. Enfin, il y a une passe pour renormaliser les pixels dont l'alpha à l'arrivée (après l'accumulation de tous les sprites) ne vaut pas 1 si l'on veut faire les choses bien proprement.
Reverse mapped DOF Ca ressemble assez à la Forward mapped DOF. On sauvegarde à chaque rendu le color buffer et le Z-Buffer. Ensuite, on blure le color buffer en fonction du Z correspondant (le plus simple pour faire ça, c'est de ponctionner dans différents niveaux de mipmap de la scène (via un render-to-texture) suivant le Z pour simuler le flou).
Explication physique Pour l'explication physique de l'effet DOF à savoir pourquoi dans la réalité il existe un flou quand on regarde autour de nous, je vais détailler le cas d'un appareil photo (argentique, pas numérique), puis je ferais à la fin un rapprochement avec l'oeil humain.
Lorsqu'on regarde un objet, on règle la focale pour que cet objet apparaisse net. Que signifie régler la focale ? C'est le fait de déplacer légèrement la lentille (convergente) de l'appareil photo en avant ou en arrière. Pourquoi a-t-on besoin d'une lentille convergente ? Si on fait passer la lumière par un trou dans une boite pour venir frapper une des parois de la boite les objets dont est issue une grande partie de la lumière apparaitront flous voire seront indicernables. Il y a dispersion. Pour régler ce problème, il suffit de mettre à l'emplacement du trou une lentille convergente et l'image des objets apparaitra nette (netteté qui dépend de la distance entre la lentille et la face de la boite qui reçoit la lumière.
Une boite, un trou, une lentille convergente et si on remplace la paroi de notre boite par une pellicule ça ressemble tout doucement à un appareil photo rudimentaire. Si on règle la focale sur un objet déterminé, les objets qui se trouvent en avant plan ou arrière plan apparaissent légèrement flous, pourquoi ? C'est un problème d'optique. Dans le graphique ci-dessous on voit que les rayons lumineux d'un point A convergent bien en un point A' sur la pellicule. Par contre pour le point (B) situé plus loin que le point A, la convergence se fait avant d'arriver sur la pellicule et pour le point C, plus proche, la convergence s'effectue après la pellicule. Le résultat est que la lumière provenant des points B et C ne converge pas sur la pellicule, mais sera diffusée sur une zone. Cela génèrera un flou.
 La portion d'une scène qui apparait nette s'appelle la profondeur de champ. Il est possible d'augmenter la profondeur de champ en modifiant le réglage du diaphragme. Le contrôle d'un diaphragme est de contrôler la quantité de lumière qui entre dans l'appareil photo. En diminuant l'entrée de lumière on diminue l'angle maximum des rayons lumineux passant par la lentille et on diminue la zone de diffusion des points B et C de manière suffisante pour avoir une augmentation considérable de netteté pour ces deux points.
L'oeil humain fonctionne quasiment de la même manière qu'un appareil photo, mais en utilisant des éléments organiques (cornée, cristallin, ...) à ceci près que l'oeil ne dispose pas de diaphragme, il ne peut donc pas contrôler la quantité de lumière. Lorsqu'on règle sa vue sur un objet, ce qu'il y a autour devient flou. C'est une donnée physiologique de l'oeil humain. Pour les jeux 3D, imiter le comportement humain et en particulier de l'oeil est un atout pour le réalisme, mais est-ce aussi simple ? C'est ce que nous allons voir dans la seconde partie.
|

| | |
Nous allons discuter dans cette seconde partie de l'intérêt de l'effet DOF et de sa mise au point. Je ne sais pas si vous l'avez remarqué mais la grande majorité des joueurs préfèrent avoir une image relativement nette. Ainsi s'explique en grande partie le souhait des joueurs de pouvoir disposer d'un effet anisotropique de qualité sans trop dégrader les performances. La raison à cela mène à une discussion intéressante. L'oeil ne permet pas d'avoir une vue globale nette. Le fait de préférer une vue nette dans un monde virtuel peut être perçu comme une volonté inconsciente de considérer que l'oeil est un outil insuffisant et donc de souhaiter vouloir le corriger ? C'est peut-être une partie de réponse, mais en m'interrogeant sur le sujet en faisant cet article je me suis aperçu qu'il existait une réponse plus intéressante à mon avis et qui montre que la réalité que nous percevons avec nos yeux est bien plus complexe qu'un simple effet de flou.
Cliquez pour agrandirSur le screenshot ci-dessus, il y a un effet DOF généré. Parfait, mais voilà, si mon regard se règle sur le mur de l'arbre au fond de la scène il reste tout aussi flou que si je regarde ailleurs. L'effet de flou d'une scène 3D, qui soit du à un effet DOF, ou bêtement à des problèmes de précision de calcul comme avec le trilinéaire, est statique. Il ne s'adapte pas à l'objet que nous regardons réellement. Si mon regard quitte l'écran celui-ci apparait flou, mais notre regard a une certaine tendance à se promener en permanence dans une scène 3D, tendant à la rendre globalement nette. On a une sensation de netteté, bien que pour chaque objet observé d'une scène / paysage 3D dans lequel nous sommes les autres objets apparaissent flous. C'est ce sentiment de netteté globale et le fait que nous ne puissions dans les jeux déterminer par nos yeux les parties devant être nettes ou non, que nous préférons que tout soit net.
Concernant le DOF lui-même, celui proposé dans Tomb Raider - Angel of darkness a le grave défaut d'être statique. L'oeil est en fait le personnage et ce qu'il y a autour apparait flou, mais ce n'est pas ce que voit notre oeil. Nous, nous voyons une scène 3D en miniature sur notre écran et l'effet de flou qu'on nous propose est non seulement pas naturel, mais en plus statique. A partir de là, on peut envisager qu'il serait préférable que l'effet DOF disparaisse jusqu'à ce qu'un développeur éclairé trouve une solution. En attendant une scène 3D nette ne gênera personne et évitera de consommer de la puissance de calcul pour un effet qui finalement n'est actuellement pas approprié à la réalité, loin de là. |

| | |
Le motion blur ou flou de mouvement en français est une technique d'effets visuels qui a essentiellement pour but de donner une impression de vitesse aux objets en mouvement en affichant une sorte de trainée (comme une comète) derrière l'objet. Mais on peut aussi l'utiliser pour donner un effet de grande vitesse générale et d'accélération importante à l'avatar et donc à l'utilisateur, ou encore pour donner une impression de fluidité d'animation avec un faible fps (20/30). Nous allons voir chacun de ces trois cas et en donner l'explication physique.
Effet de mouvement d'un objet Lorsqu'un objet d'une taille raisonnable passe dans le champ de vision du spectateur d'une scène 3D, il peut être utile de lui donner un effet de motion blur pour plus de fluidité et avoir une impression de vitesse renforcée. Cet effet imite le principe de persistance rétinienne de ce que nos yeux perçoivent. Vous allez me dire que ce que l'oeil perçoit de l'écran génère aussi une persistance rétinienne ! Oui, mais la différence fondamentale entre un objet se déplaçant dans le monde réel et virtuel, est que dans le monde réel le mouvement de l'objet est une fonction continue, alors que dans le monde virtuel elle est discontinue. Cela signifie qu'en fait vous ne verrez l'objet que par saccade tous les n pixels sur l'écran et n > 10 généralement. Dans la mesure où l'objet effectue des sauts sur l'écran l'effet de persistance rétinienne est en grande partie invalidé à l'écran.
Effet de grande vitesse Pour l'effet de grande vitesse et d'accélération importante, on génère un flou sur la périphérie du champ de vision comme le montre le screenshot ci-dessous provenant du jeu Need For Speed Underground. L'effet de flou lors d'une grande vitesse provient du fait que les parties situées au bord du champ de vision sont légèrement floues. Or le champ de vision tend à se réduire au fur et à mesure d'une grande vitesse ou autrement dit la partie du champ de vision qui est floue s'agrandie en partie avec l'augmentation de vitesse. Concernant de fortes accélérations (dragster, formule 1, avrion de chasse), il est constaté des troubles de la vue qui tendent à rendre flous les objets qui nous environnent.
Cliquez pour agrandirEffet de fluidité à faible FPS Si les mouvements dans un film (de cinéma) vous apparaissent fluides alors que celui-ci n'affiche que 24 images/seconde, c'est parce que chaque image n'est pas nette comme du cristal comme dans une animation 3D. En fait deux situations peuvent se produire. La première, c'est que si la caméra (ou l'observateur) reste fixe et que des objets sont en mouvement dans son champ de vision, alors un motion blur apparaîtra sur ces objets. Le second, c'est que si la caméra est en mouvement, dans ce cas tous les objet et donc le décor auront un effet de motion blur. Dans le cas d'une animation 3D, donner des effets de motion blur comme le fait une caméra est très complexe, même si l'effet en lui-même (techniquement parlant) ne l'est pas. Effectivement, le niveau de motion blur (la taille de la trainée), les corrections de couleurs (gamma et autre), leur direction peuvent varier d'un objet à un autre. Il n'existe pas à ce jour de jeu qui l'utilise où l'a utilisé correctement. En fait ce type de motion blur est une généralisation du premier motion blur que nous avons vu, qui lui est beaucoup plus simple à mettre en oeuvre.
Pour finir sachez que le motion blur est un effet dont l'utilisation reste anecdotique dans les jeux. Vous trouverez dans le lien ci-dessous un descriptif technique assez simple de comment parvenir à faire du motion blur en openGL.
|


YOUM (analyseur syntaxique temps réel) | Nombre de définitions trouvées 39 Multi-dico par texte : actif - Multi-mots par définition : 4
|
|
|



 
|