Principe Radiosité
© Sébastien Dedieu - Août 1998


HiRad


  

Qu'est ce qu'Hirad ?

Hirad est un petit logiciel de radiosité que j'ai commencé à développer au début du mois de Juillet 1997 (Son nom "HiRad" est l'abréviation de "HIerachical RADiosity"). Mon but était alors de comprendre comment fonctionnaient concrétement les techniques de radiosité hiérarchiques introduites par Pat Hanrahan en 1991 (La meilleure façon de les comprendre, c'est de les programmer).
Pour simplifier, la radiosité hiérarchique permet en subdivisant les facettes de connaître la radiosité d'une surface avec un niveau de précision plus ou moins grand suivant le niveau de détail souhaité. On peut ainsi eviter des calculs inutiles et couteux.
Une facette est alors subdivisée "recusivement" un certain nombre de fois : on représente alors un arbre (dont chaque sommet a généralement 0 ou 4 fils pour des patchs initiaux rectangulaires) que l'on nomme hiérarchie.
Actuellement, Hirad fonctionne bien grace à une methode de résolution dite de "Shooting", généralament plus intéressante. Je pense que les résultats obtenus sont prometteurs.


Conception :

Developpé dans un esprit Objet, hirad intègre un petit ensemble de traitements algorithmiques qui sont facilement interchangeables ou modifiables par un autre programmeur.
Voici quelques exemples de classes qui sont utilisées :

  • Une classe (Patch) permet de définir ce qu'est un patch.
  • Une classe (Oracle) permet en la dérivant de définir un oracle (c'est à dire la portion d'algorithme qui décide de la subdivision d'un patch et choisit à quel niveau de détail il faut travailler).
  • Une classe (Solver) permet en la dérivant de définir une implantation de résolution du problème de la radiosité. (Par exemple la classe Shooting en dérive).
  • Une classe (Input) permet de lire une scène ainsi que les données initiales du calcul.
  • Une classe (Output) permet de sauvegarder le résultat (à savoir la scène illuminée grace à la radiosité) dans un certain format (Par exemple dans un format "hirad" ou bien en VRML).
  • Une classe (RadiosityOnVertices) s'occupe de calculer la radiosité des sommets de la scène en connaissant le niveau de radiosité des patchs de la scène.
  • Une classe (FormFactorCalculator) permet en la dérivant de déterminer comment les facteurs de formes qui doivent être évalués. (On trouve par exemple une classe qui implante la technique de l'hemicube de Cohen, une autre qui calcule numériquement les facteurs de forme sans prendre en compte le problème de visibilité).
  • ...


Les Images générées :

Voici quelques exemples de scènes que j'ai entièrement calculés avec HiRad et affichés par une implantation d'Open GL.


Cette petite scène est un cube auquel on a oté une face. Il est alors composé de trois faces grises (à forte réflectivité) et de deux autres faces (l'une émettant du rouge, l'autre du bleu). On dispose ensuite une source lumineuse uniforme au centre de ce cube.
Après les calculs, on observe que les faces grises deviennent teintées de rouge et de bleu.



Grâce à une scène très simple composée de deux facettes perpendiculaires, on peut observer comment ces facettes sont subdivisées pendant les calculs. Voici la version "pleine", suivi de la version "fil de fer".



Dans HiRad, après calculs, les facettes sont une nouvelles fois subdivisées par la méthode de Baum si nécessaire. Cette petite triangulation permet d'eviter certains problèmes de "T-vertex" (nom donné au point qui cse situe sur le segment d'une facette voisine). Ces "T-vertices" sont, par exemple, difficiles à prendre à compte dans un rendu basé sur une interpolation bilinéaire des couleurs (comme Gouraud par exemple).


L'image suivante représente un cube scié en deux, dans lequel on a disposé trois facettes lumineuses (l'une rouge, l'autre verte et la troisième bleue). Le calcul des facteurs de formes est ici réalisé grace à la technique de "l'hemicube" de Cohen. On peut alors observer l'effet des trois sources lumineuses sur les faces : des sortes d'ovals lumineux se forment alors. (Remarque : si une seule source lumineuse avait été disposée au centre, aprés la première itération, on aurait vu la représentation direct des facteurs de formes calculé grace à la technique de l'hemicube.)



Ici, il s'agit d'une source qui illumine le mot "hiRad" situé juste devant un plan violet.
Ce dernier exemple met en évidence la prise en compte de la visibilité et des ombres. Avec la radiosité, on peut naturellement detecter le fait qu'une facette en cache une autre (La technique de l'hemicube utilise un Z-buffer et grace à Open GL on peut eventuellement disposer d'accéleration materielles...).






Principe Radiosité
© Sébastien Dedieu - Août 1998