"Comment puis-je rendre visible une source de lumière ?" ou "Même si je place ma caméra juste devant ma source de lumière, je ne la vois pas. Que fais-je mal ?"
Une source de lumière dans POV-Ray est seulement un concept. Quand vous ajoutez une source de lumière à la scène, vous dites à POV-Ray "il y a de la lumière provenant de ce point". Comme l'indique le nom, c'est une source de lumière, pas un éclairage physique (comme une ampoule ou un point lumineux comme une étoile). POV-Ray n'ajoute rien à l'endroit d'où vient la lumière, c.a.d. qu'il n'y a rien là, seulement un espace vide. C'est seulement une sorte de point mathématique que POV-Ray utilise pour faire le calcul des ombres.
Pour rendre la source visible, vous devez y mettre quelque chose. Il y a un mot clé looks_like dans le bloc light_source qui permet d'attacher facilement un objet à la source de lumière. Cet objet ne donne aucune ombre. Vous pouvez faire quelque chose comme :
light_source { <0, 0, 0> color 1 looks_like { sphere { <0, 0, 0>, 0.1 color {rgb 1} finish {ambient 1} } } translate <10, 20, 30> }
C'est une bonne chose de définir les deux éléments, la source de lumière et l'objet du looks_like, à l'origine, puis de les déplacer pour les mettre à la bonne place.
Notez aussi le 'finish {ambient 1}' qui fait que la sphère semble luire (voir aussi la question suivante).
Vous pouvez aussi rendre les sources de lumière visibles en utlisant d'autres méthodes : média, reflets optiques (disponibles en fichier inclus de tierce partie), surface luisante, etc.
"Comment faire des objets brillants, qui semblent émettre de la lumière ?"
Il y a une astuce simple pour faire cela : mettez la valeur de ambient de l'objet à 1 ou plus. Cela fait que POV-Ray ajoute une vive illumination à l'objet de manière à ce que sa couleur soit prise telle quelle, sans l'assombrir avec des ombres. Cela donne un objet qui semble émettre de la lumière même dans l'obscurité la plus profonde (pratique pour rendre les sources de lumière visibles, ou faire des petites sources commes les diodes qui n'émettent pas beaucoup de lumière mais peuvent être facilement visibles dans l'obscurité).
Une méthode plus sophistiquée serait d'utiliser un média émetteur dans l'objet (et de le faire transparent ou semi-transparent).
"Comme déplacer la cméra selon un cercle tout en regardant l'origine ?"
Il y a deux façons de le faire : la facile (et limitée), et la plus mathématique.
La facile :
camera { location <0, 0,-10> look_at 0 rotate <0, clock*360, 0> }
Cela place la caméra à dix unités négatives sur l'axe z puis la fait tourner autour de l'axe y en regardant l'origine (elle fait un cercle d'un rayon de 10).
La méthode mathématique :
camera { location <10*sin(2*pi*clock), 0,-10*cos(2*pi*clock)> look_at 0 }
Cela fait exactement la même chose que le premier code, mais vous contrôlez plus précisemment le chemin de la caméra. Par exemple, vous pouvez en faire un chemin ellyptique en changeant les facteurs du sinus et du cosinus (par exemple, au lieu de 10 et 10, vous pouvez utiliser 10 et 5 qui donne une ellipse avec un rayon majeur de 10 et un rayon mineur de 5).
Une façon plus facile de faire cela est l'utilisation de la fonction vrotate(), qui gère les éléments sin() et cos() pour vous, donnant aussi la possibilité de faire des rotations plus complexes.
camera { location vrotate(x*10, y*360*clock) look_at 0 }
Pour avoir une ellipse avec cette méthode, vous pouvez simplement multiplier le résultat de vrotate par un vecteur, dimensionnant le cercle donné. Avec les deux dernières méthodes vous pouvez aussi contrôler le vecteur look_at (si vous ne voulez pas voir seulement l'origine).
Vous pouvez aussi faire des transformations plus complexes en combinant le déplacement, la taille, la rotation et des transformations matricielles en remplaçant l'appel de vrotate() par un appel de la fonction vtransform() trouvée dans functions.inc (nouveau dans POV-Ray 3.5).
La réponse à cette question peut être facilement trouvée dans la documentation de POV-Ray, donc je rappelle seulement la syntaxe :
pigment { image_map { gif "image.gif" map_type 1 } }
(Notez que pour que l'image soit centrée proprement, soit l'objet doit être à l'origine lors de l'application du pigment, soit le pigment doit être transformé pour s'aligner avec l'objet. Il est plus facile de créer l'objet à l'origine, appliquer la texture, puis de le déplacer où vous voulez).
Substituez le mot clé gif avec le type d'image que vous utilisez (si ce n'est pas GIF) : tga, iff, ppm, pgm, png ou sys.
Un map_type 0 donne l'application planaire par défaut.
Un map_type 1 donne l'application sphérique (applique l'image sur une sphère).
Avec map_type 2 vous avez une application cylindrique (applique l'image sur un cylindre).
Enfin map_type 5 est une application torique (applique l'image sur un tore).
Voir la documentation pour plus de détails.
"Comment créer une génératrice, par exemple pour un chemin de caméra pour une animation ?"
POV-Ray 3.6 a une caractéristique génératrice qui vous permet d'en créer. Cela est couvert dans la documentation et il y a des fichiers de démonstration donnant des exemples d'utilisation. Il existe aussi des fichiers inclus de tierce partie pour la création de génératrices qui ont plus de flexibilité que les génératrices intégrées, par exemple la macro de génératrice par Chris Colefax (http://www.geocities.com/ccolefax/spline/index.html).
Le POV-Ray 3.6 officiel ne supporte pas les calculs de flous de mouvement, mais il y a des versions modifiées qui le font.
Vous pouvez aussi utiliser d'autres outils pour le faire. Une voie consiste à calculer une petite animation puis à faire une moyenne sur l'ensemble des images. Cela peut être fait par des programmes de tierce partie comme le Targa Averager (http://iki.fi/warp/PovUtils/average/).
"Comment trouver la taille d'un objet texte / centrer le texte / justifier le texte ?"
Vous pouvez utiliser les fonctions min_extent() et max_extent() pour obtenir les coins de la boîte englobante de tout objet. Bien que cela ne soit pas la taille actuelle de l'objet, c'est suffisamment précis pour les objets texte, assez pour faire un alignement.
POV-Ray intègre le support des polices true type vous permettant d'avoir des textes 3D dans vos scènes (voir la documentation sur l'objet texte pour plus de détails).
Il y a également quelques utilitaires extérieurs qui importeront des polices true type et autoriseront leur utilisation sur le texte. L'un de ces programmes est Elefont.
Cette question signifie souvent "comment faire un objet creux comme un verre, un seau, etc".
Avant de répondre à cette question, laissez-moi expliquer certaines choses sur la gestion des objets par POV-Ray :
Bien que la documentation de POV-Ray parle d'objet pleins et d'objets creux, ce n'est pas ainsi qu'il fonctionne. "Plein" et "creux" sont des termes un peu mensongers pour décrire les objets. Vous pouvez aussi faire un objet "creux" avec le mot clé hollow, mais ce n'est pas si simple.
Premièrement : POV-Ray ne gère que les surfaces, pas les objets pleins en 3D. Quand vous spécifiez une sphère, ce n'est qu'une surface sphérique. C'est seulement une surface et elle n'est pas emplie de quelque chose. Cela peut être vu facilement en plaçant la caméra dans une sphère ou en faisant un trou sur un des côtés de la sphère avec le mot clé clipped_by (ainsi vous pouvez regarder dedans).
Les gens pensent souvent que les objets de POV-Ray sont pleins, réellement 3D, avec une matière solide les emplissant, parce qu'ils font une CSG 'différence' et il semble que l'objet est plein. Ce que fait cette CSG est une coupe d'une partie de l'objet et l'ajout d'une nouvelle surface à la place du trou, ainsi vous ne pouvez pas voir l'intérieur de l'objet (cette nouvelle surface est une partie du second objet qui est "à l'intérieur" du premier objet). Encore, si vous déplacez la caméra dans l'objet, vous verriez qu'il est creux et que ce n'est qu'une surface.
Alors qu'est ce que ces termes de "plein" et "creux" dont parle la documentation, et qu'elle est l'utilité du mot clé hollow ?
Bien que les objets ne soient que des surfaces, POV-Ray les gère comme s'ils étaient pleins. Par exemple, le brouillard et le média ne vont pas dans les objets pleins. Si vous placez une sphère de verre dans le brouillard, vous verrez qu'il n'y a pas de brouillard dans la sphère.
Si vous ajoutez le mot clé hollow à l'objet, POV-Ray ne le gèrera plus comme s'il était plein, donc le brouillard et l'atmosphère envahiront l'intérieur de l'objet. C'est la raison pour laquelle POV-Ray envoie une alerte quand la caméra est à l'intérieur d'un objet non creux (parce que, comme il dit, le brouillard et les autres effets atmosphériques ne fonctionneront pas comme prévu).
Si votre scène n'utilise aucun effet atmosphérique (brouillard ou média) il n'y a aucune différence entre les objets pleins et creux.
Donc tous les objets de POV-Ray sont creux. Mais la surface de l'objet est toujours infiniment fine, et il y a seulement une surface. Avec les vrais objets creux, vous avez toujours deux surfaces : une externe et une interne.
Habituellement, les gens font référence à ce type d'objet quand ils parlent d'objet creux. Ces objets sont facilement faits avec une différence CSG, comme ceci :
// Un simple verre d'eau fait avec une différence : difference { cone {<0, 0, 0>, 1, <0, 5, 0>, 1.2} cone {<0, .1, 0>, .9, <0, 5.1, 0>, 1.1} texture {Glass} }
Le premier cône limite la surface externe du verre et le second limite la surface interne.
Comme dit sur la question des objets creux, ils ont toujours deux surfaces : un externe et une interne. Si vous prennez le même exemple, un simple verre sera :
// Un simple verre d'eau fait avec une différence : #declare MyGlass = difference { cone {<0, 0, 0>, 1, <0, 5, 0>, 1.2} cone {<0, .1, 0>, .9, <0, 5.1, 0>, 1.1} texture {Glass} }
Le premier cône limite la surface externe du verre et le second limite la surface interne.
Si vous voulez remplir le verre avec de l'eau, vous devez faire un objet qui coïncide avec la surface interne du verre. Notez que vous devez éviter le problème des surfaces coïncidentes donc vous devez dimensionner l'objet "eau" pour qu'il soit juste plus petit que la surface interne du verre. Donc nous faisons quelque chose comme ceci :
#declare MyGlassWithWater = union { object {MyGlass} cone { <0, .1, 0>, .9, <0, 5.1, 0>, 1.1 scale .999 texture {Water} } }
Maintenant, le verre est empli d'eau. Mais il y a un problème : il y a trop d'eau. Le verre doit être rempli que jusqu'à un certain niveau, qui doit être définissable. Bien, cela peut être facilement fait avec une opération CSG :
#declare MyGlassWithWater = union { object {MyGlass} intersection { cone {<0, .1, 0>, .9, <0, 5.1, 0>, 1.1} plane {y, 4} scale .999 texture {Water} } }
Maintenant le niveau de l'eau est à 4 unités de hauteur.
Il n'y a pas d'outil direct pour la torsion dans POV-Ray, mais vous pouvez atteindre un résultat acceptable avec le 'Object Bender' de Chris Colefax (http://www.geocities.com/SiliconValley/Lakes/1434/bend.html).
Quelques objets peuvent être "tordus" en les modelant avec d'autres objets. Par exemple, un cylindre tordu peut être fait plus facilement (et plus exactement) en utilisant une intersection d'un tore et d'un objet limitant.
Cela peut sembler étrange que la plupart des moteurs de rendu gèrent la torsion et pas POV-Ray. Pour comprendre cela, il faut savoir comment font les autres :
Dans les autres moteurs, tous les objets sont modelés avec un maillage de triangles (ou avec des primitives comme les NURBS ou les surfaces de bezier qui sont très aisément convertis en triangles). La "torsion" est, en fait, faite par déplacement des sommets des triangles.
Dans ce contexte, le terme "torsion" est un peu mensongé. Strictement parlant, la torsion d'une surface de triangles devrait aussi tordre les triangles eux-mêmes, pas seulement déplacer leurs sommets. Aucun moteur de rendu ne peut le faire (cela peut, toutefois, être simulé en découpant les triangles en petits triangles, et ainsi l'effet de "torsion" est plus précis, mais toujours pas parfait). Ce que font ces moteurs n'est pas une vraie torsion dans le sens strictement mathématique, mais seulement une approximation atteinte en déplaçant les sommets des triangles.
Cette différence peut sembler éxagérée puisque le résultat de cette simulation paraît habituellement aussi bonne qu'une vraie torsion. Toutefois, ça ne l'est pas du point de vue de POV-Ray. Cela parce que POV-Ray ne représente pas les objets avec des triangles, mais ce sont de vraies surfaces mathématiques. POV-Ray ne peut pas "simuler" une torsion en déplaçant des sommets parcequ'il n'y a pas de sommets à déplacer. En pratique, la torsion (et tout autre transformation non linéaire) requière le calcul de l'intersection de la surface de l'objet avec une courbe (au lieu d'une droite ligne), qui est assez difficile et souvent analytiquement impossible.
Notez que les objets isosurface peuvent être modifiés avec les fonctions correctes dans le but d'obtenir toute sorte de transformation (linéaire et non linéaire) et donc ils ne sont pas vraiment bornés par cette limitation. Toutefois, l'accès à de telles tranformations nécessite quelques connaissances en mathématiques.
Voir aussi la question sur la variable ior.
"La tache focale est très granuleuse. Puis-je gérer cette granulosité ?"
Oui. Placez variance à 0 (ou à une très petite valeur, comme 1/100000) et choisissez un blur_samples assez élevé. Le rendu ralentira fortement, mais le résultat sera celui attendu.
| 2.4.2 Les choses qui ne fonctionnent pas comme prévu |