Retrouvez cet article dans : Linux Magazine 92
Depuis le début de cette série, nous présentons Yafray comme un moteur de rendu photoréaliste. Nous avons étudié sa capacité à reproduire des schémas d’éclairage crédibles, à simuler le flou focal d’une véritable caméra, mais sans pour autant s’attacher à l’essentiel : les shaders et les propriétés matériau.
En effet, c’est, en premier, le soin apporté à la création des shaders qui va déterminer l’apparence de vos surfaces dans vos scènes et donc suggérer une notion de réalisme à l’observateur de l’image. Mais qu’est-ce qu’un shader ? Il s’agit tout simplement d’un terme générique des propriétés de la surface d’un objet qui indique au moteur de rendu comment ombrer celle-ci (ombre se traduit par shadow, en anglais) en fonction des sources d’éclairage. Le shader prend en compte les propriétés de diffusion de la lumière du matériau, ainsi que sa restitution à la surface de l’objet : certaines ombres peuvent être plus diffuses ou, au contraire, plus tranchées. Le shader prend également en compte les reflets spéculaires, c’est-à-dire les taches lumineuses à la surface des objets éclairés. Côté matériau, le moteur de rendu prend également en compte les propriétés de réflexion (miroir) ou de réfraction (verre) de la lumière, grâce au raytracing, sachant que ces deux propriétés sont les fondations d’un rendu photoréaliste, car capables de restituer fidèlement les mêmes phénomènes dans notre réalité. Enfin, d’autres propriétés de matériau sont également simulées par Yafray, comme par exemple l’effet Fresnel pour les matériaux réfléchissants, ou l’absorption, le filtrage ou la diffraction lumineuse pour les matériaux transparents. La dispersion subsurfacique (subsurface scattering ou SSS) est également supportée de façon expérimentale.
Astuce
Matériaux prédéfinis dans Blender
Si vous utilisez Yafray dans le cadre de la suite de modélisation, animation et rendu Blender, vous trouverez dans l’onglet Mirror Transp (Material buttons, menu Shading [F5]) un sélecteur de matériaux prédéterminés. Parmi ceux-ci, on retrouve les prédéfinitions qui suivent. Vous noterez qu’une couleur de base rouge lui a été attribuée, pour une meilleure lisibilité des images tests, et qu’il est intéressant de noter la couleur des caustiques réfractés et/ou réfléchis, de même que l’éclairage indirect obtenu grâce à l’illumination globale.

