"Quand je place plusieurs objets transparents les une en face des autres, ou les uns dans les autres, POV-Ray en calcule quelques uns, mais le reste est complètement noir, quelque soit la valeur de transparence donnée."
Réponse courte : essayez d'augmenter la valeur de max_trace_level dans le bloc global_settings (le défaut est 5).
Réponse longue :
Le raytracing a une caractéristique : il peut calculer la réflexion et la réfraction. Chaque fois qu'un rayon touche la surface d'un objet, le programme regarde si cette surface est réfléchissante et/ou réfractante. Si oui, il tire un nouveau rayon depuis ce point dans la direction appropriée.
Maintenant, imaginez que vous avez une sphère de verre. Le verre est réfléchissant et réfractant, donc quand le rayon touche la sphère, deux rayons supplémentaires sont calculés, un vers l'extérieur (pour la réflexion) et un vers l'intérieur (pour la réfraction). Maintenant, le rayon interne touchera à nouveau la sphère, donc deux nouveaux rayons sont calculés, et ainsi de suite...
Vous pouvez vous rendre compte qu'il doit y avoir un nombre maximal de réfractions/réflexions calculées, sinon POV-Ray pourrait calculer ce point indéfiniment.
Ce nombre peut être fixé avec l'option max_trace_level dans le bloc global_settings. La valeur par défaut est 5, ce qui est suffisant pour la plupart des scènes. Quelque fois, cela n'est pas suffisant (spécialement quand il y a beaucoup d'objets semi-transparents les uns sur les autres) aussi vous devez l'augmenter.
Essayez quelque chose comme :
global_settings { max_trace_level 10 }
"Quand je fais une image avec POV-Ray, il semble utiliser seulement quelques couleurs car j'obtiens des bandes de couleurs ou des cercles concentriques de couleur ou d'autres effets non désirés. Comment forcer POV-Ray à utiliser plus de couleurs ?"
POV-Ray écrit toujours des images en couleurs vraies (avec 16777216 couleurs, c.a.d. 256 nuances de rouge, 256 nuances de vert et 256 nuances de bleu) (cela peut être changé en sortant en PNG ou en B/W TGA mais cela ne concerne pas la question).
Donc POV-Ray n'est pas coupable. Il utilise toujours la résolution maximale disponible dans le format du fichier image.
Ce problème arrive habituellement quand vous utilisez windows avec des couleurs 16 bits (seulement 65536 couleurs, le mode appelé 'hicolor') et ouvre l'image créée avec un programme qui n'analyse pas l'image. Elle est toujours en couleurs vraies, mais le programme est incapable de les montrer toutes, et ne s'occupe que de 65536 d'elles (le 'dithering' est une méthode qui "simule" plus de couleurs en mélangeant les pixels de deux couleurs adjacentes pour simuler les couleurs médianes).
Donc le problème n'est pas dans POV-Ray, mais dans votre visualiseur d'image. Même si POV-Ray montre une pauvre image lors du rendu, à cause de la résolution qui n'a pas assez de couleurs, l'image créée aura toute la palette.
"Quand je fais pivoter un objet, il disparaît de l'image ou se déplace très étrangement. Pourquoi ?"
Vous devez comprendre comment fonctionne la rotation dans POV-Ray.
Les objets tournent toujours autour des axes. Quand vous faites tourner, par exemple, de <20, 0, 0>, cela signifie que vous faites une rotation autour de l'axe x de 20 degrés (dans le sens des aiguilles d'une montre). Cela est indépendant de la position de l'objet : il tourne toujours autour de l'axe (qu'est ce que le centre de l'objet ? comment le positionnez-vous ?). Cela signifie que si l'objet n'est pas centré sur l'axe, il fera une orbite comme la Lune autour de la Terre (montrant toujours la même face à la Terre).
C'est un bon entraînement de définir tous les objets centrés sur l'origine (c.a.d. que son 'centre' est placé en <0, 0, 0>). Alors vous pouvez le faire tourner arbitrairement. Après cela, vous pouvez le placer correctement dans la scène. C'est une bonne idée de faire cela pour tous les objets, même si vous ne les faites pas tourner (parce que vous ne savez pas si vous n'allez pas les faire tourner un jour).
Et si, après tout, vous avez un objet très complexe, mais son centre n'est pas à l'origine, et vous voulez le faire tourner autour de son centre ? Alors vous avez à le déplacer sur l'origine, le faire tourner puis le ramener à sa place. en supposant que le centre de l'objet est en <10, 20,-30>; vous pouvez le faire tourner ainsi :
translate -<10, 20,-30> rotate <whatever> translate <10, 20,-30>
"Si je demande à POV-Ray de rendre une image carrée ou autre chose qui touche au ratio d'aspect, l'image de sortie est distordue. Que fais-je de mal ?"
Le problème est que la caméra est fixée sur un ratio d'aspect de 4/3, tandis que l'image que vous essayez de rendre a un ratio d'aspect de 1/1 (ou autre).
Vous pouvez fixer le ratio d'aspect avec le mot clé right dans le bloc caméra. La méthode classique pour placer le ratio d'aspect correct pour les dimensions de votre image est :
camera { right x*ImageWidth/ImageHeight (autres paramètres de la caméra...) }
Ce mot clé peut aussi être utilisé pour changer la main de POV-Ray (voir la question sur La main de Moray et de POV-Ray pour plus de détails).
Note : on pourrait penser "pourquoi POV-Ray ne fixe pas automatiquement le ratio d'aspect de la caméra selon la résolution de l'image ?".
Il y a une erreur dans cette question : cela assume que les pixels sont toujours carrés (c.a.d.que le ratio d'aspect des pixels est 1/1). La logique de ce comportement devient claire avec un exemple :
Supposons que vous dessinez une scène utilisant un ratio d'aspect normal de 4/3, comme d'habitude (comme 320x240, 640x480 et autres). Cette image est bonne pour une vue sur un écran 4/3 (comme c'est le cas chez tous les écrans familiaux).
Maintenant, vous voulez rendre cette image pour le démarage de Windows. La résolution de l'image de démarrage est de 320x400. Cela n'a pas un ratio d'aspect de 4/3 et les pixels ne sont pas carrés (les pixels ont un ratio d'aspect de 1/0.6 au lieu de 1/1). Maintenant, quand vous rendez votre image à la résolution de 320x400 avec POV-Ray et que vous l'affichez avec l'écran à cette résolution (comme il est lors de l'affichage de l'image de démarrage de windows), le ratio d'aspect sera correct donc l'image aura des proportions correctes (et elle ne sera tirée dans aucune direction).
Si vous avez changé le ratio d'aspect de la caméra à 320/400 (au lieu de l'habituel 4/3) vous n'aurez pas seulement une image différente (montrant des parties de la scène invisibles dans l'original ou cachant des parties visibles dans l'original), mais elle paraîtra étirée lors d'un affichage à la résolution d'écran de 320x400.
Donc, le ratio d'aspect de la caméra est le ratio d'aspect de l'image finale à l'écran, vue dans la résolution finale (qui peut ne pas être une résolution 4/3). Puisque l'écran a un ratio d'aspect de 4/3, cela est aussi le défaut pour la caméra.
Cela est le 'problème de surfaces coïncidentes' classique. Cela arrive quand deux surfaces occupent exactement la même place. Par exemple :
union { box {<-1, 0,-1>, <1,-2, 1> texture {Texture1}} box {<-2, 0,-2>, <2,-1, 2> texture {Texture2}} }
La surface du haut de la première boîte coïncide avec la surface du haut de la seconde boîte. Quand un rayon touche cette aire, POV-Ray doit décider quelle surface est la plus proche. Il ne peut pas car elles sont exactement à la même place. Le choix dépend des calculs numériques, des erreurs d'arrondi, des paramètres initiaux, de la position de la caméra, etc, et varie de pixel en pixel, donnant ces pixels qui semblent "aléatoires".
La solution est de décider quelle surface vous voulez au-dessus, et de la déplacer un peu, ainsi elle dépasse la surface à éviter. Dans l'exemple, si vous voulez, par exemple, que la seconde boîte soit au-dessus, vous ferez quelque chose comme ceci :
union { box {<-1, 0,-1>, <1,-2, 1> texture {Texture1}} box {<-2, 0.001,-2>, <2,-1, 2> texture {Texture2}} }
Notez qu'un problème similaire apparaît quand une source de lumière est exactement sur une surface : POV-Ray ne peut pas calculer exactement si elle est en-dedans ou en-dehors de la surface, donc des pixels sombres (ombrés) apparaissent sur toute surface éclairée par cette lumière.
Les seules choses qui fonctionnent avec sky_sphere sont les pigments. Les textures et les finitions ne sont pas autorisées. Ne soyez pas découragés parce que vous pouvez utiliser les textures de stars.inc avec la méthode suivante :
Extrayez seulement la déclaration de pigment des textures déclarées. Par exemple :
texture { pigment {color_map {[0 rgb ...][.5 rgb ...][1.0 rgb ...]} scale ...} finish {...} }
devient :
pigment {color_map {[0 rgb ...][.5 rgb ...][1.0 rgb ...]} scale ...}
La raison de cela est que sky_sphere n'a pas de surface, ce n'est pas un objet. C'est seulement une version de l'arrière-plan qui extrait une couleur d'un pigment au lieu d'être une couleur unie. A cause de cela, les caractéristiques de normale et de finition, qui dépendent des caractéristiques de la surface d'un objet pour leur calcul, ne peuvent pas être utilisés. Les textures dans stars.inc ont été faites pour être appliquées sur une vraie sphère, et peuvent être utilisées comme ceci :
sphere { 0, 1 hollow // pour qu'il n'interfère pas avec un média de la scène texture {YourSkyTexture} scale 100000 }
POV-Ray peut seulement appliquer le filtre oui la transmission sur des images à palette de 8 bits 256 couleurs. Puisque la plupart des images .tga, .png et .bmp sont des 24 bits et 16 millions de couleurs, elles ne fonctionnent pas avec le filtre et la transmission. Si vous devez utiliser le filtre ou la transmission sur vos images, vous devez réduire la profondeur de la couleur à un format qui supporte les 256 couleurs comme le format image .gif.
Vous pouvez aussi vérifier les documentations de POV-Ray sur l'utilisation du canal alpha des fichiers .png si vous désirez des aires spécifiques transparentes.
"Mon isosurface ne se rend pas correctement : il y a des trous ou du bruit aléatoire ou des disparitions de grandes parts ou de la totalité de la surface."
La raison la plus commune pour ce type de phénomène avec les isosurfaces est un valeur de max_gradient trop basse. Utilisez evaluate pour faire calculer à POV-Ray un max_gradient correct pour l'isosurface (souvenez-vous de spécifier un max_gradient même quand vous utilisez evaluate ou sinon le résultat pourra être incorrect).
Quelque fois, une valeur trop grande de accuracy peut aussi poser des problèmes même si le max_gradient est ok. Si les précedentes modifications ne semblent pas aider, essayez aussi de baisser accuracy.
Souvenez-vous que la spécification d'un max_gradient trop haut pour une isosurface, bien qu'elle donne le bon résultat, est inutilement lent, aussi vous devez toujours calculer le max_gradient correct pour chaque isosurface créée.
Notez qu'il y a des fonctions pathologiques où ni max_gradient, ni accuracy aidera. Ces fonctions ont habituellement des discontinuités ou des propriétes se comportant mal. Avec elles vous devez trouver une solution qui donne le meilleur rapport qualité/vitesse. Les isosurfaces fonctionnent mieux avec des fonctions qui donnent des surfaces adoucies.
| 2.4.3 Autres choses en relation |