La radiosité avec Blender

Concept de l'utilisation de la radiosité avec Blender

La radiosité est un mode de rendu d'images de synthèses qui permet d'obtenir des images d'une qualité photoréalistiques. En effet la radiosité prend en compte toutes les interactions de lumière liées à la proximité de deux objets. Le résultat est souvent spectaculaire. Xavier Michelon a d'ailleurs écrit un article sur linuxgraphic où il explique davantage ce concept de rendu.


Aperçu de ce que nous allons faire dans ce didacticiel

Blender utilise la radiosité d'une façon un peu particulière. En effet, dans un logiciel de 3D classique, le calcul de la radiosité est lancé au moment du rendu final. Blender exploite une procédure différente qui peut un peu surprendre le néophyte. Après avoir créé une scène, nous allons lancer le calcul d'une solution de radiosité. Cette solution sera ensuite enregistrée sur un matériau à part et l'ensemble de la scène sera remplacé par cette solution. Vous pouvez ensuite détacher les différents éléments, leur ajouter des textures, de l'éclairage, et faire des rendus sous n'importe quel angle. Comme la solution de radiosité est attachée à un matériau, vous n'avez plus besoin de la recalculer, ce qui accélère fortement le rendu. Cette méthode ne convient pas dans le cas d'une animation car si un objet est déplacé, la radiosité n'est pas recalculée.

-->Pré-requis nécessaires pour la compréhension et la réalisation de ce didacticiel :

Création d'une scène de base

Afin de mémoriser facilement la procédure d'utilisation de la radiosité, j'ai préféré opter pour la construction d'une scène simple. Nous allons créer 3 murs, un sol, un plafond et une table. Lancez Blender et créez vos éléments comme le suggère l'image ci-dessous. Créez de simples plans pour les murs, cela simplifiera les calculs.
Basculez dans la fenêtre d'édition (F9) 
Pour le sol, nous utiliserons la surface créée par défaut au démarrage de Blender. Redimensionnez-la pour qu'elle est une taille de 14 carreaux (maintenez la touche CTRL enfoncée). Pour accélérer le calcul de la radiosité nous allons supprimer la face inférieure qui n'a pas d'intérêt. Editez le sol , sélectionnez tous les points (Touche a) et appuyez sur le bouton  de façon à ce qu'il soit inactif (bouton non enfoncé). Pour vérifier que la face visible sera bien la face supérieure, nous allons utiliser la visualisation des "normales". Appuyez sur le bouton  vous verrez apparaître un petit trait bleu sur votre objet, l'emplacement de ce trait indique la face visible. Si elle n'est pas orientée dans le bons sens, sélectionnez tous les points (touche a) et appuyez sur . Répétez cette opération pour les autres cloisons et dupliquez le sol pour en faire le plafond (sans oublier de réorienter la face visible).
 

Création de la source de lumière

La source de lumière dans le calcul de la radiosité ne se matérialise pas par la création d'une lampe. Pour les solutions de radiosité, la source de lumière sera toujours un objet avec un matériau qui émet (Emitance) de la lumière.

Pour simuler une source de lumière proche de l'éclairage extérieur naturel, la technique du dôme de lumière est généralement adoptée. toutefois vous pouvez utiliser n'importe quel objet pour émettre de la lumière, évidemment sa taille et sa position auront une influence sur le calcul de la solution. Pour notre exemple j'ai voulu simuler l'éclairage naturel d'une ampoule, positionnez le curseur de création au dessus de la table. Créez une icosphère (barre d'espace:->add:->meshes:->icosphere), redimensionnez-la de telle sorte qu'elle soit de la taille d'une grosse ampoule et basculez en mode d'édition . Nous devons également enlever les faces internes de cet objet. Comme pour l'étape précédente, sélectionnez tous les points (touche a) et appuyez sur  pour n'avoir qu'une seule face (ici les faces externes), affichez les normales pour vérifier qu'elles soient orientées dans le bon sens, ce qui devrait être normalement le cas, autrement inversez-les. Pour pouvoir ensuite éventuellement ajouter une lampe à la place de mon icosphère, j'ai également créé un petit cylindre du plafond jusqu'à ma source de lumière.

Matériaux

Basculez dans la fenêtre des matériaux (F5) .
A ce niveau, les matériaux n'ont pas une grande importance car Blender ne les prend pas en compte pour le calcul de la radiosité sauf en ce qui concerne la couleur, car les reflets liés à la couleur sont pris en compte. Nous ajouterons les matériaux après le calcul de radiosité, mais pour que la couleur des reflets soit présente, nous allons faire la table en bleu, le sol en marron (car ce sera du parquet marron par la suite). Il vous faut créer des nouveaux matériaux pour chacun de ces objets. L'icosphère a besoin d'un matériau qui émette de la lumière. Utilisez un nouveau matériau et modifiez la couleur vers un jaune clair pour obtenir une lumière un peu plus chaude qu'un gris façon néon et modifiez le paramètre "Emit" à une valeur de 0.130, au-delà, vous risquez d'avoir un éclairage trop intense, façon lampe à bronzer, même si par la suite vous verrez que nous pouvons rapidement modifier la valeur de l'éclairage.

