From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.


Introduction

Exemple de radiosité.

La plupart des méthodes de rendu, y compris le raytracing, utilisent un modèle spatial simplifié, hautement optimisé pour la lumière qui entre dans “l’œil” de la caméra et “dessine” l’image. Vous pouvez ajouter réflections et ombres à ces modèles pour obtenir des résultats plus réalistes. Mais il manque encore un aspect important ! Quand une surface a une composante de lumière réfléchie, cette dernière n’est pas réfléchie que dans notre image, elle “éclaire” aussi les autres surfaces de son voisinage. Et vice-versa. En fait, la lumière “rebondit” ainsi dans l’environnement jusqu’à ce que toute son énergie ait été absorbée (ou se soit échappée !). La lumière ré-émise contient de l’information sur l’objet qui l’a ré-émise, notamment sur sa couleur. En conséquence, non seulement les ombres ne sont plus aussi sombres grâce à la lumière ré-émise, mais en plus elles tendent à se colorer en fonction des objets les plus proches et lumineux. Un phénomène souvent appelé “fuite de couleur” (“color leaking”) (Exemple de radiosité).


Dans les environnements fermés, l’énergie lumineuse est produite par des “emitters” (“émetteurs”) et est “récupérée” par les réflections/absorptions des surfaces successivement rencontrées dans l’environnement. La quantité d’énergie émise par une surface est déterminée par la radiosité de cette dernière. À la différence des méthodes de rendu classiques, les méthodes de radiosité calculent d’abord toutes les interactions lumineuses de l’environnement, de manière indépendante du point de vue. Ensuite, différents points de vue peuvent être rendus (quasiment) en temps réel. Dans Blender, depuis la version 2.28, la radiosité est à la fois un outil de rendu et de modélisation. Cela signifie que vous pouvez activer la radiosité lors d’un rendu ou alors l’utiliser pour peindre les couleurs et lumières des vertices de vos meshes, pour l’utiliser plus tard.

Les directions des normales sont cruciales
L’émission lumineuse est contrôlée par la direction des normales d’un mesh. Cela est évidemment crucial pour les émetteurs, mais également pour tous les meshes, puisque lorsqu’ils ré-irradient leur énergie non-émise, ils le font dans la direction de leurs normales.



Détails techniques

Durant la fin des années quatre-vingt et le début des années quatre-vingt-dix, la radiosité était un sujet brûlant dans le graphisme 3D sur ordinateur. Beaucoup de méthodes différentes furent développées, celles qui eurent le plus de succès étaient basées sur la méthode du “raffinement progressif” (“progressive refinement”) avec le principe de “subdivision adaptative”. Et c’est cela que Blender utilise. Pour être capable de tirer le maximum de la radiosité dans Blender, il faut comprendre les principes suivants :


Méthode de l’Element fini
Beaucoup de techniques de rendu graphique ou de simulation utilisent une simplification de la réalité : les “éléments finis”. Pour un résultat visuellement bon (voir même scientifiquement valide), il n’est pas toujours nécessaire de plonger à un niveau moléculaire de détails. Vous pouvez au contraire réduire le problème à un nombre fini d’éléments représentatifs et bien déterminés. Il est connu que ce type de système converge rapidement vers une solution stable et valable. La technique de radiosité est un exemple typique de méthode avec éléments finis, en ce que chaque face est considérée comme un “élément fini” et son émission de lumière prise comme un tout.


Patches et Elements
Dans l’univers de la radiosité, on distingue deux types de faces :
Patches
Ce sont les triangles ou les quadrangles capables d’émettre de l’énergie. Pour un rendu rapide il est important d’avoir aussi peu de ces patches que possible. Mais, pour accélérer les choses, l’énergie est modélisée comme étant irradiée uniquement par le centre du patch ; leur taille devrait en conséquence être suffisamment petite pour obtenir une distribution de l’énergie réaliste (par exemple, quand un petit objet est placé devant le centre du patch, toute l’énergie émise par celui-ci est bloquée par cet objet, même si le patch est plus grand ! Ce dernier devrait être subdivisé en plus petits patches).
Elements
Ce sont les triangles et quadrangles qui reçoivent de l’énergie. Chaque Element est associé à un Patch. En fait, les patches sont subdivisés en plein de petits elements. Quand un element reçoit de l’énergie il en absorbe une partie (dépendant de sa couleur) et passe ce qui reste au patch, pour être ré-émise ultérieurement. Puisque les elements sont aussi les faces que nous rendons, il est important de les avoir aussi petites que possible, pour rendre les subtiles bordures des ombres et les dégradés d’éclairage.


