DivideConcept.net

le blog de divide.

Archive pour février 2005

Cette nouvelle série d’article est consacrée aux techniques d’éclairage 3d pour le temps réel.
Au menu: Différents types de shading, ombres portées, HDR, lightmaps, global lighting, et bien plus !

Avec la complexité géométrique, l’éclairage est un des deux facteurs majeurs du réalisme visuel d’une scène.

Comme le niveau de détail géométrique, les techniques d’éclairage ont évolués au fur et à mesure des avancées technologiques, vers toujours plus de réalisme.

Mais tout d’abord un peu de physique, puisqu’avant de vouloir reproduire l’oeuvre de la nature, il est bon d’en connaître quelques principes…

Propagation de la lumière

La lumière est une onde électromagnétique composée de photons qui se propagent dans toutes les directions à partir d’une source lumineuse.
Sans rentrer dans les détails physiques, il faut retenir :

-que l’intensité lumineuse par unité de surface décroit inversement proportionellement au carré de la distance qui la sépare de sa source.
Autrement dit, la quantité de lumière qui arrive sur une même surface décroit beaucoup plus vite que la distance qui sépare la surface de la source lumineuse.

-qu’au contact d’une matière matte, la lumière se diffuse: les photons repartent à nouveau dans toute les directions à partir de ce nouveau point. Mais l’intensité est beaucoup moins forte car :
Une partie est absorbée et transformée en chaleur (surtout lorsque la couleur de la surface est sombre).
La diffusion, de par sa nature dispersive, réduit d’autant plus l’énergie renvoyée par unité de surface.

Ce phénomène est appelé "radiosité" en 3D.

-qu’au contact d’une matière reflechissante, la lumière se réflechit (logique), c’est à dire que les photons arrivant sur la surface rebondissent d’un angle égal à leur angle d’arrivé sur la surface (angle incident).

-lors du passage d’un milieu transparent à un autre milieu transparent, il y a réfraction (déviation) selon les coefficients définissant la densité de chaque milieu.

A noter que pour ces 2 derniers points le phénomène d’absorption est également à prendre en compte.

-il existe également un phénomène de diffraction lorsque la lumière rencontre un obstacle dont la taille est de l’ordre de sa longueur d’onde (puisque c’est une onde électromagnétique) mais ce phénomène n’est pas encore exploité dans les jeux vidéo !

Application au temps réel

Voici maintenant quelques approches qui ont été proposées au fur et à mesure de l’évolution des techniques temps réel pour calculer l’intensité lumineuse reçue par une surface.

Pour simplifier, nous considérerons que les calculs suivants ne prennent en compte qu’une source lumineuse ponctuelle et pas d’ombre portée.

Flat shading

Certainement la méthode d’éclairage la plus basique:
Visant à reproduire l’éclairage d’un matériau matte, elle consiste en un simple produit scalaire (plus précisement, il s’agit de l’opposé de ce produit scalaire) entre le vecteur définissant la direction et l’intensité de la lumière, et la normale de chaque face.
Cette intensité lumineuse calculée est généralisée à l’ensemble de la face pour laquelle le calcul a été effectué.

Gouraud shading

Plus agréable à l’oeil, le Gouraud shading reprend globalement le même principe que le flat shading, sauf qu’au lieu de faire ce calcul pour chaque face, il est fait pour chaque sommet.
On prend alors la moyenne des normales des faces adjacentes à chaque sommet, et on en déduit un vecteur qui indique une direction moyenne pour ce sommet.
Une interpolation bilinéaire (c’est à dire en 2 dimensions) de l’intensité lumineuse calculée est alors réalisée entre chaque sommet.
Ces dégradés donnent un aspect beaucoup plus continu à la géométrie.

Phong shading

Si on considère les lois de la physique énoncées ci-dessus, le phong shading apparait en fait comme une sorte d’hérésie.
Le principe est de simuler un matériaux lisse, faiblement reflechissant, en calculant en plus de la diffusion la réflexion de la source lumineuse, mais sans calculer la réflexion du reste de l’environnement (qui émet lui aussi indirectement de la lumière, à cause du phénomène de diffusion).
Cela permet une simulation de réflexion à faible cout, mais hélas cette méthode est employée à tort et à travers, d’où l’aspect "plastique" récurrent dans nombres de jeux videos.

A noter que ces 2 derniers shaders peuvent être calculés "per vertex" ou "per pixel" :

-per vertex, le calcul n’est réalisé qu’une fois pour chaque sommet, et une interpolation bilinéaire des résultats a lieu entre chaque sommet.

-per pixel (et ceci n’est possible que depuis l’apparition des pixels shaders sur les cartes graphiques, voir article sur le displacement mapping) le calcul est réalisé non plus pour chaque sommet, mais pour chaque pixel !
Ce n’est plus le résultat final qui est interpolé entre chaque sommet, mais le vecteur "normal" de ces sommets, afin de coder une évolution progressive de la pente entre ces sommets.
Le pixel shader reprend ce vecteur interpolé, et fait lui même le calcul avec le produit scalaire.
Le résultat est évidement beaucoup plus agréable.

Her Complexity (part 1 - part 2)

Mercredi 2 février 2005

Interlude musical avec ma dernière composition, qui se décompose en 2 parties :

Her Complexity (part 1 - questions)

Cette première partie est assez soft, un rythme tranquille et un peu de voix en arriere plan.

Her Complexity (part 2 - inner fire)

La deuxième partie est beaucoup plus rythmée et mise plus sur le coté electro/jungle.

En fait les 2 parties n’ont rien à voir en matière de style, mais sont reliés par un thème et se complètent.