Re: [Mini-tuto] Découvrir et maîtriser Luxrender (+GPU)

Posté par Blob4 le 18/11/2010 2:24:48
Voici une nouvelle partie consacrée aux matériaux et aux textures, à l'éclairage dans LR, et aux réglages finaux.

1)Les matériaux
La philosophie générale de LR est de modéliser au mieux la réalité. En interne la lumière est calculée spectralement, chaque bande de fréquences reçoit des traitements propres et ce qu'on voit est le résultat recomposé de ces traitements séparés.

Dans Blender et avec "l'internal", l'utilisateur est habitué à imiter l'aspect de divers matériaux présents dans la réalité en agissant sur des paramètres de shading. Mais dans la réalité les matériaux renvoient la lumière selon des lois physiques complexes et ce petit nombre de réglages n'est pas suffisant pour rendre compte de toutes ces propriétés. Dans LR, les matériaux sont donc "pré-codés" selon leur nature et disponibles sous formes de "macros" ayant parfois des réglages optionels. Ce sont les programmeurs qui ont codé en amont sous formes de routines complexes ces matériaux pour coller au mieux à la réalité physique.

L'utilisateur final a donc une macro pour le métal, une autre pour la peinture de voiture, etc.. Pour le verre, il y a deux macros, glass1 et glass2, cette dernière permettant en plus de régler les propriétés d'absorption de la lumière le traversant. Il y a 12 matériaux de base plus 2 matériaux utilitaires (null et mix). Voir la liste et leur aspect, ici:
http://www.luxrender.net/wiki/index.php?title=LuxRender_Materials

Bien que ce ne soit pas encore possible avec la version actuelle de luxblend25, il existera la possibilité d'importer des exemples d'usage de ces matériaux disponibles dans une bibliothèque sur le site:
http://www.luxrender.net/lrmdb/en/

Le panneau des matériaux permet aussi de rendre un mesh lumineux (cliquer "Use Emission"), et aussi de définir des matériaux volumiques par exemple pour le liquide contenu par une bouteille en verre.

2)Les textures
Le panneau des textures offre au chois les deux systèmes de textures, celui de Blender et celui propre à LR. Quand vous voulez utilisez une texture Blender, il faut penser à sélectionner en plus "Use Blender Texture" dans la liste "LuxRender Type", elle, propre à LR.

A noter que pour utiliser une image il faut sélectionner "imagemap" dans la liste LR et non "Image or Movie" de Blender qui sera ignoré.

Voici la liste des textures LR:


Vous noterez qu'il y à droite un groupe "Fresnel Textures" servant à la caméra.

Il reste donc un groupe de 17 textures propres à LR dont:
-4 textures pour les lampes: blackbody, equalenergy, gaussian spectrum, lampspectrum. Elles permettent de simuler le contenu spectral d'un éclairage donné (ex: les lampes à filament avec la texture blackbody). Cf. cette page du wiki sur les éclairages.
-13 textures pour les matériaux, dont 4 sont utilitaires (scale, mix, null, uv)

La "philosophie" des options pour assigner les textures aux différents paramètres des shaders est également un peu différente qu'avec Blender.

Pour régler l'influence d'une normalmap par exemple il faut revenir au panneau des matériaux et cliquer sur "T" (pour texture) à droite de "Bump Map". Il en est de même pour d'autres paramètres de mapping qu'on est habitué à régler dans le panneau des textures.

