3.5.3 Les photons

3.5.3.1 Introduction

L'objectif de cette mise en place de la projection de photons est de rendre de réels caustiques de réflexion et de réfraction. La projection de photons a été introduite par Henrik Wann Jensen (voir Lectures suggérées).

La projection de photons est une technique qui utilise un prétraçage à rebours pour rendre les caustiques de réfraction et de réflexion réalistes. Cela signifie que les miroirs peuvent refléter les rayons et que les lentilles peuvent focaliser la lumière.

La projection de photons fonctionne par envoi de paquets de lumière (photons) depuis la source de lumière vers la scène. Les photons sont dirigés vers des objets spécifiques. Quand un photon touche un objet après être passé à travers (ou avoir rebondi sur) l'objet cible, l'intersection est stockée en mémoire. Cette donnée est utilisée plus tard pour estimer la quantité de lumière apportée par les caustiques réflectifs ou réfractifs.

3.5.3.1.1 Exemples
Caustiques de réflexion
Caustiques de réflexion

Cette image montre les caustiques de réfraction d'une sphère et d'un cylindre. Tous deux utilisent un index de réfraction de 1.2. Est également visible une petite quantité de caustiques de réflexion depuis la sphère de métal, et également depuis le cylindre clair et la sphère.

Les photons utilisés pour les lentilles et les caustiques
Les photons utilisés pour les lentilles et les caustiques