1. Côté shaders
Beaucoup de débutants pensent à tort que le fait d’utiliser un moteur de rendu photoréaliste va rendre leurs œuvres, sans effort particulier, également photoréalistes. C’est bien évidemment une erreur, dans le sens où nul logiciel de 3D ne propose dans son interface un bouton magique portant la mention Faire une photo. Le photoréalisme se travaille et se gagne sur les détails, que ce soit au niveau de la modélisation, des textures, de la mise en scène ou, encore, des matériaux. Et comme souvent en matière de 3D, c’est l’observation de la réalité qui nous entoure qui permet à l’artiste de choisir les effets à obtenir pour qu’un observateur admette comme réaliste une scène quelconque.
Cela est d’autant plus vrai au niveau du choix et des réglages des shaders. De nombreux algorithmes d’ombrage des surfaces existent, et certains bénéficient plus de la faveur du grand public que d’autres, en fonction de leur simplicité de mise en œuvre et du résultat obtenu. Mais chacun a été développé pour favoriser une méthode de diffusion de la lumière à la surface des objets, propre à tel ou tel matériau réel. C’est donc là que le sens de l’observation de l’artiste se révèle incontournable : il lui faudra choisir tel shader plutôt qu’un autre, en fonction de la nature des objets qu’il souhaite mettre en scène.
Étudions un bloc <shader></shader> typique de Yafray, par exemple le bloc suivant, qui contient tous les attributs les plus courants (ou ceux par défaut) à partir desquels il est possible de définir des matériaux simples :
<shader type="blendershader" name="MAMaterial" >
<attributes>
<color r="0.800000" g="0.800000" b="0.800000" />
<specular_color r="1.000000" g="1.000000" b="1.000000" />
<mirror_color r="1.000000" g="1.000000" b="1.000000" />
<diffuse_reflect value="0.800000" />
<specular_amount value="0.500000" />
<alpha value="1.000000" />
<emit value="0.000000" />
<matmodes value="traceable shadow" />
<diffuse_brdf value="lambert" />
<specular_brdf value="blender_cooktorr" />
<hard value="50" />
</attributes>
</shader>
Les couleurs de l’objet sont déterminées à partir de trois attributs, chacun doté des trois composantes de couleur de base : r pour red (rouge), g pour green (vert) et enfin b pour blue (bleu).
color: définit la couleur de base de l’objet, c’est-à-dire celle qui est visible lorsque tous ses pixels sont 100% éclairés, sans ombre ni spéculaires ou rehaut lumineux ;specular_color: définit la couleur de la tache spéculaire, ce qui est utile pour simuler des objets métalliques ou certains matériaux organiques ;mirror_color: définit la couleur qui teinte les reflets à la surface de l’objet.
Suivent ensuite quelques propriétés typiques, communes à tous les shaders :
diffuse_reflect: définit le pourcentage de lumière réfléchie par le matériau ; une faible valeur implique que peu de lumière est réfléchie : l’objet apparaît sombre. Une valeur élevée implique que beaucoup de lumière est réfléchie : l’objet apparaît plus clairement.specular_amount: définit la spécularité de l’objet ; plus cette valeur sera élevée, plus les taches spéculaires seront intenses et visibles à la surface de l’objet, lorsque illuminée par une lampe.alpha: définit la transparence de l’objet. Une valeur nulle indique un objet totalement invisible, une valeur de 1.000, quant à elle, indique un objet totalement opaque.emit: définit l’émittance de l’objet, c’est-à-dire la portion de luminosité propre (en dehors de tout système d’éclairage) qu’il émet. Utile pour l’illumination globale lorsque aucune lampe n’est placée dans la scène et que l’on souhaite que ce soit un maillage qui soit émetteur de lumière (écran cathodique, lampe de chevet, ou autre). Attention : des valeurs très faibles (de l’ordre de 0.100) suffisent déjà à éclairer des scènes entières (voir GNU/Linux Magazine n°90 pour l’article expliquant le fonctionnement de l’illumination globale).
1.1 Shader Diffus
Le shader diffus est celui qui va déterminer la forme et la vitesse de propagation de la lumière à la surface d’un objet éclairé. A noter que le terme BRDF (Bidirectional Reflectance Distribution Function) se substitue parfois au terme shader. Yafray accepte presque tous les shaders diffus de Blender, c’est-à-dire, plus particulièrement :
- Minnaert : ce type de shader convient particulièrement à la simulation de surfaces poreuses ou des surfaces poussiéreuses, des métaux rouillés, du bois brut non verni ou encore du ciment. Il admet notamment un paramètre supplémentaire
darkening. - Toon : ce type de shader ne se raccroche à rien de physiquement observable dans la réalité. Il s’agit d’une approche artistique des matériaux.
Oren-Nayar: ce type de shader convient parfaitement aux tissus, au bois, à la peau ou au velours. Il admet notamment un paramètre supplémentaireroughness.Lambert: ce type de shader est parfait pour les plastiques, les matériaux artificiels et le marbre poli. On l’appelle également le diffuseur parfait.
Le type de shader diffus est déterminé par un attribut qui prend la forme suivante :
<diffuse_brdf value="[shader]" />
où [shader] peut être remplacé par lambert, minnaert, toon et oren_nayar. Les types de shader présents dans Blender, mais non supportés par Yafray sont remplacés par le shader par défaut lambert.
1.2 Shader Spéculaire
Le shader spéculaire va définir le modèle de spéculaire utilisé. Yafray accepte presque tous les shaders spéculaires de Blender, c’est-à-dire :
Wardiso: ce type de shader convient surtout aux matériaux anisotropes, avec des rehauts mieux définis. Il admet deux paramètres supplémentaires :u_roughnessetv_roughnessqui spécifient la rugosité du matériau dans les deux directions principales de la surface. Par exemple :
<specular_brdf value=”ward” /> <u_roughness value=”0.100000” /> <v_roughness value=”0.100000” />
Toon: ce type de shader ne se raccroche à rien de physiquement observable dans la réalité. Il s’agit d’une approche artistique des matériaux.Phong: Ce type de shader est particulièrement adapté aux peintures brillantes, aux laques et aux vernis, aux plastiques, au métal poli et à certains polymères. Il admet un paramètre supplémentaire,hard, pour déterminer la dureté de la tache spéculaire. Par exemple :
<specular_brdf value=”phong” /> <hard value=”50” />
Cook-torrance: ce type de shader est plus particulièrement adapté aux matériaux avec une très forte spécularité, comme les carrosseries de voiture, le verre, l’eau ; les matériaux avec une moindre spécularité, comme le métal non poli ou le verre dépoli ; et enfin aux matériaux dont les reflets sont plus diffus, comme le bois, la pierre ou la peau. Il admet un paramètre supplémentaire, hard, pour déterminer la dureté de la tache spéculaire. Par exemple :
<specular_brdf value=”blender_cooktorr” /> <hard value=”50” />
Blinn: ce type de shader repose sur un modèle plus physique que les autres, et admet notamment un paramètre supplémentaire,blinn_ior, pour déterminer l’indice de réfraction du matériau pour la détermination du reflet spéculaire, ethardpour déterminer la dureté de la tache spéculaire. Par exemple :
<specular_brdf value=”blinn” /> <blinn_ior value=”4.000000” /> <hard value=”50” />
Le type de shader spéculaire est déterminé par un attribut qui prend la forme suivante :
<diffuse_brdf value="[shader]" />
où [shader] peut être remplacé par blender_cooktorr, phong, blinn, toon et ward.
1.3 Le subsurface scattering
La dispersion subsurfacique (subsurface scattering ou SSS) est un phénomène apparaissant lorsque de la lumière traverse la surface externe d’un objet et propage plus ou moins fortement au travers de la matière même. Elle peut être observée sur des matériaux parfaitement monolithiques (certains minéraux, comme le jade, par exemple) ou à la surface d’objets composés de plusieurs matériaux (comme la peau humaine, dont la couche supérieure est translucide et laisse passer une quantité certaine de lumière), mais aussi les végétaux.
La mise en place d’un tel effet avec Yafray demande un tout petit peu plus de travail que les autres shaders. En effet, l’effet est piloté dans un shader à part, auquel il sera fait appel par le shader de l’objet affecté. Ainsi, copiez ce bloc <shader> dans votre fichier .xml, en amont du bloc <shader> de l’objet affecté :
<shader type="sss" name="exemple_sss"> <attributes> <color r="1.0" g="0.0" b="0.0"/> <radius value="1.5"/> <samples value="100"/> </attributes> </shader>
Ensuite, dans le bloc <shader> de l’objet affecté, vous ajouterez une simple ligne :
<environment value="exemple_sss" />
Par exemple :
<shader type="sss" name="exemple_sss"> <attributes> <color r="1.0" g="0.0" b="0.0"/> <radius value="1.5"/> <samples value="100"/> </attributes> </shader><shader type="blendershader" name="MAMaterial.001" > <attributes> <color r="0.936526" g="0.720222" b="0.676962" /> <specular_color r="1.000000" g="1.000000" b="1.000000" /> <mirror_color r="1.000000" g="1.000000" b="1.000000" /> <diffuse_reflect value="0.800000" /> <specular_amount value="0.150000" /> <alpha value="1.000000" /> <emit value="0.000000" /> <matmodes value="traceable shadow" /> <diffuse_brdf value="oren_nayar" /> <roughness value="0.100000" /> <specular_brdf value="blender_cooktorr" /> <hard value=”50” /><environment value="exemple_sss" /></attributes> </shader>

