English version: Cycles: Caustics and the noise

Cycles: Le grain de l'image et les caustiques

Si vous utilisez déjà Cycles, le moteur de rendu photo-réaliste de Blender, vous savez qu'il suffit d'augmenter le nombre d'itérations pour voir le grain de l'image disparaître petit à petit.
Malheureusement, augmenter le nombre d'itérations du calcul, augmente aussi le temps de rendu.

Le but de cet article est de tester les capacités de rendu de Cycles avec les caustiques.
Les caustiques, ces tâches lumineuses, demandent actuellement beaucoup d'efforts pour être rendues sans bruit dans l'image.

Le grain

Lorsque vous créez des images fixes, le problème du temps de calcul reste secondaire dans de nombreux cas.
De plus, grâce au calcul d'une partie de l'image seulement (border: SHIFT+B), il est aisé de se faire une idée d'un point clé de l'image sans attendre l'image entière… Il ne reste plus qu'à lancer le calcul de l'image complète lorsque l'on est satisfait.
L'ajout probable dans une future version de Blender (mais laquelle?) des portails de lumière (light portals, voir cette page wiki.blender.org, 2.6: ToDo > Performance) aidera aussi à obtenir un calcul plus rapide de la convergence des échantillons…

Voici la même image calculée avec un nombre d'itérations différentes:

64 itérations 256 itérations 1024 itérations 4096 itérations

L'amélioration de la qualité de l'image entre 256 itérations et 1024 itérations saute aux yeux.

Pour la version à 4096 itérations, elle devient surtout évidente avec un agrandissement:

1024 itérations 4096 itérations

Notez que ces chiffres dépendent de la scène, de la taille de la lumière, sa distance et des différents obstacles qui nuisent à la répartition de la lumière.
Il ne s'agit donc pas de chiffres absolus que l'on pourrait appliquer aveuglément dans une autre scène pour espérer obtenir un grain identique.
Quoiqu'il en soit, l'augmentation du nombre d'itérations mène clairement à une réduction du grain.
Jusque-là, je ne vous apprend pas grand chose…

Notez que la présence d'un grain plus marqué dans les ombres s'explique par le fait qu'il y a probablement plus de lumière indirecte dans ces zones-là.
La lumière indirecte demande en effet un temps de calcul plus important.

La lumière indirecte

Il est donc aisé de faire disparaître le grain… ? Pas tout à fait: ceci n'est vrai que pour la lumière directe.