Ici nous avons trois lentilles et trois sources de lumière. La lentille du centre a une projection de photons désactivée. vous pouvez aussi voir quelques caustiques de réflexion depuis la boîte de bronze (un peu de lumière est réfléchie et touche la boîte bleue, de la lumière rebondit de la lentille la plus proche et est focalisée dans le coin gauche bas de l'image).

3.5.3.2 Utilisation de la projection de photons dans votre scène

Lors de la description d'une scène avec des photons, il est utile de séparer les objets de la scène en deux catégories. Les objets de la première catégorie montreront des caustiques de photons quand ils seront touchés par les photons. Les objets de la seconde catégorie donnent des caustiques de photons par réflexion ou réfraction des photons. Quelques objets seront dans les deux catégories, et certains dans aucune.

Categorie 1 - Les objets qui montrent les caustiques de photons.

Par défaut, tous les objets sont dans la première catégorie. Chaque fois qu'un photon touche un objet, il est stocké et servira plus tard pour rendre les caustiques sur cet objet. Cela signifie que, par défaut, les caustiques de photons peuvent apparaître sur toutes les surfaces. Pour accélérer le rendu, vous pouvez sortir des objets de cette catégorie. Vous faites cela avec la ligne : photons {collect off}. Si vous utilisez cette syntaxe, les caustiques de photons n'apparaîtront pas sur cet objet. Cela sauvera à la fois de la mémoire et du temps de calcul pendant le rendu.

Categorie 2 - Les objets qui provoquent les caustiques de photons.

Par défaut, il n'y a pas d'objets dans la seconde catégorie. Si vous voulez que votre objet provoque des caustiques, vous devez faire deux choses. D'abord, placez votre objet dans une "cible". Vous faites cela avec le mot clé target. Cela autorise les sources de lumière à tirer des photons vers votre objet. Ensuite, vous devez spécifier si votre objet réfracte les photons, les réfléchit, ou les deux. Cela est fait avec les mots clé reflection on et refraction on. Pour autoriser un objet à réfléchir ou réfracter des photons, vous devez utiliser les lignes suivantes de code dans l'objet :

photons {
	target
	reflection on
	refraction on
}

En général, vous ne voulez pas qu'un objet soit dans les deux catégories. La plupart des objets qui provoquent des caustiques de photons n'ont pas beaucoup de couleur ou de luminosité. Habituellement, ils réfléchissent ou réfractent simplement leur environnement. Pour cette raison, c'est une perte de temps d'afficher des caustiques de photons sur ces surfaces. Même s'ils sont calculés, les effets des caustiques seront si légers qu'ils ne seront pas percus.

Quelque fois, vous pouvez aussi vouloir ajouter photons {collect off} pour d'autres objets clairs ou réfléchissants, même si ce ne sont pas des cibles de photons. Encore, cela est fait pour éviter des calculs inutiles de lumières caustiques.

Enfin, vous pouvez vouloir activer la réflexion et la réfraction de photons sur une surface, même si ce n'est pas une cible. Cela permet aux photons indirects (photons qui ont déjà touché une cible et ont été réfléchis ou réfractés) de poursuivre leur voyage après avoir touché cet objet.

3.5.3.2.1 Le paramétrage global des photons
global_photon_block:
photons {
	spacing <photon_spacing> | count <photons_to_shoot>
	[gather <min_gather>, <max_gather>]
	[media <max_steps> [,<factor>]]
	[jitter <jitter_amount>]
	[max_trace_level <photon_trace_level>]
	[adc_bailout <photon_adc_bailout>]
	[save_file "filename" | load_file "filename"]
	[autostop <autostop_fraction>]
	[expand_thresholds <percent_increase>, <expand_min>]
	[radius <gather_radius>, <multiplier>, <gather_radius_media>, <multiplier>]
}

Les valeurs par défaut de tous les photons :

Global :
	expand_min : 40
	gather : 20, 100
	jitter : 0.4
	media : 0
Object :
	collect : on
	refraction : off
	reflection : off
	split_union : on
	target : 1.0
Light_source:
	area_light : off
	refraction : off
	reflection : off

Pour spécifier les options de rassemblement et de stockage des photons vous devez ajouter un bloc de photons à la section global_settings de votre scène.

Par exemple :

global_settings {
	photons {
		count 20000
		autostop 0
		jitter .4
	}
}

Le nombre de photons générés peut être fixé en utilisant soit le mot clé spacing ou le mot clé count :

Le mot clé gather vous permet de spécifier le nombre de photons à regrouper à chaque point pendant la phase de rendu. Le premier nombre (défaut 20) est le minimum à regrouper, tandis que le second (défaut 100) est le maximum. Ce sont de boonnes valeurs par défaut, et vous ne devez les changer que si vous savez ce que vous faites.

Le mot clé media active les photons de média. Le paramètre max_steps spécifie le nombre maximum de photons à déposer sur un intervalle. Le paramètre optionnel factor spécifie la différence entre l'espacement média et l'espacement de surface. Vous pouvez augmenter ce facteur et décroître max_steps si trop de photons sont déposés dans le média.

Le mot clé jitter spécifie la quantité d'agitation utilisée dans l'échantillonnage des rayons de lumière dans la phase de précalcul. La valeur par défaut est bonne et n'a pas besoin d'être changée, habituellement.

Les mots clés max_trace_level et adc_bailout vous autorisent la spécification de ces attributs pour la phase de traçage des photons. Si vous ne les spécifiez pas, les valeurs pour la première phase de traçage seront utilisées.

Les mots clés save_file et load_file vous autorisent la sauvegarde et le chargement de projections de photons. Si vous chargez une projection de photons, aucun photon ne sera lancé. La projection de photon contient tous les photons de surface (caustique) et de média.

radius est utilsé pour regrouper les photons. Plus il est grand, plus cela prend de temps de regrouper les photons. Mais si vous en utilisez un trop petit, vous n'obtiendrez pas assez de photons pour avoir une bonne estimation. Par conséquent, le choix d'un bon rayon est important. Normallement POV-Ray regarde la projection de photons et utilise une analyse statistique pour déterminer un rayon raisonnable. Quelque fois il fait un bon travail, d'autres fois non. Le mot clé radius vous laisse remplacer ou ajuster le choix de POV-Ray.

Les paramètres de radius (tous sont optionnels):

  1. Fixez manuellement le rayon de regroupement des photons de surface. Si cela est placé à zéro ou laissé, POV-Ray analysera et choisira.
  2. Ajustez le rayon pour les photons de surface en fixant un multiplicateur. Si POV-Ray, par exemple, prend un rayon que vous pensez trop grand (le rendu est trop long), vous pouvez utiliser "radius, 0.5" pour baisser le rayon (multiplié par 0.5) et accélérer le rendu au prix de la qualité.
  3. Fixez manuellement le rayon de regroupement des photons de média.
  4. Ajustez le rayon pour les photons de média en donnant un multiplicateur.

Les mots clés autostop et expand_thresholds seront expliqués plus tard.

3.5.3.2.2 Le tir de photons sur un objet

Le bloc de photon d'objet :

photons {
	[target [<spacing_multiplier>]]
	[refraction on|off]
	[reflection on|off]
	[collect on|off]
	[pass_through]
}

Pour tirer des photons sur un objet, vous devez dire à POV que l'objet reçoit des photons. Pour cela, créez un bloc photons { } dans l'objet. Par exemple :

object {
	MyObject
	photons {
		target
		refraction on
		reflection on
		collect off
	}
}

Dans cet exemple, l'objet réfléchit et réfracte les photons. Chacune de ces options peut être désactivée (en spécifiant reflection off, par exemple). En utilisant cela, vous pouvez avoir un objet avec une finition réfléchissante qui ne réfléchit pas les photons pour des raisons de mémoire et de vitesse.

Le mot clé target rend l'objet cible.

La densité des photons peut être ajustée en spécifiant spacing_multiplier. Si, par exemple, vous spécifiez un spacing_multiplier de 0.5, alors l'espacement des photons touchant cet objet sera la moitié de l'espacement pour d'autres objets.

Note : cela signifie quatre fois plus de photons de surface et huit fois plus de photons de média.

Le mot clé collect off fait que l'objet ignore les photons. Les photons ne sont ni déposés, ni regroupés sur cet objet.

Le mot clé pass_through fait que les photons traverse l'objet sans être affectés sur leur parcours vers l'objet cible. Une fois que le photon touche la cible, il ignorera l'option pass_through. Cela est en gros une version photon du mot clé no_shadow, avec l'exception que le média dans l'objet restera affecté par les photons (sauf si ce média spécifie collect off). Si vous utilisez le mot clé no_shadow, l'objet sera attribué de pass_through automatiquement. Vous pouvez alors désactiver pass_through si nécessaire en utilisant simplement photons { pass_through off }.

Note : les photons ne seront pas tirés sur un objet sauf si vous spécifiez le mot clé target. La simple activation de la réfraction ne suffira pas.

Lors du tir de photons sur une union CSG, il peut être quelque fois avantageux d'utiliser split_union off dans l'union. POV-Ray forcera le tir sur l'ensemble de l'objet, au lieu de l'éclater et de tirer sur chacun de ses composants.

3.5.3.2.3 Les photons et les sources de lumière

Le bloc lumière-photon :

photons {
	[refraction on | off]
	[reflection on | off]
	[area_light]
}

Exemple :

light_source {
	MyLight
	photons {
		refraction on
		reflection on
	}
}

Quelque fois, vous voulez des photons tirés depuis une source de lumière et pas d'une autre. Dans ce cas, vous pouvez activer les photons pour un objet, mais spécifiez photons {reflection off refraction off} dans la définition de la source de lumière. Vous pouvez aussi désactiver seulement la réflexion ou la réfraction pour toute source de lumière.

3.5.3.2.4 Les photons et le média
global_settings {
	photons {
		count 10000
		media 100
	}
}

Les photons interagissent aussi pleinement avec le média. Cela signifie que des photons volumétriques sont stockés dans le média. Cela est activé par l'utilisation du mot clé media dans le bloc photon.

Pour stocker les photons dans le média, POV dépose les photons au cours de son avancée dans le média lors de la phase de traçage des photons du rendu. Il déposera ces photons comme il trace les photons de caustiques, aussi le nombre de photons de média est dépendant du nombre de photons de caustiques. Pendant qu'un rayon passe à travers une section de média, les photons sont déposés, séparés approximativement par la même distance que celle qui sépare les photons de surface.

Vous pouvez spécifier un facteur comme second paramètre optionnel au mot clé media. Si, par exemple, le facteur est mis à 2.0, alors les photons seront espacés du double de distance habituelle.

Quelque fois, si une section de média est très grande, l'utilisation de ces paramètres peut créer un grand nombre de photons et saturer la mémoire. Par conséquent, à la suite du mot clé media, vous devez spécifier le nombre maximum de photons déposés pour chaque rayon qui traverse chaque section de média. Une valeur de 100 fonctionnera dans la pluspart des cas.

Vous pouvez placer collect off dans le média pour lui faire ignorer les photons. Ils ne seront pas déposés ni regroupés dans média qui les ignore. Ils ne seront pas non plus déposés, ni regroupés, dans un média non dispersé. Toutefois, si de multiples médias existent dans le même espace, et que l'un au moins n'ignore pas les photons et est dispersé, alors les photons seront déposés dans cet intervalle et seront regroupés pour être utilisés avec tous les médias de cet intervalle.

3.5.3.3 Questions sur les photons

J'ai fait un objet avec IOR 1.0 et les ombres paraissent bizarre.

Si les bordures de vos ombres paraissent étranges lors de l'utilisation de la projection de photons, ne vous alarmez pas. C'est une conséquence malheureuse de la méthode. Si vous augmentez la densité de photons (en baissant l'espacement et le rayon de regroupement) vous noterez la diminution du problème. Nous suggérons de ne pas utiliser les photons si votre objet ne donne pas beaucoup de réfraction (comme un panneau de fenêtre ou un morceau de verre plan ou tout autre objet avec un IOR proche de 1.0).

Ma scène prend une éternité à se rendre.

Quand POV-Ray construit la projection de photons, il affiche continuellement le nombre de photons tirés dans la barre de statut. Est-ce que POV-Ray reste dans cette phase et continue de lancer des photons encore et encore ?

Oui

Si vous lancez des photons sur un objet infini (comme un plan), alors vous devez vous attendre à cela. Soyez patient ou ne tirez pas de photons sur des objets infinis.

Tirez-vous des photons sur une différence CSG ? Quelque fois POV-Ray fait un mauvais travail en créant des boîtes englobantes pour ces objets. Et puisque les photons sont tirés sur la boîte englobante, vous pouvez avoir de mauvais résultats. Essayez d'englober manuellement l'objet. Vous pouvez aussi essayer la caractéristique autostop (essayez autostop 0). Voir les documentations pour plus d'information sur autostop.

Non

Votre scène a-t-elle beaucoup de verre (ou autres objets limpides) ? Le verre est lent et vous devez être patient.

Ma scène a des pois mais se rend très vite. Pourquoi ?

Vous devez augmenter le nombre de photons (ou baisser l'espacement).

Les photons dans ma scène apparaissent seulement comme de petits points brillants. Comment puis-je corriger cela ?

Le calcul automatique du rayon de regroupement ne fonctionne probablement pas correctement, sans doute parce qu'il y a de nombreux photons non visibles dans votre scène qui affectent l'analyse statistique.

Vous pouvez résoudre le problème en réduisant le nombre de photons qui sont dans votre scène, mais qui ne sont pas visibles par votre caméra (qui trompe le calcul automatique), ou en spécifiant manuellement le rayon de regroupement initial en utilisant le mot clé radius. Si vous devez spécifier manuellement le rayon, il est habituellement mieux d'utiliser aussi l'espacement au lieu du compteur, et donc de placer le rayon et l'espacement au ration 5:1 (rayon:espacement).

L'ajout de photons ralentit ma scène, et je vois des pois.

Cela est habituellement causé par des densités hautes et basses de photons en même temps dans la même scène. La faible densité de l'une crée les pois, tandis que la forte densité de l'autre ralentit la scène. Il est habituellement préférable que tous les photons soient sur la même magnitude pour l'espacement et la luminosité. Faites attention si vous tirez des photons d'objet près et loin d'une source de lumière. Il y a un paramètre optionnel pour le mot clé target qui vous permet d'ajuster l'espacement des photons sur l'objet cible. Vous pouvez avoir besoin d'ajuster ce facteur pour les objets très proche ou avoisinant la source de lumière.

J'ai ajouté des photons, mais je ne vois aucun caustique.

Quand POV-Ray construit la projection de photons, il affiche continuellement le nombre de photons tirés dans la barre de statut. Montre-t-il des tirs de photons en cours ?

Non

Essayez d'éviter autostop, ou vous pouvez vouloir encapsuler votre objet manuellement.

Essayez d'accroître le nombre de photons (ou de baisser l'espacement).

Oui

Tous les photons sont-ils stockés (le nombre après total dans le message de rendu quand POV-Ray lance des photons) ?

Non

Il est possible que les photons ne touchent pas l'objet cible (parceque un autre objet est sur le trajet de la source de lumière).

Oui

Les photons peuvent être plus divergents que vous le pensez. Ils sont probablement là, mais vous ne pouvez pas les voir car ils sont trop diffus.

La base de mon objet de verre est vraiment brillante.

Utilisez collect off avec cet objet.

Est-ce que les aires lumineuses fonctionnent avec la projection de photons ?

Les photons fonctionnent avec les aires lumineuses. Toutefois, la projection de photons ignore normalement toute option d'aire lumineuse et les traite comme des sources ponctuelles. Si vous voulez que votre projection de photons utilise les options de l'aire lumineuse, vous devez spécifier le mot clé area_light dans le bloc photons { } du code de votre source de lumière. Cela n'augmentera pas le nombre de photons tirés par la source de lumière, mais cela peut donner des motifs réguliers dans les caustiques rendus.

Que signifient les stats ?

Dans les stats, photons shot signifie le nombre de rayons de lumière tirés depuis les sources de lumière. photons stored signifie le nombre de photons déposés sur les surfaces de la scène. Si vous activez la réflexion et la réfraction, vous pouvez avoir plus de photons stockés que tirés, puisque chaque rayon peut se dédoubler.

3.5.3.4 Astuces sur les photons

3.5.3.5 Techniques avancées

3.5.3.5.1 Autostop
Exemple de l'option autostop des photons
Exemple de l'option autostop des photons

Pour comprendre l'option autostop, vous devez comprendre la façon dont les photons sont tirés depuis les sources de lumière. Ils sont lancés selon un modèle en spirale avec une densité angulaire uniforme. Imaginez une sphère avec une spirale commençant à un des pôles et croissant en cercles toujours plus grands vers l'équateur. Deux angles sont impliqués ici. Le premier, phi, est la plus grande progression dans le cercle en cours de la spirale. Le second, theta, est notre distance avec le pôle et l'équateur. Maintenant, imaginez cette sphère centrée sur la source de lumière, avec le pôle de démarrage de la spirale pointé vers le centre de l'objet recevant les photons. Maintenant, les photons sont tirés de la lumière dans ce modèle de spirale.

Normalement, POV n'arrête pas de lancer des photons tant que la totalité de la boîte englobante de l'objet cible n'a pas été entièrement couverte. Quelque fois, toutefois, un objet est plus petit que sa boîte englobante. A ce moment, nous voulons arrêter le lancer si nous faisons un cercle complet de la spirale sans toucher l'objet. Malheureusement, quelques objets (comme les anneaux de cuivre), ont des trous en leur centre. Puisque nous commençons le lancer depuis le centre de l'objet, les photons atteignent le trou au centre, trompant alors le système qui pense qu'il a fini. Pour éviter cela, le mot clé autostop vous laisse spécifier jusqu'où le système doit aller avant de stopper automatiquement. La valeur spécifiée est une fraction de la boîte englobante de l'objet. Les valeurs valides vont de 0.0 à 1.0 (0% à 100%). POV continuera de lancer des photons jusqu'à ce que la spirale ait dépassé cette valeur ou que la boîte soit entièrement couverte. Si un cercle complet de photons ne parvient pas à toucher l'objet cible après que la spirale ait dépassé le seuil de l'autostop, POV arrêtera alors le tir de photons.

La caractéristique autostop ne s'amorcera pas non plus tant que au moins un photon n'a pas touché l'objet. Cela vous permet d'utiliser autostop 0 même avec les objets qui ont un trou au centre.

Note : si la source de lumière est dans la boîte englobante de l'objet, les photons sont tirés dans toutes les directions à partir de la source de lumière.

3.5.3.5.2 La recherche adaptative du rayon

A moins que les photons interagissent avec le média, POV-Ray utilise une recherche adaptative du rayon lors du regroupement des photons. Si le nombre minimum de photons n'est pas trouvé dans le rayon d'origine, il est agrandi et la recherche est reprise. L'utilisation de cette recherche adaptative peut, à la fois, décroître la quantité de temps prise pour rendre l'image, et accentuer les bordures des modèles de caustiques.

Quelque fois, cette technique de recherche adaptative peut créer des artefacts indésirables sur les bordures. Pour les enlever, quelques seuils sont utilisés, qui peuvent être spécifiés avec expand_thresholds. Par exemple, si l'extension du rayon augmente trop la densité estimée de photons (le seuil est un rapport de croissance, le défaut est 20%, ou 0.2), la recherche étendue est abandonnée et l'ancienne recherche est utilisée à la place. Toutefois, si trop peu de photons sont regroupés dans la recherche étendue (expand_min, le défaut est 40), la nouvelle recherche sera toujours utilisée, même si cela signifie 20% d'augmentation de la densité de photons.

3.5.3.5.3 Les photons et la dispersion

Quand la dispersion est spécifiée pour l'intérieur d'un objet transparent, les photons l'utiliseront et montreront des caustiques colorés.

3.5.3.5.4 Sauver et charger des projections de photons

Il est possible de sauver et de charger des projections de photons pour accélérer le rendu. La projection de photons elle-même est indépendante de la vue, aussi, si vous voulez animer une scène qui contient des photons et que vous savez que la projection de photons ne change pas pendant l'animation, vous pouvez la sauver sur le premier écran et la charger pour tous les suivants.

Pour sauver la projection, placez la ligne :

save_file "myfile.ph"

dans le bloc photons { } dans la section global_settings.

Le chargement de la projection de photons est la même chose, mais avec load_file au lieu de save_file. Vous ne pouvez pas, à la fois, charger et sauver une projection de photons dans le fichier POV. Si vous chargez la projection, cela chargera tous les photons. Aucun photon ne sera lancé si la projection est chargée depuis un fichier. Toutes les autres options (comme le rayon de regroupement) doivent toujours être spécifiées dans le fichier scène de POV et elles ne sont pas chargées avec la projection.

Quand peut-on réutiliser sans risques une projection de photons sauvegardée ?

En général, des modifications de la géométrie d'une scène requiert de nouveau le tir de photons. La modification des paramètres de la caméra, ou changer la résolution de l'image ne le requiert pas.

3.5.2 Le média 3.5.2 Le média 3.6 Les fichiers inclus 3.6 Les fichiers inclus