Figure 01 : Exemple de matériau utilisant le subsurface scattering
Les paramètres sont assez simples : color permet de déterminer la couleur diffusée sous la surface (par exemple, vous choisirez un rouge bien prononcé pour de la peau humaine) ; radius permet de définir la densité/translucidité apparente de l’objet ; enfin, samples permet de spécifier le nombre d’échantillonnages à effectuer. Attention : plus la valeur de radius sera élevée, plus vous aurez besoin d’échantillons pour obtenir des résultats convenables.
Vous noterez enfin que le shader sss, tel qu’implémenté à ce jour dans Yafray, n’est ni physiquement correct, ni totalement terminé d’implémentation. Selon l’auteur même, s’il donne des résultats satisfaisants, c’est plus dû à la chance qu’à un code complet et bien établi.
2. Côté matériau
Pendant de longues années, le raytracing est resté le roi indétrônable du rendu, car il était la seule méthode abordable pour obtenir de véritables reflets, des réfractions réalistes et des ombres parfaites ; ces caractéristiques représentaient alors le summum du réalisme. Mais avec l’évolution de la micro-informatique offrant toujours plus de puissance de calcul, permettant maintenant, notamment, de mettre en place des solutions d’illumination globale, de caustiques ou encore de flou focal, ces mêmes caractéristiques ne sont plus aujourd’hui qu’une composante, non négligeable, certes, de ce que l’on admet couramment être du photoréalisme.
2.1 La réflexion
Le tracé d’un reflet à la surface d’un objet répond à une méthodologie assez simple à comprendre, ainsi qu’à mettre en place grâce au principe du raytracing. Comme d’habitude, un rayon est lancé de la caméra en direction du pixel équivalent de l’image finale. En vulgarisant au maximum, si le rayon rencontre une surface, le moteur va inspecter ses propriétés matériau pour déterminer si la surface est réflective. Si oui, le rayon rebondira sur la surface (en fonction de l’angle incident entre le rayon et la normale à la surface) à la recherche d’une autre surface dans son environnement.

