WebGL

Eclairage WebGL

Généralités

L'éclairage constitue un point majeur pour rendre une scène réaliste. Le modèle WebGL s'appuie sur un coefficient d'intendité I qui, multiplié par la couleur, donne sa valeur au pixel.

Modèle d'éclairage de Phong

L'éclairement d'un objet par des sources lumineuses est un facteur de "réalisme" très important. Parmi les sources de lumière éventuelles, on distingue la lumière ambiante, caractérisée par une distribution uniforme de l'éclairement, les sources ponctuelles à distance finie de l'objet qui provoquent un clairement radial et les sources à l'infini qui éclairent l'objet avec des rayons lumineux parallèles :

Sources lumineuses et objet

Il existe de nombreux modèles d'éclairages différents mais on s'intéressera ici en particulier au modèle de Phong. Il est adapté à la simulation d'éclairage pour tout ce qui est matière plastique, bois ou encore pour les terrains.

Le modèle de Phong peut être résumé en une seule équation exprimant l'intensité lumineuse :

I = Ia + Id + Is

où la lumière I reçue par un objet se décompose en lumière ambiante Ia, en lumière diffusée à la surface de l'objet Id et en lumière réfléchie vers l'observateur Is ( encore appelée reflet ou lumière spéculaire). Suivant les objets, les deux derniers termes peuvent être très différents : un objet mat aura un Id fort, un objet réfléchissant aura un Is fort.

3 types d'éclairage

Lightmapping

Idéal pour des objets statiques avec des sources lumineuses statiques

Définition : C'est un éclairage précalculé dans un logiciel de modélisation 3D (comme Blender) et stocké dans une texture. Un objet a deux textures alors :

Cette technique peut être combinée avec d’autres techniques d’éclairage comme Phong.

Ombrage

Il existe différentes techniques pour réaliser un ombrage :

Ce mécanisme est très coûteux mais utile pour le réalisme de la scène.

La technique la plus utilisée est celle du Shadowmapping. Elle consiste à se placer dans le référentiel de la lampe. On utilise le depth-buffer( profondeur ) et on le rend en textureshadowmap.

Au moment du rendu de la scène, on calcule chaque pixel de la scène dans le référentiel de la lampe et On compare la profondeur de chaque pixel de la scène avec la shadowmap. On détermine ainsi ce qui est visible ou non.

Shadowmap