Attention avec les textures, il y une différence de type (float ou int) à respecter avec les champs de LR. On ne peut donc pas toujours directement les assigner où on voudrait (c'est là que le matériau "mix" entre en jeu).

Toutefois la règle est simple:
-Si le "T" est à côté d'un rectangle "couleur", cela veut dire que la texture doit produire du RGB 24bit (3x8bit int) et donc des "entiers".
-Si le "T" est à côté d'un champ numérique alors la texture doit renvoyer des nombres en virgule flottante.

Là où ça devient un peu rocambolesque, c'est que les textures Blender sont en "float", on ne peut donc pas les assigner à la couleur diffuse mais par contre aucun problème pour le "Bump Map".

Pour pouvoir assigner une texture Blender à la couleur diffuse et mélanger ainsi 2 couleurs, il faut créer un materiau "mix" et assigner votre texture Blender au "Mix Amount". Ensuite créer deux autre matériaux qui seront ceux mélangés par la texture. Entrer dans le materiau Mix les noms des 2 matériaux que vous venez de créer, et voilà !

Les textures LR sont parfois plus flexibles car ils peuvent être réglés pour produire soit des flottants (float) soit des entiers (colors).

La page wiki de LR sur les textures.

Concernant les options de certaines textures:
-Pour "Metal", il y a différents presets (gold, silver) et aussi la possibilité d'utiliser des fichiers ".nk" qui sont des tableaux de données contenant l'IOR pour chaque bande spectrale des différents métaux connus. On trouve ces fichiers ici

-Pour Glass et Glass2, cochez "architectural" si vous comptez utiliser le verre pour le vitrage d'un bâtiment, cela simplifiera grandement les calculs (l'IOR ne sera pas pris en compte).


3)L'éclairage
Les différentes lampes de Blender sont prises en compte.
-Point et Spot sont des "singularités lumineuses" dans la mesure où ce sont des points infiniment petits dont on ne voit pas la source sur le rendu, et les ombres sont trop marquées pour être réalistes.
-Area affiche un carré ou un rectangle lumineux visible dans la scène (à la différence de Blender). Il n'émet que d'un seul côté. A utiliser de préférence pour tout éclairage.
-Hemi permet d'utiliser les map HDRI pour l'éclairage global d'une scène. Notez que l'angle du "Hemi" va influer sur l'orientation de la map.
-Sun est un peu comme Blender, même si ses réglages sont moins nombreux, il est visible et peut afficher un "sky".

Une autre possibilité est enfin de rendre lumineux n'importe quel mesh, pour cela il faut créer un matériau (genre Matte par exemple) et cocher "Use Emission" dans l'onglet "LuxRender Material Emission" du Material. Plus il y a de faces, plus les calculs seront longs.

les "Areas" et les meshs lumineux ont en commun 3 paramètres pour régler leur intensité:
-gain: il s'agit d'un simple multiplicateur
-power: la puissance en watt d'une lampe (100 par défaut)
-efficacy: le nombre de lumen par watt, 17 étant la valeur à défaut pour une lampe à filament

Ces 3 paramètres sont en fin de compte de la forme a*b*c, vous pouvez donc en utiliser qu'un seul. Les deux derniers s'utilisent conjointement quand on veux modéliser un éclairage réaliste selon les caractéristiques des différentes lampes:
http://www.mts.net/~william5/library/sources.htm

Utiliser les "Light Groups", c'est l'enfance de l'art, il suffit de remplacer "default" par le nom du groupe de votre choix pour chaque lampe (ou mesh lumineux) dans le champ Light Group. Seul la GUI de LR permet actuellement de régler interactivement le dosage de chaque groupe.

On peut enfin altérer le contenu spectral d'un source lumineuse en utilisant les 4 textures spéciales dont je parle plus haut.

On peut aussi agir sur la forme de la diffusion lumineuse (le cône de lumière) en utilisant des fichiers IES (de Illuminating Engineering Society, un groupement d'intérêts industriels collectant et offrant des données sur chaque type d'éclairage).