Lorsque la lumière est indirecte, la qualité de l'image chute car du bruit apparait. Dans de nombreux cas, il est fort possible que vous ne le remarquiez pas pour une raison simple: la lumière indirecte est généralement moins forte que la lumière directe ! Si vous avez les deux au sein de la même image, le grain de la lumière indirecte ne se remarquera même pas au sein d'une lumière directe plus forte (il serra comme noyé dans l'autre lumière plus intense).
Cependant, ceci n'est vrai que si l'image comporte de la lumière directe !

Certaines scènes ne comportent pratiquement que de la lumière indirecte.
Par exemple, une pièce éclairée par de la lumière qui proviendrait de derrière une porte entrouverte…
En général, avec une scène comportant seulement de la lumière indirecte, on triche ! On remplace la lumière indirecte par une lumière directe très douce à certains endroits. Dans le monde réel, il n'est pas utile de placer ces lumières secondaires. En 3d par contre, elles aident le rendu à se faire plus facilement.
De cette façon, on obtient un effet similaire à une lumière indirecte. Le problème n'est pas résolu mais contourné.

Les caustiques

Cependant, il existe un autre cas où il est plus difficile d'obtenir une image sans bruit: c'est le cas des caustiques.
Les caustiques sont ces tâches lumineuses qui proviennent soit des reflets soit de la transparence d'un matériau.
Par exemple, souvenez-vous lorsque vous étiez enfant: vous avez sans doute utilisé une loupe pour concentrer les rayons lumineux en un seul point. Ainsi vous pouviez enflammer un bout de bois sec avec le soleil…
Dans un tel cas, le path tracer de Cycles a du mal a obtenir assez d'échantillons. Les caustiques générées comporteront donc beaucoup de bruit.

Si vous lisez cette page, vous aurez l'explication: wiki.blender.org, 2.6: Reducing Noise > More Advanced Algorithms

« Caustics and indirect light from small openings are difficult to render for a path tracer. These situations could be addressed with algorithms such as photon mapping or bidirectional MLT.
However we will not focus on these at the moment, and rather advise to avoid such light setups or simulate them using tricks, as is done for most production / animation rendering. »

En clair, ce problème est connu -et même résolvable- mais il ne figure pas actuellement dans les priorités du calendrier de développement de Cycles.

Voici deux images calculée à 1024 itérations:

Matériaux opaques — 1024 itérations Matériaux transparents et caustiques — 1024 itérations

L'image de gauche est calculée avec un matériau opaque et mat (donc sans le rendu des caustiques), tandis que celle de droite est calculée avec un matériau transparent et le rendu des caustiques.
Ce qui est frappant, c'est que le nombre d'itérations à gauche est suffisant pour gommer (en grande partie) le grain de l'image. Mais que lorsqu'il s'agit de caustiques, le même nombre d'itérations est vraiment insuffisant.

Même en augmentant le nombre d'itérations à 4096, cela améliore un peu le grain mais il en faudrait beaucoup plus pour s'en débarrasser totalement:

Matériaux opaques — 4096 itérations Matériaux transparents et caustiques — 4096 itérations

Ce n'est vraiment pas présentable, même pour s'amuser.
Et d'un point de vue professionnel, je crois qu'on vous rirait au nez.

Remarquez qu'il est aussi possible de calculer l'image sans les caustiques.
Malheureusement, cela détruit complètement l'aspect réaliste de l'image:

1024 itérations 4096 itérations

Il manque quelque chose, vous ne trouvez pas ?

En plus, la présence de caustiques sous forme de petits points blancs à l'intérieur du verre crée un effet de contraste encore plus perturbant par rapport à la partie lisse de l'image.
Comme toute l'image est lisse (ou presque), la présence de quelques points blancs devient terriblement dérangeante…

Combinaison HDR de plusieurs images

Parfois, j'ai de drôles d'idées. Je me suis donc demandé ce qu'il se passerait si je combinais plusieurs images comportant du bruit entre elles avec un programme conçu pour la photographie en HDR.
L'idée peut paraitre curieuse mais je voulais tester. Ce type de programme est conçu pour récupérer le meilleur de chaque image et en écarter les imperfections, comme le bruit.

En modifiant la variable seed du panneau de calcul de Blender à chaque fois (Render > Sampling), on obtient une image similaire mais dont le grain est répartit différemment.
Le nombre que vous entrez est sans importance du moment qu'il est différent des précédents.
Il suffit donc de calculer plusieurs fois la même image. Combien de fois ? C'est le test qui va le dire. Ici, j'en fais 4 pour commencer.

Voici donc quelques images identiques à l'exception du bruit qui est placé différemment:




A l’œil, vous verrez peu de différences.

Passons maintenant à la combinaison des résultats avec enfuse (cf. Sourceforge), un programme utilisé pour la photo HDR.

Enfuse

Juste au cas où la suite vous laisserait perplexe, précisons que je travaille sous Linux.

Installation

Je ne me souviens plus comment j'avais installé enfuse sur Ubuntu mais cette commande devrait probablement être suffisante.

sudo apt-get install enfuse

Utilisation

Avec un terminal:

enfuse -o imagehdr.jpg vosimages*.jpg

Changez les extensions (jpg) selon vos habitudes de rendu.
Enfuse supporte aussi le format PNG par exemple.

Résultats

Dans ce cas, je n'ai pas activé le rendu des caustiques pour vous montrer clairement l'avantage de cette technique pour supprimer quelques points isolés.
Mais vous vous doutez que le but est d'appliquer cette technique aux images comportant énormément de grain provenant des caustiques. On verra ça juste après.

Combinaison de 2 images Combinaison de 4 images

À gauche, je combine seulement 2 images. Le résultat est vraiment agréable et le bruit est fortement atténué.

Avec la combinaison de 4 images, le grain n'est plus vraiment perceptible. A la limite, il est possible que cela se verrait encore un peu sur une image de plus grande taille.
Rien ne vous empêche de continuer à combiner plus d'images entre-elles…

Ce qui est extrêmement intéressant avec l’algorithme de la combinaison HDR, c'est qu'il augmente la qualité de l'image.
Si vous auriez utilisé un filtre d'un programme de retouche d'image pour supprimer les points blancs, cela aurait nuit à la netteté générale de votre image ! Ceci pour 2 raisons:
D'une part, le logiciel n'aurait aucun moyen de faire la différence entre les points blancs dus au bruit et ceux faisant partie intégrante de votre image.
D'autre part, le filtre ne saurait pas non plus par quelle couleur remplacer les pixels gênants, il ferait donc une moyenne, et génèrerait du flou.
Avec la technique HDR, c'est tout l'inverse car le programme possède différentes version de l'image. Il peut donc relativement facilement éliminer les points blancs parasites car ils bougent de place tandis que les autres points de l'image, eux, sont fixes.
Résultat: seul le bruit est éliminé, l'image reste totalement nette.

Vous remarquerez aussi que les petits points noirs en bas de l'image (censés représenter des tâches sur le support) ont étés conservés. Ils font parti de l'image, et non pas du bruit. Il est donc normal de les conserver.
En utilisant un filtre dans un programme de retouche d'image, ils auraient été éliminés.

Comparaison avec les itérations

Mais si l'on calcule plusieurs images, n'obtiendrait-on pas un résultat similaire en augmentant le nombre d'itérations ?

Après tout, Cycles combine lui aussi les échantillons comme un algorithme HDR.
Et lorsque l'on calcule deux fois la même image, on utilise deux fois plus de temps. On pourrait donc doubler le nombre d'itération !
Avec 4 images, on pourrait quadrupler ce nombre pour une durée équivalente…
Est-ce qu'on ne va pas finalement obtenir exactement le même résultat ?

8192 itérations 16384 itérations

La réponse est non.

La qualité de l'image s'est bien sûr améliorée en augmentant les itérations mais paradoxalement il reste quand même quelques points blancs parasites.
Et lorsque ces quelques points blancs sont là, ils sont très visibles.
Apparemment, la façon de combiner les échantillons avec enfuse et avec Cycles est légèrement différente. Enfuse s'avère meilleur pour la chasse aux points blancs isolés.
Hors l'absence de points blancs est un réel avantage.

Si vous n'avez pas des yeux bioniques, voici un agrandissement qui compare les 2 méthodes:

Combinaison HDR 4 images de 4096 itérations
Équivalent à 4 x 4096 = 16384 itérations
Calcul direct de 16384 itérations
Cycles + enfuse Cycles

Comme vous pouvez le constater la combinaison HDR comporte moins de bruit.
C'est particulièrement visible sur la partie haute de l'image dans le reflet bleuté…

HDR avec des caustiques

Maintenant, il reste à savoir si l'on peut appliquer cette méthode sur des caustiques comportant pas mal de bruit.
Évidement dans un tel cas, il ne s'agit pas de les effacer ! Sinon autant ne pas les calculer du tout ;-)
Voyons comment l’algorithme HDR se comporte avec différentes images de caustiques comportant beaucoup de bruit.

Afin de mieux se focaliser sur le bruit des caustiques, j'ai sélectionné cette zone-ci de l'image:

Cette zone est intéressante car la partie gauche comporte des caustiques nets tandis que la partie droite comporte des caustiques flous.

Comparaison

Comparons maintenant le calcul direct via l'augmentation des itérations de Cycles et la combinaison HDR de plusieurs images (avec un nombre d'itérations inférieures).