Lancement du calcul de solution de radiosité

Etape importante : Le calcul de la radiosité. Avant de passer à cette étape, dans le cas de gros projets, je vous conseille d'enregistrer votre fichier sous un nom différent, cela vous permettra de revenir en arrière en cas de bourde. Les différentes fonctions de la radiosité son accessibles par la fenêtre de radiosité. positionnez la vue principale de Blender de façon à voir la table, cela vous permettra de suivre l'évolution du calcul.

Basculez vers la fenêtre de Radiosité 
Sans être technique, le principe est le suivant : nous allons d'abord collecter le maillage qui devra être pris en compte, ensuite Blender transformera ce maillage en un ensemble de patchs sur lesquels il  enregistrera la valeur d'ombre, évidemment plus il y a de patchs, plus le rendu est précis mais plus c'est long, nous pouvons aussi fixer les limites de subdivisions de ces "patchs". Une fois la solution terminée, nous pourrons ajuster la valeur gamma et la quantité de lumière puis choisir de remplacer les objets existants par la solution ou de conserver les objets existants en plus de la solution, enfin nous pourrons sortir de l'environnement de radiosité.

Etape 1 : collecter les mailles "meshes"
Sélectionnez tous les objets (touche a) que vous souhaitez calculer, dans mon exemple ce sont tous les objets sauf la caméra (Shift+ 2 clics droits sur l'objet pour la sortir de la sélection). Appuyez sur le bouton , nous sommes désormais dans le mode Radiosité. Les boutons  permettent de déterminer la qualité de la prévisualisation. Sélectionnez Gour qui offre la meilleure qualité d'affichage.

Etape 2 : déterminer la qualité
Comme Blender va décomposer nos objets en éléments plus petits pour calculer la radiosité, nous pouvons déterminer la taille minimum et maximum des ces subdivisions par les boutons PAmx et PAmin ELmax et Elmin, des valeurs plus faibles offriront une meilleure qualité mais un temps de calcul nettement plus long.

Pour améliorer le rendu vous pouvez cliquer sur le bouton "Subdiv shoot element" et sur le bouton "Subdiv shoot patch" mais cela augmente le temps de calcul. Le bouton MaxEl limite le nombre maximum d'éléments à calculer, pensez à augmenter cette valeur si vraiment vous désirez obtenir une qualité optimale, mais attention au nombre de polygones qui en résultera. Le bouton "Hemires" permet d'améliorer grandement la qualité car il agit directement sur le calcul de la lumière. Evidemment, il ajoute aussi considérablement du temps de calcul, si vous augmentez les valeurs "Hemires + MaxEl" vous pouvez vous attendre à des heures de calcul.

Pour notre exemple nous allons laisser tous ces paramètres par défaut, cela nous permettra d'obtenir plus rapidement une solution, par la suite vous pourrez expérimenter par vous même les différents réglages.

Etape3 : lancement du calcul
Pour lancer le calcul de la radiosité, il vous suffit de cliquer sur le bouton "Go", et vous verrez en temps réel l'évolution du calcul de la solution. Le curseur change durant cette opération et la ligne d'état au dessus des boutons  vous indique que Blender est en train de calculer : "Solving". Quand la solution est terminée, vous pouvez librement vous déplacer dans la fenêtre de prévisualisation pour vérifier si la solution vous convient. Le temps de calcul dépend considérablement de la puissance de votre processeur, de plus les solutions SMP (multiprocesseurs) ne sont pas prises en compte.
Les boutons ont une influence sur l'intensité et le contraste de la solution. Vous pouvez les adapter selon votre convenance mais gardez à l'esprit que nous devons encore rajouter de l'éclairage pour le rendu final, celui-ci viendra donc s'additionner à la solution de radiosité. Il vaut mieux avoir quelque chose d'un peu plus sombre dès le départ, d'autant plus qu'une fois que nous aurons quitté le mode de radiosité, nous ne pourrons plus utiliser ces fonctions.


Notre scène avec la solution de radiosté

Etape 4 : Récupération de la solution
Blender nous offre 3 choix :

Pour la suite de notre exemple nous allons remplacer la scène existante. Appuyez sur le bouton "Replace Meshes" pour quitter le mode de radiosité et revenir au mode normal, appuyez maintenant sur "free Radio Data". Surprise! vous constaterez que votre scène a été remplacée par un nouveau maillage, vous pourrez aussi constater que ce maillage à un nouveau matériau, en fait c'est lui qui contient la solution de radiosité. Le problème, me direz-vous, c'est que vous ne pouvez plus récupérer vos objets pour leur appliquer une nouvelle texture. En fait vous pouvez et c'est que nous allons voir dans l'étape suivante.

Un nouveau maillage

Séparation des éléments

C'est la partie un peu pénible de la radiosité avec Blender. Sélectionnez le nouveau maillage et passez en mode d'édition, même si les objets ont fusionné, ils ont conservé leurs liens de création. Sélectionnez un point du sol (Clic droit) et appuyez sur la touche L (Link), automatiquement l'ensemble du sol sera sélectionné. appuyez maintenant sur la touche P pour séparer l'objet en répondant oui à la question "Separate ?". Répétez cette opération sur l'ensemble des objets. Je vous conseille de commencer par le sol, le plafond, les murs (sélectionnez les 3 en même temps), puis de sélectionner vos objets (dans mon exemple c'est simplement la table) par la touche b, ce qui sera parfois plus rapide.