(partie à compléter sur l'usage des IES, rajouter un topo sur les éclairages volumétriques).

A noter que les lampes ont aussi un paramètre "Importance", il n'agit pas sur l'intensité lumineuse mais sert conjointement avec le paramètre "Light Strategy" de l'onglet "Scene/Surface Integrator" (visible en cliquant sur "advanced"). Plus une lampe a une importance élevée plus le moteur de rendu passera du temps à calculer ses réflexions lumineuses. Cela permet donc de définir une hiérarchie dans les lampes et éviter qu'une petite diode lumineuse profite du même temps de calcul que la lampe principale.

Dernière chose, si vous voulez éclairer une scène d'intérieur depuis la lumière du jour (externe donc), il est conseillé de placer des plans "Portal" sur les ouvertures pour indiquer au moteur de rendu d'où viendra la lumière. Cela forcera LR à calculer en priorité les rayons qui rentrent dans le bâtiment. Créez un simple plan qui recouvre votre fenêtre (ou groupe de fenêtre si il y en a plusieurs, c'est inutile de faire un plan par fenêtre et peut être contre-productif) et cochez "Exit Portal" dans "LuxRender Mesh Options" du panneau Mesh.
Attention les "portals" nécessitent une version de Luxrender >= v0.8

4)Les volumes
Depuis finalement pas si longtemps on peut utiliser un système de volume dans Luxrender.

En préambule, il est important de souligner que LR ne sait pas encore gérer les volumes hétérogènes (ç-à-d avec une densité variable). L'intérieur d'un objet sera donc fait de la même matière uniformément répartie.
Notez également que la majorité des matériaux prémodélisés (métaux, velours, glossy, matte, etc) sont opaques et donc pour que l'on puisse voir le volume intérieur de l'objet il faut les rendre partiellement transparents en spécifiant une valeur d'alpha.

Ces matériaux pré-modélisés concernent donc uniquement le revêtement extérieur en 2D d'un objet, et n'ont aucun lien avec le volume qui se trouve à l'intérieur. Les volumes n'héritent pas des propriétés des matériaux, et vice versa, et on peut donc avoir un cube de gaz recouvert de métal semi-transparant, et oui c'est un peu foufou. :)

Il y a deux types de volume (mais toujours "uniformes") gérés par LR, les volumes "clear" et ceux "homogenous". Le premier étant simplement une version simplifiée du second.

Les "clear" servent principalement pour les verres et les liquides qui ne contiennent pas de particules en "suspens". Le paramètre principal est l'absorption lumineuse. Dans un verre coloré par exemple les parties fines apparaîtront totalement transparentes et seules les parties épaisses se coloreront progressivement en fonction de l'épaisseur. En gros, plus la lumière transite dans le matériau plus elle est filtrée.

Les "homegenous", ou volumes homogènes en bon français, proposent comme réglage supplémentaire la dispersion lumineuse (scattering). Il faut imaginer présent dans le volume une quantité uniforme de particules en suspens qui vont disperser les photons entrant, le rendant progressivement opaque. Les usages sont multiples, on peut faire du brouillard (les particules d'eau ayant cette fonction de dispersion), des eaux boueuses, du lait, et en fait toute sorte d'effet de "Subsurface scattering" comme la peau ou le corps d'une bougie.

Il est important de comprendre que les volumes ont en outre chacun un réglage d'IOR (indice de réfraction), et que pour que Luxrender puissent combiner les différents volumes (par exemple un verre, son liquide et l'atmosphère de la pièce), il faut définir un "ordre". A savoir qui contient qui, qui est l'intérieur et qui est l'extérieur.

Comment faire du Subsurface Scattering avec n'importe quel matériau ?
Pour cela c'est très simple définissez lui un volume interne(ce que vous voudrez avec les bonnes valeur IOR/absorption/scattering) et un externe (en général l'air de la pièce) et régler la valeur d'alpha à votre souhait. De faible valeur d'alpha vont permettre de rendre une oreille légèrement translucide, plus d'alpha et votre objet deviendra transparent et sera probablement non réaliste, mais qui sait plus artistique.


Comme je le disais en préambule, à ce stade il n'y a pas de volume "heterogenous", c'est à dire des volumes dont les particules internes auraient une densité variable (avec un système de voxels par exemple).
Il y a donc pas possibilité de faire de la fumée de cette façon, il existe cependant un système "volumegrid" qui est encore utilisable mais à considérer comme déprécié même si luxblend25 permet de l'utiliser. Le support des volumes hétérogènes est prévu, mais pas pour tout suite.