Itérations Calcul direct avec Cycles HDR Image HDR (Cycles+enfuse) HDR Image HDR (Cycles+enfuse) HDR Image HDR (Cycles+enfuse)
2048
4096 2×2048
8192 4×2048 2×4096
16384 8×2048 4×4096 2×8192
32768 16×2048 8×4096 4×8192

Sans surprise, le calcul direct génère plus de points blancs isolés.
Par contre, dans les parties où les caustiques sont plus présentes, c'est à peu près équivalent.
Disons que l'image HDR est légèrement plus douce mais la différence est minime.

Pour que la combinaison HDR donne de bons résultats, il est préférable de combiner au moins 4 images.
Cela signifie que si vous souhaitez produire un rendu équivalent à 4096 itérations (par exemple), vous devriez calculer 4 images avec 1024 itérations chacune. Bien entendu, n'oubliez pas de modifier le paramètre seed à chaque image ;-)
Petite astuce si c'est une image fixe: créez une animation. Vous serez ainsi certain de ne pas vous emmêler les pinceaux avec le paramètre seed et vous ne devrez pas jongler avec plusieurs rendus.

Est-ce vraiment équivalent ?

Réponse courte: non.

Si vous cumulez un grand nombre d'images avec du bruit (surtout avec un nombre d'itérations très faible), vous n'obtiendrez pas le même résultat qu'avec un calcul direct.
La technique est surtout intéressante en combinant 2, 4 ou 8 images à condition de partir d'images avec un nombre d'itération déjà suffisant pour avoir des images un minimum correcte au départ. Rappelez-vous que le but de cette technique est de se débarrasser du bruit. Vous n'obtiendrez pas une meilleure définition des caustiques.