Raffinement progressif
Cette méthode commence par examiner tous les patches présents. Celui avec le plus d’énergie non-émise est sélectionné pour émettre toute son énergie dans l’environnement. Les elements de cet environnement reçoivent cette énergie, et en ajoute une partie à l’énergie non-émise de leurs patches associés (le reste étant absorbé). Le processus recommence alors avec le patch ayant maintenant le plus d’énergie non-émise. Cela se poursuit pour tous les patches jusqu’à ce qu’il n’y ait plus d’énergie non-émise, où qu’elle ait convergé sous une certaine valeur.


La méthode de l’hémicube
Le calcul de la quantité d’énergie que chaque patch transmet à chaque element est réalisé en utilisant les “hémicubes”. Exactement placé un centre d’un patch, un hémicube (littéralement, moitié de cube, comme pour hémisphère) consiste en cinq petites images de l’environnement. Pour chaque pixel de ces images, un element visible donné est codé par une couleur précise, et la quantité d’énergie transmise peut alors être calculée. Avec un matériel spécialisé, la méthode des hémicubes peut être fortement accélérée. Cependant, dans Blender, les calculs d’hémicubes sont faits “en software”. Cette méthode est en fait une simplification/optimisation de la “vraie” formule de radiosité (“form factor differentiation”, “différenciation du facteur de forme” (???)). Pour cette raison la résolution de l’hémicube (le nombre de pixels dans ses images) est approximée et son réglage précis est très important pour prévenir les artefacts d’aliasing.


Subdivision adaptative
Puisque la taille des Patches et des Elements dans un mesh détermine la qualité du résultat de la radiosité, des algorithmes de subdivision automatique ont été développés pour définir la taille optimale des patches et elements. Blender a deux méthodes de subdivision automatique :
1. Test de subdivision pour les Patches
En émettant de l’énergie dans l’environnement, et en comparant les résultats de la méthode des hémicubes avec ceux de la vraie formule “facteur de forme”, des erreurs peuvent être détectées qui révèlent la nécessité d’une subdivision du patch. Il en résulte des patches plus petits et un temps de calcul plus long, mais plus de réalisme dans le résultat.
2. Test de subdivision pour les Elements
En émettant de l’énergie dans l’environnement, et en détectant les transitions brusques (les forts gradients d’énergie) au sein d’un patch, on détermine si les elements de ce patch doivent être subdivisés. Il en résulte de plus petits elements et un plus long temps de rendu (et peut-être plus d’aliasing), mais aussi un meilleur niveau de détails.


Affichage et “Post Processing”
La subdivision des elements dans Blender est pondérée, c’est-à-dire que chaque element n’a qu’au maximum un niveau de subdivision de différence avec ses voisins. C’est important pour un rendu correct et agréable du résultat de la radiosité avec un ombrage de Gouraud. En général, après les calculs de radiosité, le résultat est constitué de milliers de petits elements. En les testant et en enlevant les “doublons”, le nombre d’elements peut être fortement réduit sans diminuer la qualité du résultat. Blender stocke les valeurs d’énergie en “nombres flottants”. Cela permet des éclairages “spectaculaires”, en changeant les valeurs de multiplication et de gamma (c’est le même principe que le rendu HDR des cartes graphiques modernes).


La radiosité pour la modélisation
L’étape finale peut être de remplacer les meshes d’origine par le résultat de la radiosité (boutons Replace Meshes, panneau Radio Tool, sous-contexte Radiosity, contexte Shading, F5). À ce moment les couleurs des vertices sont converties d’une valeur flottante en une valeur RGB 24 bits. Les meshes originaux sont alors effacés et remplacés par un ou plusieurs nouveaux objets mesh. Vous pouvez alors effacer les données de la radiosité avec Free Data. Les nouveaux objets ont un matériau par défaut qui permet un rendu immédiat. Deux paramètres de matériau sont importants pour utiliser les couleurs de vertex (tous deux dans le panneau Material, sous-contexte Material) :
VColPaint
Cette option traite les couleurs de vertex comme remplaçantes des valeurs RGB normales du matériau. Vous devez ajouter des lampes de manière à voir les couleurs produites par la radiosité. En fait, vous pouvez utiliser l’éclairage et l’ombrage de Blender comme d’habitude, tout en conservant l’aspect soigné de la radiosité dans le rendu.
VColLight
Les couleurs de vertex sont ajoutées à la lumière au moment du rendu. Même sans lampe, vous pouvez profiter du résultat. Avec cette option, les couleurs de vertex sont pré-multipliées avec les couleurs RGB du matériau. Cela permet un réglage fin de la quantité de “lumière de radiosité” dans le rendu final.