Dernière remarque, Utilisez l'intégrateur "single" quand vous faites un effet atmosphérique et "multi" quand vous faites un objet translucide, pour avoir de meilleurs performances. Vous pouvez également consulter la documentation du wiki:
http://www.luxrender.net/wiki/LuxRender_Volumes


5)Rendu Final et Animation
Firefly Rejection= Cette option est dans l'onglet quand on sélectionne la caméra, elle permet de réduire le phénomène des lucioles (*). Une valeur de 2 à 3 est suffisante pour commencer, 10 est considéré comme très fort. Attention il y a un coût en temps de calcul.

Clay Render= Tout récent ce mode substituant tous les matériaux par un unique matériau blanc mat est pour le moment dans Test/Debugging Options du panneau Scene/Render.

Le Tonemapper est responsable du traitement de l'image finale, par défaut le mode "Reinhard" est comme un oeil humain qui s'adapte à la luminosité et fait en sorte que l'image soit bien exposée. Cela peut dérouter quand on fait une scène sombre car si on baisse les lumières le tonemapper va contrebalancer en montant la luminosité globale, ce qui va à l'encontre de l'effet voulu. Dans ce cas là il faut agir sur Pre/Post ou Burn. "Burn" a un léger effet sur le constraste en même temps qu'il agit sur la luminosité globale, et il faut jouer en conjonction soit avec "Pre" ou "Post" qui eux sont de simples multiplicateurs (la différence est où il se situe dans la chaîne).

Dans une animation, l'automatisme du mode Reinhard risque de poser des problèmes, ou alors on souhaite se rapprocher des caractéristiques d'un appareil photo. Pour cela on peut utiliser le mode "Linear" qui propose les réglages suivants:

Sensivity: la sensibilité du film en ASA/ISO
Exposure : le temps d'exposition en fraction de seconde
Fstop : la fermeture du diaphragme
Gamma : une mesure de correction globale

Note: il serait intéressant de savoir si Fstop joue aussi sur la profondeur de champ comme un vrai appareil.

Enfin il existe d'autres modes, comme "Autolinear" qui semble être un mode automatique, un peu comme "Reinhard", "Contraste" qui dispose que d'un seul paramètre "magique" et "MaxWhite".

Un petit mot sur les animations, on peut en faire, malgré que cela soit en pratique très difficile à cause du temps de rendu propre à LuxRender (il y a toutefois des modes biaisés qui peuvent rendre la chose possible). Pour cela il faut mettre une limite à chaque image de deux façons au choix dans le paneau Render à l'onglet Sampler, soit avec SPP (Samples par pixel) soit Halt time tout simplement.


Lexique
(*)Lucioles= Traduction de Firefly en anglais, ce terme désigne les points blancs qui apparaissent au cours du rendu, et logiquement disparaissent au bout d'un petit paquet d'heures (sinon de jours). Les lucioles représentent des cas où la lumière a rebondi sur chaque objet comme sur des miroirs sans perdre en luminosité. Ce sont des singularités imprévues qui finiront par disparaître avec le nombre des échantillons par pixel.

Subsurface Scattering = Dispersion lumineuse ayant lieu sous la surface de certains matériaux translucide comme la peau ou la cire d'une bougie. Une oreille devient légèrement rouge si une une lampe est derrière.

Liens divers
Sur Blendercoockie une très bonne introduction pour faire un verre avec un liquide:
http://www.blendercookie.com/2011/05/03/rendering-a-liquid-filled-glass-in-luxrender/
Texturer et éclairer une scène d'intérieur:
http://www.blendercookie.com/2011/07/07/texturing-lighting-and-rendering-a-interior-scene-with-luxrender/

Cette contribution était de : http://blenderclan.tuxfamily.org/html/newbb/viewtopic.php?forum=25&topic_id=28285&post_id=351585