Si vos images de départ comportent une purée de points blancs (32 itérations par exemple), n'espérez pas en tirer une image colorée en les combinant entre elles, même un grand nombre de fois !

32 itérations Nombre d'images Combinaison avec enfuse
x 256 images =

Le bruit a bien été retiré mais vos caustiques aussi !

Il faut rester raisonnable et utiliser cette technique pour ce quelle est: retirer du bruit isolé. Il n'y a pas de raison de mélanger des centaines d'images ensemble.
Un autre avantage de cette technique, c'est qu'il est possible de contrôler l'image avant la fin du calcul (par exemple, regarder la première des 4 images). Cela vous permet d'arrêter le calcul si vous détectez un problème.

Soyons franc, cette technique apporte une légère amélioration mais n'est pas révolutionnaire.
Hormis cela, elle apporte quand même un confort appréciable pour nettoyer votre image automatiquement.

Test sur l'image entière

Calcul des images

Ce test consiste à calculer 4 fois une image rendue avec 32768 itérations.
Le but est d’obtenir une image équivalente à 131072 itérations avec la technique HDR (parce ce que 4x 32768 = 131072).

Voici les 4 images calculées:




Elles comportent toutes un bruit différent.

Mixage avec Enfuse

Voici ce que donne la combinaison des 4 images précédentes:

Si vous la comparez avec une des 4 images précédentes, vous verrez que le grain a quasiment disparu.
Idéalement, il aurait fallu en combiner 8 pour effacer tout le bruit visible.

Avantages et inconvénients

Les plus

  • diminution du bruit dans les parties où il est très dispersé
  • possibilité de contrôler l'image, avec une itération inférieure, avant la fin du calcul
  • contrairement à un filtre, l'image n'est pas abimée lorsque l'on retire le bruit
  • le traitement avec enfuse est quasiment instantané

Les moins

  • si les itérations sont peu nombreuses et donc le bruit très contrasté, les caustiques seront un peu moins lumineuses
  • il faut gérer un traitement manuellement

Recommandations

Je vous recommande de combiner entre 4 et 8 images, mais pas plus.
Mélanger un grand nombre d'images ne donne pas le même résultat que de les calculer directement avec Cycles, surtout pour la précision des caustiques.
C'est seulement un avantage pour enlever un peu plus de bruit.

Le rendu final

Je suis très curieux de voir ce que donne la méthode HDR avec des caustiques bien nettes.
Cela signifie beaucoup d'itérations…

Un problème: le temps de calcul

Pour calculer sur ma machine l'image en 1920×1080 et avec assez d'itérations, il y a un problème : le temps de calcul.

Cette méthode permet peut être d'effacer un peu de bruit dans l'image mais elle ne permet pas d'accélérer le calcul.
Après une brève extrapolation, je me suis rendu compte qu'il faudrait 3 semaines de calcul non stop (21 jours) à ma machine pour calculer cette image avec assez d'itérations pour rendre les caustiques bien nets. Et encore, il s'agirait d'un compromis: le double ayant été préférable ! … soit 42 jours.

J'ai donc cherché une autre solution…
J'avais bien un vieux pc en stock mais vu qu'il me faudrait déjà 21 jours pour calculer cette scène sur un quad core, je n'ose même pas imaginer le temps de calcul sur une machine plus ancienne.

Une ferme de rendu ?

Je me suis souvenu que j'avais reçu des crédits gratuits pour une ferme de rendu pour Blender: Render Street.
Je me suis dit que c'était une bonne occasion de tester cette méthode que je ne connaissais pas.
Et bonne nouvelle pour mes oreilles: ce ne serait plus chez moi que l'ordinateur va vrombir jour et nuit :-D

L'avantage d'une ferme de rendu, c'est que les serveurs sont puissants et que l'on peut lancer le calcul en parallèle sur plusieurs machines à la fois, et même pour une même image.
Après avoir lancé quelques calculs chez eux, j'en suis venu à discuter avec un membre de l'équipe. Je lui ai dit que je souhaitais partager ma scène et mettre l'image finale en licence creative common. Cela semblait l'intéresser car il pensait alors placer cette image sur leur gallery facebook ou pinterest. Il m'a alors proposé de pouvoir lancer un très gros calcul chez eux.
Me voilà donc avec une ferme de rendu pour venir à bout de mon projet pharaonique. Qui dit mieux ? ;-)