Figure 02 : Principe de la détermination de la couleur d’un reflet à la surface d’un objet réfléchissant
Bien sûr, si la surface trouvée par le rayon après son rebond est elle-même réfléchissante, le rayon rebondit une nouvelle fois, et ainsi de suite, jusqu’à trouver une surface qui n’est pas réfléchissante. Bien sûr, le pixel de l’image finale se voit attribuer la couleur de la surface (au point de contact) du dernier objet finalement trouvé, sauf si la surface réfléchissante est elle-même colorée, ou si l’objet n’est que partiellement réfléchissant (en ce cas, le reflet sera plus ou moins teinté par les couleurs propres des divers objets réfléchissants).
Enfin, dans un environnement constitué uniquement d’objets réfléchissants, un même rayon peut rebondir indéfiniment, et le rendu nécessiter un temps théoriquement infini pour être réalisé. Il est possible de limiter artificiellement le nombre d’itérations pour éviter que cela ne se produise.
2.1.1 Les reflets
La réflexion d’un objet est définie par un attribut reflect_amount. Une valeur nulle induit l’absence totale de reflets, tandis qu’une valeur égale à 1.000 suggère un miroir parfait.
<reflect value="on" /> <reflect_amount value="1.000000" />

Figure 03 : De l’objet totalement dépoli au miroir parfait, l’attribut reflect_amount permet de fixer le taux de réflectivité des surfaces (de gauche à droite, des valeurs respectivement égales à 0.000, 0.500, et 1.000).
2.1.2 L’effet Fresnel
L’effet Fresnel est un phénomène qui rend le reflet observable seulement lorsque l’angle incident entre le vecteur de la caméra et la normale à l’objet au point considéré atteint un certain angle. Cela permet de simuler certains matériaux (en particulier des objets vernis ou laqués) qui ne semblent réfléchissants que sous certains angles d’observation.
<fresnel_offset value="5.000000" />

Figure 04 : Illustration de l’effet Fresnel sur un cube : la face frontale, pratiquement normale à l’angle d’observation de la caméra, est presque mate. En revanche, la face latérale, offrant un angle incident plus ouvert, est très réflective.
2.1.3 Le Conetrace
Cette fonction assez peu connue permet d’obtenir des reflets granuleux ou légèrement troubles, sans pour autant avoir recours à une carte de bosselage (bump map), par exemple. Dans l’esprit, il fonctionne comme le shader sss : il faut dans un premier temps mettre en place un bloc <shader> pour le conetrace :
<shader type="conetrace" name="env" reflect="on" angle="7" samples="5" IOR="1"> <attributes> <color r="0.5" g="0.5" b="0.5" /> </attributes> </shader>
en amont du shader de l’objet affecté. Celui-ci verra son propre shader complété par l’attribut suivant :
<environment value="env" />

Figure 05 : Exemple de reflets flous grâce au shader conetrace à gauche, et reflet normal à droite
Les attributs sont les suivants :
reflect: la valeur"on"permet d’activer l’effet de granularité des reflets."off"indique la réfraction des rayons.angle: indique le degré de distorsion ou de granularité ; une valeur nulle suggère une clarté totale des reflets.samples: indique le nombre d’échantillons appliqués au reflet.IOR: indique l’indice de réfraction des rayons.color: indique le filtrage de la lumière arrivant sur la surface.
2.2 La transparence
Le principe du rendu en raytracing d’une surface transparente est proche de celui d’une surface réfléchissante, dans l’esprit. De la même façon qu’auparavant un rayon sera lancé depuis la caméra en direction d’un pixel de l’image finale, sauf que lorsqu’il rencontrera un objet possédant une propriété de transparence, le rayon poursuivra sa course vers l’environnement en arrière-plan, sans rebondir sur sa surface.
A nouveau, si la surface trouvée par le rayon après avoir traversé le premier objet est également transparente, le rayon va poursuivre sa course jusqu’à rencontrer un objet totalement opaque. Bien sûr, le pixel de l’image finale se voit attribué la couleur de la surface (au point de contact) du premier objet opaque rencontré, sauf si la surface transparente est elle-même colorée, ou si l’objet n’est que partiellement transparent (en ce cas, la scène vue par transparence sera plus ou moins teintée par les couleurs propres des divers objets transparents placés les uns derrière les autres.
Tel qu’exposé, ce principe est toutefois incomplet. En effet, lorsque l’on regarde au travers d’un objet transparent massif dont les surfaces sont courbes, on n’observe pas, au point considéré, la scène strictement placée derrière l’objet, mais une autre partie de la scène. Ce phénomène très connu (et exploité notamment en optique), appelé " réfraction ", est dû au fait que les rayons de lumière sont déviés par la masse transparente, en fonction de ses formes, mais aussi de sa densité. Chaque matériau possède en effet une densité pouvant affecter le trajet de la lumière dans son corps ; cette propriété est communément nommée indice de réfraction du matériau (ou IoR, index of refraction), et est, par exemple, égale à 1.000 pour de l’air pur, environ 1.500 pour du verre et environ 1.330 pour de l’eau pure.
Indices de réfraction
À titre indicatif, les indices de réfraction suivants sont utiles à connaître : Air 1.0002926, Alcool 1.329, Diamant 2.417, Émeraude 1.576, Verre 1.51714, Plastique 1.460, Plexiglas 1.50, Quartz 1.544, Eau 1.33335.
En raytracing, lorsque le rayon traverse un objet transparent, au lieu de continuer imperturbablement sa course initiale, il sera plus ou moins fortement dévié par la masse transparente pour finalement aller frapper la surface d’un objet qui ne sera pas forcément placée immédiatement derrière l’objet transparent. C’est le phénomène de réfraction.
2.2.1 La transparence
La transparence est déterminée par un attribut alpha. Une valeur nulle indique un objet totalement invisible, tandis qu’une valeur égale à 1.000 indique un objet totalement opaque. Pour des matériaux comme le verre, des valeurs très faibles seront requises :
<alpha value="0.001000" />

Figure 06 : Alpha respectivement égal à 1.000, 0.500 et 0.001.
2.2.2 La réfraction
L’indice de réfraction détermine le taux de distorsion du trajet d’un rayon lumineux au travers d’un objet transparent. Une valeur égale à 1.000 indique l’absence totale de distorsion, tandis que des valeurs supérieures indiquent une distorsion croissante.
<refract value="on" /> <IOR value="1.500000" />

Figure 07 : IoR respectivement égal à 1.000 (air), 1.333 (eau) et 1.500 (verre) : on observe clairement la déformation de l’environnement au travers de l’objet transparent.
2.2.3 L’absorption et le filtrage
L’absorption est une propriété des matériaux transparents qui laissent passer une composante ou plusieurs (Rouge, Verte ou Bleue) des couleurs situées en arrière-plan, et bloquent totalement les autres, de sorte qu’elles ressortent noires. Par exemple, imaginons (figure 08, ci-après) une sphère transparente laissant passer le Rouge et absorbant le Vert et le Bleu. Un cube Vert (Pur ! Pas de Rouge, ni de Bleu parmi ses composantes) sera totalement bloqué (il apparaît noir), tandis que le sol blanc (couleur issue du mélange des composantes Vert, Bleu et Rouge) paraîtra rouge (ses composantes Vert et Bleu sont bloquées, mais sa composante Rouge est visible). Par exemple :
<absorption r="1.000000" g="1.000000" b="1.000000" />
laisse passer toutes les composantes de couleur sans les bloquer.

Figure 08 : Le paramètre Absorption permet de définir une couleur visible au travers de l’objet transparent, et de bloquer toutes les autres ; ne pas oublier, dans ces images, que le blanc du sol est obtenu par mélange des trois composantes fondamentales : Rouge, Vert et Bleu.
Un objet transparent laisse normalement percevoir l’environnement placé derrière lui sans en altérer les couleurs. Ce n’est toutefois pas un comportement réaliste, surtout lorsque l’on simule des objets en verre teintés dans la masse (comme par exemple une bouteille de vin vert, ou une bouteille de bière brune). C’est à cela que sert le paramètre transmit_filter : à déterminer quelle proportion de la couleur de base du matériau doit teinter l’environnement perçu au travers de l’objet. Par exemple :
<transmit_filter value="1.000000" />
teinte totalement, dans la masse, l’environnement perçu au travers de l’objet transparent coloré.

Figure 09 : Le transmit_filter permet de déterminer la proportion de la couleur de base du matériau qui teinte les objets vus au travers de l’objet ; de gauche à droite, des valeurs respectivement égales à 0.000, 0.500 et 1.000.
transmit_filter et les taches caustiques
Vous noterez que dans l’établissement de la carte des photons, c’est la couleur de base (rouge) du matériau qui est prise en compte, ainsi qu’en témoignent les taches caustiques sous la sphère. Avec une valeur transmit_filter nulle, toutefois, la sphère apparaît totalement blanche cristalline, ce qui contredit la couleur des taches caustiques. Prudence, donc, lors de l’utilisation du paramètre transmit_filter : pensez à accorder couleur souhaitée et couleur de base du matériau si vous ne désirez pas de transmit_filter.
2.2.4 La dispersion
Yafray permet de simuler la décomposition de la lumière blanche au travers d’un prisme ; en pratique, un faisceau de lumière blanche traversant un prisme va être séparé en ses différentes composantes ; en fonction de leur longueur d’onde, les différents rayons ne seront pas réfractés de la même façon et les différentes couleurs, au lieu de se mélanger pour donner de la lumière blanche, vont se séparer en petits rayons colorés, à la manière d’un arc-en-ciel. Le bloc <shader> du prisme doit être édité de façon à présenter les attributs suivants :
dispersion_power: définit l’intensité de la dispersion ;dispersion_samples: définit le nombre d’échantillons à prendre en compte; en dessous de 10, l’usage de l’option dispersion_jitter est fortement recommandé ;dispersion_jitter: confère à la dispersion une distribution un peu plus aléatoire.
Par exemple, vous pourrez ajouter les attributs suivants à l’un de vos prismes :
<dispersion_power value="0.800000" /> <dispersion_samples value="30" /> <dispersion_jitter value="off" /> (voir figure 10)
Les reflets du prisme peuvent également être dispersés, révélant sur les objets voisins des taches caustiques aux couleurs de l’arc-en-ciel. Pour obtenir ce type d’effet, il est indispensable de mettre en place une (ou plusieurs) lampes de type Photon pointant sur le prisme.
Conclusion
Nous en sommes arrivés au terme de notre voyage au cœur du photoréalisme à l’aide d’un moteur de rendu à la fois puissant et simple d’usage, comme Yafray. Nous avons en effet couvert, quoique non exhaustivement, différents aspects qui vous aideront à donner à vos images cette petite touche supplémentaire qui les rendront singulièrement plus crédibles aux yeux de leurs spectateurs. De l’usage de base de Yafray à la bonne mise en œuvre des shaders, en passant par l’illumination globale ou la simulation d’un effet de flou focal, vous avez désormais toutes les cartes en main pour comprendre et progresser encore plus avec Yafray. Enfin, même s’il s’agit du dernier article de cette mini-série consacrée à Yafray, il n’est pas exclu que nous reviendrons sur ce petit joyau de moteur de rendu (même si son développement n’est aujourd’hui plus très actif, et qu’un fork se prépare, avec la bénédiction des développeurs d’origine) dans quelques temps, soit pour présenter d’autres fonctionnalités qui n’ont pas encore été abordées, soit pour présenter des nouveautés, s’il y a lieu d’être.
Liens
- Le site de Yafray : www.yafray.org [en]
- Les forums consacrés à Yafray :
www.yafray.org/forum/index.php [en] - La documentation de Yafray :
wiki.yafray.org/bin/view.pl/UserDoc/WebHome [en] - La foire aux questions (FAQ) de Yafray :
wiki.yafray.org/bin/view.pl/UserDoc/FaqEng [en] - De l’aide en français ? Les forums de Linuxgraphic :
www.linuxgraphic.org/forums/ [fr]
Retrouvez cet article dans : Linux Magazine 92

