vers l'index général de l'aide
vers la page générale des motifs
object est un motif qui permet de distinguer l'intérieur et l'extérieur d'un objet. Il prend en paramètre un objet ou l'identifiant d'un objet déclaré, puis, à l'instar de checker, une liste de 2 couleurs, pigments, textures, etc.... (en fonction de l'endroit où il est déclaré). Le premier paramètre de la liste est utilisé pour tous les points en dehors de l'objet, le second pour tous les points à l'intérieur de l'objet. Attention à la syntaxe un peu particulière de ce motif (c'est un motif à liste):
// utilisez ce code à l'intérieur d'une déclaration de texture, pigment, ... object { // le motif lui-même object { ... } | identificateur // déclaration d'un objet, ou utilisation d'un objet dèjà déclaré param_ext, param_int // une liste de 2 couleurs, textures... }
Le motif onion représente des sphères concentriques (toutes centrées à l'origine). Entre chaque sphère, la valeur du motif varie linéairement de 0 a 1. Cette valeur représente en fait la partie décimale de la distance entre l'origine et le point d'évaluation.
MegaPOV
pigment_pattern { PIGMENT }
pigment_pattern permet de bénéficier de toute la puissance de description d'un pigment pour créer un nouveau motif (pattern). Pour définir la valeur du motif en un point, il prend en fait la couleur du pigment en ce point (indépendemment des informations transmit et filter), la transforme en niveau de gris (par la formule 0.297*r + 0.589*g + 0.114*b) et voila !
Cela peut permettre, entre autres, de définir soit-même de nouvelles formes d'ondes:
// Définition du pigment à évaluer #declare MonBozo = pigment { bozo color_map { [0.15 rgb 0.00] [0.33 rgb 0.66] [0.66 rgb 0.33] [0.85 rgb 1.00] } } // Définition de plusieurs pigments #declare MonBozoNoirEtBlanc = pigment { pigment_pattern { MonBozo } color_map { CM_NoirEtBlanc } } #declare MonBozoPrefere = pigment { pigment_pattern { MonBozo } color_map { CM_Preferee } }
Evidemment, cet exemple pourrait être réalise avec de simples color_map, mais MonBozo peut être défini comme n'importe quel pigment, y compris avec image_map, ou des pigments imbriqués (pigment_map).
planar déploie ses valeurs en fonction de l'éloignement du plan x-z. Pour tous les points de ce plan, le motif renvoie la valeur 1. Puis, la valeur retournée décroit linéairement jusqu'à une distance d'une unité où il atteint la valeur 0. Partout au-delà, le motif prend la valeur 0.
polarical renvoit la lattitude du point par rapport a l'axe y (axe Nord-Sud). Pour le Pole Sud (lattitude 90 degres sud, axe y, avec y negatif), la valeur renvoyée est 0, pour l'équateur (lattitude 0 degre, plan x-z), la valeur renvoyée est .5, pour le Pole Nord (lattitude 90 degres nord, axe y, avec y positif), la valeur renvoyée est 1.
note : les explications qui suivent sont valables pour MegaPOV 0.6, mais il est hautement probable (et même certain) que la syntaxe changera dans les versions suivantes.
proximity retourne une valeur dépendante de la distance entre le point d'évaluation et la surface d'un objet. À la surface de cet objet, le motif retourne 0, et au fur et à mesure de l'éloignement, la valeur retournée augmente. Il y a plusieurs paramètres pour contrôler le comportement du motif:
proximity { object {...} | declaration, décimal // l'objet utilisé pour le motif, et la distance // pour laquelle le motif renvoit la valeur 1. samples Entier // nombre d'echantillons utilisés pour le calcul sample_bailout Entier // nombre max. d'échantillons pris sample_weighting Vecteur // modification de la distribution des échantillons max_density Décimal // valeur max. renvoyée par le motif type 0|1|2|3 // méthode de calcul de la distance method 0|1|2|3 // méthode d'échantillonage sides 0|1|2 // détermination de quel coté de l'objet l'évaluation est faite }
Le premier paramètre (obligatoire) est l'objet utilisé pour l'évaluation de la distance. Il est suivi par une virgule, puis un nombre décimal qui détermine à quelle distance de la surface de l'objet le motif renvoie la valeur 1. La distance par défaut est 1 unité. Les autres paramètres sont les suivants:
samples. L'évaluation du motif se fait en "lançant" des rayons dans plusieurs directions, en vérifiant s'il y a une intersection avec l'objet, puis en calculant la distance entre le point d'évaluation et le point d'intersection. samples détermine combien d'intersections on doit trouver pour pouvoir évaluer le motif. La valeur par défaut est 5. Evidemment, plus ce paramètre est élevé, plus l'évaluation sera précise, et plus le temps de calcul sera long (surtout pour des objets complexes, comme une isosurface).
sample_bailout permet de limiter le nombre total de rayon lancés, au cas où on trouverait difficilement le nombre d'intersections spécifé par samples. Cela écarte le risque de tomber dans une boucle infinie. Si ce paramètre n'est pas spécifié, il prend 5 fois la valeur de samples.
Le vecteur sample_weighting permet de modifier la direction des rayons lancés pour l'échantillonnage. Ce vecteur est en fait additionné à la direction de l'échantillon avant que celui-ci soit tracé. Cela a pour effet de lancer plus de rayons dans une direction donnée, ce qui permet, si ce vecteur est bien choisi, d'obtenir une valeur plus précise avec moins d'échantillons. Un vecteur d'une grande amplitude emmènera la majorité des échantillons dans sa direction, alors qu'un vecteur de petite longueur aura moins d'effets.
max_density est la valeur maximale que pourra renvoyer le motif. Il sera de bon ton de lui donner la valeur 1, comme pour tout bon motif qui se respecte.
type détermine la manière dont la distance est calculée. Il y a pour l'instant
4 types de calcul:
1/(1+pow(distance, exposant))( pow(distance, exposant) représente "distance" à la puissance "exposant").
Attention: le type 2 s'autodétruira dans quelques versions si aucune utilisation pratique ne lui est trouvée...
method détermine la méthode de lancer de rayon utilisée. Il y en a 3:
Attention: la méthode 1 ne semble pas toujours bien fonctionner... De toutes façons, les autres méthodes sont plus sûres pour trouver une intersection...
sides indique de quel(s) côté(s) le motif doit être évalué. Il y a 3 possibilités:
L'exemple ci-dessous montre le déploiement de proximity pour un demi-tore.