Côté utilisation de l'interface en ligne, cela s'est avéré très simple. L'interface est intuitive et facile à comprendre.
Il suffit de zipper la scène et de l'envoyer via votre compte personnel mais n'oubliez pas d'inclure toutes vos textures et la map d'environnement dans le fichier Blender (File > External data > Pack into .blend file).

Les éléments

Chaque image a été rendue avec 32768 itérations.

Voici par exemple la première image:
Cliquer pour agrandir
(Cliquer pour agrandir)

Mixage avec enfuse

Ci-dessous, 8 images ont étés combinées ensemble avec enfuse pour fournir cette image:
Cliquer pour agrandir
(Cliquer pour agrandir)

Scène et éléments partagés

Scène

Voici la scène qui a servi au rendu des caustiques.
J'ai simplement revu à la baisse les paramètres de rendu car il y a peu de chance que vous vouliez attendre un mois avant de terminer le rendu de cette image :-)
Modifiez cette scène comme bon vous semble et si vous trouvez des astuces pour l'améliorer ou la rendre plus rapide à calculer, n'hésitez pas à prendre contact avec moi (Voir la section: Feedback à la fin de cette page).

La scène originale a été conçue avec Blender 2.66.

En chargeant cette scène avec une version plus récente (Blender 2.72b), j'ai remarqué que les paramètres de rendu initiaux n'étaient pas tous chargés correctement. Il s'agit des paramètres de Rendu Bounces: diffuse, glossy et transmission que j'ai remis manuellement à la valeur “128”. C'est la seule différence pour cette nouvelle scène.
Et bonne nouvelle, Blender 2.72b calcule plus rapidement l'image ! J'ai testé le temps de calcul sur un rendu avec des paramètres allégés de la scène et je suis passé de 54m37s avec Blender 2.66a à 31m18s avec Blender 2.72b.

Téléchargement

Cliquez sur le lien pour démarrer le téléchargement:

Licence

La licence de la scène en elle-même est:

Creative Commons Attribution-ShareAlike 3.0 (BY-SA) (* regardez la note ci-dessous pour les restrictions).

  1. Cela signifie que vous pouvez copier et modifier cette scène comme vous le souhaitez.
    Si vous la rediffusez, vous devez le faire avec la même licence et en citant l'auteur du travail original.
    Par exemple de cette façon:
    1. scène modifiée: (…) derivative work of the original by arketip, source: ngon-paradise.com
    2. sans modifications: (…) original by arketip, source: ngon-paradise.com
  2. Notez également que cette scène comporte une image d’environnement HDR (Newport Loft) provenant de ce site: sIBL Archive.
    La licence de cette image est: Creative Commons Attribution-Noncommercial-ShareAlike 3.0 License (BY-NC-SA).

    Cela signifie que vous ne pouvez pas faire un usage commercial de cette scène si vous ne retirez pas d'abord l'image HDR qu'elle contient.

Image

L'image finale a été rendue avec une résolution de 1920×1080 avec 8 images calculée à 32768 itérations.
Elles ont été combinées ensemble avec enfuse.

Téléchargement

Cliquez sur le lien pour démarrer le téléchargement:

  • Image HDR 4 images (663.04 KiB, 1094 downloads): combinaison de 4 images calculées avec 32768 itérations, similaire à 131072 itérations en une seule passe)
  • Image HDR 8 images (607.93 KiB, 1204 downloads): (meilleur) combinaison de 8 images calculées avec 32768 itérations, similaire à 262144 itérations en une seule passe)

Licence

La licence de cette image est:

Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License (BY-NC-SA).

Éléments séparés

Ne téléchargez l'archive qui suit que si vous en avez réellement besoin: elle contient les 8 images séparées (avant leur combinaison):
glass-caustics-p100-32768-8images.zip (3.57 MiB, 1156 downloads)

Si vous avez besoin des originaux en PNG 16 bits, contactez-moi par email: info at ngon-paradise dot com.

Feedback

Si vous avez d'autres astuces pour diminuer le temps de calcul, faites-le moi savoir.
Par exemple, en m'envoyant la scène modifiée à info@ngon-paradise.com.

3d/cycles/blender-cycles-noise-article.txt · Last modified: 2014/11/15 09:37 by arketip
 
PDF Export Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki