Catégorie : Graphisme     Tags :      0 Commentaire

    Retrouvez cet article dans : Linux Magazine 90

    Les moteurs de rendu photoréalistes doivent adopter des modèles d’illumination avancés pour être crédibles. C’est le cas de Yafray, qui offre plusieurs méthodes d’illumination globales pour vos scènes. Cet article vise à comprendre ce que le moteur cache dans ses entrailles à ce sujet.

    Mais tout d’abord, avant d’aller plus loin, il convient de comprendre ce dont il s’agit lorsque l’on parle d’illumination globale. Lorsque l’on fait un rendu classique en raytracing, un rayon est lancé depuis la Caméra en direction de la surface d’un objet devant apparaître sur l’image finale ; au point de contact, le moteur se charge de détecter si ce point est illuminé (il est possible de lancer un rayon vers l’une quelconque des lampes de la scène), ou s’il est ombré (tous les rayons partant de ce point rencontrent un obstacle avant d’atteindre une lampe). Avec une lampe unique dans la scène, les points sont soit totalement obscurs, soit totalement illuminés, ce qui n’est pas conforme à ce qu’il est possible d’observer dans la réalité. En effet, par raytracing, on part du postulat qu’un rayon de lumière qui frappe la surface d’un objet éclaire celle-ci et puis c’est tout, alors qu’en vérité, après avoir frappé la surface et l’avoir éclairée, le rayon de lumière (affaibli et donc avec une intensité moindre) rebondira jusqu’à une deuxième surface, puis une troisième, etc., jusqu’à épuisement complet de son intensité lumineuse.

    /img-articles/lm/90/art-1/fig-1.jpg

    Figure 01 : À gauche, une scène éclairée par raytracing ; à droite, la même éclairée par illumination globale

    En raytracing, le moteur de rendu ne prend en compte que l’éclairage direct. En revanche, en illumination globale, tant l’éclairage direct que celui, indirect, sont pris en compte. Il en résulte, dans ce dernier cas, que les ombres sont rarement opaques et impénétrables, car il y a, le plus souvent, des rayons lumineux rebondissant depuis un objet voisin pour éclairer les zones " oubliées " de l’éclairage direct. Sur la figure 01, cela se voit assez clairement : sur l’image de gauche, les ombres sont solides et l’ambiance générale plutôt sombre ; sur l’image de droite, grâce à l’éclairage indirect, les rayons lumineux rebondissent d’un objet à l’autre, et semblent " remplir " toute la scène. Il en résulte des ombres moins profondes et une luminosité globale plus élevée. Ce type d’éclairage peut convenir à tout type de scène, mais il apporte un réalisme incontestable aux scènes d’intérieur, en particulier dans le domaine de la prévisualisation architecturale, où l’ambiance lumineuse ou la mise en valeur de la luminosité peuvent ruiner un projet comme le rendre plus attrayant.

    1. Éclairages direct et indirect

    Pour mieux comprendre comment régler les paramètres liés à l’illumination globale dans Yafray, il n’est pas inutile, dans un premier temps, d’expliquer comment le moteur de rendu calcule l’illumination d’une scène. Cela nécessite bien sûr d’avoir une compréhension minimale de la différence entre éclairages direct et indirect. A noter, enfin, que Yafray repose sur les méthodes de Monte-Carlo pour la détermination de l’illumination globale des scènes.

    1.1 Éclairage direct

    Il s’agit typiquement du cas d’éclairage par simple raytracing : un rayon est lancé depuis la Caméra jusqu’à rencontrer une surface. À partir de celle-ci, un nouveau rayon est lancé en direction de toutes les lampes de la scène : si le rayon en atteint une, la surface est considérée comme éclairée directement. Sinon, elle est considérée comme ombrée. Par exemple, sur la figure 02, un premier rayon est lancé jusqu’au sol, qu’il heurte au point A. Un rayon part de celui-ci en direction de l’unique Lampe de la scène, mais ne l’atteint pas en raison de la boule rouge : le point A est dans l’ombre. Un second rayon, en revanche, vient frapper le sol au point B; un rayon partant de ce point atteint sans rencontrer d’obstacle la Lampe : il est considéré comme éclairé.

    /img-articles/lm/90/art-1/fig-2.jpg

    Figure 02 : Principe de l’éclairage direct : il est possible ou non de lancer un rayon depuis un point vers une lampe quelconque

    1.2 Éclairage indirect

    Le principe de l’illumination indirecte est légèrement plus complexe : dans le cadre des méthodes de Monte-Carlo, un rayon est lancé depuis la Caméra jusqu’à rencontrer une surface. À partir de celle-ci, un certain nombre de rayons supplémentaires sont lancés dans toutes les directions à la fois, à la recherche de sources d’illumination :

    • arrière-plan de la scène (le ciel) ou une image HDR ;
    • objet possédant une émittance ;
    • objet soumis à un éclairage direct ;
    • une lampe.

    Si l’on considère, par exemple, le point A de la figure 03 : un rayon est lancé depuis la Caméra vers celui-ci. Nous avons vu dans la méthode d’éclairage direct que ce point serait normalement dans l’ombre de la sphère rouge, car un rayon lancé directement en direction de la Lampe serait bloqué par l’obstacle. Mais, dans le cadre de la méthode de l’éclairage indirect, le moteur va lancer, depuis le point A, une poignée de rayons dans toutes les directions, afin de savoir si une luminosité indirecte peut l’atteindre. Par exemple, l’un des rayons émis par le point A va atteindre le point C. A priori, ce n’est pas une source de lumière, mais ce point, éclairé directement par la Lampe, peut réfléchir une partie de son intensité lumineuse en direction du point A. Celui-ci sera donc légèrement éclairci, grâce à la contribution lumineuse du point C. Bien sûr, les contributions lumineuses récoltées par chacun des rayons lancés depuis le point A seront prises en compte pour la détermination de son taux de luminosité final (figure 3).

    /img-articles/lm/90/art-1/fig-3.jpg

    Figure 03 : Principe de l’éclairage indirect : en lançant des rayons dans toutes les directions autour d’un point, le moteur recherche tous les émetteurs de luminosité.

    1.3 Pourquoi tant de bruit ?

    Il est probable que sur certaines de vos images, vous rencontriez un " bruit " anormalement élevé à la surface de vos images. Cela est tout simplement du à la méthode de Monte-Carlo. En effet, pour chaque point de la surface d’un objet, un nombre limité de rayons est lancé à la recherche d’une source de luminosité. Plus celle-ci se trouve loin du point considéré, moins il y a de probabilité pour qu’un rayon lancé la trouve. Le point correspondant, alors, sera sombre au lieu d’être illuminé ainsi qu’il l’aurait fallu ; et si d’aventure l’un des rayons lancés atteignait, par chance, une source de luminosité, le point serait illuminé, mais solitaire au milieu d’une majorité de points sombres. Ces incohérences flagrantes dans les conditions d’illumination génèrent le bruit qui est visible sur les rendus.

    /img-articles/lm/90/art-1/fig-4.jpg

    Figure 04 : Un rendu en illumination globale très bruitée

    Comment faire pour diminuer ce bruit indésirable, qui ruine le réalisme de vos scènes ? En prenant de bonnes habitudes de travail et en connaissant bien les outils d’illumination à votre disposition. En particulier, les conditions qui généreront un bruit élevé sont les suivantes :

    • des objets émetteurs de luminosité de faibles dimensions : plus l’objet est petit, moins il est probable qu’un rayon lancé aléatoirement à partir d’un point le trouve, à moins qu’il ne soit suffisamment proche pour augmenter significativement cette probabilité.
    • des objets émetteurs de luminosité placés trop loin : plus l’objet est loin, moins il est probable qu’un rayon lancé aléatoirement à partir d’un point le trouve, à moins qu’il ne soit suffisamment gros pour augmenter significativement cette probabilité.
    • des images HDR à la luminosité trop contrastée : si les informations lumineuses les plus élevées sont concentrées en certaines zones de l’image HDR, c’est comme si vous étiez en présence d’objets émetteurs de faibles dimensions.
    • une " fenêtre " sur l’arrière-plan (Sky ou World, en fonction des logiciels) trop étroite : dans une scène ouverte, il est extrêmement probable que l’un des rayons lancés aléatoirement atteigne le ciel, et illumine proportionnellement le point considéré, générant ainsi très peu de bruit. En revanche, si la scène est particulièrement close (pièce intérieure avec une fenêtre étroite donnant sur le ciel, par exemple), le bruit aura une tendance naturelle à augmenter.

    Mais dans certaines circonstances, vous subirez nécessairement des objets émetteurs de faibles dimensions et éloignés du point focal de la scène, des images HDR obligatoirement très contrastées et des fenêtres sur le ciel de trop petites dimensions. Il vous reste alors la force brute : augmenter le nombre de rayons à lancer depuis chaque point, pour augmenter la probabilité qu’il atteigne un objet émetteur et réduise le bruit.

    /img-articles/lm/90/art-1/fig-5.jpg

    Figure 05 : En augmentant le nombre de rayons lancés, le bruit tend à disparaître presque totalement.

    Bien évidemment, plus le nombre de rayons lancés par point est élevé, plus le temps de rendu de l’image finale sera important, et il est des cas où le compromis ne sera pas satisfaisant. C’est là où l’usage des photons peut aider le moteur de rendu à établir une illumination globale plus cohérente, à nombre de rayons lancés identique, et donc moins bruitée.

    1.4 En s’appuyant sur une carte de photons

    Pour le moment, les rayons sont lancés dans des directions aléatoires à partir des points dont il faut déterminer l’illumination. Cela veut dire qu’ils ont une probabilité plus ou moins élevée de manquer les objets émetteurs, et donc d’être illuminés de la mauvaise façon et de générer du bruit localement. Une idée serait d’aider les rayons à partir en direction de points que l’on sait illuminés, et de voir s’ils y parviennent (le point est alors illuminé) ou pas (il reste ombré). Mais dans le chemin actuellement parcouru par un rayon (départ depuis la Caméra, puis échantillonnage à partir du point de contact en direction des sources lumineuses éventuelles), cela ne paraît que difficile à réaliser, car il faudrait suivre le chemin inverse : départ des sources lumineuses et voyage jusqu’à une surface : le point est éclairé s’il est sur la trajectoire d’un rayon (photon) lancé par une source lumineuse.
    Et c’est exactement le principe du tracé d’une carte de photons : on lance un certain nombre de rayons (photons) depuis toutes les sources lumineuses, et on consigne sur une carte en trois dimensions les points d’impact en même temps que la quantité de luminosité reçue. Détail également intéressant : les photons peuvent rebondir de surface en surface, au lieu de s’arrêter à la première surface rencontrée, et donc également " remplir " le volume de la scène. Le premier contact renseigne sur l’éclairage direct, et les rebonds suivants sur l’éclairage indirect.

    /img-articles/lm/90/art-1/fig-6.jpg

    Figure 06 : Principe du tracé d’une carte de photons : chaque rond noir correspond à un point que l’on sait être illuminé

    On comprend de suite comment la carte de photons peut être utilisée par la méthode de Monte-Carlo pour optimiser la pertinence des rayons lancés et éviter d’avoir trop de bruit ! Qui plus est, l’établissement d’une carte de photons est un procédé qui coûte, bien sûr, du temps de calcul supplémentaire (plus le nombre de photons lancés sera important, plus les temps de calcul s’allongeront), mais considérablement moins que de forcer le nombre de rayons à un niveau élevé avec la méthode de Monte-Carlo.

    /img-articles/lm/90/art-1/fig-7.jpg

    Figure 07 : En s’appuyant sur la carte de photons, sans augmentation du nombre de rayons, le niveau de bruit est devenu très raisonnable !

    Ainsi, en reprenant le même nombre de rayons lancés que celui de la figure 04, demandons à Yafray de se servir d’une carte de photons pour " aider " l’établissement de l’illumination globale. Le résultat est présenté en figure 07, et semble même de meilleure qualité que le résultat obtenu en figure 05 ! Pourtant, les temps de calcul sont clairement à l’avantage de la toute dernière image combinant méthode de Monte-Carlo et carte de photons.

    2. En pratique avec Yafray

    Les explications qui suivent permettre de maîtriser progressivement le système d’illumination globale, en montrant dans un premier temps comment le mettre en place, puis comment simplifier le modèle d’illumination (cache d’irradiance) pour en accélérer la détermination, puis enfin comment se servir d’un modèle d’illumination " concurrent ", la cartographie de photons pour en fiabiliser le résultat et améliorer la qualité tout en gagnant en temps de rendu.

    2.1 Illumination globale par les techniques de Monte-Carlo

    La mise en place de l’illumination globale par les techniques de Monte-Carlo passe par l’ajout d’un nouveau bloc <light type="pathlight"...></light> au fichier XML de la scène. Des arguments supplémentaires sont passés à l’intérieur de la première balise, en particulier :

    • type = "pathlight" : permet de déterminer une source de lumière de type illumination globale.
    • name = "[nom]" : permet de donner au bloc le nom de votre choix. Par défaut, lors d’un export depuis Blender, il s’agit de "path_LT".
    • power = "[valeur]" : il s’agit d’une valeur numérique comprise entre 0.01 et 100.00 permettant de déterminer l’intensité lumineuse apportée par illumination globale. Des valeurs élevées tendent à " brûler " l’image si le sujet du rendu est à proximité de sources lumineuses puissantes, tandis que des valeurs faibles tendent à rapprocher le résultat d’un simple calcul en raytracing (voir figure 08). Une valeur de 1.00 est pertinente pour démarrer dans la plupart des cas. Dans Blender, il s’agit du bouton GI Pwr.

    /img-articles/lm/90/art-1/fig-8.jpg

     Figure 08 : Influence du paramètre Power; de gauche à droite, valeurs égales à 0.50, 1.00 et 2.50

    • depth = "[valeur]": cette valeur numérique (comprise entre 1 et 100) détermine le nombre de rebonds de la lumière indirecte autorisés pour un rayon lancé à partir de la Caméra. Plus cette valeur sera élevée, plus les échanges lumineux seront interprétés fidèlement, mais le temps de calcul sera augmenté proportionnellement. Une valeur de 2 est généralement suffisante pour obtenir des résultats intéressants, des valeurs supérieures peuvent entraîner des temps de calcul supérieurs, bien sûr, mais aussi une luminosité globale de l’image bien plus élevée à chaque rebond supplémentaire (voir figure 09). Jouer sur le paramètre power est alors une option utile. Dans Blender, il s’agit du bouton Depth.

    /img-articles/lm/90/art-1/fig-9.jpg

     Figure 09 : Influence du paramètre Depth ; de gauche à droite, valeurs égales à 2 et à 3

    • caus_depth = "[valeur]": ce paramètre est propre à la détermination des tâches caustiques lors du lancer de photons ; n’intervient pas directement dans le résultat de l’illumination globale. Dans Blender, il s’agit du bouton CDepth.
    • samples = "[valeur]": cette valeur numérique détermine, à chaque point à calculer de l’image, le nombre de rayons à lancer pour échantillonner l’environnement et en déduire l’intensité lumineuse. Plus cette valeur est élevée, plus les temps de calculs sont importants, mais le résultat final présentera considérablement moins de bruit. Dans Blender, il s’agit du bouton Quality. A titre indicatif, les valeurs équivalentes aux préréglages de Blender sont les suivantes :
    • Quality = Low, samples = "128";
    • Quality = Medium, samples = "256";
    • Quality = High, samples = "512";
    • Quality = Higher, samples = "1024";
    • Quality = Best, samples = "2048"

    Ainsi, un rendu par illumination globale sans aucun raffinement, mais avec un nombre modérément élevé d’échantillons de l’environnement (qualité High, dans Blender) pourrait se traduire par l’ajout du bloc <light> suivant dans le fichier .xml de votre scène :

    <light type="pathlight" name="path_LT" power="1.000000" depth="2" caus_depth="1"  samples="512" >
    </light>

    2.2 Usage du cache d’irradiance

    Il s’agit d’une méthode permettant d’éviter de calculer l’illumination globale à chaque point de l’image ; le moteur de rendu est libre de choisir des points pour lesquels l’illumination sera calculée, puis interpolera la luminosité entre points voisins. Les principaux avantages sont une diminution sensible du bruit dans la scène (mais remplacé par un bruit de basse fréquence, rappelant le filtre clouds de Blender) et une diminution sensible des temps de rendu. En contrepartie, dans le cadre d’animations, l’image semblera clignoter par endroits. C’est donc une méthode à préférer dans le cadre d’images statiques, à moins d’accepter d’augmenter à des valeurs élevées le nombre d’échantillons pour chaque point.
    Pour utiliser le cache d’irradiance avec les paramètres par défaut, il suffit d’ajouter les paramètres suivants dans le bloc <light> de type "pathlight" :

    cache="on" use_QMC="on" threshold="1.000000" ignore_bumpnormals="off" cache_size="0.100000" shadow_threshold="0.100000" grid="82" search="35"

    Le paramètre shadow_threshold permet d’augmenter la densité de l’échantillonnage à proximité des coins et angles vifs. Typiquement, augmentez cette valeur si vous rencontrez des artefacts ombrés aux angles, coins et angles vifs de votre scène, ou dans les ombres de vos objets (voir figure 10). Dans Blender, il s’agit de l’inverse du bouton ShadQu. Par exemple, si celui-ci est égal à 0.900, shadow_threshold = "0.100000". Les valeurs admises vont de 0.00000 à 0.99000.

    /img-articles/lm/90/art-1/fig-10.jpg

    Figure 10 : Influence du paramètre shadow_threshold ; à gauche une valeur 0.5000 et à droite une valeur 0.0500 : les ombres sont plus régulières dans le premier cas.

    Le paramètre cache_size détermine la proportion des points pris en considération par le cache d’irradiance qui seront interpolés. Par exemple, avec la valeur par défaut cache_size="0.100000", ce sont 10% des points, soit un pixel sur dix, qui seront effectivement interpolés, et donc neuf points sur dix calculés. En diminuant cette valeur, vous obtenez une illumination plus fidèle à la réalité, mais plus lente à calculer. Dans Blender, il s’agit du bouton Prec, mais exprimé en pourcentage.
    Par exemple, si celui-ci est égal à 10, cache_size = "0.100000". Les valeurs admises vont de 0.01 à 0.50.
    Le paramètre threshold permet de détecter les variations rapides d’illumination d’un point à l’autre de l’image, et permet d’anti-créneler les frontières des ombres avec le reste de l’environnement, ainsi que de corriger les artefacts d’illumination dus à un faible échantillonnage. Une valeur de 1.0 indique qu’aucun affinage de la luminosité n’a lieu. Des valeurs plus basses, au contraire, demandent au moteur de rendu de lisser au mieux les ombres et les artefacts (voir figure 11). Dans Blender, il s’agit du bouton Ref. Les valeurs admises vont de 0.001 à 1.000. Une valeur de 0.300 indique déjà un affinage assez lourd de l’image.

    /img-articles/lm/90/art-1/fig-11.jpg

    Figure 11 : Influence du paramètre threshold ; à gauche, une valeur très faible (0.001) et, à droite, une valeur égale à 1.0 (absence d’affinage). Avec l’affinage, les ombres sont nettement plus lisses !

    2.3 Mise en place de la carte de photons

    L’illumination par carte de photons est une méthode d’illumination globale en soi, qui nécessite toutefois un assez grand nombre de photons pour donner des résultats visuellement attrayants. Utilisée conjointement avec une illumination globale suivant les méthodes de Monte-Carlo, elle permet à celles-ci d’optimiser l’échantillonnage de l’environnement et donc de réduire considérablement le bruit de la scène sans pour autant augmenter (méthode de la force brute) le nombre d’échantillons.
    S’agissant d’une méthode d’illumination à part entière, la carte de photons est mise en place au travers d’un bloc de type <light type="globalphotonlight" ...></light> dans le fichier XML, juste avant le bloc <light type="pathlight" ...></light>. Des arguments supplémentaires sont passés à l’intérieur de la première balise, en particulier :

    • type = "globalphotonlight" : permet de déterminer une source de lumière de type cartographie globale de photons.
    • name = "[nom]" : permet de donner au bloc le nom de votre choix. Par défaut, lors d’un export depuis Blender, il s’agit de "gpm".
    • photons = "[valeur]" : détermine le nombre de photons à lancer depuis chaque lampe de la scène pour tracer la carte. Plus un nombre de photons élevé sera lancé, plus la cartographie sera précise et moins de bruit ou d’artéfacts lumineux seront observables. Une bonne valeur de départ est aux alentours de 100 000 photons, mais il est courant d’élever ce nombre au-dessus du million pour certaines scènes. Dans Blender, il s’agit du bouton Count.
    • radius = "[valeur]" : ce paramètre permet de déterminer le rayon sur lequel le moteur de rendu cherchera des photons à mélanger pour lisser leur apparence. Cela détermine directement une sorte de niveau de flou de la carte de photons ; la valeur de ce paramètre dépend de la taille de la scène, mais aussi et surtout de la fidélité de la simulation lumineuse que vous souhaitez : des valeurs trop élevées vont " lisser " exagérément l’illumination, gommant localement des détails intéressants ou réalistes. Démarrer avec une valeur égale à 1.00000 est une base acceptable. Dans Blender, il s’agit du bouton Radius.
    • search = "[valeur]" : ce paramètre détermine le nombre de photons que le moteur de rendu peut mélanger, afin de lisser la carte de photons. Plus ce nombre sera élevé, plus le résultat semblera uniforme sur le rayon Radius donné. Démarrer avec une valeur proche de 100 est souvent une bonne idée. Ajustez d’abord la valeur Radius, puis ensuite jouez avec la valeur search jusqu’à obtenir la richesse de détails souhaités. Dans Blender, il s’agit du bouton MixCount.

    Ainsi, pour renforcer l’illumination globale de votre scène, vous pourriez ajouter le bloc <light> suivant dans le fichier .xml de votre scène :

    2.4 Exemple complet d’illumination globale

    L’extrait de code qui suit met en place une illumination globale suivant les méthodes de Monte-Carlo, mais guidée dans son échantillonnage environnemental par une cartographie de photons et simplifiée par la mise en place d’un cache d’irradiance. Les paramètres clés sont :

    • du côté de la cartographie de photons : un million de photons lancés depuis chaque lampe de la scène (photons) ;
    • du côté du cache d’irradiance : un affinage conséquent de l’ombrage de la scène (threshold), des ombres régulières et peu sujettes aux artefacts (shadow_threshold) ;
    • du côté de l’illumination globale : un nombre de rebonds des rayons (depth) peu élevé, mais avec un échantillonnage supérieur à la normale (samples).

    Soit le code suivant :

    <light type="globalphotonlight” name=”gpm” photons=”1000000” radius=”1.000000” depth=”1” caus_depth=”1” search=”100” >
    </light>
    <light type="pathlight” name=”path_LT” power=”1.000000” depth=”2” caus_depth=”1”  samples=”1024” cache=”on” use_QMC=”on” threshold=”0.300000” ignore_bumpnormals=”off” cache_size=”0.020000” shadow_threshold=”0.500000” grid=”82” search=”35” >
    </light>

    Conclusion

    Comme souvent en matière de 3D, l’illumination globale est un sujet très technique lorsque l’on décide de l’explorer en profondeur, mais qui reste accessible et ouvert à l’expérimentation humaine, pour ceux qui sont animés d’un esprit curieux.

    /img-articles/lm/90/art-1/fig-12.jpg

    Figure 12 : Exemple d’illumination globale à partir d’une scène test disponible sur le site www.yafray.org.

    Ce qui ressort comme le plus important de cet article, c’est la compréhension des paramètres les plus généraux et la façon de les utiliser pour économiser un précieux temps de calcul ! En effet, le raytracing a la réputation d’être une méthode lente de tracé des images, et c’est encore plus vrai lorsque l’on utilise l’illumination globale pour le rendu d’une scène : pour que les échanges lumineux soient crédibles, il a été nécessaire de reproduire des comportements observables dans la " nature ", dans notre environnement immédiat. En particulier, nous notons que pour améliorer les résultats de l’illumination globale, nous ne devons pas hésiter à utiliser des méthodes concurrentes, comme la cartographie de photons qui se révèle un allié précieux dans l’optimisation de l’échantillonnage de l’environnement réalisé au cours de l’illumination globale.

    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 90

    Posté par Olivier Saraja (olivS) | Signature : Olivier Saraja | Article paru dans

    Laissez une réponse

    Vous devez avoir ouvert une session pour écrire un commentaire.