3.3.4 L'objet isosurface

Les détails sur tout ce qui peut être fait avec l'objet isosurface ont été vus dans le cours sur l'isosurface. Ici nous ne verrons que les bases de la syntaxe :

isosurface {
	function { FUNCTION_ITEMS }
	[contained_by { SPHERE | BOX }]
	[threshold FLOAT_VALUE]
	[accuracy FLOAT_VALUE]
	[max_gradient FLOAT_VALUE]
	[evaluate P0, P1, P2]
	[open]
	[max_trace INTEGER] | [all_intersections]
	[OBJECT_MODIFIERS...]
}

Les valeurs par défaut sont :

contained_by : box {-1, 1}
threshold : 0.0
accuracy : 0.001
max_gradient : 1.1

function { ... } Cela doit être spécifié et doit être le premier élément de la déclaration isosurface. Ici vous placez toutes les fonctions mathématiques qui décriront la surface.

contained_by { ... } Le contained_by 'objet' limite l'aire d'échantillonnage de POV-Ray pour la surface de la fonction. Ce conteneur peut aussi bien être une sphère ou une boîte, chacun d'eux utilisant la syntaxe standard de POV-Ray. Si ce n'est pas spécifié, une box {<-1,-1,-1>, <1, 1, 1>} sera utilisée par défaut.

contained_by {sphere {CENTER, RADIUS}}
contained_by {box {CORNER1, CORNER2}}

threshold Cela spécifie la force, ou la substance à donner à isosurface. La surface apparaît quand la valeur de function est égale à la valeur de threshold. Le seuil par défaut est 0.

function = threshold

accuracy La méthode de recherche de l'isosurface est une méthode de subdivision récursive. Cette subdivision est active jusqu'à ce que la longueur de l'intervalle, à laquelle POV-Ray trouve un point de surface, est plus petite que celle spécifiée par accuracy. La valeur par défaut est 0.001.
De plus petites valeurs donnent des surfaces plus précises, mais c'est plus long à rendre.

max_gradient POV-Ray peut trouver le premier point d'intersection d'un rayon et de isosurface de toute fonction continue si le gradient maximum de la fonction est connu. Pour cela vous pouvez spécifier un max_gradient pour la fonction. La valeur par défaut est 1.1. Quand le max_gradient utilisé pour trouver le point d'intersection est trop haut, le rendu ralentit considérablement. Quand c'est trop bas, des artefacts et des trous peuvent apparaître sur l'isosurface. Quand c'est vraiment trop bas, la surface n'est plus visible. Tandis qu'il rend l'isosurface, POV-Ray enregistre les gradients trouvés et affiche une alarme si ces valeurs sont plus hautes ou plus basses que celle spécifiée par max_gradient:

Warning: The maximum gradient found was 5.257, but max_gradient of the isosurface was set to 5.000. The isosurface may contain holes! Adjust max_gradient to get a proper rendering of the isosurface.
Warning: The maximum gradient found was 5.257, but max_gradient of the isosurface was set to 7.000. Adjust max_gradient to get a faster rendering of the isosurface.

Pour les meilleures performances, vous devez spécifier une valeur proche du gradient maximal réel.

evaluate POV-Ray peut aussi adapter dynamiquement le max_gradient utilisé. Pour activer cette technique, vous devez spécifier le mot clé evaluate suivi de trois paramètres :

Dans ce cas, POV-Ray commencera avec la valeur P0 de max_gradient et le changera dynamiquement pendant le rendu en utilisant P1 et P2. Dans le processus d'évaluation, les paramètres P1 et P2 sont utilisés dans les fonctions quadratiques. Cela signifie que la surestimation augmente plus vite avec des valeurs hautes, et que l'atténuation évolue plus vite avec des valeurs basses. Aussi, il peut y avoir des artefacts et des trous avec un max_gradient dynamique.

Si vous n'êtes pas sûr des valeurs à utiliser, commencez sans evaluate pour obtenir une valeur pour max_gradient. Ensuite, vous pouvez l'utiliser avec evaluate comme ceci :

Quand il y a des artefacts/trous dans l'isosurface, augmenter un peu le min_factor et/ou P2. Exemple : quand le premier passage donne un max_gradient de 356, commencez avec

#declare Min_factor = 0.6;
isosurface {
	...
	evaluate 356*Min_factor, sqrt(356/(356*Min_factor)), 0.7
	// evaluate 213.6, 1.29, 0.7
	...
}

Cette méthode est seulement une approximation de ce qui se fait en interne, mais cela donne des vitesses de rendu plus élevées avec la majorité des isosurfaces.

open Quand l'isosurface n'est pas entièrement contenue par l'objet conteneur, il y aura une section de chevauchement. Quand cela se produit, vous voyez la surface du conteneur. Avec le mot clé open, cette section est ôtée. L'intérieur de l'isosurface devient visible.

Note : open ralentit la vitesse de rendu. Aussi, il n'est pas recommandé de l'utiliser avec des opérations CSG.

max_trace Les isosurfaces peuvent être utilisées dans des formes CSG puisqu'elles sont des objets solides finis - si elles ne sont pas finies par elles-mêmes, il y a toujours la section de chevauchement avec le conteneur.
Par défaut, POV-Ray cherche seulement la première surface qui interompt le rayon. Mais lors de l'utilisation de isosurface dans les opérations CSG, les autres surfaces doivent être trouvées. Par conséquent, le mot clé max_trace doit être ajouté à la déclaration isosurface. Il doit être suivi d'un entier. Pour vérifier toutes les surfaces, utilisez le mot clé all_intersections.
Avec all_intersections POV-Ray continue sa recherche jusqu'à ce que toutes les surfaces soient trouvées. Avec un max_trace il ne poursuit pas sa recherche au-delà du nombre.

3.3.3 Les primitives solides infinies 3.3.3 Les primitives solides infinies 3.3.5 L'objet paramétrique 3.3.5 L'objet paramétrique