Séparation des différents éléments

Une fois cette opération terminée, nous avons tous nos objets indépendants et avec leur propre solution de radiosité Nous pouvons maintenant travailler sur les différentes textures.
 

Ajout de textures

Nous allons simplement faire le sol en parquet et donner un peu d'irrégularités sur les murs pour simuler un vieux plâtre. Sélectionnez les murs et revenez sur la fenêtre des matériaux (F5)  ; vous constaterez que la solution de radiosité apparaît sous la forme d'un matériau, le fait que le bouton soit bleu, cela nous indique qu'il est partagé par d'autres objets (ce qui est normal puisque nous les avons séparés). Appuyez sur le bouton indiqué par la flèche rouge  pour isoler le matériau en répondant OK à la question "Single User", autrement nos modifications apparaîtront sur l'ensemble d'autres objets. Enlevez toute spécularité(Spec) pour simuler un matériau mat et augmentez la réfraction à 0.930, chaque couleur à 0.890 pour avoir un mur un peu plus blanc. Nous allons ajouter un peu de bruit sur les murs, basculez vers la fenêtre des textures  et ajoutez une nouvelle texture (que nous nommerons mur). Sélectionnez un "Stucci" et donnez-lui les paramètres comme le montre l'image ci-dessous.

Revenez dans la fenêtre des matériaux (F5) , désactivez la couleur du matériau et activez le "Bump Map" en appuyant sur la touche "Nor", vous pouvez faire varier l'intensité du "Bump" avec la réglette "Nor" située juste au-dessous.

Pour ce matériau, j'ai retenu les paramètres suivants :

Pour le sol, répétez l'opération précédente en commençant par isoler le matériau, conservez la valeur de Spécularité et de Réfraction. Basculez vers la fenêtre des textures et créez une nouvelle texture que vous nommerez Parquet. Choisissez l'image de ce didacticiel pour le parquet (que vous pouvez télécharger à partir de votre navigateur en cliquant avec le bouton droit de la souris sur l'image),

Utilisez les valeurs comme le montre l'image ci-dessous. Vous remarquerez que j'ai diminué la valeur "Filter" cela donne un grain plus réaliste à la texture.

Revenez dans l'éditeur de matériaux et activez le bouton "Col" pour que la texture soit utilisée. Pour obtenir un meilleur effet nous allons ajouter un peu de "Bump Mapping" . Les paramètres illustrés ci-dessous vous donne un exemple de ce que j'ai utilisé.

Vous pouvez maintenant ajouter une lampe (Spot) au milieu de la pièce (à la place de l'icosphère), diminuer son intensité à 0.4,  et faire un rendu. La présence de la lampe est indispensable pour pourvoir avoir les informations de réfractions, Bump mapping, etc..

Pour un meilleur effet j'ai créé un spot au-dessus de la table avec les valeurs suivantes :

Pour éviter d'avoir un contraste trop important, j'ai également créé une lampe classique d'une très faible puissance (0.1) placée devant la table, à l'extérieur de la pièce.

Vous pouvez lancer le rendu et observer le résultat, vous pouvez déplacer la caméra, ajuster les paramètres d'éclairage selon votre convenance.
 

Conclusion

C'est vrai que cette solution de radiosité est une peu "artisanale" mais elle peut rendre bien des services pour le rendu d'images statiques, d'autant plus qu'elle donne un aspect qui est loin d'être désagréable à l'oeil. Dans le cas de très grandes scènes, les choses se compliquent car il ne faut pas faire d'erreurs au moment des réglages du niveau de détail de la radiosité et être patient pour le calcul (parfois plusieurs heures). La récupération de chaque objet relève parfois du parcours du combattant, de plus il faut aussi disposer d'une très grosse carte graphique car le nombre de polygones devient parfois impressionnant.
Si on combine la radiosité avec des "environment map" sur certains objets, le résultat peut être parfois très beau. A tester et à approfondir en attendant une meilleure solution. A ce propos Nan travaille actuellement à l'amélioration du moteur de rendu.

Ci-dessous un bateau que j'ai réalisé dans le cadre d'un projet de cédérom qui présente la ville d'Agde dans l'antiquité, le rendu est en radiosité mais il a demandé 8 heures de calcul à cause des 40 amphores qui sont au fond de la cale. Pourvu qu'il ne coule pas :-)
Lors de travaux sur des scènes complexes, pensez à mettre chaque objet sur des calques différents car la quantité de polygones vous met à genou la plus grosse des cartes graphiques.

Si cela est possible, pensez à isoler les différentes zones de votre scène pour faire le calcul de la radiosté sur des éléments séparés, cela améliorera la qualité et la rapidité du rendu.

2001 Toussaint Frédéric  Document sous licence FDL.