Cette section informe sur les différents types d'objets de l'Ayam et sur les interfaces graphiques de propriétés qui apparaissent dans la section des propriétés de la fenêtre principale si un seul objet et une seule propriété ont été sélectionnés.
Notez que les entrées "Help on object"
and "Help on property"
du menu principal dans Ayam peuvent être utilisées pour passer directement à la sous-section appropriée de cette partie de la documentation.
La documentation sur les propriétés standards (Transformations, Attributes, Material, Shader, and Tags) se trouve dans la section Standard Properties.
En outre, cette section contient des informations sur tous les types de balises, voir la section Tags.
Dans les sections suivantes, les caractéristiques générales des objets seront brièvement documentées dans des tableaux comme celui-ci :
Type | Parent of | Material | Converts to / Provides | Point Edit |
Object Type | No / Object Type+/∗ | Yes/No | N/A / Children / Object Type+/∗ | Yes/No* |
"crtOb"
interface de script ;Exemple :
Type | Parent of | Material | Converts to / Provides | Point Edit |
Revolve | NCurve | Yes | NPatch+ | No* |
"Revolve"
, c'est-à-dire qu'il peut être créé à partir de scripts en utilisant la commande "crtOb Revolve"
;Cette section donne un aperçu des types d'objets disponibles dans l'Ayam (puisqu'il y en a tant). Les types d'objets sont regroupés par application dans les sections suivantes.
Ces objets aident à organiser/structurer la scène ; la vue, la caméra, la lumière et les objets matériaux sont également énumérés ici (même s'ils méritent chacun une section distincte) :
Type | Parent of | Material | Converts to / Provides | Point Edit |
Root | View+ | No | N/A | No |
Level | Any+ | Yes | N/A / Children+ | No |
Clone | Any+ | No | Children+ | No* |
Mirror | Any+ | No | Children+ | No* |
Instance | No | No | Master | No* |
Select | Any+ | No | N/A / Children+ | No |
RiInc | Any | No | N/A | No |
RiProc | No | No | N/A | No |
View | NPatch | No | N/A | Yes |
Camera | No | No | N/A | Yes |
Light | No | No | N/A | Yes |
Material | No | N/A | N/A | No |
Ces objets servent de primitives géométriques dans les hiérarchies des CSG :
Type | Parent of | Material | Converts to / Provides | Point Edit |
Box | No | Yes | NPatch∗ | No* |
Sphere | No | Yes | NPatch+ | No* |
Disk | No | Yes | NPatch | No* |
Cone | No | Yes | NPatch+ | No* |
Cylinder | No | Yes | NPatch+ | No* |
Torus | No | Yes | NPatch+ | No* |
Paraboloid | No | Yes | NPatch+ | No* |
Hyperboloid | No | Yes | NPatch+ | No* |
Ces objets sont principalement utilisés comme objets enfants pour les outils de génération de surface :
Type | Parent of | Material | Converts to / Provides | Point Edit |
NCurve | No | No | N/A | Yes |
ICurve | No | No | NCurve | Yes |
ACurve | No | No | NCurve | Yes |
NCircle | No | No | NCurve | No* |
Ces objets permettent de manipuler directement des surfaces de forme libre :
Type | Parent of | Material | Converts to / Provides | Point Edit |
NPatch | NCurve+/ Level+ | Yes | PolyMesh | Yes |
IPatch | No | Yes | NPatch | Yes |
BPatch | No | Yes | NPatch | Yes |
PatchMesh | No | Yes | NPatch | Yes |
Ces objets modifient les courbes existantes ou créent de nouvelles courbes :
Type | Parent of | Material | Converts to / Provides | Point Edit |
ConcatNC | NCurve+ | No | NCurve | No* |
ExtrNC | NPatch | No | NCurve | No* |
OffsetNC | NCurve | No | NCurve | No* |
Ces objets créent des surfaces de forme libre à partir de courbes ou D'autres surfaces :
Type | Parent of | Material | Converts to / Provides | Point Edit |
Revolve | NCurve | Yes | NPatch+ | No* |
Extrude | NCurve+ | Yes | NPatch+ | No* |
Swing | NCurve∗ | Yes | NPatch+ | No* |
Sweep | NCurve∗ | Yes | NPatch+ | No* |
Birail1 | NCurve∗ | Yes | NPatch+ | No* |
Birail2 | NCurve∗ | Yes | NPatch+ | No* |
Skin | NCurve∗ | Yes | NPatch+ | No* |
Gordon | NCurve∗/ Level / NPatch | Yes | NPatch+ | No* |
Bevel | NCurve+ | Yes | NPatch | No* |
Cap | NCurve+ | Yes | NPatch | No* |
Text | No | Yes | NPatch+ | No* |
Trim | NPatch / NCurve+/ Level+ | Yes | NPatch | No* |
ConcatNP | NPatch∗/ NCurve∗ | Yes | NPatch+ | No* |
ExtrNP | NPatch | Yes | NPatch+ | No* |
OffsetNP | NPatch | Yes | NPatch+ | No* |
Ces objets complètent l'ensemble des fonctionnalités de Ayam et permettent d'inclure dans les scènes Ayam des objets modélisés dans les schéma de modélisation polygonale ou de subdivision :
Type | Parent of | Material | Converts to / Provides | Point Edit |
PolyMesh | No | Yes | SDMesh | Yes |
SDMesh | No | Yes | PolyMesh | Yes |
Ces objets créent/modifient D'autres objets quelconques à partir de scripts ou définissent des types d'objets entièrement nouveaux via le mécanisme de plugin d'objet personnalisé.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Script | Any+ | No | Any | No* |
MetaObj | MetaComp+ | Yes | PolyMesh | No |
MetaComp | No | No | N/A | No |
SDNPatch | No | Yes | PolyMesh | Yes |
SfCurve | No | No | NCurve | No* |
SDCurve | No | No | NCurve | Yes |
BCurve | No | No | NCurve | Yes |
Un certain nombre d'objets Script sont déjà distribués avec Ayam :
Type | Parent of | Material | Converts to / Provides | Point Edit |
Helix | No | No | NCurve | No* |
Spiral | No | No | NCurve | No* |
TCone | No | No | Hyperboloid | No* |
CBox | No | No | NPatch | No* |
TCircle | No | No | NCurve | No* |
DualSweep | NCurve* | No | NPatch | No* |
TSurf | NCurve* | No | NPatch | No* |
ExtrudeN | NCurve | No | NPatch | No* |
Polyhedron | No | No | PolyMesh | No* |
Ces objets aident à organiser/structurer la scène ; la vue, la caméra, la lumière et les objets matériaux sont également énumérés ici (même s'ils méritent chacun une section propre).
Il n'y a jamais qu'un seul objet Root dans la scène. Cet objet a la particularité de ne pas pouvoir être supprimé ou copié. L'objet Root contient des options de rendu globales à la scène comme les RiOptions, l'atmosphère et les ombres de l'image. De plus, toutes les fenêtres de vue actuellement ouvertes sont représentées comme des objets enfants de l'objet Root.
Si l'objet Root est caché, le petit système de coordonnées rouge/vert/bleu ne sera dessiné dans aucune vue.
L'objet Root facilite également la gestion de la géométrie des fenêtres par scène en utilisant les balises SaveMainGeom et SavePaneLayout (voir aussi les sections Balise SaveMainGeom et Balise SavePaneLayout).
Le tableau suivant énumère brièvement certaines caractéristiques de l'objet Root.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Root | View+ | No | N/A | No |
Les options de rendu de la scène sont documentées dans les sections suivantes.
Cette propriété comporte les options de l'interface RenderMan. Cette propriété permet de définir des options standard et spécifiques au BMRT. Dans un souci de concision, seule une brève description des options disponibles sera donnée ici. Veuillez vous référer à la documentation de l'interface RenderMan et à la documentation du BMRT pour des informations plus détaillées sur les options.
La propriété RiOptions se compose des éléments suivants :
"Width"
, "Height"
, si elle est supérieure à zéro, cette valeur sera utilisée pour la taille de l'image au lieu de la dimension correspondante de la fenêtre de visualisation, mais uniquement pour les opérations d'exportation de RIB réel, pas pour le QuickRender et pas pour les actions Render dans les fenêtres de visualisation.
Les actions QuickRender et Render utiliseront toujours les dimensions de la fenêtre de visualisation à la place.
"StdDisplay"
, si cette option est activée, une déclaration d'affichage standard sera écrite au RIB, qui ressemble à ceci :
Display "unnamed.tif" "file" "rgba"
Si cette option est désactivée, au moins une balise RiDisplay doit être ajoutée à l'objet Root (voir aussi la section
Balise RiDisplay), sinon le RIB exporté ne contiendra pas de déclaration RiDisplay.
Cette option n'a aucun effet sur les RIB créés par les actions QuickRender et Render dans les fenêtres d'affichage."Variance"
, maximum allowed variance of two pixel values.
The default 0.0 causes no setting in the RIB.
variance maximale autorisée de deux valeurs de pixel.
La valeur par défaut de 0.0 ne provoque aucun réglage dans le RIB.
Si la variance est > 0.0, aucun réglage d'échantillons de pixels ne sera écrit dans le RIB.
Diverses sources découragent l'utilisation de l'échantillonnage basé sur la variance, parce que, par exemple, le nombre d'échantillons réellement prélevés (et donc le temps de rendu) pourrait ne plus être facilement prévisible."Samples_X"
, "Samples_Y"
nombre d'échantillons prélevés par pixel."FilterFunc"
, fonction utilisée pour filtrer les valeurs finales des pixels."FilterWidth"
, "FilterHeight"
taille du filtre de pixel."ExpGain"
, Exposition"ExpGamma"
, Exposition Gamma"RGBA_ONE"
, "RGBA_MIN"
, "RGBA_MAX"
, "RGBA_Dither"
, préciser la quantification et les tremblements (dithering ???)"MinSamples"
, "MaxSamples"
, nombre minimum et maximum d'échantillons par pixel (pour l'échantillonnage basé sur la variance)."MaxRayLevel"
, nombre maximum de rayons récursifs."ShadowBias"
, distance minimale que doit avoir un objet pour pouvoir ombrer un autre objet."PRManSpec"
, permet de basculer le comportement de la fonction spéculaire : specular() du BMRT entre le compatible PRMan (par défaut) et le compatible avec la norme RI."RadSteps"
, nombre de pas de radiosité, la valeur par défaut 0 n'entraîne aucun calcul de radiosité à effectuer."PatchSamples"
, nombre minimum d'échantillons par patch pour calculer les facteurs de forme de la radiosité pour ce patch."Textures"
, "Shaders"
, "Archives"
et "Procedurals"
sont des chemins de recherche pour le moteur de rendu."TextureMem"
et "GeomMem"
déterminent la quantité de mémoire que le rendu (du BMRT) doit utiliser au maximum pour mettre en cache les textures et la géométrie tesselée. "Special/Tags/Add RiOption"
(voir la section
Menu spécial balises).
Les propriétés de l'imageur et de l'atmosphère vous permettent de définir des ombres pour l'objet Root. Veuillez vous reporter à la section Propriété Shader pour savoir comment traiter les interfaces graphiques des propriétés des ombres.
Les ombres de l'imageur sont exécutés une fois pour chaque pixel rendu, ils peuvent par exemple être utilisés pour définir une couleur d'arrière-plan ou une image de fond spécifique.
Les ombres d'atmosphère sont des ombres de volume qui peuvent être utilisés pour mettre en oeuvre des effets optiques atmosphériques globaux comme le brouillard.
L'objet Root apparaît dans la sortie RIB à différents endroits en tant que collection d'options de l'interface RenderMan et de l'imageur ainsi que des ombres d'atmosphère.
Les déclarations RIB exactes utilisées dépendent de la configuration de l'objet et du réglage des préférences "RIB-Export/RIStandard"
.
L'objet Root est le seul à prendre en charge les balises RiOptions, RiHider et RiDisplay (voir aussi la section Tags.
Chaque fenêtre de vue (Voir aussi la section Anatomie d'une vue) a un objet de vue correspondant en tant qu'objet enfant de l'objet Racine.
Les propriétés de l'objet de vue, les paramètres de la caméra, le type de vue et d'autres éléments liés à la vue peuvent être modifiés. Notez que la suppression de l'objet qui représente une vue, ne fermera pas la fenêtre de vue. Vous perdrez simplement un moyen de la configurer. S'il vous plaît, ne touchez pas aux objets d'une autre manière (par exemple, en les copiant), sinon vous risquez de vous attirer des ennuis !
Chaque vue est associée à une caméra virtuelle.
Le type de vue détermine le vecteur montant par défaut de cette caméra.
Si le type est "Top"
le vecteur montant correspond à l'axe Z du monde, sinon à l'axe Y du monde.
Le type de vue détermine en outre le plan d'entrée de la vue.
Les actions de modélisation interactive dans une vue sont limitées à ce plan d'entrée (à moins que la vue ne soit passée en modélisation locale ; voir aussi la section.
L'édition dans les espaces locaux).[∗]
Les plans d'entrée standard sont les suivants : Front – XY-plane, Side – ZY-plane, Top – XZ-plane, Trim – XY-plane.
Dans les vues en perspective, aucune action de modélisation interactive n'est possible, mais l'appareil photo peut être modifié, des objets peuvent être choisis et des points sélectionnés.
Les vues de type "Trim"
sont utilisées pour éditer les courbes de trim des objets NPatch uniquement.
Elles affichent ces courbes de trim comme des courbes NURBS normales lorsque le niveau actuel se trouve à l'intérieur d'un NPatch.
Les extensions du patch dans l'espace-paramètre sont également dessinées sous forme de rectangle en pointillés.
Les courbes Trim doivent se trouver entièrement à l'intérieur de ce rectangle.
Notez que le prélèvement d'objets ne fonctionne pas actuellement dans les vues de type "Trim"
.
Le tableau suivant énumère brièvement certaines caractéristiques de l'objet View.
Type | Parent of | Material | Converts to / Provides | Point Edit |
View | NPatch | No | N/A | Yes |
Les sections suivantes détaillent les propriétés de l'objet View.
Cette section décrit tous les éléments de la propriété "Camera"
:
"From"
est le point où se trouve la caméra (qui est attachée à la vue)."To"
est le point vers lequel la caméra regarde."Up"
est le vecteur ascendant de la caméra."Near"
définit le plan de découpage proche.
Une valeur de 0.0 signifie qu'une valeur par défaut (qui dépend du type de vue) doit être utilisée.
Sinon, Near doit toujours être positif pour les vues en perspective, et plus petit que Far."Far"
définit le plan d'écrêtage lointain.
Une valeur de 0.0 signifie qu'une valeur par défaut (qui dépend du type de vue) doit être utilisée.
Sinon, Far doit toujours être plus grand que Near."Roll"
définit un angle de rotation de la caméra autour de l'axe défini par les points To et From."Zoom"
est un facteur de zoom."Camera"
.
Cette section décrit les éléments de la propriété "ViewAttrib"
:
"Type"
spécifie le type de vue.
On peut choisir entre Front, Side, Top (tous parallèles), Perspective et Trim (à nouveau parallèles)."Width"
and "Height"
contrôlent la taille de la fenêtre de visualisation.
Il n'est actuellement pas possible de redimensionner les vues internes avec ces éléments."Redraw"
permet de redessiner automatiquement la vue.
Si cette option est désactivée, aucun dessin n'est effectué dans la vue tant qu'un Redraw explicite n'est pas demandé (à l'aide du menu Affichage ou du raccourci <Ctrl+d>
)."DrawingMode"
permet de spécifier le mode de dessin de la vue : "Draw"
dessine un cadre filaire, "Shade"
dessine des surfaces éclairées.
Notez que l'éclairage n'est en aucun cas une représentation exacte (ou même similaire) de l'information lumineuse telle que spécifiée avec Objets lumineux dans la scène.
Au lieu de cela, une seule source de lumière, située à l'origine de la caméra (un phare), sera utilisée.
"ShadeAndDraw"
combine des surfaces et des fils de fer.
"HiddenWire"
montre les fils de fer et les silhouettes cachés.
Voir aussi la section
Modes de dessin.
item>"DrawSel"
bascule le dessin des objets sélectionnés.
Si cette option est activée, seuls les objets sélectionnés actuels seront dessinés."DrawLevel"
bascule le dessin des objets du niveau actuel uniquement.
Si cette option est activée, seuls les objets du niveau actuel seront dessinés."Grid"
est la taille de la grille, 0.0 signifie aucune grille."DrawGrid"
bascule le dessin de la grille actuelle."UseGrid"
indique si la grille actuelle doit être utilisée par les actions de modélisation interactive.
Voir aussi la section
Les actions de modélisation.
"ModellingMode"
permet l'édition dans des espaces d'objets locaux.
Voir aussi la section
L'édition dans les espaces locaux.
"DrawBG"
contrôle si l'image de fond (spécifiée par l'option "BGImage"
ci-dessous) doit être dessinée.
Si un objet NPatch est présent en tant qu'enfant de l'objet View, l'image sera mappée sur cet objet au lieu de remplir l'arrière-plan complet de la fenêtre de vue."BGImage"
est le nom d'un fichier image TIFF, qui sera utilisé comme texture pour l'image de fond.
Ayam lira ce fichier image lorsque les modifications apportées à la propriété "ViewAttrib"
sont appliquées, mais relira également le fichier image si le rappel de notification de l'objet de vue est invoqué (par exemple, en utilisant l'entrée du menu principal "Tools/Force Notification"
)."Mark"
est le point marqué (en coordonnées mondiales) pour la rotation et l'échelle concernant les actions de modélisation."SetMark"
contrôle si les données des entrées "Mark"
ci-dessus doivent être utilisées comme nouvelles coordonnées de marque lorsque les modifications apportées à la propriété "ViewAttrib"
sont appliquées."EnableUndo"
permet de contrôler l'annulation des actions de la vue interactive, par exemple faire un panoramique ou zoomer une vue.
Si cette option est désactivée, ces actions ne seront pas enregistrées dans le système d'annulation et ne changent pas non plus l'état de changement de scène.Les objets de la vue agissent de manière particulière, lorsque certains objets sont déposés sur eux dans la vue arborescente :
Lorsqu'un objet Caméra est déposé sur un objet View, les paramètres de l'objet Caméra sont copiés sur l'objet View.
Lorsqu'un objet lumineux de type "Spot"
est déposé sur un objet View, la caméra de vue sera modifiée, de sorte que l'utilisateur regarde le long de la lumière pour voir quels objets de la scène sont éclairés par le spot (cela fonctionne mieux avec des vues en perspective qui ont une largeur et une hauteur égales).
Il est également possible de faire glisser directement des objets de la vue arborescente vers une fenêtre de vue : pour les objets géométriques, la vue effectue alors un zoom sur l'objet, pour les caméras et les sources de lumière, la caméra de vue sera modifiée comme si l'objet était déposé sur un objet de la vue arborescente (voir la description ci-dessus).[∗]
Les objets Camera sont utilisés pour enregistrer temporairement les réglages des vues. Par conséquent, ils n'ont que deux propriétés expliquées ci-dessus, voir les sections La propriété Camera et Propriété Attributes.
Le tableau suivant énumère brièvement certaines caractéristiques de l'objet Camera.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Camera | No | No | N/A | Yes |
Lorsqu'un objet View est déposé sur un objet Camera, les paramètres de la caméra de la vue seront copiés sur l'objet Camera.
Les objets Camera ne sont jamais exportés lors d'un export RIB.
Les objets Light représentent des sources de lumière.
Il y a actuellement quatre types de lampes différents disponibles dans Ayam :
"Point"
, "Distant"
, "Spot"
, et "Custom"
(voir aussi l'image ci-dessus).
Point, Distant, and Spotlights :
Ces sources lumineuses standard ont des paramètres bien définis qui seront affichés dans la propriété "LightAttr"
.
Veuillez vous référer à la documentation RenderMan pour plus d'informations sur ces sources lumineuses standard (voir la section
References).
Les sources de lumières personnalisées (Custom) :
Les sources lumineuses de type "Custom"
utilisent le nuanceur ci-joint.
Notez qu'Ayam essaie de deviner à partir des noms des nuanceurs les arguments pour dessiner la lumière.
Les noms "from"
et "to"
indiquent l'emplacement et la destination de la source de lumière.
Ces noms ne doivent pas être utilisés pour d'autres choses dans les nuanceurs de lumière.
Contrairement aux sources lumineuses définies dans l'interface RenderMan, les sources lumineuses Ayam sont toujours globales par défaut.
Cela signifie que, quelle que soit la place d'une source lumineuse dans la hiérarchie de la scène, elle éclairera toujours tous les autres objets (sauf si l'attribut "IsLocal"
est utilisé).
Notez que l'effet d'une source de lumière ne peut pas être prévisualisé dans les vues Ayam ombrées, actuellement. Cependant, il est possible d'estimer l'effet d'une source de lumière ponctuelle en la déposant simplement dans une fenêtre de vue en perspective ; la vue adaptera alors les attributs de la caméra (de, vers et zoom) de la vue pour montrer les objets éclairés par le spot.
Le tableau suivant énumère brièvement certaines caractéristiques de l'objet Light.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Light | Yes | No | N/A | Yes |
Le paramètre "Type"
détermine le type de la source de lumière.
Selon le type de la source lumineuse, la propriété de l'attribut de lumière contient différents ensembles de paramètres.
Les paramètres qui ne sont pas affichés ne seront pas utilisés lors de l'exportation de RIB, par conséquent.
Lorsque le type d'une source lumineuse est modifié, l'interface graphique de la propriété sera adaptée pour n'afficher que les options disponibles pour le nouveau type de source lumineuse.
Notez que cette adaptation se produit lorsque le bouton "Apply"
est utilisé.
"IsOn"
vous permet d'éteindre ou d'allumer la lumière.
La valeur par défaut est on.
"IsLocal"
contrôle si la source lumineuse doit éclairer uniquement des objets locaux (objets définis au même niveau dans la hiérarchie de la scène que l'objet source lumineuse ou en dessous) ou tous les objets de la scène.
Par défaut, tous les objets de la scène sont éclairés.
L'attribut "IsLocal"
est ignoré pour les lumières qui sont définies dans le niveau racine de la scène.
N'oubliez pas non plus que les ombrages contiendront toujours les ombres de tous les objets de la scène, quel que soit l'attribut "IsLocal"
de la source de lumière.
En utilisant l'attribut de lumière "Shadows"
vous pouvez déterminer si la source de lumière doit projeter des ombres.
La valeur par défaut est "off", pas d'ombres.
Notez que cette option n'activera pas les ombres par magie sur les moteurs de rendu qui créent des ombres par des ombrages.
Elle sera simplement interprétée par les moteurs de rendu de type raytracing comme BMRT.
Le paramètre "Samples"
détermine le nombre de fois qu'il faut échantillonner une source lumineuse de zone, indépendamment des échantillons de pixels, la valeur par défaut est 1.
Cet attribut n'est disponible que pour les lumières personnalisées.
"UseSM"
détermine si des ombrages doivent être créées et utilisées pour cette source de lumière.
La résolution de l'ombrage peut être déterminée par l'attribut "SMRes"
.
Si "SMRes"
est 0, une résolution par défaut de 256 par 256 pixels sera utilisée.
Ces options sont réservées aux moteurs de rendu qui ne prennent pas en charge les ombres tracées par RayTracing comme PRMan ou Aqsis.
Pour les lumières de type "Distant"
les attributs "Scale"
de la propriété "Transformations"
de l'objet lumineux peuvent être utilisés pour mettre à l'échelle la transformation de la caméra utilisée pour la création de l'ombrage correspondante.
Des valeurs de 1 pour "Scale_X"
et "Scale_Y"
créent un ombrage de taille 1 par 1 dans l'espace mondial.
Tous les autres paramètres qui peuvent apparaître dans la propriété "LightAttr"
sont les paramètres standard des sources lumineuses RenderMan standard : distant, point et spot :
"From"
et "To"
indiquent la position et la cible de la source lumineuse comme point dans l'espace.
Vous pouvez éditer les deux points en utilisant les actions d'édition de point standard (voir aussi la section
Les actions de modélisation).
"Color"
est la couleur de la lumière émise par la source lumineuse."Intensity"
est l'intensité de la lumière émise par la source lumineuse.
Notez que les points lumineux standard et les spots ont un décalage quadratique (avec la distance), qui nécessite de régler l'intensité à des valeurs assez élevées afin d'obtenir un certain effet d'éclairage (par exemple, environ 30 pour la distance standard de "From"
et "To"
d'un spot)."ConeAngle"
est l'angle du faisceau d'un spot lumineux."ConeDAngle"
(angle de cône delta) est l'angle qui détermine une zone de d'atténuation au bord du faisceau d'un spot lumineux."BeamDistrib"
(distribution du faisceau) détermine la manière dont la lumière se réparti dans le faisceau du spot.
Des valeurs plus élevées donnent des zones éclairées plus étroites.L'utilisation des ombrages nécessite l'activation du paramètre de préférence globale "RIB-Export/ShadowMaps"
.
En outre, pour chaque source de lumière pour laquelle un ombrage doit être créée, les attributs "IsOn"
et "UseSM"
doivent être activés.
Création automatique de ShadowMaps
Si le paramètre de préférence "RIB-Export/ShadowMaps"
est réglé sur "Automatic"
, Ayam créera une version spéciale du RIB à l'exportation, qui crée toutes les ombrages automatiquement lors du rendu.
Cela se fait en rendant la profondeur des images à partir de la position de chaque source de lumière qui projette des ombres.
Des ombres spéciales de sources lumineuses récupèrent ensuite ces images et calculent les ombres.
Cette approche implique que la scène est recalculée plusieurs fois.
Pour réduire la taille du RIB, les objets à rendre sont écrits dans un second fichier RIB nommé "<scene>.obj.rib"
.
Ce fichier est lu plusieurs fois à partir du RIB principal via "ReadArchive"
.
Le RIB contient plusieurs images qui peuvent également être rendues séparément si le numéro de l'image est connu.
Pour faciliter le choix du bon numéro de trame pour l'image (par exemple, pour ne rendre que l'image finale, lorsque seul un paramètre matériau a été modifié, et qu'aucune lumière de projection d'ombre n'a été déplacée et qu'aucune géométrie de projection d'ombre n'a été modifiée), un commentaire avec le numéro de la dernière trame (l'image) sera écrit comme dernière déclaration au RIB.
Comme plusieurs fichiers (RIB et ombrages) sont utilisés, il est suggéré de modifier le paramètre de préférence "RIB-Export/RIBFile"
en "Scenefile"
.
Cela supprimera la composante principale du chemin absolu des noms de fichiers afin que la scène exportée puisse être déplacée plus facilement d'un système à l'autre.
Ne pas effectuer le rendu directement depuis une fenêtre de visualisation vers l'écran lorsque l'option de préférence "ShadowMaps"
"RIB-Export"
est réglée sur "Automatic"
.
Votre moteur de rendu ne peut pas écrire de fichiers d'images lorsque qu'on utilise l'option de ligne de commande pour effectuer le rendu directement sur l'affichage (-d pour rendrib, ou -fb pour Aqsis).
Par conséquent, cela peut également empêcher l'écriture des ombres portées, de sorte que l'image résultante sera incorrecte, ou que le moteur de rendu ne rendra que l'ombre portée à l'écran et s'arrêtera tout simplement.
Création manuelle des ombrages
Si le paramètre de préférence "RIB-Export/ShadowMaps"
est réglé sur "Manual"
, la scène exportée ne rendra pas les ombrages mais s'attendra plutôt à ce qu'elles soient déjà présentes.
Elles peuvent être créées manuellement (d'où le nom "Manual"
) en utilisant les entrées du menu d'affichage "View/Create ShadowMap"
, "View/Create All ShadowMaps"
ou les entrées du menu principal "Special/RIB-Export/Create ShadowMap"
, "Special/RIB-Export/Create All ShadowMaps"
.
L'approche manuelle présente l'avantage que les ombrages ne seront pas recréées à chaque fois que la scène est rendue.
Types d'ombrages
Ayam supporte trois méthodes différentes pour la création d'ombrages pour certains types de sources de lumière : ponctuelle, distante et ponctuelle :
La méthode des points est utilisée avec les lumières de type "Point"
et les lumières personnalisées qui ont un argument d'ombrage nommé "from".
Six ombrages pointant dans toutes les directions possibles alignées sur l'axe et nommées "<rib>.point<num>_<dir>.shd"
(où "<rib>"
est lr nom du RIB, "<num>"
est le numéro de la source de lumière qui utilise les ombrages et "<dir>"
est l'un des "x+"
, "x-"
, "y+"
, "y-"
, "z+"
, ou "z-"
) qui seront créés.
La méthode distante est utilisée avec des lumières de type "Distant"
et des lumières personnalisées qui ont un argument d'ombrage nommé "from" et un autre nommé "to".
Un ombrage est créé et nommé "<rib>.dist<num>.shd"
.
Par défaut, la taille de l'ombrage est de 1 par 1 unités dans l'espace mondial, mais elle peut être adaptée en utilisant les attributs de transformation d'échelle de l'objet lumineux.
La méthode spot est utilisée avec des lumières de type "Spot"
et des lumières personnalisées qui ont les arguments d'ombrages nommés "from", "to", et "coneangle".
Un ombrage est créé et porte le nom "<rib>.spot<num>.shd"
.
La méthode spot utilise l'argument "cone angle" (et en plus l'argument "delta cone angle", s'il existe) pour déterminer la taille de l'ombrages dans l'espace mondial.
Si un objet lumineux de type "Spot"
, "Distant"
ou "Point"
est utilisé, Ayam change automatiquement le nom de l'ombre exporté en "shadowspot"
, "shadowdistant"
, et "shadowpoint"
respectivement.
De plus, l'ombre sera paramétrée pour utiliser les cartes d'ombres créées.
Si la source lumineuse est de type "Custom"
, aucun renommage et ajustement automatique de l'ombre n'a lieu.
Cela signifie que vous devez vous assurer que rendu d'ombre utilise réellement les ombres portées, en sélectionnant l'ombre adéquate et en la paramétrant en conséquence.
Voir la discussion ci-dessus pour les noms des fichiers de carte d'ombre.
Ces noms de fichiers, très probablement, devront être entrés comme paramètres d'ombre de lumière.
Par exemple, vous n'obtiendrez pas d'ombres si vous utilisez une source de lumière de type "Custom"
avec le rendu d'ombre normal "distantlight"
joint, même si Ayam est capable de créer les ombrages nécessaires.
Le rendu d'ombre normal "distantlight"
n'utilise tout simplement pas les ombrages.
Vous devez passer manuellement à un rendu d'ombre qui utilise les ombrages ("shadowdistant"
dans ce cas) pour obtenir réellement des ombres.
Mini tutoriel sur les ombrages
Voici un petit exemple de scène utilisant un ombrage :
"RIB-Export"
) et définir
"ShadowMaps"
to "Automatic"
."Transformations"
de la deuxième boîte."LightAttr"
."Spot"
. Appuyez sur "Apply"
."IsOn"
: Oui, "Intensity"
: 18.0, "UseSM"
: Oui, "ConeAngle"
: 45.0, "BeamDistrib"
: 3.0, "From"
: -2, 2, 2, "To"
: 1, 0, -1; laissez tous les autres paramètres à leur valeur par défaut."Type/Perspective"
)."View/Export RIB"
)."shadowmaps.ay"
, voir aussi l'image suivante de cette scène qui a été créée avec une lumière ponctuelle supplémentaire et Aqsis comme moteur de rendu :
Notez que pour Aqsis, vous devez ajouter une balise RiHider hidden,depthfilter,s,midpoint à votre objet Root si des ombrages sont utilisés. D'autres moteurs de rendu peuvent nécessiter un réglage supplémentaire en utilisant des balises RiOption de type shadow bias. Veuillez consulter la documentation de votre moteur de rendu pour savoir comment obtenir les meilleurs résultats en utilisant les ombrages.
Les sources lumineuses standard idéalisées communes "Point"
, "Distant"
et "Spot"
n'ont pas d'extension géométrique propre dans l'espace (sources ponctuelles)
Cela signifie que les ombres résultant de ces sources de lumière auront des bords nets qui ne semblent pas trop naturels.
Des ombres douces de bonne apparence peuvent être générées en utilisant des éclairages étendus.
Voir aussi l'image ci-dessous.
Les éclairages étendus peuvent être créés en plaçant simplement un objet unique comme objet enfant d'un objet lumineux "Custom"
qui a l'ombre "arealight"
attaché, c'est-à-dire que la hiérarchie de la scène ressemble à ceci :
+-AreaLight(Light)
\ AreaLightGeometry(Sphere)
Cet objet enfant détermine la géométrie (place et extension) de la source lumineuse.
D'après L. Gritz, les sphères et les cylindres fonctionnent mieux comme géométrie de la lumière pour le BMRT, en raison d'un code d'échantillonnage spécial.
An example:
"arealight"
."arealight.ay"
distribué avec Ayam, voir aussi les images suivantes de cette scène qui ont été créées avec BMRT 2.6 comme moteur de rendu :
Les objets Material sont utilisés pour attacher les attributs RenderMan et les ombres aux objets géométriques. Voir aussi l'image ci-dessus qui a été rendue avec BMRT 2.6 et utilise des matériaux avec les ombres suivantes, qui sont distribuées avec le rendu : wood2, ceramic, veinedmarble.
Tant que des objets géométriques sont liés à un objet matériau, cet objet matériau ne peut pas être supprimé.
Le tableau suivant énumère brièvement certaines capacités de l'objet Materiau.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Material | No | N/A | N/A | No |
En utilisant cette propriété standard et les attributs RenderMan spécifiques au BMRT, il est possible de définir des attributs RenderMan. Veuillez vous référer à la documentation de l'interface RenderMan et à la documentation du BMRT pour des informations plus détaillées sur les attributs spécifiques du RenderMan.
"Color"
, tla couleur de l'objet.
Si l'une des entrées est définie à une valeur négative (par exemple -1), la couleur ne sera pas du tout définie pour cet objet, c'est-à-dire qu'aucun appel RiColor ne sera émis lors de l'exportation."Opacity"
, l'opacité de l'objet, la valeur par défaut (255 255 255) signifie que l'objet est totalement opaque.
Si l'une des entrées est définie à une valeur négative (par exemple -1), l'opacité ne sera pas du tout définie pour cet objet, c'est-à-dire qu'aucun appel RiOpacity ne sera émis lors de l'exportation."ShadingRate"
, détermine la fréquence d'évaluation des ombres pour un échantillon."Interpolation"
, détermine comment les valeurs de retour calculées par les ombres sont interpolées à travers une primitive géométrique."Sides"
, détermine combien de côtés de la surface d'une primitive géométrique doivent être ombrés."BoundCoord"
, définit le système de coordonnées dans lequel le déplacement lié est exprimé."BoundVal"
, valeur de la limite de déplacement."TrueDisp"
, active ou désactive les déplacements réels.
Par défaut, désactivé."CastShadows"
, détermine comment l'objet projette des ombres : la valeur par défaut "Os"
signifie que l'objet projette des ombres en fonction de son opacité ; "None"
l'objet ne projette aucune ombre ; "Opaque"
l'objet est complètement opaque et projette des ombres ; "Shade"
l'objet a un modèle d'opacité complexe déterminé par son nuanceur de surface, qui est utilisé dans les calculs d'ombres."Camera"
, "Reflection"
, et "Shadow"
changent les attributs de visibilité.Ces propriétés vous permettent de définir des ombres pour l'objet matériau, veuillez vous référer à la section Propriété Shader pour des informations sur la manière de traiter les GUI de propriétés des ombres.
Les ombres de surface peuvent être utilisés pour coder de manière procédurale les modèles d'éclairage et les textures. Les ombres de déplacement peuvent déformer l'objet lors du rendu. Les ombres intérieures et extérieures sont appelées ombres de volume et peuvent être utilisés pour modifier des effets optiques spéciaux, en codant la façon dont la lumière est affectée lorsqu'elle traverse un objet.
La propriété MaterialAttr contient des attributs liés à la gestion des objets Matérial :
"Materialname"
indique le nom du matériau.
Notez que les noms de matériaux doivent être uniques dans une scène.
Si deux matériaux portant le même nom existent, seul le premier matériau créé avec ce nom est "enregistré" et peut donc être relié à des objets géométriques."Refcount"
indique combien d'objets géométriques sont connectés à ce matériau.
Notez que les objets géométriques connectés ou de référence ne doivent pas nécessairement exister dans la scène, ils peuvent tout aussi bien résider temporairement dans le presse-papiers des objets."Registered"
indique si ce matériau peut être connecté à des objets géométriques, voir la discussion sur les noms de matériaux ci-dessus.Lorsque des objets géométriques sont déposés sur un objet Material, ils seront reliés à cet objet Material.
Les objets matériaux n'apparaissent en sortie RIB que s'ils sont connectés à un objet géométrique (par exemple : Box).
Les déclarations RIB exactes utilisées dépendent de votre configuration et du réglage des préférences "RIB-Export/RIStandard"
.
Si tous les éléments de la propriété MaterialAttr sont laissés sur leurs valeurs par défaut, seules la couleur et l'opacité seront écrites dans le RIB :
RiColor(...);
RiOpacity(...);
Après que les éléments de la propriété MaterialAttr, la surface, le déplacement, les ombres intérieures et extérieures (s'i elles sont attachées au matériau) seront exportées, tous les paramètres des ombres seront correctement déclarés :
RiDeclare("Ka", "float");
...
RiSurface("Ka", 0.9, ...);
...
Après la description du matériau, les RiAttributs personnalisés et les coordonnées de texture des balises seront exportés.
Aucune tentative n'est faite pour réordonner ou trier les objets dans un niveau en fonction des matériaux qui leur sont attachés, ils seront plutôt exportés dans l'ordre de leur apparition dans le niveau et ainsi chaque objet avec un matériau sera également précédé d'une spécification complète du matériau comme décrit ci-dessus.
Voici un exemple complet de description d'un matériau avec le nuanceur de surface wood2 appliqué sur une sphère :
...
Color 0.862745 0.862745 0.862745
Opacity 1 1 1
Declare "Ka" "float"
Declare "Kd" "float"
Declare "Ks" "float"
Declare "roughness" "float"
Declare "ringscale" "float"
Declare "txtscale" "float"
Declare "lightwood" "color"
Declare "darkwood" "color"
Declare "grainy" "float"
Surface "wood2" "Ka" [1] "Kd" [0.75] "Ks" [0.4] "roughness" [0.1]
"ringscale" [15] "txtscale" [1] "lightwood" [0.686275 0.439216 0.247059]
"darkwood" [0.34902 0.219608 0.0784314] "grainy" [1]
Sphere 1 -1 1 360
...
Les objets Level peuvent être utilisés pour construire des hiérarchies d'objets et effectuer des opérations CSG.
Ayam ne propose pas de concept de couches, mais en regroupant les objets à l'aide de niveaux et des outils de masquage et d'affichage, la fonctionnalité des couches peut être émulée dans une certaine mesure.
L'organisation de la scène et le travail en niveaux augmentent également la vitesse de mise à jour de l'arbre des objets, car seuls le niveau actuel et ses sous-niveaux sont soumis à une mise à jour de l'arbre si quelque chose change dans la hiérarchie des objets.
Notez que les objets enfants d'un niveau héritent des transformations, des matériaux, des attributs et des ombres.
L'héritage des transformations, par exemple, signifie:
Si vous avez un patch NURBS dans un niveau qui est traduit en (10,0,0), l'origine du système de coordonnées locales du patch NURBS sera située à (10,0,0).
Si vous décidez de déplacer le patch d'une valeur de 5 dans la direction X en fixant une valeur correspondante dans la propriété Transformations de l'objet patch, le système de coordonnées locales du patch sera placé à (15,0,0) en coordonnées mondiales, c'est-à-dire que le point de contrôle (1,0,0) sera à (16,0,0).
Notez également que depuis lAyam 1.12, les objets de niveau fournissent leurs objets enfants à leurs objets parents sous forme de liste. Cela signifie que la hiérarchie suivante est désormais valable :
+-Skin
+-Level
| NCurve
| NCurve
| ICurve
\ NCurve
Toutes les courbes NURBS et les objets qui peuvent être convertis en courbes NURBS (dans cet exemple : l'ICurve) seront fournis à le revêtement par l'objet Level.
Les attributs de transformation du niveau seront ajoutés aux objets fournis.
Les objets qui ne fournissent pas le type souhaité seront ignorés en silence (sans notification).
Le tableau suivant énumère brièvement certaines capacités de l'objet Level.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Level | Any+ | Yes | N/A / Children+ | No |
Les niveaux n'ont pas beaucoup de propriétés spécifiques aux types d'objets, vous pouvez simplement modifier le type du niveau en utilisant l'attribut "Type"
.
Les niveaux de type "Level"
regroupent simplement les objets et héritent des attributs.
Les niveaux de type "Union"
, "Intersection"
, et "Difference"
sont utilisés pour construire les hiérarchies des CSG.
En outre, ils héritent d'attributs.
Notez qu'Ayam n'est actuellement pas en mesure d'afficher correctement les résultats des opérations CSG, tous les objets sont toujours dessinés complètement, même si une opération CSG en couperait des parties.
Toutefois, depuis Ayam 1.8, il existe un plugin capable de prévisualiser les résultats des opérations du CSG, voir aussi la section Aperçu CSG à l'aide du plugin AyCSG.
La hiérarchie des objets permettant de découper une partie d'une boîte à l'aide d'une sphère ressemble à ceci :
+-Level_of_Type_Difference(Level)
| Box
\ Sphere
Plus de deux objets peuvent être des arguments d'une opération de CSG :
+-Level_of_Type_Difference(Level)
| Box
| Sphere
\ Sphere
Dans cet exemple, les deux sphères découperaient des parties de la boîte.
De nouvelles primitives solides peuvent être créées avec des niveaux de type "Primitive"
.
+-Level_of_Type_Difference(Level)
+-Level_of_Type_Primitive(Level)
| | Sphere_blue
| \ Disk_red
\ Box_grey
Dans cet exemple, une sphère ouverte avec "ThetaMax"
180,0 (un hémisphère) est manuellement coiffée par un objet disque.
Les deux objets doivent être placés dans un niveau de type "Primitive"
car chaque objet seul est une surface ouverte et donc pas une primitive CSG valide.
Les deux objets qui forment la nouvelle primitive utilisent un matériau différent.
De plus, une boîte grise coupe une partie de l'hémisphère multicolore.
La hiérarchie des CSG ci-dessus est disponible sous forme de fichier de scène d'exemple "multicolcsg.ay"
.
Voir aussi cette image:
Notez qu'Ayam n'est pas en mesure de vérifier si votre nouvelle primitive conserve la règle de la proximité totale.
Par exemple, si le disque dans l'exemple ci-dessus ne recouvre pas totalement la sphère (cela se produit si le "ThetaMax"
du disque n'est pas 360.0 ou s'il n'est pas placé exactement sur la sphère), Ayam ne se plaindrait pas lors de l'exportation RIB.
L'image rendue présenterait cependant de graves erreurs.
En outre, il n'est pas nécessaire d'inclure les objets enfants normaux (par exemple une quadratrique avec l'attribut "Closed"
réglé sur on) des CSG Level dans les primitive Level pour l'exportation RIB.
Ceci est fait par Ayam automatiquement si nécessaire.
La représentation exacte d'un niveau dans la production de RIB dépend de son type.
Les objets de niveau normal apparaissent dans les sorties RIB comme des hiérarchies de transformation :
RiTransformBegin();
RiTranslate(...);
RiRotate(...);
RiScale(...);
«Children RIB output»
RiTransformEnd();
Les objets de niveau de type Union, Difference ou Intersection émettront en outre un appel à SolidBegin, et chaque enfant sera correctement déclaré comme primitive, par exemple :
RiTransformBegin();
«Level Transformations»
RiSolidBegin(RI_DIFFERENCE);
RiSolidBegin(RI_PRIMITIVE);
«Child #1 RIB output»
RiSolidEnd();
RiSolidBegin(RI_PRIMITIVE);
«Child #2 RIB output»
RiSolidEnd();
RiSolidEnd();
RiTransformEnd();
Le terme "instance" est malheureusement trompeur (et peut être très déroutant si vous êtes habitué à la terminologie de la programmation orientée objet), mais c'est le terme qui semble être utilisé et compris par la plupart des infographistes pour ce mécanisme. Un meilleur terme serait link, car un objet instance a les mêmes propriétés de base qu'un lien dans un système de fichiers Unix. Un lien n'est qu'un pointeur vers un fichier original, il en va de même pour un objet instance : c'est juste un pointeur vers un objet original (ici aussi appelé objet maître). Un lien peut être placé n'importe où dans le système de fichiers, un objet instance peut être placé n'importe où dans la hiérarchie de la scène, et en outre, il peut être transformé.
Si l'objectif initial des instances est d'économiser de la mémoire, dans le contexte des objets-outils, les instances servent également à diffuser des données géométriques à travers la hiérarchie de la scène pour faire dépendre les objets-outils les uns des autres (voir aussi la section Le concept de modélisation outils-objets).
Notez que dans le contexte des objets-outils, les objets d'instance sont les seuls objets qui font l'objet d'une deuxième série de dispositions.
Quelques règles simples pour l'instanciation :
Si la suppression d'un objet échoue, et que le message d'erreur se plaint que le compteur de référence n'est pas à zéro, alors la dernière règle est sur le point d'être violée.
Nettoyez le presse-papiers en utilisant le menu "Special/Clipboard/Paste (Move)"
et supprimez ou résolvez d'abord toutes les références.
Ayam peut également créer automatiquement des instances pour des scènes complètes (voir section Instanciations automatiques).
Pour trouver facilement l'objet maître d'une instance, il suffit de sélectionner l'instance, puis d'utiliser l'entrée du menu principal : "Edit/Master"
.
Le tableau suivant énumère brièvement certaines capacités de l'objet Instance.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Instance | No | No | Master | No* |
Les objets d'instance prennent en charge le type de balise "RP"
d'une manière particulière : si la propriété "Transformations"
est supprimée à l'aide d'une balise "RP"
, l'instance ne fournit pas aux objets un ensemble propre d'attributs de transformation (pour faciliter la construction de la hiérarchie avec par exemple les objets "ExtrNC"
/"ExtrNP"
, où seuls des pointeurs vers des objets déjà existants sont nécessaires et où l'on s'attend à ce que l'instance reflète exactement le maître, y compris ses attributs de transformation).[∗]
Les outils d'extraction de courbes/surfaces ajoutent automatiquement une telle balise aux instances qu'ils créent.
Pour créer manuellement une telle balise, sélectionnez l'objet Instance et entrez dans la console Ayam :
» addTag RP Transformations
Ce cas particulier d'une instance est parfois aussi appelé référence.
Cette section contient des informations supplémentaires sur les instances et sur ce qui leur arrive lorsqu'elles sont copiées et collées à l'aide du presse-papiers des objets.
Toutes les copies des objets d'instance, qui sont créées par le presse-papiers des objets, pointent toujours vers le même objet maître original. Il n'est donc pas possible de copier un objet maître et certaines de ses instances, de sorte que les nouvelles instances pointent vers le maître nouvellement créé.
Par exemple, lorsque les deux objets suivants sont copiés et recollés sur la scène
--NCurve <-----.
|
--Instance -----'
the following scene hierarchy results:
--NCurve <-----+-.
| |
--Instance -----' |
| !
--NCurve |
|
--Instance -------'
La nouvelle instance pointe toujours vers le master original et non pas vers la copie du master.
Néanmoins, il est possible de déplacer des ensembles complets de masters et leurs instances dans la hiérarchie de la scène en utilisant le glisser-déposer dans l'arborescence ou en utilisant le presse-papier de l'objet avec "Edit/Cut"
puis "Special/Clipboard/Paste (Move)"
.
Un objet Instance peut être converti en un objet ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Ce processus est également appelé résolution de l'instance.
Pour résoudre tous les objets d'instance dans une scène en objets normaux, également l'entrée de menu principal :
"Special/Instances/Resolve all Instances"
peut être utilisée.
L'exportation d'instances RIB n'utilise pas la fonction RiInstance de l'interface RenderMan, mais plutôt le mécanisme ReadArchive plus flexible.
Cela signifie que chaque objet principal de la scène sera écrit dans une archive séparée (fichier RIB) sur le disque, et que chaque instance fera en sorte que ce fichier d'archive soit lu lors du rendu du fichier RIB. Le fichier RIB qui en résulte n'est pas autonome : plusieurs fichiers doivent être transférés vers d'autres systèmes lorsque le rendu doit s'y produire.
Ce comportement peut être modifié en utilisant le paramètre de préférence d'exportation RIB "ResInstances"
: Si cette option est activée, toutes les instances seront temporairement résolues en objets normaux avant d'être exportées vers le RIB.
Le fichier RIB résultant sera alors autonome, mais probablement aussi beaucoup plus volumineux.
L'objet Clone permet de créer et de contrôler facilement un nombre quelconque d'instances d'un seul objet, ci-après appelé l'objet cloné. Les instances peuvent être transformées (chacune d'un certain montant exprimé comme la différence entre deux instances) ou placées sur une courbe de trajectoire (voir aussi l'image ci-dessus).
Si un deuxième objet est présent en tant qu'enfant de l'objet Clone, il est automatiquement traité comme une courbe de trajectoire (ou chemin). Le processus de placement des clones sur la trajectoire est très similaire à l'opération de balayage (voir aussi la section Les surfaces par glissements (Sweep)).
Ainsi, la hiérarchie d'objets par défaut d'un objet Clone ressemble à ceci :
+-Clone
| Cloned-Object
\ [Trajectory(NCurve)]
Si vous utilisez une courbe de trajectoire pour placer les clones, vous voudrez peut-être cacher l'objet cloné et y ajouter une balise "NoExport"
.
Sinon, l'objet original apparaîtra deux fois, sur la trajectoire et sur sa position normale, non transformée.
Notez que les attributs de transformation de l'objet cloné seront complètement écrasés lorsque vous placerez les clones sur la courbe de la trajectoire.
Si l'objet cloné possède des attributs d'échelle ou de rotation distincts, il doit être placé dans un objet de niveau comme celui-ci :
+-Clone
+-Level
|\ Cloned-Object with non-standard Scale/Rotation
\ Trajectory(NCurve)
Il n'est pas possible de créer des clones à partir d'objets qui ne sont pas des objets maîtres d'objets d'instance, par exemple, il n'est pas possible de cloner des objets Light ou des objets Material. Toutefois, (depuis Ayam 1.7), il est possible d'utiliser des instances comme objets paramètres.
Si un objet d'instance est utilisé comme objet cloné sur une trajectoire, il peut être placé dans un niveau et la balise "NoExport"
peut être ajoutée à l'objet de niveau (car l'ajout de balises aux objets d'instance est plus impliqué), voir la hiérarchie suivante pour un exemple :
+-Clone
+-Level with NoExport tag
|\ Instance
\ Trajectory(NCurve)
Depuis Ayam 1.20, la fonction de miroir de l'objet Clone est réalisée par le nouvel objet Mirror (voir aussi la section L'objet miroir (Mirror)).
L'installation de miroirs doit être intégrée à l'objet Clone auparavant.
Le tableau suivant énumère brièvement certaines capacités de l'objet Clone.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Clone | Any+ | No | Children+ | No* |
Les attributs suivants contrôlent le processus de clonage :
"NumClones"
est le nombre de clones à créer."Rotate"
n'est utilisé que si une courbe de trajectoire est présente.
Si elle est activée, tous les clones seront alignés selon la normale de la courbe de trajectoire.
Sinon, les attributs de rotation ne seront pas touchés lorsque le clone sera placé sur la trajectoire."Translate_X"
, "Translate_Y"
, "Translate_Z"
, "Rotate_X"
, "Rotate_Y"
, "Rotate_Z"
, "Scale_X"
, "Scale_Y"
, "Scale_Z"
, ces attributs contrôlent la transformation des instances créées par l'objet Clone.
Ces attributs spécifient les valeurs de différence entre deux instances : le clone "n+1"
est compensé par "Translate_X"
, "Translate_Y"
, et "Translate_Z"
du clone précédent "n"
.
Il est également tourné par "Rotate_X"
, "Rotate_Y"
, et "Rotate_Z"
et mis à l'échelle par "Scale_X"
, "Scale_Y"
, "Scale_Z"
par rapport au clone précédent.
Notez cependant que les attributs de transformation n'affectent pas le premier clone.
Les attributs de transformation sont également en vigueur si une courbe de trajectoire est présente, ils seront appliqués après le déplacement de l'instance sur la trajectoire et sa rotation.[∗]
Mode | Use Child Transform | Use CloneAttrib Transform | Use Clone Transform |
Clone | No | Yes | Yes |
Trajectory | Yes | Yes | Yes |
Mirror | Yes | N/A | Yes |
L'objet Clone peut être converti en objets ordinaires en utilisant l'entrée de menu principal "Tools/Convert"
.
Lors de la conversion, un objet Level sera créé, qui contient l'objet original et les clones.
Les objets clones apparaissent dans les sorties RIB comme un certain nombre d'objets réels, chacun avec des attributs de transformation différents.
Comme les objets originaux apparaîtront également dans la sortie du RIB, il est suggéré d'ajouter une balise "NoExport"
à l'original si le Clone est en mode trajectoire.
L'objet Miroir permet de créer et de contrôler facilement un nombre quelconque d'instances miroirs d'un certain nombre d'objets.[∗]
Le ou les objets originaux et leurs homologues en miroir seront fournis par l'objet Mirror à leur objet parent respectif (normalement, les objets outils ne fournissent pas leurs enfants non modifiés). En outre, l'ordre des objets miroirs sera inversé de sorte qu'il soit possible d'utiliser un seul objet Mirror (avec une ou plusieurs courbes NURBS comme enfants) comme objet paramètre de par exemple un objet Skin :
+-Skin
+-Mirror
\ NCurve
+-Skin
+-Mirror
| NCurve_1(NCurve)
| NCurve_2(NCurve)
\ NCurve_3(NCurve)
Le premier objet Skin dans l'exemple ci-dessus ne peut fonctionner que parce que l'objet Mirror fournit également la courbe NCurve non modifiée.
Le deuxième objet Skin ne peut fonctionner correctement que parce que l'ordre des objets fournis est inversé, de sorte qu'il voit les courbes dans l'ordre suivant : "NCurve_1"
, "NCurve_2"
, "NCurve_3"
, "Mirrored_NCurve_3"
, "Mirrored_NCurve_2"
, "Mirrored_NCurve_1"
.
Le tableau suivant énumère brièvement certaines capacités de l'objet Mirror.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Mirror | Any+ | No | Children+ | No* |
Les attributs suivants contrôlent le processus miroir :
"Plane"
permet de sélectionner le plan autour duquel la mise en miroir doit se produire (plan YZ, XZ ou XY).L'objet Mirror peut être converti en objet ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
Lors de la conversion, un objet Level sera créé, qui contient les objets originaux et les contreparties en miroir (ces dernières dans l'ordre inverse).
Les objets Mirror apparaissent dans la sortie RIB comme un certain nombre d'objets réels, chacun avec des attributs de transformation différents.
L'objet Select peut être utilisé dans des hiérarchies d'objets outils pour sélectionner un objet dans une liste d'objets fournis.[∗]
Il est également possible de sélectionner plusieurs objets et plages (même des plages décroissantes qui conduisent à des ordres inversés).[∗]
In the following example hierarchy, a single patch from multiple provided patches of the Sweep object (the swept surface, a bevel, or a cap) could be selected by the Select object and delivered upstream to the ExtrNC object.
+-Sweep
+-Revolve
+-ExtrNC
+-Select
\ Instance_of_Sweep(Instance)
Notez que cet exemple n'a qu'un but illustratif ; la hiérarchie présentée n'est pas exactement utile, car l'objet ExtrNC comporte une fonction de sélection intégrée.
Par conséquent, l'objet Select doit être utilisé dans des scénarios où une fonction de sélection n'existe pas ou est difficile à mettre en oeuvre, comme par exemple dans les scripts d'objets Script.
Le tableau suivant énumère brièvement certaines capacités de l'objet Select.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Select | Any+ | No | N/A / Children+ | No |
L'attribut suivant contrôle le processus de sélection :
"Indices"
, les valeurs de l'indice sont basées sur zéro.
Les indices multiples doivent être séparés par ","
, des plages peuvent être spécifiées comme ceci : "1-4"
, des plages inversées sont autorisées ("4-1"
) et créeront une liste d'objets d'ordre inversé.
L'index spécial "end"
(ou abrégé "e"
) désigne le dernier de tous les objets fournis.
Un index peut apparaître plusieurs fois, ce qui entraîne la livraison en amont de plusieurs copies de l'objet sélectionné.
La plage de l'index s'étend sur tous les objets fournis du type souhaité parmi tous les objets enfants.
Cela signifie que les objets fournis de plusieurs objets enfants différents de l'objet sélectionné peuvent être mélangés.
Les plages et les index syntaxiquement incorrects sont ignorés sans notification.
Exemples :
"0,2"
– fournit les premier et troisième objets fournis en amont ;"end0"
– fournit tous les objets fournis en amont dans l'ordre inverse ;"0,0,0"
– fournit trois copies du premier objet fourni en amont ;"0,4-end,1"
– fournit le premier, le cinquième (s'il y en un) jusqu'au dernier, et le deuxième objet en amont.Les objets sélectionnés n'apparaissent jamais dans la sortie RIB.
Les objets RiInc dessinent une simple boîte de délimitation avec des lignes pointillées à la place du contenu de l'archive ; ceux-ci ne feront partie de la scène que lorsqu'elle sera exportée vers un RIB. Voir aussi l'image ci-dessus. Si un objet RiInc a des enfants, ils seront dessinés au lieu de la boîte de délimitation. Cela permet de mieux rendre compte de la forme réelle des objets dans l'archive incluse.[∗] Comme la boîte de délimitation, les enfants n'apparaissent jamais non plus dans le RIB.
Notez que l'Ayam ne peut pas vérifier si la boîte de délimitation ou les enfants correspondent effectivement au contenu de l'archive incluse.
Notez également que les archives peuvent être créées facilement en utilisant l'entrée du menu principal
"Special/RIB-Export/Selected Objects"
.
Le tableau suivant énumère brièvement certaines capacités de l'objet RiInc.
Type | Parent of | Material | Converts to / Provides | Point Edit |
RiInc | Any | No | N/A | No |
Les attributs suivants contrôlent le processus d'inclusion :
"File"
le nom du fichier de l'archive RIB à inclure est spécifié."Width"
, "Height"
, et "Length"
déterminent la taille d'une boîte, qui sera dessinée comme une représentation géométrique de l'archive RIB (si aucun enfant n'est présent).Les objets RiInc sont exportés comme une déclaration simple :
ReadArchive <filename>
Les objets RiProc peuvent être utilisés pour inclure des objets de procédure ou des archives externes dans vos scènes. Contrairement aux archives incluses via un objet RiInc, ces archives ne seront incluses par le moteur de rendu RenderMan que lorsque la boîte de délimitation spécifiée est visible pour la caméra en cours.
Le tableau suivant énumère brièvement certaines capacités de l'objet RiProc.
Type | Parent of | Material | Converts to / Provides | Point Edit |
RiProc | No | No | N/A | No |
Les attributs suivants contrôlent l'objet RiProc :
"Type"
définit le type de l'objet de procédure qui est l'un des éléments suivants : "DelayedReadArchive"
, "RunProgram"
, ou "DynamicLoad"
."File"
, vous spécifiez le nom de fichier de l'archive RIB, du programme ou de l'objet dynamique partagé (selon le type de l'objet procédural)."Data"
des arguments supplémentaires peuvent être fournis aux objets procéduraux de type "RunProgram"
et "DynamicLoad"
."MinX"
, "MaxX"
, "MinY"
, "MaxY"
, "MinZ"
, et "MaxZ"
indiquent la taille de la boîte englobante des objets que la procédure créera ou que l'archive contient.Les objets RiProc sont exportés sous la forme d'une seule instruction
RiProcedural
.
Ces objets servent de primitives géométriques dans les hiérarchies des CSG.
C'est une boîte, centrée à l'origine du système de coordonnées de l'objet.
Le tableau suivant énumère brièvement certaines capacités de l'objet Box.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Box | No | Yes | NPatch∗ | No* |
Les paramètres suivants contrôlent la forme de la boîte :
"Width"
est la largeur de la boîte (taille de la boîte dans la direction de l'axe X du système de coordonnées de l'objet)."Length"
est la longueur de la boîte (taille de la boîte dans la direction de l'axe Z du système de coordonnées de l'objet)."Height"
est la hauteur de la boîte (taille de la boîte dans la direction de l'axe Y du système de coordonnées de l'objet).Un objet Box peut être converti en trois patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.[∗]
Voir la section
Boîte avec topologie cylindrique pour un objet Script convertit en un seul patch NURBS.
L'objet Box sera toujours exporté sous forme de six patchs bilinéaires.
c'est une sphère, centrée à l'origine du système de coordonnées de l'objet.
Le tableau suivant énumère brièvement certaines capacités de l'objet Sphere.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Sphere | No | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent la forme de la sphère :
"Closed"
indique si l'objet doit être automatiquement scellé (fermé par des surfaces bouchon correspondantes)."Radius"
est le rayon de la sphère, la valeur par défaut est 1."ZMin"
est la limite inférieure de la sphère sur l'axe Z, la valeur par défaut est -1."ZMax"
est la limite supérieure de la sphère sur l'axe Z, la valeur par défaut est 1."ThetaMax"
est l'angle de balayage de la sphère en degrés, la valeur par défaut est 360.Un objet Sphère peut être converti en patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
Cette conversion conserve tous les paramètres de la sphère.[∗]
Si la sphère est fermée, un objet Level englobant sera créé et les bouchons suivront la sphère dans l'ordre suivant : bouchon en forme de disque à zmin, bouchon en forme de disque à zmax, bouchon à theta 0, bouchon à thetamax.
Un objet Sphere apparait dans un RIB simplement sous la forme
RiSphere(...);
ou, si "Closed"
est activée et "ZMin"
, "ZMax"
, ou "ThetaMax"
ont d'autres valeurs que celles par défaut, sous la forme d'une hiérarchie CSG complexe comprenant au maximum deux sphères, deux cylindres et huit disques.
C'est un disque dans le plan XY, centré à l'origine du système de coordonnées de l'objet.
Le tableau suivant énumère brièvement certaines capacités de l'objet Disk.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Disk | No | Yes | NPatch | No* |
Les paramètres suivants contrôlent la forme du disque :
"Radius"
est le rayon du disque, la valeur par défaut est 1."ZMin"
déplace le disque le long de l'axe Z, la valeur par défaut est 0."ThetaMax"
est l'angle de balayage du disque en degrés, la valeur par défaut est 360.Un objet disque peut être converti en patch NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
T Cette conversion conserve tous les paramètres du disque.[∗]
L'objet Disk sera toujours exporté sous forme de simple disque :
RiDisk(...);
C'est un cône, centré à l'origine du système de coordonnées de l'objet, dont la base se trouve dans le plan XY.
Le cône standard est toujours pointu. Voir la section Cône tronqué pour un objet Script qui implémente un cône tronqué.
Le tableau suivant énumère brièvement certaines capacités de l'objet Cône.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Cone | No | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent la forme du cône :
"Closed"
permet d'indiquer si l'objet doit être automatiquement scellé (fermé par des surfaces bouchon correspondantes)."Radius"
est le rayon du cône à la base, la valeur par défaut est 1."Height"
est la hauteur du cône, la valeur par défaut est 1."ThetaMax"
est l'angle de balayage du cône en degrés, la valeur par défaut est 360.Un objet Cone peut être converti en patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
Cette conversion conserve tous les paramètres du cône.[∗]
Si le cône est fermé, un objet Level englobant sera créé et les bouchons suivront le cône dans l'ordre suivant : bouchon en forme de disque à la base, bouchon à l'theta 0, bouchon à l'thetamax.
L'objet Cône apparaît dans la sortie RIB comme simple
RiCone(...);
ou, si "Closed"
est activé et "ThetaMax"
a une valeur différente de la valeur par défaut, comme une hiérarchie complexe des CSG comprenant tout au plus un cône, un disque et deux polygones.
c'est d'un cylindre, centré à l'origine du système de coordonnées de l'objet.
Le tableau suivant énumère brièvement certaines capacités de l'objet Cylinder.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Cylinder | No | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent la forme du cylindre :
"Closed"
permet de déterminer si l'objet doit être automatiquement scellé (fermé par des surfaces bouchon correspondantes)."Radius"
est le rayon du cylindre, la valeur par défaut est 1."ZMin"
détermine l'emplacement Z de la base, la valeur par défaut est -1."ZMax"
détermine l'emplacement Z du sommet, la valeur par défaut est 1."ThetaMax"
est l'angle de balayage du cylindre en degrés, la valeur par défaut est 360.Un objet cylindrique peut être converti en patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
Cette conversion conserve tous les paramètres du cylindre.[∗]
Si le cylindre est fermé, un objet Level englobant sera créé et les bouchons suivront le cylindre dans l'ordre suivant : bouchon en forme de disque à zmin, bouchon en forme de disque à zmax, bouchon à theta 0, bouchon à thetamax.
L'objet cylindre apparaît dans la sortie RIB simplement comme
RiCylinder(...);
ou, si "Closed"
est activé et que "ThetaMax"
a une valeur différente de la valeur par défaut, il apparaît comme une hiérarchie CSG complexe comprenant au maximum un cylindre, deux disques et deux polygones.
C'est un tore, centré à l'origine du système de coordonnées de l'objet. Un tore est une forme de beignet, qui résulte du balayage d'un petit cercle (qui a été suffisamment déplacé le long de X) autour de l'axe Z.
Le tableau suivant énumère brièvement certaines capacités de l'objet Torus.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Torus | No | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent la forme du tore :
"Closed"
indique si l'objet doit être automatiquement scellé (fermé par des surfaces bouchon correspondantes)."MajorRad"
est le rayon du tore, mesuré depuis l'axe Z jusqu'au centre du petit cercle balayé, la valeur par défaut est 0,75."MinorRad"
est le rayon du cercle balayé, la valeur par défaut est 0,25."PhiMin"
détermine un angle pour limiter le cercle balayé, la valeur par défaut est 0."PhiMax"
détermine un angle pour limiter le cercle balayé, la valeur par défaut est 360."ThetaMax"
est l'angle de balayage du tore en degrés, la valeur par défaut est 360.Un objet torus peut être converti en patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
Cette conversion conserve tous les paramètres du tore.[∗]
Si le tore est fermé, un objet Level englobant sera créé et les bouchons suivront le tore dans l'ordre suivant : bouchon en forme de disque au thêta 0, bouchon en forme de disque au thêtamax, bouchon en forme d'anneau au phimin 0, bouchon en forme d'anneau au phimax.
L'objet Torus apparaît dans la sortie RIB simplement comme
RiTorus(...);
ou, si "Closed"
est activé et "PhiMin"
, "PhiMax"
, ou "ThetaMax"
ont des valeurs différentes de celles par défaut, il apparaît comme une hiérarchie CSG complexe comprenant au maximum un tore, deux disques et deux hyperboloïdes.
C'est un paraboloïde, centré à l'origine du système de coordonnées de l'objet.
Le tableau suivant énumère brièvement certaines capacités de l'objet Paraboloid.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Paraboloid | No | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent la forme du paraboloïde :
"Closed"
permet de déterminer si l'objet doit être automatiquement scellé (fermé par des surfaces bouchon correspondantes)."RMax"
est le rayon du paraboloïde à un Z de "ZMax"
, la base de la surface du paraboloïde, par défaut est 1."ZMin"
limite la surface du paraboloïde sur l'axe Z, doit être positif, la valeur par défaut est 0."ZMax"
limite la surface du paraboloïde sur l'axe Z et détermine la position Z de la base, doit être positive, la valeur par défaut est 1."ThetaMax"
est l'angle de balayage du paraboloïde en degrés, la valeur par défaut est 360.Un objet paraboloïde peut être converti en patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
Cette conversion conserve tous les paramètres du paraboloïde.[∗]
Si le paraboloïde est fermé, un objet Level englobant sera créé et les bouchons suivront le paraboloïde dans l'ordre suivant : bouchon en forme de disque à zmin, bouchon en forme de disque à zmax, bouchon à theta 0, bouchon à thetamax.
L'objet paraboloïde apparaît dans la sortie RIB comme
RiParaboloid(...);
Ou, si "Closed"
est activée et "ZMin"
, "ZMax"
, ou "ThetaMax"
ont des valeurs différentes de celles par défaut, il apparaît comme une hiérarchie CSG complexe comprenant au maximum un paraboloïde, deux disques et deux patchs bicubes.
C'est un hyperboloïde, centré à l'origine du système de coordonnées de l'objet. La forme de l'hyperboloïde sera créée en balayant une ligne spécifiée par deux points dans l'espace autour de l'axe Z. Ainsi, le disque, le cylindre et le cône sont des cas particuliers d'un hyperboloïde.
Le tableau suivant énumère brièvement certaines capacités de l'objet Hyperboloid.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Hyperboloid | No | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent la forme de l'hyperboloïde :
"Closed"
permet de déterminer si l'objet doit être automatiquement scellé (fermé par des surfaces de bouchon correspondantes)."P1_X"
, "P1_Y"
et "P1_Z"
, définissez le point un, la valeur par défaut est (0.1, -0.5)."P2_X"
, "P2_Y"
et "P2_Z"
, définissent le point deux, la valeur par défaut est (1.0, 0.5)."ThetaMax"
est l'angle de balayage de l'hyperboloïde en degrés, la valeur par défaut est 360.Un objet hyperboloïde peut être converti en patchs NURBS en utilisant l'entrée du menu principal "Tools/Convert"
.
Cette conversion conserve les paramètres de l'hyperboloïde.[∗]
Si l'hyperboloïde est fermé, un objet Level enveloppant sera créé et les bouchons suivront l'hyperboloïde dans l'ordre suivant : bouchon en forme de disque à P1, bouchon en forme de disque à P2, bouchon non plan à theta 0, bouchon non plan à thetamax.
L'objet hyperboloïde apparaît dans la sortie RIB comme
RiHyperboloid(...);
ou, si "Closed"
est activé et que "ThetaMax"
a une valeur différente de la valeur par défaut, comme une hiérarchie CSG complexe comprenant au maximum un hyperboloïde, deux disques et deux patchs bilinéaires.
Notez qu'en raison d'une erreur dans le BMRT qui est toujours présente dans la version 2.3.6, l'option "Closed"
ne fonctionne pas correctement lorsque "ThetaMax"
a une valeur différente de la valeur par défaut et que l'hyperboloïde n'a pas d'ombrage de déplacement (displacement shader).
En fait, l'utilisation d'une ombre de déplacement avec une quantité de déplacement de 0.0 est une solution de rechange à ce bug (trouvé par T. E. Burge).
Ces objets sont principalement utilisés comme objets enfants pour les outils de génération de surface.
L'objet NCurve est l'objet de base le plus utilisé pour la modélisation NURBS dans Ayam car les courbes NURBS sont utilisées pour construire des surfaces plus complexes de forme lisse en utilisant des opérations comme l'extrusion, la rotation, le balayage ou le revêtement. Les courbes NURBS peuvent être ouvertes ou fermées et sont utilisées pour émuler facilement les courbes de Bézier et B-Spline. En outre, pour faciliter la modélisation, elles prennent en charge plusieurs points, comme expliqué dans la section Points multiples.
Le tableau suivant énumère brièvement certaines capacités de l'objet NCurve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
NCurve | No | No | N/A | Yes |
Les objets NCurve peuvent être créés via la boîte à outils, le menu principal, plusieurs outils comme indiqué dans la section Outils de création de courbes, ou dans l'interface de scripting, voir aussi la section Création d'objets.
Les outils qui traitent les objets NCurve sont documentés dans Outils de modification des courbes.
La section suivante détaille la propriété de l'objet NCurve.
La première section de la propriété NCurveAttr contient des paramètres spécifiques à la courbe :
"Type"
: cet attribut remplace l'attribut "Closed"
depuis Ayam 1.9.
Le type "Open"
est le standard pour les courbes NURBS.
Si le type est "Closed"
, le premier et le dernier point de contrôle de la courbe seront rendus identiques.
Cela fermera la courbe mais sans garantie de continuité.
Une telle courbe fermée sera par exemple créée par l'outil Circle.
Il est important de savoir que des points de contrôle de début/fin identiques ne peuvent pas garantir à eux seuls que la courbe est fermée si le vecteur noeud n'est pas serré.
En cas de doute, utilisez l'outil de serrage ou des noeuds de type "NURB"
, "Chordal"
, ou "Centripetal"
.
Si le type est "Periodic"
, les derniers points de contrôle p de la courbe seront rendus identiques au premier p où p est le degré de la courbe (lire ordre-1).
Cela permettra de fermer la courbe avec une continuité garantie.
Notez que pour une spline cubique (ordre 4), vous aurez besoin d'au moins 6 points de contrôle pour la rendre périodique.
Il est important de savoir que les multiples points de contrôle ne peuvent pas garantir à eux seuls que la courbe est fermée si le vecteur noeud n'a pas d'extensions périodiques.
En cas de doute, passez la courbe au type de noeud "B-Spline"
, "Chordal"
, ou "Centripetal"
.
Vous pouvez également activer la création de points multiples en utilisant l'attribut "CreateMP"
(voir ci-dessous) pour les courbes fermées et périodiques afin que les actions d'édition d'un point unique modifient tous les points de contrôle multiples.
"Length"
est le nombre de points de contrôle de la courbe."Order"
est l'ordre de la courbe."Knot-Type"
en l'utilisant vous pouvez choisir entre les noeuds de type : "NURB"
, "Bezier"
, "B-Spline"
, "Custom"
, "Chordal"
, et "Centripetal"
.
Le type de noeud "NURB"
générera des valeurs de noeuds uniformément réparties allant de 0,0 à 1,0, où la multiplicité des noeuds aux extrémités sera d'ordre de la courbe (le vecteur oeud sera serré).
Cela garantit que la courbe touchera les points de contrôle aux extrémités de la courbe.
Un exemple de vecteur de noeuds de type "NURB"
pour une courbe de longueur 5 et d'ordre 4 serait :
{ 0.0 0.0 0.0 0.0 0.5 1.0 1.0 1.0 1.0 }
.
Le type de noeud "Bezier"
ne générera que des valeurs de 0,0 et 1,0.
Notez que l'ordre de la courbe doit être égal à la longueur de la courbe si des noeuds de type "Bezier"
sont générés.
Sinon, la séquence de noeuds générée est illégale.
La courbe résultante ressemble et se comporte exactement comme une vraie courbe de Bézier, en interpolant les points de contrôle aux extrémités, etc.
Un exemple de vecteur de noeuds de type "Bezier"
pour une courbe de longueur 5 et d'ordre 5 serait :
{ 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 1.0 }
.
Le type de noeud "B-Spline"
générera des valeurs de noeuds uniformément distribuées (sans noeuds multiples).
La courbe résultante ressemble et se comporte comme une courbe B-Spline.
Elle n'interpole pas les points de contrôle terminaux.
Un exemple de vecteur de noeuds de type "B-Spline"
pour une courbe de longueur 5 et d'ordre 4 serait :
{ 0.0 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1.0 }
.
Les types de noeuds "Chordal"
et "Centripetal"
génèrent des valeurs de noeuds dont la distribution reflète les distances des points de contrôle.
Cela ne fonctionne que s'il y a des noeuds libres dans le vecteur de noeuds, c'est-à-dire des noeuds qui ne sont pas soumis à un serrage ou à des extensions périodiques (la courbe NURBS par défaut avec 4 points de contrôle et ordre 4 n'en a pas).
Pour les courbes ouvertes, le vecteur noeud généré sera serré, et pour les courbes périodiques, les extensions périodiques appropriées seront créées.
Ces types de noeuds sont principalement utiles pour les courbes avec des points de contrôle inégalement répartis qui seront échantillonnés uniformément (dans l'espace paramétrique) plus tard et où l'on s'attend à ce que l'échantillonnage uniforme dans l'espace paramétrique se traduise par des points d'échantillonnage uniformément répartis dans l'espace des coordonnées.
Par exemple, si les courbes sont utilisées comme trajectoire Sweep, Birail, or Clone, ou si des surfaces sont créées à partir de ces courbes qui utilisent des coordonnées de texture implicites ou une stratégie de tessellation uniforme.
Les noeuds "Chordal"
et "Centripetal"
assureront une distribution plus uniforme des points de l'échantillon sur la courbe dans de tels cas (voir également l'image d'exemple ci-dessous).
Un exemple de vecteur de noeuds de type "Chordal"
pour une courbe ouverte de longueur 5 et d'ordre 4 serait :
{ 0.0 0.0 0.0 0.0 0.388889 1.0 1.0 1.0 1.0 }
.
L'image ci-dessous illustre l'utilisation de deux courbes avec soit des vecteurs de noeuds uniformes (NURB), soit des vecteurs de noeuds de type cordés (chordal) comme trajectoires de balayage. La courbe de balayage supérieure avec le vecteur noeud uniforme a des sections beaucoup plus inégalement distribuées/mises en forme et présente des problèmes d'auto-interception plus graves. Veuillez noter que les formes des courbes diffèrent légèrement.
"Knots"
permet d'entrer ses propres séquences de noeuds.
Notez que cela ne fonctionne que si le "Knot-Type"
(ci-dessus) est "Custom"
.
Sinon, le paramètre "Knots"
affiche simplement la séquence de noeuds générée automatiquement et les modifications des valeurs n'ont aucun effet.
Chaque vecteur de noeuds a des valeurs de noeuds l+o, où l est la longueur de la courbe et o son ordre. Les valeurs des noeuds doivent être strictement monotones (croissantes) et le nombre maximum de valeurs égales dans une ligne ne doit pas dépasser l'ordre de la courbe.
"CreateMP"
permet de déterminer si plusieurs points doivent être créés pour cette courbe.
Voir également la discussion dans la section
Points multiples.
"IsRat"
informe, si la courbe est rationnelle (a des valeurs de poids différentes de 1.0).[∗]"Tolerance"
est en fait la tolérance d'échantillonnage GLU, utilisée pour contrôler la qualité de l'échantillonnage lors du rendu d'une courbe.
Des tolérances plus faibles permettent d'obtenir une meilleure qualité mais conduisent aussi à un affichage plus lent.
Un réglage de 0.0 signifie que le réglage de préférence globale "Drawing/Tolerance"
doit être utilisé."DisplayMode"
détermine la façon dont la courbe doit être tracée.
La coque de contrôle (polygone de contrôle) ou la courbe ou une combinaison des deux peut être affichée.
Le paramètre "Global"
signifie que le paramètre de préférence global "Drawing/NCDisplayMode"
doit être utilisé."Apply"
!
Lorsque le type de courbe est modifié à l'aide de la propriété NCurveAttr, Ayam peut également devoir modifier la position de certains points de contrôle comme suit :
"Open"
à "Closed"
, le dernier point de contrôle est déplacé pour être identique au premier.
En outre, si le type de noeud actuel de la courbe est "B-Spline"
, il sera réinitialisé au type de noeud "NURB"
."Open"
ou "Closed"
à "Periodic"
, le dernier point de contrôle p est modifié pour être identique au premier p, où p est le degré de la courbe (ordre-1).
Par conséquent pour une courbe cubique (ordre 4), les trois derniers points de contrôle seront déplacés.
De plus, si le type de noeud actuel de la courbe est "NURB"
ou "Bezier"
il sera changé en "B-Spline"
automatiquement.
Ayam permet pour les courbes NURBS ce qu'on appelle les points multiples.
Un point multiple est constitué d'un certain nombre de points de contrôle différents qui ont les mêmes coordonnées.
Les points multiples seront dessinés avec une poignée plus grande que les points normaux (voir image ci-dessus).
Les actions de modélisation interactive à point unique (par exemple edit) modifieront toujours tous les points de contrôle qui composent un point multiple.
La sélection/le marquage d'un point multiple sélectionnera toujours tous les points de contrôle de ce point multiple.
Les actions de modélisation qui fonctionnent avec des points sélectionnés (par exemple translate) ne modifieront tous les points de contrôle d'un point multiple que s'il est complètement sélectionné.
Cet état de sélection est transmis par le dessin d'une poignée plus grande complètement remplie.[∗]
Les points individuels d'un point multiple peuvent être sélectionnés par
"CreateMP"
de la courbe,"selPnts"
interface de script"CVView"
Les objets NCurve n'apparaissent jamais directement dans les sorties RIB (seulement indirectement sous forme de Courbe Trim).
L'objet ICurve crée une courbe NURBS d'interpolation globale à partir de points de données n 3D ordonnés non rationnels. La courbe peut être ouverte ou fermée, l'ordre de la courbe peut être configuré, le paramétrage peut être adapté et les dérivées finales peuvent être spécifiées. Les versions ouvertes créent des points de contrôle NURBS n+2, et les versions fermées n+3.
L'image ci-dessus montre quelques courbes d'interpolation, celles de gauche sont d'ordre 3 (courbes quadratiques), celles de droite sont d'ordre 4 (courbes cubiques), celles du haut ouvertes, et celles du bas fermées.
La fidélité d'interpolation pour les courbes fermées a été réglée en ajustant les paramètres "SDLen"
et "EDLen"
(tous réglés à 0,2), voir aussi la discussion des paramètres ci-dessous.
Dans tous les modes de paramétrage, la moyenne des noeuds sera utilisée pour déterminer le vecteur noeud de la courbe d'interpolation.
Notez que l'axe de symétrie des courbes d'interpolation fermées croise le premier point de données (contrairement aux courbes d'interpolation ouvertes ou d'approximation fermées, où il croise le dernier et le premier point de données). Par exemple, les courbes d'interpolation fermées dans l'image de l'exemple ci-dessus sont effectivement toutes deux symétriques, mais l'axe de symétrie croise le premier et le troisième point de données et est donc tourné de 45 degrés.
Cet objet utilise le mécanisme de mise à disposition. Il se marque comme fournissant un objet NCurve (il crée et utilise de toute façon les courbes NURBS en interne) et tous les autres objets qui fonctionnent avec le mécanisme de fourniture (par exemple révolution, balayage, extrusion et revêtement) sont capables de fonctionner avec un objet ICurve au lieu d'un objet de type NCurve.
Le tableau suivant énumère brièvement certaines capacités de l'objet ICurve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
ICurve | No | No | NCurve | Yes |
Les objets ICurve peuvent être créés via la boîte à outils, le menu principal ou l'interface de script, voir aussi Création d'objets.
Les paramètres suivant contrôlent le processus d'interpolation :
"Type"
Le paramètre contrôle si la courbe interpolée doit être ouverte ou fermée."Length"
est le nombre de points de données à interpoler."Order"
détermine l'ordre souhaité de la courbe d'interpolation.
Si l'ordre spécifié est supérieur au nombre de points de contrôle utilisés par la courbe d'interpolation NURBS, alors l'ordre est modifié sans notification pour correspondre au nombre de points de contrôle."ParamType"
commute la paramétrisation entre "Chordal"
(default), "Centripetal"
, et "Uniform"
.
La méthode centripète génère une meilleure paramétrisation que la méthode par défaut (chordal) si les données d'entrée contiennent des virages serrés.
La méthode uniforme est disponible depuis Ayam 1.20 et génère des paramétrages moins bons (qui entraînent des torsions et des recoupements) dans le cas général, mais elle pourrait être utile dans certains cas limites."Derivatives"
permet de choisir entre les dérivées automatiques et manuelles.
Si les dérivées automatiques sont activées, la direction des dérivées sera déterminée à partir des premier, deuxième, avant-dernier et dernier points de données pour les courbes ouvertes et à partir des deuxième et avant-dernier points de données pour les courbes fermées.
En outre, le vecteur de dérivée respectif sera mis à l'échelle par "SDLen"
et "EDLen"
.
Si les dérivées manuelles sont activées, deux autres points éditables apparaissent dans les modes d'édition à point unique.
Ces points supplémentaires contrôlent directement les dérivées pour les points finaux de la courbe d'interpolation.
Les paramètres "SDLen"
et "EDLen"
n'influencent pas ces dérivées.
"SDLen"
et "EDLen"
sont utilisés pour contrôler la longueur de la première et de la dernière dérivée (si elle est générée automatiquement à partir des points de données, c'est-à-dire lorsque "Derivatives"
ci-dessus passe en automatique)."Tolerance"
et "DisplayMode"
.
"NCInfo"
informe sur la configuration réelle de la courbe NURBS créée."Mode"
, "Closed"
, et "IParam"
ont disparu depuis Ayam 1.16.
"Closed"
a été remplacé par "Type"
, "IParam"
par "SDLen"
et "EDLen"
, et le "Mode"
est maintenant déterminé automatiquement à partir de l'ordre souhaité.
Voir aussi l'outil correspondant pour créer des courbes NURBS par interpolation :
Outil d'interpolation (Interpolate).
La courbe d'interpolation peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets ICurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).
L'objet ACurve crée une courbe NURBS approximative avec des points de contrôle m à partir de n points de données 3D non rationnels ordonnés (voir image ci-dessus).[∗]
Le nombre de points de contrôle de sortie souhaité doit être inférieur ou égal au nombre de points de données à approximer (m≤n). L'algorithme d'approximation utilisé est de la variété des moindres carrés. Si le nombre de points de contrôle se rapproche du nombre de points de données, des torsions indésirables peuvent se produire dans la courbe de sortie.
Cet objet utilise le mécanisme de mise à disposition. Il se marque comme fournissant un objet NCurve (il crée et utilise de toute façon les courbes NURBS en interne) et tous les autres objets qui fonctionnent avec le mécanisme de fourniture (par exemple Revolve, Sweep, Extrude, et Skin) sont capables de fonctionner avec un objet ACurve au lieu d'un objet de type NCurve.
Le tableau suivant énumère brièvement certaines capacités de l'objet ACurve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
ACurve | No | No | NCurve | Yes |
Les objets ACurve peuvent être créés via le menu principal ou l'interface de script, voir aussi Création d'objets.
Les paramètres suivants contrôlent le processus d'approximation :
"Length"
détermine le nombre de points de données à approximer."ALength"
est le nombre de points de contrôle (distincts) à utiliser pour la courbe NURBS approximée.
Le nombre total de points de contrôle distincts doit être inférieur ou égal au nombre de points de données."Closed"
.
Pour les approximations fermées, le nombre total de points de contrôle sera "ALength + Order - 1"
.
Le tableau suivant illustre cette relation.
Length | ALength | Order | Closed | Output Length |
10 | 5 | 3 | No | 5 |
10 | 5 | 3 | Yes | 8 |
10 | 4 | 4 | Yes | 8 |
5 | 4 | 3 | No | 4 |
5 | 4 | 3 | Yes | 7 |
"Symmetric"
un résultat symétrique peut être appliqué (voir image ci-dessous), mais au prix d'un double temps d'exécution et d'un paramétrage légèrement pire.
"Order"
spécifie l'ordre souhaité de la courbe NURBS approximative.
Actuellement, seuls les ordres supérieurs à 2 sont pris en charge."Tolerance"
et "DisplayMode"
.
"NCInfo"
informe sur la configuration réelle de la courbe NURBS créée.Les courbes approximées peuvent être converties en courbes NURBS ordinaires en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets ACurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).
L'objet NCircle crée une courbe NURBS circulaire ou un arc circulaire dans le plan XY centré à l'origine avec un rayon et des angles de début/fin désignés (voir image ci-dessus).[∗]
Un cercle complet est créé en utilisant neuf points de contrôle rationnels dans une configuration rectangulaire, les arcs de cercle sont créés avec moins de points de contrôle. Voir la section Cercle NURBS avec base triangulaire pour un objet Script qui implémente un cercle avec moins de points de contrôle.
Pour inverser la courbe NURBS créée, les angles de début et de fin peuvent être utilisés, par exemple "TMin"
0,0, "TMax"
-360,0 pour un cercle complet inversé.[∗]
Le tableau suivant énumère brièvement certaines capacités de l'objet NCircle.
Type | Parent of | Material | Converts to / Provides | Point Edit |
NCircle | No | No | NCurve | No* |
Les paramètres suivants contrôlent la forme du cercle ou de l'arc.
"Radius"
est le rayon du cercle."TMin"
(ThetaMin) contrôle l'angle de départ du cercle ou de l'arc à créer.
Les valeurs négatives sont autorisées."TMax"
(ThetaMax) contrôle l'angle de fin du cercle ou de l'arc à créer.
Les valeurs négatives sont autorisées."Tolerance"
and "DisplayMode"
.
"NCInfo"
informe sur la configuration réelle de la courbe NURBS créée.La courbe circulaire/arc peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets NCircle n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).
Des types de courbes plus basiques sont disponibles via des plugins et des scripts, ce sont :
Ces objets modifient les courbes existantes ou créent de nouvelles courbes.
L'objet ConcatNC concatène tous les objets enfants (qui doivent être des courbes NURBS ou fournir des courbes NURBS) à une seule courbe NURBS. Comme l'objet ConcatNC fournit également une courbe NURBS, il est possible de l'utiliser comme objet enfant pour un autre objet ConcatNC (avec éventuellement des paramètres différents) ou comme objet paramètre pour un objet outil qui fonctionne avec des courbes NURBS telles que Revolve ou Extrude.
Le processus de concaténation fonctionne comme suit :
"FillGaps"
est activé, des courbes de raccordement seront créées pour chaque espace entre les courbes paramètres de l'objet ConcatNC.
Si les paramètres "Closed"
et "FillGaps"
sont activés, un raccord supplémentaire est créé pour fermer la courbe."Closed"
est activé, la courbe sera fermée.La séquence de noeuds de la nouvelle courbe concaténée sera du type "NURB"
ou un vecteur de noeuds personnalisé sera calculé (selon le réglage de "Knot-Type"
).
Si "Knot-Type"
est "NURB"
, la forme de la courbe concaténée sera différente des courbes paramètres si l'une des courbes paramètres a un vecteur de noeuds personnalisé avec des noeuds non équidistants.
Si "Knot-Type"
est "Custom"
, la forme des courbes des paramètres sera entièrement préservée, mais le vecteur noeud de la courbe concaténée contiendra alors des noeuds multiples internes.
Les attributs tels que le mode d'affichage et la tolérance pour la nouvelle courbe concaténée sont simplement tirés de la première courbe paramètres.
Pour obtenir les meilleurs résultats, seules les courbes serrées doivent être utilisées comme objets paramètres.
Le tableau suivant énumère brièvement certaines capacités de l'objet ConcatNC.
Type | Parent of | Material | Converts to / Provides | Point Edit |
ConcatNC | NCurve+ | No | NCurve | No* |
Les paramètres suivants contrôlent le processus de concaténation :
"Closed"
une courbe concaténée fermée peut être créée, même si les courbes des paramètres ne se touchent pas.
Si l'option "FillGaps"
(voir ci-dessous) est également activée, un remplissage supplémentaire sera créé pour la dernière et la première courbe enfant afin de fermer la courbe concaténée.
Si "FillGaps"
n'est pas activé, la courbe concaténée sera fermée avec le même algorithme qui est également utilisé par l'outil de fermeture de courbe (en changeant éventuellement sa forme)."Revert"
est activé, l'orientation de la courbe concaténée sera inversée."FillGaps"
crée des courbes de remplissage pour tous les écarts entre les courbes paramètres de l'objet ConcatNC.
Aucun remplissage ne sera créé si les points d'extrémité de deux courbes paramètres correspondent.
Les courbes de remplissage seront initialement créées à partir de quatre points de contrôle.
Les points de contrôle du remplissage extérieur sont les points d'extrémité de la courbe des paramètres et les points de contrôle du remplissage intérieur seront positionnés sur la tangente du point d'extrémité de la courbe des paramètres respectifs (voir également la discussion de "FTLength"
ci-dessous).
Ainsi, les transitions entre la courbe des paramètres et le remplissage doivent être au moins G1 continues.
L'élévation du degré sera utilisée pour élever le degré du remplissage à celui de la courbe concaténée ; cela peut introduire des points de contrôle supplémentaires dans le remplissage, mais sa forme ne change pas et la continuité de la transition n'est pas non plus affectée.
Si l'ordre de la courbe concaténée résultante est 2, seuls des remplissages simples, reliant les courbes paramètres par des lignes droites, seront générés.
"FTLength"
détermine la distance entre les points de contrôle du remplissage intérieur et leurs points d'extrémité respectifs.
Cette valeur peut être adaptée pour des écarts plus ou moins importants entre les courbes paramètres.
Si le paramètre "FTLength"
est 0,0, les remplissages C1 continus seront créés par interpolation de la courbe globale au lieu des remplissage G1 décrits ci-dessus."Knot-Type"
définit le type de noeud de la courbe concaténée :
"Knot-Type"
est "NURB"
un simple vecteur de noeuds avec des noeuds équidistants est généré, ce qui conduit à une courbe concaténée qui ne conserve pas exactement les formes des courbes originales si l'une des courbes paramètres a un vecteur de noeuds personnalisé avec des noeuds non équidistants.
En outre, toutes les transitions entre les courbes paramètres sont toujours lissées."Knot-Type"
est "Custom"
, le vecteur de noeud est composé à partir des vecteurs de noeud des courbes originales, et ainsi, leurs formes peuvent être entièrement préservées.
Notez que les discontinuités potentielles de n'importe quel niveau, même les écarts entre les courbes paramètres, sont également entièrement préservées.
Cependant, cela se fait au prix de multiples noeuds internes. Un problème avec ces noeuds est que la courbe résultante n'est pas différenciable à ces endroits, ce qui à son tour peut être problématique pour des opérations comme les balayages.
"NCInfo"
informe sur la configuration réelle de la courbe NURBS créée.La courbe concaténée peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets ConcatNC n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).
L'objet ExtrNC extrait une courbe NURBS d'un objet patch NURBS, pour l'utiliser comme objet paramètre pour d'autres objets outils, comme par exemple Revolve (voir image ci-dessus). Il fonctionne également avec les objets fournissant des patchs NURBS, de sorte que l'exemple de hiérarchie suivant est valable :
--NPatch
+-Skin
+-ExtrNC
|\ Instance_of_NPatch(Instance)
\ NCurve
Selon les paramètres de l'objet ExtrNC, l'objet Skin ci-dessus aura une frontière commune avec une frontière ou une isocourbe de l'objet NPatch.
Notez que l'utilisation d'un objet instance d'un autre objet de surface (comme montré dans l'exemple ci-dessus) est en fait la manière recommandée d'utiliser l'objet ExtrNC.
Par conséquent, l'entrée du menu principal "Tools/Create/ExtrNC"
créera automatiquement une instance de l'objet actuellement sélectionné et la déplacera vers l'objet ExtrNC nouvellement créé.
Comme la géométrie de la courbe extraite est entièrement définie par la surface maîtresse, les objets ExtrNC ne prennent pas en charge leurs propres attributs de transformation.[∗]
Notez que l'extraction de toute courbe ignore actuellement complètement les informations d'ajustage potentiellement présentes dans l'objet NPatch, c'est-à-dire que les courbes extraites ne seront pas ajustées.
Toutefois, il est possible d'extraire des limites de bordure complètes.[∗]
Le tableau suivant énumère brièvement certaines capacités de l'objet ExtrNC.
Type | Parent of | Material | Converts to / Provides | Point Edit |
ExtrNC | NPatch | No | NCurve | No* |
Le processus d'extraction est contrôlé par les attributs suivants :
"Side"
contrôle quelle courbe doit être extraite de la surface.
Les valeurs disponibles sont :
"U0"
, "Un"
: extrait la courbe frontière supérieure ou inférieure (sur la largeur) ;"V0"
, "Vn"
: extrait la courbe frontière gauche ou droite (le long de la hauteur) ;"U"
, "V"
extrait la courbe le long de la largeur et de la hauteur respectivement à une valeur paramétrique spécifiée (voir ci-dessous).[∗]"Boundary"
: extrait la courbe frontière complète de la pièce, en extrayant quatre courbes limites, en sélectionnant automatiquement la méthode appropriée en fonction du type de noeud de la surface (par exemple "U0"
ou "U"
), en inversant deux et en concaténant toutes les courbes non dégénérées au résultat.[∗]"Middle_U"
, "Middle_V"
: créé une courbe à partir des données du patch qui est l'"axe médian" (simplement le milieu de tous les points de contrôle d'un patch dans la dimension désignée).[∗]"Trim"
, toutes les courbes et boucles de compensation du patch actuel apparaîtront ici.[∗]
Notez que leur extraction ne donnera qu'une approximation de la représentation 3D de la frontière de coupe correspondante.
En particulier, la courbe extraite ne sera pas compatible avec la courbe d'ajustement.
La qualité de l'approximation peut être ajustée en utilisant "Parameter"
(voir ci-dessous)."Side"
est "U0"
, "Un"
, "V0"
, ou "Vn"
, le processus d'extraction ne fait que copier les points de contrôle des limites respectives, ce qui est rapide mais ne fonctionne correctement que pour les vecteurs de noeuds serrés.
Pour extraire une frontière d'une surface avec, par exemple, un vecteur de noeud B-Spline, "U0"
ne doit pas être utilisé, mais "U"
avec "Parameter"
réglé sur 0.0 et "Relative"
activé comme "U"
utilise un processus d'extraction différent, plus coûteux (qui implique l'insertion de noeuds)."Parameter"
contrôle la valeur paramétrique dans la direction U ou V dans l'espace paramètre de l'objet patch NURBS où la courbe doit être extraite ou la qualité d'approximation des courbes de coupe extraites.
Par conséquent, ce paramètre n'est utilisé que lorsque "Side"
est "U"
, "V"
ou "Trim"
.
La plage valide des valeurs du paramètre dépend des vecteurs de noeuds du patch NURBS."Drawing/Tolerance"
."Relative"
contrôle si la valeur paramétrique délivrée via "Parameter"
ci-dessus doit ou non être interprétée de manière relative.
Si elle est activée, une valeur paramétrique de 0,5 est toujours extraite du milieu du vecteur de noeud / surface, quelles que soient les valeurs réelles du noeud, et la plage valable pour "Parameter"
est donc de 0,0-1,0.[∗]"Revert"
inverse immédiatement la courbe extraite."CreatePVN"
contrôle la création d'une balise PV ou NT qui contient les normales ou les normales et tangentes à la surface.
Les normales et les tangentes seront dérivées des points de contrôle de la surface environnante.
Ces balises peuvent ensuite, par exemple, être utilisées pour contrôler une courbe de décalage 3D.
Notez que le tag sera présent uniquement sur les objets de courbe fournis/convertis."PatchNum"
permet de sélectionner un patch dans une liste de patchs livrés par exemple par un objet Extrude biseauté comme enfant de l'objet ExtrNC.
De cette façon, il est possible d'extraire une courbe d'un biseau ou d'une surface bouchon, par exemple, dudit objet Extrude."NCInfo"
informe sur la configuration réelle de la courbe NURBS extraite.Voir la section
Propriété NCurveAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
La courbe extraite peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets ExtrNC n'apparaissent jamais directement dans la sortie RIB (seulement indirectement sous forme de courbe Trim).
L'objet OffsetNC crée des courbes de décalage à partir de courbes NURBS planes en utilisant quatre algorithmes différents.[∗]
Voir aussi l'image ci-dessus.
La courbe de décalage correspondra toujours à la courbe originale en termes de type, de longueur, d'ordre et de noeuds. Aucune tentative n'est faite pour éviter les collisions ou les auto-interruptions. Les courbes rationnelles ne sont pas bien prises en charge.
Les algorithmes de décalage disponibles sont les suivants :
Point
décale chaque point de contrôle le long de la normale dérivée des points de contrôle environnants ; la courbe de décalage créée par cet algorithme peut s'approcher trop près de la courbe originale à des endroits fortement convexes dont les formes exactes ne sont pas non plus bien préservées,
Section
cet algorithme compense toutes les sections de polygones de contrôle dans la direction de leur normale et place de nouveaux points de contrôle aux points d'intersection des lignes définies par les sections décalées.
Cet algorithme permet d'éviter les auto-interruptions de la courbe de décalage, mais la courbe de décalage peut être trop éloignée de la courbe originale à des endroits fortement convexes ou concaves (régions à forte courbure),
Hybrid
cet algorithme compense deux fois la courbe à l'aide des algorithmes Point et Section, puis mélange les résultats de sorte que les mauvaises caractéristiques des deux algorithmes s'annulent mutuellement,[∗]
3DPVN
Depuis Ayam 1.18, il existe un quatrième algorithme de décalage, qui crée de véritables décalages tridimensionnels à partir de courbes non planes en utilisant une balise de variable primitive qui contient des informations normales pour la courbe (normales aux sommets).
Ces balises peuvent être créées manuellement ou automatiquement, par exemple lors de l'extraction de courbes à partir de surfaces à l'aide de l'objet"ExtrNC"
.
Comme la géométrie de la courbe de décalage est entièrement définie par la courbe maître et le paramètre de décalage, les objets OffsetNC ne prennent pas en charge leurs propres attributs de transformation.[∗]
L'algorithme de décalage "Bevel3D"
a été supprimé depuis Ayam 1.19.
Le tableau suivant énumère brièvement certaines capacités de l'objet OffsetNC.
Type | Parent of | Material | Converts to / Provides | Point Edit |
OffsetNC | NCurve | No | NCurve | No* |
Les paramètres suivants contrôlent le processus de compensation :
"Mode"
détermine l'algorithme à utiliser pour le processus de compensation.
< item>En utilisant "Revert"
le sens de la courbe de décalage peut être inversé."Offset"
détermine la distance entre la courbe d'origine et la courbe de décalage.
Les valeurs négatives sont autorisées."Tolerance"
et "DisplayMode"
.
"NCInfo"
informe sur la configuration réelle de la courbe NURBS créée.La courbe de décalage peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets OffsetNC n'apparaissent jamais directement dans la sortie RIB (seulement indirectement sous forme de courbe Trim).
Ces objets permettent de manipuler directement des surfaces de forme libre.
L'objet NPatch permet de modéliser les surfaces NURBS de manière directe, par exemple en modifiant les points de contrôle (voir aussi l'image ci-dessus). Notez que l'utilisation des objets NPatch doit être considérée comme le dernier recours, à n'utiliser que lorsque la flexibilité de tous les objets outils de création de surface NURBS sont pas insuffisants pour obtenir une certaine forme.
Comme les objets NCurve, les objets NPatch marquent leur dernier point de contrôle avec une petite flèche. Notez que la flèche pointe dans la direction V (hauteur).
Les objets NPatch supportent également le concept de points multiples, voir la section Points multiples pour plus d'informations à ce sujet.[∗]
Le tableau suivant énumère brièvement certaines capacités de l'objet NPatch.
Type | Parent of | Material | Converts to / Provides | Point Edit |
NPatch | NCurve+/ Level+ | Yes | PolyMesh | Yes |
Les objets NPatch peuvent être créés via la boîte à outils, le menu principal, certains outils tels que documentés dans la section Outils de création de surfaces, ou l'interface de script, voir aussi Création d'objets.
Les outils qui traitent les objets NPatch sont documentés dans la section Outils de modification des surfaces.
La première section de la propriété NPatchAttr contient les paramètres spécifiques des patchs :
"Width"
et "Height"
contrôlent les dimensions de la pièce.
Comme pour le paramètre "Length"
de l'objet NCurve, les modifications apportées à "Width"
ou "Height"
ajoutent ou suppriment des points de contrôle internes (c'est-à-dire que pour doubler la résolution d'un patch NURBS 4 par 4 dans la direction U, il faut modifier le paramètre "Width"
de 4 à 7 cela entraînera l'insertion d'un point de contrôle supplémentaire dans chaque section du patch original)."Order_U"
et "Order_V"
définissent l'ordre du patch."Knot-Type_U"
/"Knot-Type_V"
et "Knots_U"
/"Knots_V"
: Pour une discussion des paramètres "Knot-Type"
et "Knots"
, veuillez consulter la section
Propriété NCurveAttr.
"CreateMP"
permet d'indiquer si plusieurs points doivent être créés pour cette surface.
Voir aussi la discussion dans la section
Points multiples.[∗]
"IsRat"
informe, si le patch est rationnel (a des valeurs de poids différentes de 1,0).[∗]"Tolerance"
est en fait la tolérance d'échantillonnage GLU utilisée pour contrôler la qualité de l'échantillonnage lors du rendu du patch.
Des tolérances plus faibles permettent d'obtenir une meilleure qualité mais aussi un affichage plus lent.
Un réglage de 0.0 signifie que le réglage de préférence global "Drawing/Tolerance"
doit être utilisé."DisplayMode"
définit le mode d'affichage, soit la coque de contrôle est dessinée ("ControlHull"
), soit uniquement les contours des polygones créés par la tessellation ("OutlinePolygon"
), soit uniquement les contours du patch ("OutlinePatch"
).
Le paramètre par défaut ("Global"
) signifie que la valeur du paramètre de préférence global "Drawing/NPDisplayMode"
doit être utilisée à la place.
"Trim"
, qui dessinent les limites de l'espace paramétrique du patch NURBS correspondant sous forme de rectangle, mais qui, par ailleurs, agissent comme des vues normales "Front"
.
Notez que la direction de la courbe d'ajustement détermine la partie du patch NURBS qui doit être découpée.
L'outil Revert
(menu "Tools/Curve"
) peut être utilisé pour changer facilement la direction d'une courbe de coupe.
Certaines restrictions particulières s'appliquent aux courbes d'ajustement :
Trim
).
Notez que cette restriction ne s'applique pas aux points de contrôle, mais aux courbes ! Il est possible d'avoir des points de contrôle à l'extérieur du rectangle si la courbe définie se trouve à l'intérieur du rectangle.TrimRect
.
Cet outil peut être trouvé dans le menu "Tools/Create"
.
Cette courbe est nécessaire si vous voulez découper un trou avec une seule courbe de coupe.
Cette courbe n'est généralement pas nécessaire si vous voulez rendre le patch avec BMRT mais elle ne devrait pas faire mal si elle est présente.Avertissement : Certaines implémentations OpenGL peuvent être facilement défaillantes en dessinant des patchs NURBS avec des réglages qui ne respectent pas les règles mentionnées ci-dessus. En cas de doute ou de modélisation lourde, passez au dessin au fil de fer et désactivez temporairement les ombres et vous serez du bon côté.
Les objets fournissant des courbes NURBS sont également pris en charge en tant que courbes de coupe.[∗] Lorsque les objets fournissent plusieurs courbes NURBS, celles-ci ne forment pas une seule boucle, mais sont considérées comme des boucles individuelles.
L'objet NPatch prend en charge les bouchons standard telles que décrites dans la section
Propriété Caps et les biseaux standard tels que décrits dans la section
Propriété Bevels.
Les noms des limites sont U0
, U1
, V0
et V1
.
L'intégration n'est pas soutenue ; l'option correspondante est ignorée sans notification.
Un objet NPatch peut être converti en un objet PolyMesh en utilisant l'entrée du menu principal "Tools/Convert"
.
Ce processus est également appelé tessellation et, par conséquent, les paramètres de tessellation des balises TP seront utilisés dans le processus de conversion (s'il existe) (Voir aussi la section Balise TP (Tessellation Parameter)).
Si des biseaux ou des bouchons sont présents, un objet Level enveloppant sera créé et les biseaux ou bouchons tesselés suivront le NPatch tesselé dans l'ordre suivant : U0, U1, V0, V1.
Les objets NPatch seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Les balises PV sont prises en charge et des courbes de coupe peuvent également apparaître.
Plusieurs balises TC sont également prises en charge.[∗]
Un IPatch forme une surface définie en interpolant une grille régulière de points de données tridimensionnels et non rationnels (voir aussi l'image ci-dessus).
Le tableau suivant énumère brièvement certaines capacités de l'objet IPatch.
Type | Parent of | Material | Converts to / Provides | Point Edit |
IPatch | No | Yes | NPatch | Yes |
Les objets IPatch peuvent être créés via le menu principal ou l'interface de script, voir aussi Création d'objets.
La propriété IPatchAttr contient les éléments suivants :
"Width"
et "Height"
contrôlent les dimensions du patch.
Comme pour le paramètre "Length"
de l'objet NCurve, les modifications apportées à "Width"
ou "Height"
permettent d'ajouter ou de supprimer des points de contrôle internes (c'est-à-dire pour doubler la résolution d'un patch d'interpolation 4 par 4 dans la direction U, modifier le "Width"
de 4 à 7 ; cela entraînera l'insertion d'un point de contrôle supplémentaire dans chaque section du patch original)."Order_U"
et "Order_V"
définissent les ordres d'interpolation souhaités du patch.
Si l'une de ces valeurs est fixée à 2, aucune interpolation explicite n'aura lieu dans cette dimension (la surface interpolera implicitement les points de données en raison du faible ordre)."Close_U"
et "Close_V"
permettent de créer des surfaces fermées dans la dimension respective."Knot-Type_U"
et "Knot-Type_V"
commutent la paramétrisation entre "Chordal"
(par défaut), "Centripetal"
, et "Uniform"
.
La méthode centripète génère un meilleur paramétrage que la méthode par défaut (chordal) si les données d'entrée contiennent des virages serrés.
La méthode uniforme génère des paramétrages moins bons (qui entraînent des torsions et des dépassements) dans le cas général, mais elle peut être utile dans certains cas de bord."Deriv_U"
et "Deriv_V"
permettent de choisir si :
"None"
: pas de dérivés finaux,"Automatic"
: des dérivés créés automatiquement (à partir de points de données), mis à l'échelle par les paramètres supplémentaires "SDLen_U"
, "EDLen_U"
, "SDLen_V"
, et"EDLen_V"
,"Manual"
: des dérivés finaux entièrement contrôlés manuellement (apparaissant comme des points de contrôle supplémentaires dans l'édition de points, si activé)"Tolerance"
est en fait la tolérance d'échantillonnage GLU utilisée pour contrôler la qualité de l'échantillonnage lors du rendu du patch.
Des tolérances plus faibles permettent d'obtenir une meilleure qualité mais aussi un affichage plus lent.
Un réglage de 0.0 signifie que le réglage de préférence global "Drawing/Tolerance"
doit être utilisé."DisplayMode"
définit le mode d'affichage, soit la coque de contrôle est dessinée ("ControlHull"
), soit uniquement les contours des polygones créés par la tessellation ("OutlinePolygon"
), soit uniquement les contours du patch ("OutlinePatch"
).
Le paramètre par défaut ("Global"
) signifie que la valeur du paramètre de préférence global "Drawing/NPDisplayMode"
doit être utilisée à la place."NPInfo"
informe sur la configuration réelle du patch NURBS créé.L'objet IPatch prend en charge les bouchons standard telles que décrites dans la section
Propriété Caps et les biseaux standard tels que décrits dans la section
Propriété Bevels.
Les noms des limites sont U0
, U1
, V0
et V1
.
La surface interpolée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Les objets IPatch seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Les balises PV ne sont actuellement pas prises en charge.
Les balises TC multiples sont également prises en charge.[∗]
Un BPatch est un simple patch bilinéaire défini par quatre points de contrôle. Les objets BPatch sont par exemple utilisés en interne pour construire des objets de type boîte, voir aussi L'objet boîte (Box).
Le tableau suivant énumère brièvement certaines capacités de l'objet BPatch.
Type | Parent of | Material | Converts to / Provides | Point Edit |
BPatch | No | Yes | NPatch | Yes |
La propriété BPatchAttr permet de contrôler directement les quatre points définissant la géométrie du patch :
"P1_X"
, "P1_Y"
, "P1_Z"
, premier point."P2_X"
, "P2_Y"
, "P2_Z"
, deuxième point."P3_X"
, "P3_Y"
, "P3_Z"
, troisième point."P4_X"
, "P4_Y"
, "P4_Z"
, quatrième point.Le patch bilinéaire peut être converti en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Les objets BPatch seront exportés sous forme de primitives de patchs bilinéaires :
RiPatch(RI_BILINEAR, ...);
Les balises PV tags sont prises en charge.
L'objet PatchMesh peut être utilisé pour modéliser un maillage bicubique ou bilinéaire, voir l'image ci-dessus pour deux exemples.
Comme les objets NCurve, les objets PatchMesh marquent leur dernier point de contrôle avec une petite flèche. Notez que la flèche pointe dans la direction V (hauteur).
Le tableau suivant énumère brièvement certaines capacités de l'objet PatchMesh.
Type | Parent of | Material | Converts to / Provides | Point Edit |
PatchMesh | No | Yes | NPatch | Yes |
La première section de la propriété PatchMeshAttr contient les paramètres spécifiques des patchs :
"Type"
peut être réglé sur "Bicubic"
ou "Bilinear"
."Width"
et "Height"
contrôlent les dimensions du patch.
Notez que pour les maillages bicubiques, le type de base peut imposer des restrictions sur les valeurs valables pour la largeur et la hauteur ; par exemple, pour le type de base "Bezier"
(avec la taille de pas 3) les valeurs valables sont : 4, 7, 10, ....
Un autre type de base qui impose cette restriction est "Hermite"
(avec une taille de pas 2), où les valeurs valides sont 4, 6, 8, ....
La fermeture de la surface complique encore un peu plus les choses.
Une largeur valable pour un maillage bicubique fermé de type base "Bezier"
est par exemple de 6 ; elle est en fait toujours de 7, mais le dernier point est égal au premier et sera omis.<Control>
est maintenue enfoncée.[∗]"Close_U"
et "Close_V"
déterminent si le maillage de la pièce doit être fermé dans les directions U et V respectivement."IsRat"
informe, si le maillage du patch est rationnel (a des valeurs de poids différentes de 1,0).[∗]"BType_U"
et "BType_V"
contrôlent le type de base pour les patchs bicubiques.
Les types de base suivants sont disponibles : "Bezier"
, "B-Spline"
, "Catmull-Rom"
, "Hermite"
, "Power"
, et "Custom"
.
Dans ce dernier cas ("Custom"
), des paramètres supplémentaires peuvent être définis.
Il s'agit de "Step_U"
/"Step_V"
(la taille du pas de la base) et "Basis_U"
/"Basis_V"
la base elle-même."Custom"
, les valeurs initiales de la matrice de base seront celles du type précédent.[∗]tobasisPM
, voir aussi la section
tobasisPM command."BType_U"
, "BType_V"
, "Step_U"
, "Step_V"
, "Basis_U"
, et "Basis_V"
ne sont disponibles que pour les patch mailléss bicubiques.
Les paramètres suivants contrôlent l'apparence pour l'affichage dans Ayam :
"Tolerance"
est en fait une tolérance d'échantillonnage GLU, utilisée pour contrôler la qualité de l'échantillonnage lors du rendu du patch.
Un réglage de 0.0 signifie que le réglage de préférence globale "Drawing/Tolerance"
doit être utilisé."DisplayMode"
définit le mode d'affichage, soit la coque de contrôle est dessinée, soit seulement les contours des polygones créés par la tessellation (OutlinePolygon), soit seulement les contours du patch (OutlinePatch).
Le paramètre par défaut (Global) signifie que le paramètre de préférence global "Drawing/DisplayMode"
doit être utilisé.L'objet PatchMesh prend en charge les bouchons standard telles que décrites dans la section
Propriété Caps et les biseaux standard tels que décrits dans la section
Propriété Bevels .[∗]
Les noms des limites sont U0
, U1
, V0
et V1
.
Le maillage du patch peut être converti en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Dans les versions de Ayam antérieures à la 1.21, la conversion (et l'affichage ombré) ne fonctionnait pas pour les patch mailléss avec les types de base Catmull-Rom, Hermite ou Custom.
Ce n'est plus le cas.
Les objets PatchMesh seront exportés sous forme de primitives de patchs maillés :
RiPatchMesh(...);
Les balises PV sont prises en compte.
Les balises TC multiples sont aussi prises en compte.[∗]
Ces objets créent des surfaces de forme libre à partir de courbes ou d'autres surfaces.
L'objet Revolve forme une surface de révolution à partir d'une courbe NURBS, voir l'image ci-dessus pour un exemple.
L'objet Revolve a la courbe NURBS génératrice comme objet enfant et observe ses changements et s'y adapte automatiquement.
L'axe de la révolution est toujours l'axe Y. La courbe des paramètres doit être définie dans le plan XY. Sinon, la courbe sera projetée sur ce plan avant de tourner.
Le tableau suivant énumère brièvement certaines capacités de l'objet Revolve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Revolve | NCurve | Yes | NPatch+ | No* |
Le paramètre "ThetaMax"
spécifie l'angle de balayage de la révolution comme pour une primitive quadrique de RenderMan ordinaire.
L'objet Revolve supporte également un mode B-Spline qui peut être activé en réglant le paramètre "Sections"
à une valeur supérieure à 0.[∗]
Dans ce mode, une B-Spline circulaire est utilisée comme base pour la surface de révolution au lieu du cercle NURBS standard.
En fonction du nombre de sections choisies, la surface de révolution n'interpole pas exactement la courbe paramétrée, mais la surface peut être éditée plus facilement après une éventuelle conversion en un objet patch NURBS ordinaire, car les points de contrôle ne seront pas rationnels si la courbe de révolution ne l'est pas non plus.
Notez que le mode B-Spline peut également prendre en compte des valeurs "ThetaMax"
quelconques.[∗]
En plus du nombre de sections, en mode B-Spline, il est possible de contrôler l'ordre de la surface de révolution à l'aide du paramètre "Ordre"
.
Si "Ordre"
est 0, une valeur standard de 3 sera utilisée.
Voir la section
Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
L'objet Revolve prend en charge les bouchons standard telles que décrites dans la section Propriété Caps et les biseaux standard tels que décrits dans la section Propriété Bevels.
Les noms des frontières sont:
Upper
– courbe formée en faisant tourner le point de départ de la section transversale,
Lower
– courbe formée par la rotation du point final de la section transversale,
Start
– coupe transversale, et
End
– coupe transversale à la fin de la révolution.
La surface de révolution et les biseaux et bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les biseaux ou bouchons suivront la surface de révolution dans l'ordre suivant : supérieur, inférieur, début, fin.
Les biseaux ou bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Revolve fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets revolve seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des biseaux ou des bouchons sont présents, ceux-ci suivent comme des primitives NURBS potentiellement de découpe dans l'ordre suivant : supérieur, inférieur, début, fin.
Les balises PV sont prises en charge.[∗] Les balises TC multiples sont également prises en charge[∗]
L'objet Extrude forme une extrusion linéaire à partir d'un certain nombre de courbes NURBS planes, voir l'image ci-dessus pour un exemple.
La première courbe détermine le contour et les autres courbes déterminent les trous dans l'objet d'extrusion. Les trous peuvent être utilisés par des objets qui forment par exemple des lettres.
L'objet a les courbes NURBS génératrices comme objets enfants, les observe et s'y adapte automatiquement.
Par conséquent, la hiérarchie des objets d'un objet Extrude peut ressembler à ceci :
+-Extrude
| Outline(NCurve)
| [Hole_1(NCurve)
| ...
\ Hole_n(NCurve)]
L'objet Extrude peut générer des bouchons, si les courbes de génération sont fermées. La génération de bouchons peut échouer, si la courbe extérieure a des poids et que la courbe elle-même quitte la coque convexe du polygone de contrôle. Faites attention lorsque vous utilisez des courbes avec des poids !
Les angles vifs entre les bouchons et l'extrusion peuvent être biseautés.
L'axe de l'extrusion est toujours l'axe Z. Les courbes des paramètres doivent être définies dans le plan XY. Sinon, elles seront projetées dans ce plan. Voir la section Outil de retournement vers XY (To XY) pour savoir comment réaliser facilement des courbes dans le plan XY.
Les dimensions et les ordres de la ou des surfaces extrudées seront tirés des courbes paramètres respectives comme suit : la largeur et l'ordre dans la direction U seront 2, la hauteur et l'ordre dans la direction V sont tirés de la courbe paramètres.
Le tableau suivant énumère brièvement certaines capacités de l'objet Extrude.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Extrude | NCurve+ | Yes | NPatch+ | No* |
Le paramètre "Height"
détermine la taille de l'extrusion dans la direction Z.
Notez que la hauteur des biseaux n'est pas prise en compte dans ce paramètre.
Si la hauteur de l'extrusion est de 1.0 et que les biseaux (supérieurs et inférieurs) sont activé avec un rayon de 0.1, l'objet résultant aura une hauteur totale de 1.2 unités dans la direction Z.
L'objet Extrude peut générer automatiquement des bouchons, qui sont des patchs NURBS découpés.
En utilisant "StartCap"
et "EndCap"
vous déterminez si de tels bouchons doivent être générés, la valeur par défaut est désactivée (pas de bouchons).
Notez que cette fonction ne fonctionne correctement que si les courbes NURBS générées sont fermées et ne s'entrecroisent pas, car les courbes générées sont utilisées comme courbes de correction pour les bouchons.
Attention, Ayam ne vérifiera pas si les courbes paramètres sont conformes à ces critères.
Cependant, Ayam détecte automatiquement l'orientation correcte des courbes (et les inverse si nécessaire).
Depuis Ayam 1.10, les paramètres de biseau de l'objet Extrude sont enregistrés dans des balises de paramètres de biseau et l'interface graphique de propriété a été modifiée pour être conforme à tous les autres objets de l'outil de support de biseau.
Les anciennes options "LowerBevel"
, "UpperBevel"
, "BevelType"
, et "BevelRadius"
ne sont plus disponibles.
Elles ont été remplacées par de nouvelles balises dynamiques créant des sections d'interface graphique de propriété de biseau qui sont accessibles par les nouvelles entrées de commande "Add Start Bevel!"
et "Add End Bevel!"
respectivement.
Si l'une de ces entrées est utilisée, une balise de paramètre de biseau correspondante est créée et d'autres options seront disponibles dans l'interface graphique des propriétés pour ajuster les paramètres de biseau ou supprimer à nouveau la balise.
Une discussion plus approfondie de ces options est disponible dans la section
Propriété BevelAttr.
Voir la section
Propriété NPatchAttr pour une description des deux autres paramètres "DisplayMode"
et "Tolerance"
.
Toutes les courbes formant des trous dans l'objet extrudé doivent être définies à l'intérieur (géométriquement) de la première courbe (la courbe de contour). De plus, ils ne peuvent pas se croiser entre eux ou avec eux-mêmes et il ne peut pas y avoir de courbes à l'intérieur des courbes. S'il y a des biseaux et des bouchons, prévoyez un espacement supplémentaire entre les courbes (pour les biseaux). Ayam ne vérifiera pas si les courbes paramètres sont conformes à ces critères.
La direction de la courbe détermine également le sens du biseau (doit-il s'arrondir vers l'extérieur ou vers l'intérieur ?). Si les biseaux des trous ne sont pas corrects, essayez d'inverser les courbes génératrices des trous. Notez que le biseautage ne fonctionne pas bien avec les courbes ouvertes. Il est conseillé de toujours utiliser des courbes fermées pour le biseautage. Le biseautage peut conduire à des courbes de coupe qui s'entrecroisent dans les angles vifs d'une extrusion. Il faut réduire le rayon de biseau ou arrondir les coins de la courbe extrudée (en utilisant l'insertion de points de contrôle supplémentaires) si la génération de bouchons échoue en raison des biseaux qui s'entrecroisent.
Une autre problématique particulière est à noter : S'il y a des trous, les biseaux correspondants seront mis à l'échelle avec les valeurs de transformation des objets de la courbe des trous. Ainsi, pour obtenir des biseaux de même taille pour le contour et les trous, les éventuelles transformations d'échelle doivent être effectuées sur les points de contrôle de la courbe des trous, plutôt que sur les attributs de transformation de l'objet courbe des trous.
La surface extrudée, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les biseaux et bouchons suivront la surface extrudée dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début.
L'objet Extrude fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets extrudés seront exportés sous forme de primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début.
Les balises PV sont prises en charge mais toutes les primitives NURBS recevront le même ensemble de balises.[∗]
L'objet Swing forme une surface qui résulte de la rotation d'une courbe NURBS (appelée section transversale ou profil) autour d'un axe tout en la mettant à l'échelle selon une seconde courbe NURBS (appelée trajectoire ou chemin).[∗]
Ce processus est parfois aussi appelé balayage rotatif.
Voir l'image ci-dessus pour un exemple.
L'objet Swing a les courbes NURBS génératrices comme objets enfants et observe leurs mouvements et s'y adapte de manière automatique. La première courbe est la section transversale, la seconde est la trajectoire.
La hiérarchie d'un objet Swing ressemble donc à ceci :
+-Swing
| Cross_Section(NCurve)
\ Trajectory(NCurve)
L'opération de balayage se fera autour de l'axe Y, c'est-à-dire que la trajectoire doit être définie dans le plan XZ.
La courbe de la section transversale doit être définie dans le plan YZ et la trajectoire doit commencer là. Voir aussi l'image ci-dessous.
Notez que l'outil de création de swing modifiera automatiquement les points de contrôle des objets NCurve, ICurve et ACurve afin qu'ils soient définis dans le bon plan. Pour tous les autres types d'objets, les attributs de transformation seront définis (Rotate_Y est défini à 90 s'il est actuellement défini à 0).[∗]
Les dimensions et les ordres de la surface balayée seront tirés des courbes paramètres respectives comme suit : largeur et ordre dans la direction U à partir de la trajectoire, hauteur et ordre dans la direction V à partir de la section transversale.
Le tableau suivant énumère brièvement certaines capacités de l'objet Swing.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Swing | NCurve∗ | Yes | NPatch+ | No* |
La surface balayée est entièrement contrôlée par les courbes paramètres.
Voir la section
Propriété NPatchAttr pour une description des attributs "DisplayMode"
et "Tolerance"
.
Pour aider à la configuration exacte de la surface balayée, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
L'objet Swing prend en charge les bouchons standard tels que définis dans la section Propriété Caps et les biseaux standard tels que définis dans la section Propriété Bevels.
Les noms des contours sont les suivants :
Start
– section transversale,
End
– section transversale à la fin du balayage,
Upper
– courbe formée en balayant le point de départ de la section transversale, et
Lower
– courbe formée en balayant le point final de la section transversale.
La surface balayée et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée de menu principale "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les biseaux ou bouchons suivront la surface balayée dans l'ordre suivant : supérieur, inférieur, début, fin.
Les biseaux ou les bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Swing fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets Swing seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des biseaux ou des bouchons sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : supérieur, inférieur, début, fin.
Les balises PV sont prises en charges. [∗] Les balises TC multiples sont également prises en charge.[∗]
L'objet Sweep forme une surface qui résulte du déplacement d'une courbe NURBS (appelée section transversale ou profil) le long d'une deuxième courbe NURBS (appelée trajectoire ou chemin). Voir l'image ci-dessus pour un exemple.
La section transversale peut être mise à l'échelle pendant le balayage en utilisant une troisième courbe, la fonction mise à l'échelle. Les surfaces balayées peuvent être fermées dans la direction de la trajectoire et elles peuvent également être périodiques.[∗]
L'objet Sweep possède les courbes NURBS génératrices comme objets enfants et observe leurs mouvements et s'y adapte automatiquement. La première courbe est la section transversale, la deuxième est la trajectoire et la troisième courbe représente la fonction de mise à l'échelle.
La hiérarchie des objets d'un objet Sweep ressemble donc à ceci :
+-Sweep
| Cross_Section(NCurve)
| Trajectory(NCurve)
\ [Scaling_Function(NCurve)]
Notez que les attributs "Translate"
de la courbe de la section transversale seront totalement ignorés.
Tous les autres attributs de transformation (de la section et de la trajectoire) seront utilisés pour déterminer la place, l'orientation et la taille de l'objet Sweep.
La courbe de section transversale doit être définie dans le plan YZ du système de coordonnées de l'objet Sweep.
Voir également l'image ci-dessous.
La fonction de mise à l'échelle est échantillonnée pour chaque section et la composante Y des coordonnées du point de courbe actuel sera utilisée comme facteur d'échelle qui est appliqué à la section transversale dans la direction Y.
Si un point échantillon de la fonction de mise à l'échelle a une composante Z différente de zéro, la composante Z sera utilisée pour mettre à l'échelle indépendamment la section transversale dans la direction X, sinon la composante Y sera utilisée pour mettre également à l'échelle la section transversale dans la direction X.[∗]
Cela implique, par exemple, qu'une fonction de mise à l'échelle qui ne fait rien devrait être une courbe linéaire de (0,1,1) à (1,1,1). Les composantes de l'échelle qui sont inférieures ou égales à zéro seront ignorées sans notification.
Voici un petit exemple pour la création d'un balayage :
"Shift"
enfoncée et sélectionnez l'autre courbe).<e>
, puis faites glisser quelques points de contrôle)."Side"
. (Utilisez le menu des vues "Type"
ou le raccourci clavier <PgDwn>
alors que la vue a le focus d'entrée).Les surfaces par translation sont un algorithme de création similaire, voir aussi la section Surface par translation.
Le tableau suivant énumère brièvement certaines capacités de l'objet Sweep.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Sweep | NCurve∗ | Yes | NPatch+ | No* |
L'attribut "Type"
contrôle si la surface balayée doit être ouverte, fermée ou périodique dans la direction de la courbe de trajectoire.[∗]
Si "Interpolation"
est activé, une interpolation supplémentaire sera exécutée sur la surface balayée dans la direction U, de sorte que toutes les courbes de section seront interpolées par la surface balayée.
Au lieu d'un vecteur de noeud NURBS, la surface balayée obtiendra alors un vecteur de noeud Chordal (calculé par moyennage de noeuds) et la surface balayée suivra la trajectoire de plus près.
Voir l'image ci-dessous pour un exemple.
Le troisième paramètre, "Sections"
, détermine combien de points de contrôle (dans la direction U) doivent être utilisés, pour la génération du patch NURBS.
Le patch NURBS a sections+1 points de contrôle dans la direction U pour les balayages ouverts et fermés, alors que les sections+(ordre points de contrôle) seront créés pour les balayages périodiques.
Zéro est un réglage valide pour le paramètre "Sections"
et utilisé comme valeur par défaut. [∗]
Dans ce cas, le nombre de sections est directement dérivé de la longueur de la courbe de trajectoire plus un (sauf pour les courbes de trajectoire de longueur 2, où le nombre de sections est de 1).
Par exemple, si "Sections"
est nul, pour une courbe NURBS standard de longueur 4, le nombre de sections utilisées est 5 et la largeur du patch NURBS créé est 6, pour une courbe avec seulement 2 points de contrôle, le nombre de sections utilisées est 1 et la largeur du patch résultant est 2.
Voir le tableau ci-dessous pour plus d'exemples.
De plus, si "Sections"
est égal à zéro, l'ordre du balayage dans la direction U est tiré de la courbe de trajectoire.
Sinon, l'ordre de la pièce créée dépend du nombre de sections comme suit : pour 1 et 2 sections, l'ordre sera respectivement de 2 et 3, dans tous les autres cas, il sera de 4.
Si "Rotate"
est activé, les sections transversales seront tournées de façon à ce qu'elles soient toujours perpendiculaires à la trajectoire, cette option est activée par défaut.
Voir la section
Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
Pour aider à la configuration exacte de la surface balayée, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
Le tableau suivant présente quelques exemples de configurations de paramètres pour l'objet Sweep.
Sections | Trajectory Length | Trajectory Order | Sweep Length | Sweep Order |
0 | 2 | 2 | 2 | 2 |
0 | 5 | 4 | 6 | 4 |
0 | 6 | 5 | 7 | 5 |
4 | 6 | 5 | 5 | 4 |
10 | 6 | 5 | 11 | 4 |
L'objet Sweep prend en charge les bouchons standard tels que définis dans la section Propriété Caps et les biseaux standard tels que définis dans la section Propriété Bevels.
Les noms des frontières sont:
Start
– section transversale,
End
– coupe transversale à la fin du balayage,
Left
– courbe formée en balayant le point de départ de la section transversale, et
Right
– courbe formée en balayant le point final de la section transversale.
La surface balayée, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level enveloppant sera créé et les biseaux et bouchons suivront la surface balayée dans l'ordre suivant : biseau de départ, bouchon de départ, biseau de fin, bouchon de fin, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les biseaux ou les bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Sweep fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets Sweep seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : biseau de départ, bouchon de départ, biseau de fin, bouchon de fin, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les balises PV sont prises en charge.[∗]
Les balises TC multiples sont également prises en charge.[∗]
L'objet Birail1 forme une surface en balayant une courbe section transversale (ou profil) le long de deux courbes dites rail. Voir l'image ci-dessus pour un exemple.
La hiérarchie des objets d'un objet Birail1 ressemble donc à ceci :
+-Birail1
| Cross_Section(NCurve)
| Rail1(NCurve)
\ Rail2(NCurve)
Lorsque la section transversale touche les courbes du rail à leurs points de départ respectifs, la surface résultante interpole les courbes du rail. La direction de la courbe de la section transversale sera parallèle à la dimension paramétrique V (hauteur) et la direction des courbes du rail sera parallèle à la dimension paramétrique U (largeur) de la surface résultante. La hauteur et la largeur de la surface seront dérivées de la longueur de la courbe de section transversale et du nombre de sections, respectivement.
L'image ci-dessus montre une configuration valide des courbes paramètres pour l'objet Birail1. Attention à la direction des courbes de rail (R1 et R2) par rapport à la courbe de section transversale (CS) et au fait que la courbe de section transversale touche les points de départ des courbes de rail.
Notez que la courbe de section transversale ne doit pas être bidimensionnelle et, contrairement à l'objet Sweep normal, elle ne doit pas non plus être définie dans un plan spécial. Notez également que la précision avec laquelle la surface résultante interpolera les courbes des rails dépend du nombre de sections choisies.
L'objet Birail1 surveille les objets enfants et s'y adapte automatiquement grâce au mécanisme de notification.
Voir aussi la section Double balayage (DualSweep) pour un objet de script qui crée une surface similaire.
Le tableau suivant énumère brièvement certaines capacités de l'objet Birail1.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Birail1 | NCurve∗ | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent le processus birail.
Comme l'objet Sweep, l'attribut "Type"
contrôle si la surface birail doit être ouverte, fermée ou périodique dans le sens des courbes du rail.
Le paramètre "Sections"
détermine combien de sections (dans le sens U) doivent être utilisées, lors de la génération du patch NURBS birail.
Le patch NURBS birail a toujours sections + 1 points de contrôle dans la direction U.
Le zéro est également un paramètre valide pour le paramètre "Sections"
et utilisé comme valeur par défaut.[∗]
Si "Sections"
est égal à zéro, le nombre de sections est directement dérivé de la longueur de la première courbe du rail plus un (sauf pour les courbes de longueur 2, où il est égal à 1).
Voir le tableau ci-dessous pour des exemples
De plus, si "Sections"
est égal à zéro, l'ordre du birail dans le sens U est pris à partir de la première courbe du rail.
Sinon, l'ordre de la pièce créée dépend du nombre de sections comme suit : pour 1 et 2 sections, l'ordre sera respectivement de 2 et 3, dans tous les autres cas, il sera de 4.
Voir la section
Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
Pour aider à la configuration exacte de la surface birailée, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
Le tableau suivant présente quelques exemples de configurations de paramètres pour l'objet Birail1.
Sections | Rail1 Length | Rail1 Order | Birail1 Length | Birail1 Order |
0 | 2 | 2 | 2 | 2 |
0 | 5 | 4 | 6 | 4 |
0 | 6 | 5 | 7 | 5 |
4 | 6 | 5 | 5 | 4 |
10 | 6 | 5 | 11 | 4 |
L'objet Birail1 prend en charge les bouchons standard tels que définis dans la section Propriété Caps et les biseaux standard tels que définis dans la section Propriété Bevels.
Les noms des limites sont:
Start
– section transversale,
End
– coupe transversale à la fin du balayage,
Left
– courbe formée en balayant le point de départ de la section transversale, et
Right
– courbe formée en balayant le point final de la section transversale.
La surface birail, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level enveloppant sera créé et les biseaux et bouchons suivront la surface birail dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les biseaux ou les bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Birail1 fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets Birail1 seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les balises PV sont prises en compte.[∗]
Les balises TC multiples sont également prises en charge.[∗]
L'objet Birail2 forme une surface en balayant une courbe section transversale (ou profil) le long de deux courbes dites rail, tout en la transformant en une seconde courbe transversale (ou de profil). Voir également l'image ci-dessus pour un exemple.
Le processus de morphing peut être contrôlé par une cinquième courbe paramètre, la courbe de contrôle de l'interpolation. La hiérarchie des objets d'un objet Birail2 ressemble donc à ceci :
+-Birail2
| Cross_Section1(NCurve)
| Rail1(NCurve)
| Rail2(NCurve)
| Cross_Section2(NCurve)
\ [Interpolation_Control(NCurve)]
Lorsque les sections transversales touchent les courbes du rail à leurs points de départ ou d'arrivée respectifs, la surface résultante interpole les courbes du rail. La direction des courbes de la section transversale sera parallèle à la dimension paramétrique V (hauteur) et la direction des courbes du rail sera parallèle à la dimension paramétrique U (largeur) de la surface résultante. La hauteur et la largeur de la surface seront dérivées de la longueur des courbes de section transversale et du nombre de sections, respectivement.
L'image ci-dessus montre une configuration valide des courbes paramètres pour l'objet Birail2. Attention à la direction des courbes de rail (R1 et R2) par rapport aux deux courbes de section transversale (CS1 et CS2) et au fait que toutes les courbes se touchent à leurs points d'extrémité respectifs.
Notez que les courbes de section transversale n'ont pas besoin d'être bidimensionnelles et, contrairement à l'objet Sweep normal, elles n'ont pas non plus besoin d'être définies dans un plan spécial. En outre, elles ne doivent pas être compatibles en termes de longueur, d'ordre et de noeuds. Les courbes incompatibles seront rendues compatibles avant le traitement birail automatique ; la hauteur de la surface résultante, cependant, n'est plus facilement prévisible dans ce cas. Il faut également noter que la précision avec laquelle la surface résultante interpolera les courbes du rail dépend du nombre de sections choisies.
Si une cinquième courbe est présente comme objet paramètre, cette courbe contrôlera le processus de morphing (interpolation).
La coordonnée y de cette courbe en un point spécifique, qui doit avoir une valeur comprise entre 0 et 1, détermine le rapport de contrôle de la première section transversale (0) et de la deuxième section transversale (1) sur la courbe interpolée.
Ainsi, une ligne droite allant du point (0,0) à (1,1) sera équivalente à l'interpolation linéaire standard qui serait effectuée si aucune courbe de contrôle de l'interpolation n'était présente.
Notez, cependant, que la courbe de contrôle d'interpolation n'a aucune influence sur la première et la dernière copie de la courbe de section transversale respective, à moins que l'option "InterpolCtrl"
soit utilisée.[∗]
L'objet Birail2 surveille les objets enfants et s'y adapte automatiquement grâce au mécanisme de notification.
Le tableau suivant énumère brièvement certaines capacités de l'objet Birail2.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Birail2 | NCurve∗ | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent le processus birail.
Le paramètre "Sections"
détermine combien de sections (dans le sens U) doivent être utilisées, lors de la génération du patch NURBS birail.
Le patch NURBS birail a toujours des sections + 1 points de contrôle dans la direction du U.
Le zéro est également un paramètre valide pour le paramètre "Sections"
et utilisé comme valeur par défaut.[∗]
Si "Sections"
est égal à zéro, le nombre de sections est directement dérivé de la longueur de la première courbe du rail plus un (sauf pour les courbes de longueur 2, où il est égal à 1).
Voir le tableau ci-dessous pour des exemples.
De plus, si "Sections"
est égal à zéro, l'ordre du birail dans le sens U est pris à partir de la première courbe du rail.
Sinon, l'ordre de la pièce créée dépend du nombre de sections comme suit : pour 1 et 2 sections, l'ordre sera respectivement de 2 et 3, dans tous les autres cas, il sera de 4.
Le paramètre "InterpolCtrl"
permet à la courbe de contrôle de l'interpolation d'avoir une influence totale sur la surface biraie.
Si "InterpolCtrl"
est désactivé, le premier et le dernier bord de la surface résultante correspondront toujours exactement aux courbes des paramètres (CS1 et CS2 respectivement), quelle que soit la courbe de contrôle d'interpolation.
Voir la section
Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
Pour aider à la configuration exacte de la surface birail, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
Le tableau suivant présente quelques exemples de configurations de paramètres pour l'objet Birail2.
Sections | Rail1 Length | Rail1 Order | Birail2 Length | Birail2 Order |
0 | 2 | 2 | 2 | 2 |
0 | 5 | 4 | 6 | 4 |
0 | 6 | 5 | 7 | 5 |
4 | 6 | 5 | 5 | 4 |
10 | 6 | 5 | 11 | 4 |
L'objet Birail2 prend en charge les bouchons standard tels que définis dans la section Propriété Caps et les biseaux standard tels que définis dans la section Propriété Bevels.
Les noms des limites sont :
Start
– première section transversale,
End
– seconde section transversale,
Left
– courbe formée en balayant le point de départ de la première section transversale, et
Right
– courbe formée en balayant le point final de la première section transversale.
La surface birail, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level enveloppant sera créé et les biseaux et bouchons suivront la surface birail dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les biseaux ou les bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Birail2 fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets Birail2 seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les balises PV sont prises en charge.[∗] Plusieurs balises TC sont également prises en charge.[∗]
L'objet Skin forme une surface définie par un ensemble de courbes coupe transversale, où la première et la dernière courbe seront toujours interpolées par la surface (ce processus est parfois aussi appelé lofting). Voir aussi l'image ci-dessus.
Lorsque seules deux courbes paramètres sont utilisées, le revêtement forme une surface dite ruled (déterminée).
Le modèle complet de la hiérarchie des objets Skin ressemble donc à ceci :
+-Skin
| C_1(NCurve)
| C_2(NCurve)
| [...
\ C_n(NCurve)]
Notez que contrairement à l'outil de construction à partir de courbes, les courbes peuvent être de longueur et d'ordre quelconques. Il est par exemple possible d'utiliser une courbe paramètre d'ordre 2 et de longueur 6 avec une deuxième courbe d'ordre 4 et de longueur 4 et une troisième courbe avec des points de contrôle d'ordre 3 et 5. Si les courbes sont de longueur ou d'ordre différent, elles seront toutes converties en interne jusqu'à ce qu'elles soient compatibles. Il faut savoir que ce processus peut prendre beaucoup de temps car toutes les courbes non serrées doivent être converties en courbes serrées ; ensuite, pour chaque courbe avec un degré d'élévation d'ordre inférieur, il faut procéder à une élévation ; il faut alors trouver un vecteur de noeud uniforme ; toutes les courbes doivent ensuite être affinées à l'aide de ce nouveau vecteur de noeud ; l'interpolation ajoute une autre dimension de complexité. Si vous constatez des retards lors de l'édition des courbes enfants d'un objet Skin, essayez de passer à la notification paresseuse.
Un objet Skin utilisera également toutes les courbes d'un objet outil, qui fournit des courbes multiples, par exemple un objet Clone en mode miroir.[∗]
La direction des courbes paramètres sera parallèle à la dimension V (hauteur) de la surface du revêtement. Le nombre de courbes paramètres définira la dimension U (largeur) de la surface du revêtement.
Notez également que le patch résultant peut être assez complexe, même si les courbes ne le sont pas, si les ordres ou les vecteurs de noeuds des courbes ne correspondent pas. Par exemple, une surface de revêtement provenant de deux courbes de longueur 4 mais dont l'une est d'ordre 4 et l'autre d'ordre 2 donnera une surface de largeur 2 et de hauteur 10.
L'objet Skin a les courbes NURBS génératrices comme objets enfants et observe leurs changements et s'y adapte de manière automatique.
Le tableau suivant énumère brièvement certaines capacités de l'objet Skin.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Skin | NCurve∗ | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent le processus d'interpolation.
Le premier paramètre "Interpolation"
contrôle si les courbes intérieures doivent également être interpolées par la surface du revêtement.
Le deuxième paramètre "Ordre_U"
détermine l'ordre de la surface résultante dans la direction U (l'ordre dans la direction V est déterminé par les courbes).
L'ordre ne peut être supérieur au nombre de courbes utilisées.
Si la valeur spécifiée est supérieure au nombre de courbes, l'ordre de la surface générée sera réglé sans notification sur le nombre de courbes.
Si "Ordre_U"
est 0, une valeur par défaut de 4 sera utilisée.
En utilisant le paramètre suivant "Knot-Type_U"
, le type de vecteur de noeud qui doit être utilisé dans la direction U du revêtement peut être adapté.
Notez que ce paramètre n'aura aucun effet si l'interpolation est activée car alors une paramétrisation de la longueur de la corde sera utilisée.
Si le type de noeud est "Bezier"
et que l'ordre spécifié (voir ci-dessus) ne correspond pas exactement au nombre de courbes dépouillées, alors l'ordre sera adapté en silence au nombre de courbes dépouillées.
Le type de noeud "Custom"
crée une paramétrisation de la longueur de la corde, même si l'interpolation n'est pas activée.[∗]
Voir la section
Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
Pour aider à la configuration exacte de la surface écorchée, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
L'objet Skin prend en charge les bouchons standard tels que définis dans la section Propriété Caps et les biseaux standard tels que définis dans la section Propriété Bevels.
Les noms des limites sont :
Start
– première courbe paramètre,
End
– dernière courbe paramètre,
Left
– courbe passant par les points de départ des courbes paramètres,
Right
– courbe passant par les points d'extrémité des courbes paramètres.
Le revêtement, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level enveloppant sera créé et les biseaux et bouchons suivront la surface dépouillée dans l'ordre suivant : biseau de départ, bouchon de départ, biseau de fin, bouchon de fin, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les biseaux ou les bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Skin fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets en revêtement seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : biseau de départ, bouchon de départ, biseau de fin, bouchon de fin, biseau de gauche, bouchon de gauche, biseau de droite, bouchon de droite.
Les balises PV sont prises en charge.[∗] Plusieurs balises TC sont également prises en charge.[∗]
L'objet Gordon forme une surface définie par deux ensembles de courbes qui se croisent (un réseau de courbes), où toutes les courbes seront toujours interpolées par la surface (voir image ci-dessus). L'image ci-dessous montre la configuration la plus simple d'un tel réseau, composé de quatre courbes paramètres. Notez la disposition et la direction des courbes. Notez également que cette configuration est en fait équivalente à un patch de Coons.
Les courbes peuvent être de longueur et d'ordre quelconques. Il est par exemple possible d'utiliser une première courbe d'ordre 2 et de longueur 6 avec une deuxième courbe d'ordre 4 et de longueur 4 et une troisième courbe avec des points de contrôle d'ordre 3 et 5 pour la dimension paramétrique U.
Notez que tous les points d'intersection d'une courbe avec d'autres courbes doivent avoir la même valeur paramétrique dans chacune des autres courbes du même ensemble/direction. Toutes ces courbes sont appelées courbes isoparamétriques.
Notez également que dans le cas général, seules les courbes non rationnelles peuvent être utilisées comme courbes paramètres pour une surface de Gordon. Si les courbes paramètres sont rationnelles, les informations de poids des courbes seront simplement ignorées. Cependant, depuis Ayam 1.13, un cas particulier est autorisé : si exactement quatre courbes paramètres sont présentes, leurs informations de poids seront utilisées correctement. N'oubliez pas que pour une interpolation de surface correcte, les poids des courbes doivent correspondre aux points d'extrémité respectifs.
L'objet Gordon génère des courbes NURBS comme des objets enfants et observe leurs changements et s'y adapte automatiquement. La séparation des deux ensembles de courbes doit être effectuée à l'aide d'un objet Level vide. Le premier jeu de courbes détermine la direction du U et le second jeu de courbes la direction du V de la surface de Gordon. Pour l'exemple de surface de l'image ci-dessus, les objets enfants de l'objet Gordon devraient ressembler à ceci dans la vue arborescente de l'objet Ayam :
+-Gordon
| U1(NCurve)
| U2(NCurve)
| Level
| V1(NCurve)
\ V2(NCurve)
La création d'une surface de Gordon est coûteuse en termes de calcul. Elle consiste à habiller (par interpolation) les deux ensembles de courbes paramètres, à trouver les points d'intersection des deux ensembles de courbes paramètres, à interpoler la matrice des points d'intersection, à rendre les trois surfaces résultantes compatibles et enfin à combiner les trois surfaces pour obtenir la surface de Gordon résultante. S'il y a des retards dans l'édition des courbes paramètres d'une surface de Gordon, il faut envisager de passer à la notification paresseuse.
Afin de faciliter la détection des intersections à forte intensité de calcul pour Ayam, un troisième objet paramètre peut être spécifié (séparé des deux ensembles de courbes paramètres par un deuxième objet Level vide)
Ce troisième objet paramètre doit être un objet patch NURBS qui décrit tous les points d'intersection par ses points de contrôle.
S'il est présent, ce patch d'intersection a toujours la priorité sur les points d'intersection calculés en interne.
Un tag "NoExport"
doit être ajouté à ce patch, pour éviter qu'il n'apparaisse en sortie RIB.
La hiérarchie d'objets d'un objet Gordon utilisant un tel patch peut ressembler à ceci :
+-Gordon
| U1(NCurve)
| U2(NCurve)
| Level
| V1(NCurve)
| V2(NCurve)
| Level
\ Intersections(NPatch)
Le modèle complet de la hiérarchie d'objets de Gordon est donc le suivant :
+-Gordon
| U1(NCurve)
| U2(NCurve)
| [...
| Un(NCurve)]
| Level
| V1(NCurve)
| V2(NCurve)
| [...
| Vn(NCurve)]
| [Level
\ Intersections(NPatch)]
L'objet Gordon surveille les objets enfants et s'y adapte automatiquement grâce au mécanisme de notification.
Le tableau suivant énumère brièvement certaines capacités de l'objet Gordon.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Gordon | NCurve∗/ Level / NPatch | Yes | NPatch+ | No* |
Les paramètres suivants de l'objet Gordon contrôlent la création de la surface Gordon.
Si le paramètre "WatchCorners"
est activé, Ayam vérifiera les quatre courbes paramètres externes, pour voir si elles se touchent dans leurs extrémités.
Si ce n'est pas le cas, les points d'extrémité seront corrigés.
Si Ayam peut déterminer quelle courbe a été modifiée en dernier, l'autre courbe qui devrait se rencontrer à l'extrémité en question sera modifiée.
Si Ayam ne trouve aucune information sur les modifications, les courbes U sont prioritaires (c'est-à-dire que les courbes V seront modifiées).
Notez que cela ne fonctionne correctement qu'avec des courbes serrées.
En outre, seuls les objets NCurve, ICurve ou ACurve seront modifiés, mais les données de point final seront dérivées de tout objet fournissant une NCurve (par exemple ExtrNC).[∗]
Les paramètres "Order_U"
et "Order_V"
déterminent l'ordre souhaité de la surface résultante dans les directions U et V.
Cependant, selon le nombre et la configuration des courbes utilisées dans la direction U ou V, il peut ne pas être possible de créer une surface de Gordon de l'ordre souhaité.
Si "Order_U"
ou "Order_V"
sont 0, une valeur par défaut de 4 sera utilisée.
Voir la section
Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode"
et "Tolerance"
.
Pour aider à la configuration exacte de la surface de Gordon, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
L'objet Gordon prend en charge les bouchons standard tels que définis dans la section Propriété Caps et les biseaux standard tels que définis dans la section Propriété Bevels.
Les noms des limites sont :
U0
– première courbe de la première série,
U1
– dernière courbe de la première série,
V0
– première courbe de la seconde série, et
V1
– dernière courbe de la seconde série.
La surface de Gordon, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level enveloppant sera créé et les biseaux et bouchons suivront la surface de Gordon dans l'ordre suivant : u0 biseau, u0 bouchon, u1 biseau, u1 bouchon, v0 biseau, v0 bouchon, v1 biseau, v1 bouchon.
Les biseaux ou bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet Gordon fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets Gordon seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : u0 biseau, u0 bouchon, u1 biseau, u1 bouchon, v0 biseau, v0 bouchon, v1 biseau, v1 bouchon.[∗]
Les balises PV sont prises en charge.[∗]
Plusieurs balises TC sont également prises en charge.[∗]
L'objet Bevel forme une surface biseautée à partir d'une courbe à un seul paramètre. Voir aussi l'image ci-dessus. La forme de la section transversale du biseau peut être définie par une deuxième courbe. Par conséquent, le modèle de la hiérarchie d'un objet Bevel ressemble à ceci :
+-Bevel
| NCurve
\ [NCurve]
Les biseaux sont également disponibles en tant que propriétés de différents objets outils (par exemple, Extrude ou Sweep). En fait, les objets Bevel utilisent le même algorithme de création que les propriétés de biseau, mais offrent une plus grande flexibilité en termes de paramètres de matériau, par exemple. Les surfaces créées à partir des propriétés de biseau partagent toujours les paramètres de matériau de l'objet-outil d'origine. En revanche, les objets Bevel peuvent avoir leurs propres paramètres de matériau. Les objets Bevel sont disponibles dans Ayam depuis la version 1.10.
Notez que la courbe des paramètres d'un objet Bevel doit être fermée et plane pour obtenir les meilleurs résultats ; voir la section Outil de retournement vers XY (To XY) pour savoir comment y parvenir facilement.
Si la courbe est fermée ou périodique, le type de courbe approprié doit être défini dans l'objet courbe, sinon la surface biseautée peut présenter des défauts.
Depuis Ayam 1.19, l'objet Bevel supporte une deuxième courbe paramètres qui définit la forme de la section transversale des biseaux. Elle doit être définie dans le plan XY et aller de (0, 0) à (1, 1). Si cette courbe est présente, le paramètre de type Bevel est ignoré car la forme du biseau est déjà complètement définie. Notez que même si la courbe doit se terminer par (1, 1), cela n'est pas obligatoire et permet donc de créer des biseaux de largeur et de hauteur différentes.
L'objet Biseau surveille l'objet enfant et s'y adapte automatiquement grâce au mécanisme de notification.
Le tableau suivant énumère brièvement certaines capacités de l'objet Bevel.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Bevel | NCurve+ | Yes | NPatch | No* |
Les paramètres suivants de l'objet Biseau contrôlent la création de la surface biseautée :
"BevelType"
détermine la forme du biseau en choisissant parmi un ensemble de courbes de section transversale :
"Round"
un quart de cercle, "Linear"
un biseau droit, "Ridge"
une surface plus complexe (ridged ???), "RoundToCap"
une surface qui commence dans la direction d'une tangente à la surface du parent et qui s'arrondit à la surface d'un bouchon (les tangentes doivent être présentes comme marque sur la courbe des paramètres), ce type de surface offre une transition plus douce entre la surface du parent et le biseau qu'un biseau rond, voir également l'image ci-dessous,"RoundToNormal"
une surface qui commence dans la direction d'une tangente de surface source et qui s'arrondit à une normale moyenne, voir aussi l'image ci-dessous, les normales et les tangentes doivent être présentes comme marqueur sur la courbe des paramètres, la normale moyenne peut aussi être fournie par un marqueur MN, voir la section
Balise MN (Mean Normal),
"Bevels"
apparaît également comme type de biseau potentiel.
Ces courbes doivent suivre les règles énoncées ci-dessus pour la deuxième courbe paramètre de l'objet Bevel.
"RoundCapped"
et "LinearCapped"
ne sont plus disponibles [∗], Utilisez la propriété "Caps"
pour créer des bouchons.
"Radius"
contrôle la taille et la direction de la surface biseautée lorsqu'elle est vue du haut de la courbe des paramètres.
Notez que la taille du biseau est exprimée en unités définies par le système de coordonnées de l'objet qui le contrôle.
Les valeurs d'échelle de l'objet de contrôle affectent également la taille du biseau.
Les valeurs négatives sont autorisées et inversent la surface."Revert"
permet d'inverser le sens de la surface biseautée, doit-elle s'arrondir vers l'intérieur ou vers l'extérieur ? Le sens peut également être contrôlé en utilisant la direction de la courbe des paramètres et, en outre, le sens dans une autre dimension peut également être affecté en utilisant des valeurs négatives pour le rayon du biseau."Force3D"
passe en mode 3D pour tous les types de biseau ; si cette fonction est activée, les courbes paramètres non planes sont prises en charge, mais les normales et les tangentes doivent être présentes comme balises PV sur la courbe paramètres.
Toutefois, lorsque des biseaux sont créés via la propriété Bevels, les normales et les tangentes seront extraites automatiquement de la surface du parent et aucune balise PV ne doit être créée.Pour créer la balise avec les informations normales et tangentes, l'option "Extract"
de l'objet ExtrNC peut être utilisée.
Sinon, les balises PV de nom, de classe de stockage et de type de données appropriés doivent être créées manuellement ou à l'aide de l'interface de script.
Considérons l'exemple de script suivant :
crtOb NCurve -length 4 -order 2 -cv {0 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1}
uS;sL
addTag PV "N,varying,n,4, -1,0,0, 1,0,0, 0,1,0, -1,0,0"
addTag PV "T,varying,n,4, 0,0,1, 0,0,1, 0,0,1, 0,0,1"
Notez également que la planéité et la forme exacte définies par des valeurs de coordonnées rationnelles (par exemple, des arcs de cercle) ne seront pas préservées par les types de biseau qui supportent les courbes non planes, à une exception près :
Les biseaux RoundToCap sur des courbes/frontières entièrement planes préservent entièrement la forme de la frontière (à moins qu'elle ne soit remplacée par "Force3D"
).[∗]
Voir la section
Propriété NPatchAttr pour une description des deux attributs "DisplayMode"
et "Tolerance"
de la propriété "BevelAttr"
.
Pour aider à la configuration exacte de la surface du biseau, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
L'objet Bevel prend en charge les bouchons standard tels que définis dans la section Propriété Caps.
Le nom des limites sont :
Start
– début de la section transversale du biseau,
End
– fin de la section transversale du biseau.
La surface biseautée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des bouchons sont présents, un objet Level englobant sera créé et les bouchons suivront la surface du biseau dans l'ordre suivant : bouchon de début, bouchon de fin.
Les objets Bevel sont exportés comme des primitives NURBS :
RiNuPatch(...);
Si des bouchons sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : bouchon de début, bouchon de fin.
Les balises PV sont prises en charge. [∗]
Plusieurs balises TC sont également prises en charge. [∗]
L'objet Cap forme une surface qui remplit une courbe NURBS fermée. Voir aussi l'image ci-dessus.
Quatre types différents de surfaces de bouchon avec des caractéristiques et des exigences de courbes paramètres différentes sont pris en charge : Trim, Gordon, Simple, et Simple3D.[∗]
Le type Trim requiert des courbes paramètres planes mais elles peuvent être concaves. En outre, si plusieurs courbes sont présentes en tant qu'objets enfants, les courbes suivant la première courbe définissent des trous dans la surface du bouchon, comme les courbes paramètres d'une surface extrudée (voir également la section Utilisation des Trous et Biseaux).
Par conséquent, le modèle de la hiérarchie des objets d'un objet Cap en mode Trim ressemble à ceci :
+-Cap
| Outline(NCurve)
| [Hole1(NCurve)]
+-[Hole2(Level)
| Part1(NCurve)
\ Part2(NCurve)]
Notez que la génération des bouchons peut échouer, si les points de contrôle de la première courbe ont des poids et que la courbe quitte la coque convexe du polygone de contrôle.
Le type Gordon ne supporte qu'une courbe à un seul paramètre mais cette courbe peut être non plane. En interne, l'objet Cap va diviser la courbe paramètres en quatre sections et construire une surface de Gordon à partir de ces quatre sections (voir l'image suivante pour un exemple).
Le type Simple ne fait qu'étendre la courbe paramètre linéairement jusqu'à un point central, ne supportant pas bien les courbes non planes et ne supportant pas du tout les courbes concaves mais assurant la compatibilité avec la courbe/surface d'origine (ce qui peut être important pour la tessellation ou le traitement ultérieur de la surface).
Le type Simple3D étend la courbe paramètres à un point central via un anneau supplémentaire de points de contrôle plans et circulaires, s'arrondissant ainsi plus facilement au milieu (particulièrement utile pour les courbes paramètres non planes ou les courbes paramètres avec discontinuités), et conserve toutes les autres caractéristiques du type Simple.
Une balise MP peut être placée sur l'objet Cap pour contrôler le point central dans les deux modes simples (voir la section Balise MP (Mean Point)).
Voir également le tableau suivant pour un aperçu des types de bouchons disponibles :
Type | Planar | Concave | Holes | Compatibility / Integration |
Trim | Yes | Yes | Yes | No |
Gordon | No | No | No | No |
Simple | Yes | No | No | Yes |
Simple3D | No | No | No | Yes |
L'objet Cap surveille les objets enfants et s'y adapte automatiquement grâce au mécanisme de notification.
Le tableau suivant énumère brièvement certaines capacités de l'objet Cap.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Cap | NCurve+ | Yes | NPatch | No* |
Les paramètres suivants contrôlent le processus de création des bouchons.
L'attribut "Type"
permet de sélectionner l'une des méthodes de création de bouchon suivantes :
"Trim"
: une surface NURBS ajustée,"Gordon"
: une surface de Gordon non ajustée,"Simple"
: un simple bouchon qui s'étend linéairement jusqu'à un point central,"Simple3D"
: un simple bouchon avec un anneau supplémentaire de points de contrôle qui s'arrondit donc plus facilement au milieu, en particulier pour les courbes paramètres non planes.Le paramètre "Fraction"
permet d'ajuster le placement de l'anneau des points de contrôle supplémentaires en mode Simple3D.
Voir la section
Propriété NPatchAttr pour une description des deux attributs "DisplayMode"
et "Tolerance"
de la propriété "CapAttr"
.
Pour aider à la configuration exacte de la surface du bouchon, le champ "NPInfo"
affiche toujours les paramètres du patch NURBS créé.
La surface du bouchon peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Les objets Cap seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Les balises PV sont prises en charge[∗]
L'objet ConcatNP concatène tous les objets enfants, qui doivent être des patchs NURBS ou fournir des patchs NURBS à un seul patch NURBS (voir aussi l'image ci-dessus).[∗] La concaténation consiste simplement à décomposer toutes les surfaces en courbes, à rendre les courbes compatibles et à les relier à la surface concaténée. Les courbes NURBS ou les objets qui fournissent des courbes NURBS peuvent également être utilisés comme objets paramètres.[∗] Les courbes ajustées (de coupe ???) actuelles seront éventuellement copiées et transformées à l'endroit et dans l'orientation appropriés dans la surface concaténée, en fonction du nouveau domaine de noeuds.[∗] Les attributs tels que le mode d'affichage et la tolérance pour le nouveau patch concaténé sont simplement repris du premier patch de paramètres. Comme l'objet ConcatNP fournit également un patch NURBS, il est possible de l'utiliser comme objet enfant pour un autre objet ConcatNP (avec éventuellement des paramètres différents). De cette façon, une hiérarchie d'objets ConcatNP peut être utilisée pour émuler, dans une certaine mesure, la modélisation basée sur les patchs. Pour obtenir les meilleurs résultats, seules les surfaces serrées doivent être utilisées comme objets paramètres. Le tableau suivant énumère brièvement certaines capacités de l'objet ConcatNP.
Type | Parent of | Material | Converts to / Provides | Point Edit |
ConcatNP | NPatch∗/ NCurve∗ | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent le processus de concaténation.
"Type"
, il est possible de créer des patchs concaténés ouverts, fermés ou périodiques.
Si une surface fermée doit être créée et si "FillGaps"
(voir ci-dessous) est également activé, un filet supplémentaire sera créé pour la dernière et la première surface enfant pour fermer la surface concaténée."Order"
est l'ordre souhaité de la surface concaténée (dans le sens U), la valeur par défaut (0) conduit à une surface cubique.
Si l'ordre souhaité est 1, l'ordre respectif de la première des surfaces de paramètres est pris.
Si l'ordre souhaité est supérieur au nombre de courbes (c'est-à-dire le nombre total de points de contrôle de toutes les surfaces dans leurs directions souhaitées plus le nombre de courbes paramètres éventuellement présentes), il sera ramené au nombre de courbes sans notification."FillGaps"
crée des surfaces de raccordement pour tous les espaces entre les surfaces des paramètres de l'objet ConcatNP.
Aucun raccordement ne sera créé si les courbes d'extrémité de deux surfaces de paramètres correspondent ou si des courbes paramètres sont présentes entre les surfaces de paramètres en question.
Comme les raccords pour les courbes concaténées, la surface de raccordement sera construite à partir de quatre points de contrôle (dans la direction du U). Toutefois, les vecteurs tangents ne seront pas calculés directement, mais plutôt dérivés des points de contrôle respectifs.
"FTLength"
détermine la distance entre les points de contrôle du remplissage intérieur et leurs points d'extrémité respectifs.
Cette valeur peut être adaptée pour les écarts plus ou moins importants entre les surfaces paramètres.
Si ce paramètre est négatif, la distance entre les points de contrôle des frontières des deux surfaces respectives sera multipliée de manière à obtenir une forme de remplissage plus agréable dans les configurations où les distances entre les points de contrôle respectifs varient beaucoup (voir également l'image ci-dessous).
"Revert"
est activée, l'orientation de la surface concaténée sera inversée (dans le sens U)."Knot-Type"
permet de choisir un vecteur de noeud pour la surface concaténée dans la direction U.
Comme pour l'objet ConcatNC, seuls les noeuds "Custom"
permettent de préserver complètement les formes des surfaces paramètre, mais cela se fait au prix de multiples noeuds internes (voir aussi
Propriété ConcatNCAttr).
En outre, pour les noeuds "Custom"
, toutes les surfaces paramètres seront élevées à un ordre maximum commun ou au moins seront serrées dans la direction respective avant la division en courbes mais après la création du remplissage.
En outre, les courbes de coupe (??? d'ajustement) des surfaces parent ne seront copiées sur la surface résultante que si le paramètre "Knot-Type"
est "Custom"
.
L'option "UVSelect"
est une chaîne qui peut être utilisée pour contrôler la direction de la division pour chaque surface paramètre individuellement.
Les caractères valides dans cette chaîne sont "u"
, "U"
, "v"
, et "V"
.
Les variantes en majuscules conduisent à une surface inversée dans la direction indiquée."UVSelect"
doit être réglé sur "uV"
(voir aussi l'image ci-dessous)."UVSelect"
, une chaîne vide, est équivalente à "u"
pour tous les correctifs.
De même, des chaînes incomplètes conduiront à "u"
pour tous les correctifs restants.
Il n'est pas nécessaire de spécifier une valeur pour les filets, ceux-ci seront toujours créés de manière à pouvoir être répartis dans le sens du U.
"Compatible"
contrôle si les courbes doivent être rendues compatibles avant que la surface concaténée ne soit construite à partir de celles-ci.
Si cette option est désactivée (par défaut), les courbes sont rendues compatibles.
Activez cette option si les surfaces à concaténer sont déjà compatibles et que leurs vecteurs de noeuds sont désactivés.
La surface de sortie sera alors également désactivée (dans le sens V)."NPInfo"
informe sur la configuration réelle du patch NURBS créé.L'objet ConcatNP prend en charge les bouchons standard tels que définis dans la section
Propriété Caps et les biseaux standard tels que définis dans la section
Propriété Bevels.
Le nom des bornes sont U0
, U1
, V0
, et V1
.
La surface concaténée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les biseaux et les bouchons suivront la surface concaténée dans l'ordre suivant : U0 biseau, U0 bouchon, U1 biseau, U1 bouchon, V0 biseau, V0 bouchon, V1 biseau, V1 bouchon.
Les biseaux ou bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet ConcatNP fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets ConcatNP seront exportés sous forme de primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : U0 biseau, U0 bouchon, U1 biseau, U1 bouchon, V0 biseau, V0 bouchon, V1 biseau, V1 bouchon.[∗]
Les balises PV sont prises en charge mais toutes les primitives NURBS recevront le même ensemble de balises.[∗] Les balises TC multiples sont également prises en charge.[∗]
L'objet ExtrNP extrait un patch NURBS d'un autre objet patch NURBS, pour l'utiliser comme objet paramètre pour d'autres objets outils (voir image ci-dessus).[∗]
Il fonctionne également avec le patch NURBS fournissant des objets, de sorte que l'exemple de hiérarchie suivant est valable :
--NPatch
+-ExtrNP
\ Instance_of_NPatch(Instance)
Notez que l'utilisation d'un objet instance d'un autre objet de surface (comme montré dans l'exemple ci-dessus) est en fait la façon recommandée d'utiliser l'objet ExtrNP.
Par conséquent, l'entrée du menu principal "Tools/Create/ExtrNP"
créera automatiquement une instance de l'objet actuellement sélectionné et la déplacera vers l'objet ExtrNP nouvellement créé.
Comme la géométrie de la surface extraite est entièrement définie par la surface maîtresse, les objets ExtrNP ne prennent pas en charge leurs propres attributs de transformation.[∗] Cependant, si une balise NP rend la propriété Transformation à nouveau disponible, les attributs de transformation seront employés comme d'habitude.
Notez également que Les courbes Triméventuellement présentes ne seront pas correctement respectées.
Le tableau suivant énumère brièvement certaines capacités de l'objet ExtrNP.
Type | Parent of | Material | Converts to / Provides | Point Edit |
ExtrNP | NPatch | Yes | NPatch+ | No* |
Le processus d'extraction est contrôlé par les attributs suivants :
"UMin"
, "UMax"
, "VMin"
, et "VMax"
sont des valeurs paramétriques qui contrôlent quelle partie de la surface d'origine doit être extraite.
La plage valable des valeurs paramétriques dépend des vecteurs de noeuds de la surface d'origine."Relative"
contrôle si les valeurs paramétriques doivent être interprétées de manière relative.[∗]
Si elle est activée, une valeur paramétrique de 0,5 est toujours extraite du milieu du vecteur de noeud, quelles que soient les valeurs réelles du noeud, et la plage valable pour les valeurs paramétriques est alors de 0,0-1,0."PatchNum"
permet de sélectionner un patch dans une liste de patchs livrés par exemple par un objet Extrude biseauté comme enfant de l'objet ExtrNP.
De cette façon, il est possible d'extraire un patch d'une surface en biseau ou d'un bouchon d'un objet Revolve, par exemple."DisplayMode"
et "Tolerance"
.
"NPInfo"
informe sur la configuration réelle de la surface NURBS extraite.L'objet ExtrNP prend en charge les bouchons standard tels que définis dans la section
Propriété Caps et les biseaux standard tels que définis dans la section
Propriété Bevels.
Le nom des bornes sont U0
, U1
, V0
, et V1
.
La surface extraite peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les biseaux ou les bouchons suivront la surface extraite dans l'ordre suivant : U0, U1, V0, V1.
Les biseaux ou les bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet ExtrNP fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets ExtrNP seront exportés sous forme de primitives NURBS :
RiNuPatch(...);
Si des biseaux ou des bouchons sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : U0, U1, V0, V1.
Les tags PV sont pris en charge mais toutes les primitives NURBS obtiendront le même ensemble de tags. [∗] Plusieurs balises TC sont également prises en charge. [∗]
L'objet OffsetNP crée des surfaces décalées à partir des surfaces NURBS à l'aide d'un algorithme simple : chaque point de contrôle est déplacé le long d'un vecteur normal obtenu par tous les points de contrôle directement voisins.[∗] Voir aussi l'image ci-dessus.
La surface décalée correspondra toujours à la surface originale en largeur, en hauteur, en ordres et en noeuds.
Le décalage fonctionne également pour les surfaces fermées et périodiques dans toutes les combinaisons possibles dans les deux dimensions.<[∗] Les surfaces dégénérées sont prises en charge.[∗] Toutefois, il faut noter que les surfaces rationnelles ne sont pas toujours prises en charge. Aucune tentative n'est faite pour prévenir les collisions ou les auto-interruptions.
Les courbes de compensation sont copiées textuellement de la surface du paramètre à la surface de décalage.
Comme la géométrie de la surface décalée est entièrement définie par la surface maître et le paramètre de décalage, les objets OffsetNP ne prennent pas en charge leurs propres attributs de transformation.[∗]
Le tableau suivant énumère brièvement certaines capacités de l'objet OffsetNP.
Type | Parent of | Material | Converts to / Provides | Point Edit |
OffsetNP | NPatch | Yes | NPatch+ | No* |
Les paramètres suivants contrôlent le processus de décalage :
"Offset"
détermine la distance entre la surface d'origine et la surface décalée. Les valeurs négatives sont autorisées."DisplayMode"
et "Tolerance"
.
"NPInfo"
informe sur la configuration réelle de la surface NURBS créée.L'objet OffsetNP prend en charge les bouchons standard tels que définis dans la section
Propriété Caps et les biseaux standard tels que définis dans la section
Propriété Bevels.
Le nom des bornes sont U0
, U1
, V0
, et V1
.
La surface décalée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les biseaux ou les bouchons suivront la surface décalée dans l'ordre suivant : U0, U1, V0, V1.
Les biseaux ou bouchons intégrés n'apparaissent pas comme des objets supplémentaires.
L'objet OffsetNP fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets OffsetNP seront exportés sous forme de primitives NURBS :
RiNuPatch(...);
Si des biseaux ou des bouchons sont présents, ceux-ci suivent comme des primitives NURBS potentiellement taillées dans l'ordre suivant : U0, U1, V0, V1.
Les tags PV sont pris en charge mais toutes les primitives NURBS obtiendront le même ensemble de balises. [∗] Plusieurs balises TC sont également prises en charge. [∗]
Les objets Text peuvent être utilisés pour créer facilement des objets qui forment des lettres ou même des mots entiers de très haute qualité. Pour cela, ils analysent les fichiers de description des polices TrueType, extraient les courbes de Bézier de la description des polices, trient les courbes, les relient correctement et enfin les extrudent. Comme pour les objets Extrude, les bouchons et les biseaux peuvent être créés automatiquement.
L'analyse des descriptions de polices TrueType est assez délicate. Par souci de concision et de facilité de mise en oeuvre, Ayam n'est pas favorable à des descriptions de polices TrueType élaborées. Les fonctions TrueType comme les tables de crénage, qui permettent par exemple de contrôler les distances entre certaines lettres (Vous n'allez pas écrire un livre avec Ayam de toute façon, n'est-ce pas ?). Par conséquent, il se peut que les distances entre les lettres ne soient pas correctes de temps en temps. Si cela se produit, il suffit de créer un objet Texte pour chaque lettre, et de disposer les objets comme vous le souhaitez.
L'objet Text peut être converti en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Le tableau suivant énumère brièvement certaines capacités de l'objet Text.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Text | No | Yes | NPatch+ | No* |
Les attributs suivants contrôlent la création des objets text.
"FontName"
un fichier de description de police TrueType est spécifié.
Ces fichiers ont généralement l'extension de nom de fichier ".ttf"
.
Seuls les vrais fichiers de police TrueType, contenant des descriptions de police en courbe de Bézier, sont pris en charge.
Il existe également des fichiers de description de polices TrueType en mode raster et bitmap, qui ne fonctionnent pas."String"
vous spécifiez les lettres à créer.
Cette entrée (et les structures de données correspondantes) sont propres à Unicode.
Cela signifie que vous pouvez mettre n'importe quelle lettre Unicode dans cette entrée.
Vous devez bien sûr vous assurer que les lettres spécifiées sont incluses dans le fichier de police sélectionné."Height"
contrôle la hauteur de l'objet extrudé."Revert"
inverse le sens du mécanisme de détection intérieur-extérieur pour la génération du bouchon.
En fonction du fichier de description de la police (ou même de la lettre), vous pouvez avoir besoin de basculer ce paramètre pour obtenir des bouchons."UpperCap"
, "LowerCap"
, fonctionnent comme pour l'objet Extrude (voir la section
Propriété ExtrudeAttr pour une description plus exhaustive de ces paramètres).
"Add Lower Bevel!"
, "Add Upper Bevel!"
:
Depuis Ayam 1.10, les paramètres de biseau de l'objet texte sont enregistrés dans des balises de paramètres de biseau et l'interface graphique de propriété a été modifiée pour se conformer à tous les autres objets de l'outil de support de biseau.
Les anciennes options "LowerBevel"
, "UpperBevel"
, "BevelType"
, "BevelRadius"
, et "RevertBevels"
ne sont plus disponibles.
Elles ont été remplacées par de nouvelles balises dynamiques créant des sections d'interface graphique de propriété pour le biseau qui sont accessibles par les nouvelles entrées de commande "Add Lower Bevel !"
et "Add Upper Bevel !"
respectivement.
Si l'une de ces entrées est utilisée, une balise de paramètre de biseau est créée et d'autres options seront disponibles dans l'interface graphique de propriété pour ajuster les paramètres de biseau ou supprimer la balise à nouveau.
Une discussion plus approfondie de ces options est disponible dans la section
Propriété BevelAttr.
Juste une remarque : pour certaines polices, le rayon de biseau doit être réglé à des valeurs vraiment petites (environ 0,0008) pour obtenir des biseaux et des bouchons corrects. Cela est dû aux coins nets de certaines lettres qui entraînent un chevauchement des bords des surfaces de biseau avec des valeurs élevées pour le rayon de biseau.
"DisplayMode"
et "Tolerance"
.
Les surfaces extrudées, les biseaux et les bouchons peuvent être convertis en patchs NURBS ordinaires en utilisant l'entrée du menu principal "Tools/Convert"
.
Si des biseaux ou des bouchons sont présents, un objet Level englobant sera créé et les bouchons suivront la surface extrudée dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début.
L'objet Texte fournit une liste des objets patchs NURBS dans le même ordre que celui créé lors de la conversion.
Les objets texte seront exportés sous forme de primitives NURBS :
RiNuPatch(...);
Si des bouchons ou des biseaux sont présents, ceux-ci suivent comme des primitives NURBS potentiellement ajustées dans l'ordre suivant : biseau de fin, bouchon de fin, biseau de début, bouchon de début.
Les balises PV sont prises en charge mais toutes les primitives NURBS recevront le même ensemble de balises.[∗]
L'objet Trim peut être utilisé dans des hiérarchies d'objets outils pour découper le patch NURBS en fournissant des objets qui ne peuvent être découpés autrement, comme par exemple un objet Revolve.[∗]
Voir également l'image ci-dessus qui représente l'exemple d'un objet à surface pivotée, découpé par un objet Trim.
Le premier enfant de l'objet Trim est le patch NURBS fournissant l'objet et le second objet est la courbe de découpe (définie dans l'espace paramétrique de la surface NURBS). D'autres courbes et boucles peuvent suivre. Toutes les courbes paramétriques doivent obéir aux règles de découpe telles que décrites dans la section Courbes de trim (coupe).
La surface peut déjà être découpée et il peut y avoir plusieurs patchs fournis, cependant, un seul d'entre eux sera découpé par l'objet Trim.
La hiérarchie des objets d'un objet Trim ressemble donc à ceci :
+-Trim
| Surface(Revolve)
| Trim_1(NCurve)
+-[Trim_2(Level)
| | NCurve
| \ NCurve
| ...
\ Trim_n(ICurve)]
Le tableau suivant énumère brièvement certaines capacités de l'objet Trim.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Trim | NPatch / NCurve+/ Level+ | Yes | NPatch | No |
Les paramètres suivants contrôlent le processus de découpage :
"PatchNum"
permet de sélectionner un patch, si le patch NURBS fournissant l'objet fournit une liste.
De cette façon, un biseau d'une extrusion peut être coupé."ScaleMode"
contrôle la façon dont la courbe de coupe est mise à l'échelle par rapport à l'espace de paramètres du patch NURBS:"Absolu"
aucune mise à l'échelle ne se produit."Relative"
les courbes de coupe sont censées être définies entre 0 et 1 (dans la dimension x et y) et seront mises à l'échelle du patch de manière appropriée, quelle que soit l'apparence réelle de l'espace paramétrique du patch (c'est-à-dire que cela fonctionne de la même manière pour un patch où les noeuds vont de 0 à 1, 0 à 2, ou même 3 à 3.5).La surface découpée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
Les objets de découpe seront exportés en tant que primitives NURBS :
RiNuPatch(...);
Les balises PV ne sont pas prises en charge.
Ces objets complètent l'ensemble des fonctionnalités de Ayam et permettent d'inclure dans les scènes Ayam des objets modélisés dans les schéma de modélisation polygonale ou de subdivision.
L'objet PolyMesh peut être utilisé pour inclure des objets qui ont été modélisés en utilisant le paradigme de modélisation polygonale dans les scènes Ayam. Voir l'image ci-dessus pour un exemple simple.
Il existe seulement quelques actions de modélisation spéciales pour ce type d'objet (voir la section PolyMesh tools), mais ses points de contrôle peuvent être sélectionnés et modifiés comme cela peut être fait avec d'autres types d'objets, par exemple les courbes.
L'objet PolyMesh est équivalent aux polygones de points généraux primitifs de l'interface RenderMan. Cela signifie que chaque objet PolyMesh peut contenir plusieurs polygones généraux (convexes ou concaves), qui à leur tour peuvent être constitués d'une boucle extérieure et d'un nombre quelconque de boucles intérieures qui décrivent des trous dans le polygone (voir aussi l'image ci-dessus, montrant un maillage polygonal avec une face pentagonale et un trou triangulaire). Les boucles utilisent un schéma d'indexation ponctuelle pour réutiliser efficacement les valeurs de coordonnées. Cette approche générale nécessite la réalisation d'une tessellation, afin que l'objet PolyMesh soit ombré. Pour la tessellation, Ayam utilise des routines de la bibliothèque GLU.
Ayam est capable de créer automatiquement des normales de face pour les objets PolyMesh. Elles seront calculées pendant la construction du PolyMesh et seront perpendiculaires au plan déterminé par les trois premiers sommets de la boucle extérieure d'un polygone. De plus, Ayam prend en charge les normales de sommet (normales stockées pour chaque point de contrôle).
Notez que le stockage de triangles simples dans les objets PolyMesh entraînera un réel gaspillage de mémoire.
L'outil de fusion (menu principal "Tools/PolyMesh/Merge"
) peut être utilisé pour combiner plusieurs objets PolyMesh en un seul objet PolyMesh.
Le tableau suivant énumère brièvement certaines capacités de l'objet PolyMesh.
Type | Parent of | Material | Converts to / Provides | Point Edit |
PolyMesh | No | Yes | SDMesh | Yes |
L'interface graphique PolyMeshAttr affiche seulement quelques informations sur l'objet PolyMesh :
"NPolys"
le nombre de polygones."NControls"
le nombre total de points de contrôle définis."HasNormals"
est à 1 si l'objet utilise des normales de sommet, sinon il est à 0.Les objets PolyMesh peuvent être convertis en objets SDMesh en utilisant l'entrée du menu principal "Tools/Convert"
.[∗]
Il est à noter qu'aucune vérification de l'utilité du maillage comme maille de base pour une surface de subdivision n'est effectuée. Habituellement, ces mailles doivent être multiples et ne peuvent pas contenir de jonctions en T.
Les objets PolyMesh seront exportés sous forme de primitives RiPointsGeneralPolygons
(indépendamment du fait que la configuration réelle s'inscrive dans une primitive polygonale plus simple de l'interface RenderMan, par exemple un RiGeneralPolygon
).
Les balisesPV sont prises en charge.
L'objet SDMesh peut être utilisé pour inclure des objets qui ont été modélisés en utilisant le paradigme de modélisation de la subdivision dans les scènes Ayam (voir aussi l'image ci-dessus).
Il n'y a pas d'actions de modélisation spéciales pour ce type d'objet, mais ses points de contrôle peuvent être sélectionnés et modifiés comme cela peut être fait avec d'autres types d'objets, par exemple des courbes.
L'objet SDMesh est équivalent à la primitive Subdivision Mesh de l'interface RenderMan. Cela signifie que chaque objet SDMesh peut contenir plusieurs faces avec un nombre quelconque de sommets qui forment un maillage polygonal. Ce maillage polygonal est ensuite successivement raffiné à l'aide d'un schéma de subdivision et, selon le nombre d'étapes de raffinement (ou de subdivision), donne une surface plus ou moins lisse. Il existe plusieurs schémas de subdivision différents, mais le schéma actuellement pris en charge par la plupart des moteurs de rendu compatibles avec RenderMan est appelé "Catmull-Clark".
Des balises peuvent être spécifiées pour les faces, les arêtes ou les sommets afin de contrôler le processus de subdivision (par exemple pour créer des coins ou des arêtes vives dans la surface résultante). Toutes les balises connues de l'interface RenderMan (hole, crease, corner, and interpolateboundary [trou, pli, coin et limite interpolaire]) sont prises en charge par Ayam, mais elles ne peuvent actuellement pas être modifiées par l'utilisateur.
À moins que le plugin "subdiv"
(disponible depuis Ayam 1.19) ne soit chargé, Ayam n'est pas en mesure d'effectuer la subdivision et de montrer la surface lisse résultante.
Tout ce qui est montré dans les vues filaires et ombrées est le maillage polygonal d'origine.
Le tableau suivant énumère brièvement certaines capacités de l'objet SDMesh.
Type | Parent of | Material | Converts to / Provides | Point Edit |
SDMesh | No | Yes | PolyMesh | Yes |
L'interface graphique SDMeshAttr affiche seulement quelques informations sur l'objet SDMesh :
"Scheme"
, est le schéma de subdivision, les schémas actuellement disponibles sont Catmull-Clark et Loop.[∗]"Level"
est le nombre d'étapes de subdivision qui doivent être effectuées lors de la subdivision du maillage pour l'aperçu.
Cette subdivision nécessite le plugin "subdiv"
."DrawSub"
permet de passer du polygone de contrôle aux contours du polygone subdivisé lors du dessin du maillage."NFaces"
, le nombre de faces."NControls"
, le nombre total de points de contrôle définis.Les objets SDMesh peuvent être convertis en objets PolyMesh.[∗]
Notez cependant que seul le polygone de contrôle original, non raffiné (c'est-à-dire le maillage de base) sera converti, à moins que l'attribut "Level"
ne soit pas nul et que le plugin "subdiv"
soit chargé.
Les objets SDMesh seront exportés sous forme de primitives RiSubdivisionMesh :
RiSubdivisionMesh(...);
Les balises PV sont prises en charge.
Ces objets créent/modifient d'autres objets quelconques à partir de scripts ou définissent des types d'objets entièrement nouveaux via le mécanisme de plugin d'objet personnalisé.
crtOb NCurve -l 30 -kt 1 sL for {set i 0} {$i < 30} {incr i} { set x [expr $i*cos($i*20.0)/10.0] set y [expr $i*sin($i*20.0)/10.0] setPnt $i $x $y 0 1 } |
|
Les objets de script sont le type d'objet le plus flexible de Ayam. Ils peuvent être utilisés pour créer de nouveaux objets, modifier des objets existants, ou réaliser des mécanismes comme des contraintes en utilisant de petits scripts qui sont intégrés dans les objets de script eux-mêmes.
Ces petits scripts intégrés peuvent utiliser les fonctionnalités de Tcl et de l'interface de script Tcl de Ayam (voir aussi la section Interface de script).
Voir également le tableau ci-dessus, qui présente un exemple simple d'objet script qui crée une courbe NURBS et place les points de contrôle de la courbe en spirale dans le plan XY. Cet exemple est aussi distribué avec Ayam.
Les objets de script peuvent également utiliser des langages de script quelconques, fournis par des plugins, comme JavaScript, fourni par le plugin "jsinterp"
(voir aussi :
Interface de script JavaScript).[∗]
Les distributions binaire et source de Ayam contiennent plusieurs exemples de scripts pour les objets Script dans les répertoires "ayam/bin/scripts"
et "ayam/src/scripts"
, respectivement.
En outre, il existe des exemples de fichiers de scènes utilisant des objets Script dans le répertoire "ayam/scn/scripts"
, voir aussi la section
Objets script distribués.
Le tableau suivant énumère brièvement certaines capacités de l'objet Script.
Type | Parent of | Material | Converts to / Provides | Point Edit |
Script | Any+ | No | Any+ | No* |
Le code d'un objet Script sera exécuté chaque fois que le script est modifié et chaque fois que le rappel de notification de l'objet Script est appelé (par exemple parce qu'un des enfants de l'objet Script a changé).
Tant que le code d'un objet Script est exécuté, Ayam ne traitera aucun événement, sauf pour vérifier si la touche d'urgence du script <Ctrl+C>
, qui peut également être utilisée pour échapper aux boucles infinies dans la console Ayam, est enfoncée.
Il convient d'éviter d'appeler des commandes et des procédures qui conduisent au traitement d'événements ou qui sont lentes parce qu'elles manipulent ou mettent à jour l'interface graphique de la console Ayam.
En particulier, les procédures et commandes suivantes ne doivent pas être utilisées: uS
, uCR
, uCL
, selOb
, plb_update
, undo
!
Si un script échoue, l'objet Script sera désactivé au moyen de l'attribut "Active"
.[∗]
En outre, la ligne de code où l'erreur s'est produite sera mise en évidence.
Les objets de script peuvent également créer leurs propres GUI pour, par exemple, les paramètre du script.[∗]
Cela peut être réalisé en ajoutant des balises de type "NP"
avec le nom de la nouvelle propriété comme valeur à l'objet Script (entrée de menu "Special/Tags/Add Property"
).
Le script lui-même est responsable de la gestion des données et de la création de l'interface graphique des propriétés (voir la section
Propriété ScriptAttr ci-dessous).
Il existe également un type de balise pour supprimer les propriétés ("RP"
).[∗]
Grâce à cette balise, le code du script peut être caché et les utilisateurs ne peuvent donc pas le modifier involontairement.
Depuis Ayam 1.16, l'environnement d'exécution des scripts a été affiné pour permettre d'écrire des scripts plus complexes (qui traversent la scène ou utilisent le presse-papiers):
Lorsqu'un script est en cours d'exécution, le niveau actuel est le niveau enfant de l'objet Script correspondant.
En outre, le presse-papiers de l'objet est enregistré pour l'exécution du script et rétabli après la fin du script, et l'option "CreateAtMark"
est désactivée.
Cette section traite des types d'objets Script disponibles et des paramètres de contrôle supplémentaires.
"Active"
est désactivé, le script ne sera pas exécuté."Type"
est le type de l'objet Script.
Trois types d'objets Script sont actuellement disponibles :
"Run"
, le scénario sera exécuté et aucune action spéciale n'aura lieu.
"Create"
, le script sera exécuté et créera et paramétrisera de nouveaux objets.
Après l'exécution du script, le ou les objets nouvellement créés seront automatiquement déplacés dans la structure de données interne de l'objet Script.
L'objet Script ressemblera et agira comme un objet du type de celui que le script a créé.
Si le script crée, par exemple, un objet NCurve, l'objet Script peut être utilisé comme objet paramètre d'un objet outil qui a besoin d'une courbe NC, par exemple un balayage :
+-Sweep
| Cross_Section(Script)
\ Path(NCurve)
Si l'objet nouvellement créé doit être sélectionné par le code du script à des fins de paramétrage ultérieur, la sélection doit être effectuée à l'aide de la commande de l'interface de script "sL"
(qui effectue une sélection cachée dans le contexte de l'interpréteur sûr).
Par conséquent, l'exemple de script le plus simple pour un objet Script de type "Create"
ressemble à ceci :
crtOb NCurve
ou, avec un paramétrage plus poussé :
crtOb NCurve
sL
setProperty NCurveAttr(Order) 2
"Modify"
, si l'objet Script a des objets enfants, ces objets enfants seront temporairement déplacés dans la structure de données interne de l'objet Script.
Une copie de tous les objets enfants sera créée en tant que nouveaux enfants de l'objet Script.
Une sélection des nouveaux objets enfants sera établie, puis le script sera exécuté.
En général, le script modifie l'un des objets sélectionnés (déplace des points de contrôle, ajoute des balises ou fait quelque chose de similaire).
Ensuite, les deux ensembles d'objets seront échangés, les objets modifiés seront déplacés vers la structure de données interne de l'objet Script tandis que les objets enfants originaux non modifiés seront à nouveau des objets enfants de l'objet Script.
Les objets modifiés seront dorénavant fournis en amont aux parents potentiels.
Si certaines actions du script doivent être limitées à l'un des objets enfants de l'objet Script, la commande "withOb"
peut être utilisée pour réaliser facilement cette opération.
L'objet Script ressemblera et agira comme un objet du type du premier objet enfant de l'objet Script.
Si l'objet Script a par exemple un objet NCurve comme premier enfant, l'objet Script peut être utilisé comme objet paramètre d'un objet outil qui a besoin d'une NCurve, par exemple un balayage (Sweep) :
+-Sweep
+-Cross_Section(Script)
|\ NCurve
\ Path(NCurve)
Un exemple simple de script pour un objet Script de type "Modify"
qui nécessite une seule courbe NURBS comme objet enfant peut ressembler à ceci :
revertC
Remarque : pour que cela fonctionne pour les objets qui ne sont pas pris en charge directement par la commande revertC
mais qui fournissent des courbes NURBS (par exemple les objets ExtrNC ou les instances de courbes NURBS), le code doit ressembler à ceci :
convOb -inplace; revertC
"Script"
est le code du script.
Le widget correspondant est un widget texte Tcl standard qui permet d'éditer directement le code.
Il est également possible d'éditer le code dans un éditeur externe et de le copier dans l'objet Script en utilisant le presse-papiers du système d'exploitation et l'entrée "Paste (Replace)"
du menu contextuel du widget texte.
Contrairement aux autres éléments de l'interface utilisateur graphique, le widget texte possède une poignée de redimensionnement dans le coin inférieur gauche, voir également l'image ci-dessous.Si le script possède une interface graphique de propriété, il est important de sauvegarder le tableau de données de propriété entre plusieurs copies d'un objet Script (pour les rendre vraiment uniques et ne pas fonctionner avec le même ensemble de paramètres) et dans les fichiers de scène.
Pour ce faire, il suffit d'ajouter un commentaire à la première ligne du scénario. Si cela ressemble à ceci :
# Ayam, save array: <arrayname>
<arrayname>
sera enregistré avec l'objet Script dans les fichiers de scènes Ayam.
Le tableau doit contenir une entrée "SP"
qui liste tous les paramètres individuels de l'objet Script.
Notez que seuls les paramètres de cette liste seront sauvegardés dans les fichiers de scènes Ayam.
Notez également que "SP"
doit jamais contenir "SP"
.
Toutes les copies d'un objet Script doivent partager le même ensemble de paramètres individuels ou partagés.
Si les objets Script doivent stocker des quantités différentes/individuelles de données de paramètres, des listes peuvent être utilisées comme paramètres individuels.
Les objets de script peuvent également utiliser des langages de script quelconques, fournis sous forme de plugin. [∗]
Pour passer à un autre langage, la première ligne du script doit être un commentaire (dans la syntaxe de l'autre langage) avec le mot clé "use :"
suivi du nom du langage, tel que fourni par le plugin correspondant, par exemple pour JavaScript la première ligne doit ressembler à ceci :
/* Ayam, use: JavaScript */
/* Ayam, use: JavaScript, save array: MyArr */
Dans les versions de Ayam antérieures à 1.16, les scripts pouvaient utiliser n'importe quelle fonctionnalité de Tcl, Tk et l'interface de script Tcl de Ayam, ce qui représentait un énorme risque pour la sécurité. Ce n'est plus le cas aujourd'hui. Les scripts fonctionnent désormais dans un interpréteur sécurisé avec un jeu d'instructions réduit. Ils ne peuvent plus écrire dans le système de fichiers, accéder au réseau ou perturber l'état de l'application. L'accès direct à Tk est également complètement bloqué, mais les script peuvent toujours avoir leur propre interface graphique de propriété (voir les exemples ci-dessous).
En particulier, les commandes Tcl suivantes ne sont pas disponibles dans l'interpréteur safe : cd
, encoding
, exec
, exit
, fconfigure
, file
, glob
, load
, open
, pwd
, socket
, source
, unload
; auto_exec_ok
, auto_import
, auto_load
, auto_load_index
, auto_qualify
, unknown
(l'absence d'inconnu et d'autoloading entraîne une indisponibilité supplémentaire des commandes normalement disponibles via l'autoloading, comme e. g.parray
, history
).
La commande puts
est disponible de manière limitée : seul l'accès aux canaux stdout et stderr est autorisé.
Les commandes de l'interface de script Ayam qui manipulent directement l'interface utilisateur ne sont pas non plus disponibles (uS
, rV
etc.).
Veuillez vous référer à la documentation des commandes de l'interface de script pour connaître leur disponibilité dans l'interpréteur sécurisé (voir la section
Procédures and Commandes).
En outre, l'accès aux variables globales méritant une protection comme env
, ay
, ayprefs
n'est pas autorisé.
En fait, l'interpréteur sécurisé dispose d'un ensemble de variables complètement distinct.
Le transfert de données entre les deux interpréteurs doit être organisé manuellement à partir de l'interpréteur Ayam (c'est-à-dire avec des scripts qui s'exécutent dans la console Ayam).
À l'aide de scripts, qui s'exécutent dans l'interpréteur Ayam, d'autres commandes peuvent être transférées ou mises à disposition dans l'interpréteur sécurisé. Mais cela peut, bien sûr, conduire à de nouvelles failles de sécurité.
L'accès complet à l'interface de script complète à partir des objets Script peut être réactivé en recompilant Ayam.
Si cette option est activée et que des fichiers de scène contenant des objets de script sont chargés, Ayam affichera un dialogue d'avertissement, proposant de désactiver temporairement tous les objets de script qui seront lus.
Les objets Script seront désactivés en utilisant leur propriété "Active"
Script et pourront être réactivés après une inspection minutieuse du code du script manuellement ou en utilisant l'entrée du menu principal "Special/Enable Scripts"
.
Même si, au départ, les objets Script ne montrent pas et n'utilisent pas la propriété Transformations, ils peuvent effectuer des transformations dans certaines circonstances.
Pour activer cette prise en charge, une balise NP avec la valeur "Transformations"
doit être ajoutée à l'objet Script (c'est-à-dire que la propriété Transformations doit être visible pour être efficace).
Maintenant, le(s) résultat(s) du scénario peut (peuvent), en outre, être manipulé(s) par les actions de modélisation interactive standard, comme le déplacement ou l'échelle.
Notez que lors de la fourniture ou de la conversion, les transformations de l'objet Script seront ajoutées aux transformations des objets créés par le script de la même manière que par l'outil de transformation des délégués, qui échoue pour les configurations complexes (par exemple, les transformations de cisaillement (??? de coupe)).
Cependant, si les objets créés par le script ont des points modifiables, ce problème peut être évité en utilisant la commande "applyTrafo"
dans le script.
Les objets de script sont convertis en objets qu'ils créent/modifient à l'aide de l'entrée de menu principale "Tools/Convert"
.
Lors de la conversion en place, certaines règles spéciales sont en vigueur :
Pour contourner ce problème, il suffit de copier l'objet Script, puis d'utiliser la conversion en place sur la copie.
Les objets de script de type "Create"
et "Modify"
supportent les bouchons standard tels que définis dans la section
Propriété Caps et les biseaux standard tels que définis dans la section
Propriété Bevels.[∗]
Le nom des bornes sont U0
, U1
, V0
, et V1
.
Par défaut, les propriétés correspondantes ne sont pas disponibles.
Pour les rendre visibles, il faut ajouter les balises NP
à l'objet Script.
Les bouchons et les biseaux de l'objet Script seront ajoutés à tous les objets créés/modifiés qui ne possèdent pas déjà leurs propres bouchons et biseaux et qui prennent en charge les bouchons et les biseaux.
Les objets de script seront exportés dans des fichiers RIB en tant qu'objets qu'ils créent/modifient.
Cette section illustre le développement d'un objet Script pour les lignes paramétriques, autrement non disponible dans Ayam.
Nous commençons avec une version simple, qui crée d'abord un objet courbe NURBS avec deux points de contrôle et qui place ensuite les points de contrôle chacun à +/− ; la moitié de la longueur de ligne souhaitée sur l'axe X.
Il suffit de copier le code suivant dans la propriété Script d'un objet Script de type "Create"
, et de l'activer.
set length 1 crtOb NCurve -length 2 sL setPnt 0 [expr {-$length/2.0}] 0.0 0.0 1.0 setPnt 1 [expr {$length/2.0}] 0.0 0.0 1.0
Ce code fonctionne, mais si des lignes d'une longueur différente de 1 sont nécessaires, l'utilisateur doit modifier le script, ce qui n'est pas très pratique et est sujet à des erreurs.
Une interface graphique complète, facile à utiliser et sûre pour le paramètre de longueur peut être ajoutée en changeant le code du script en
# Ayam, save array: LineAttrData if { ![info exists ::LineAttrData] } { array set ::LineAttrData { Length 1 SP {Length} } } if { ![info exists ::LineAttrGUI] } { set w [addPropertyGUI LineAttr] addParam $w LineAttrData Length } set length $::LineAttrData(Length) crtOb NCurve -length 2 sL setPnt 0 [expr {-$length/2.0}] 0.0 0.0 1.0 setPnt 1 [expr {$length/2.0}] 0.0 0.0 1.0
"NP"
(nouvelle propriété) à l'objet Script avec la valeur "LineAttr"
, ce qui donne une nouvelle interface utilisateur graphique cliquable comme on peut le voir dans l'image suivante :
Le code de configuration de l'interface graphique crée un tableau Tcl essentiel pour gérer les données d'une propriété d'objet Ayam (LineAttrData).
Ensuite, l'interface graphique de la propriété LineAttr est créée et un élément est ajouté à l'interface graphique en utilisant "addParam"
.
Notez que la commande "addPropertyGUI"
attend pour une propriété nommée "SomePropertyName"
qu'un tableau de données de propriété correspondant nommé "SomePropertyNameData"
existe.
Le code de configuration de l'interface graphique ne doit s'exécuter qu'une seule fois, c'est pourquoi il vérifie d'abord la présence de la variable LineAttrGUI (qui est définie lors de la première exécution de "addPropertyGUI"
).
Voir également les sections
Property GUI Management et
Gestion des propriétés et tableaux de données pour plus d'informations sur les interfaces graphiques des propriétés et l'interface de script Ayam.
Enfin, pour permettre la sauvegarde de la valeur du paramètre dans la nouvelle propriété "LineAttr"
dans les fichiers de scène, un commentaire doit être ajouté au script ("Ayam, save array : LineAttrData"
), et pour permettre des copies multiples et individuellement paramétrées de cet objet Script, une entrée "SP"
doit être ajoutée au tableau "LineAttrData"
également.
Le script complet est également disponible sous forme de fichier script d'exemple "scripts/crtlinegui.tcl"
dans la distribution Ayam.
Cet exemple de script démontre les capacités de traversée de scène et de construction de hiérarchie dont disposent les objets Script depuis Ayam 1.16. Créez un objet Script, et ajoutez-y deux enfants, une boîte et une courbe NURBS (ordre 2, type de noeud : chordal fonctionne le mieux). Ensuite, ajoutez le script suivant à l'objet Script :
# this script needs object type "Modify" and two children: # a box/sphere and a curve withOb 1 {estlenNC len} cutOb crtOb Clone goDown -1 pasOb -move goUp sL getProp set CloneAttrData(NumClones) [expr round($len)] setProp
Les objets personnalisés sont des plugins qui étendent les capacités de Ayam en définissant des types entièrement nouveaux d'objets géométriques, par exemple. Cela peut être fait facilement, car le noyau Ayam est écrit de manière indépendante du paradigme de modélisation.
Les objets personnalisés peuvent également définir leurs propres outils de modélisation.
Ceux-ci se trouvent généralement dans le menu principal "Custom"
.
Contrairement aux autres plugins d'aide à la modélisation, les plugins d'objets personnalisés seront chargés automatiquement avec les fichiers de scène qui contiennent ces objets.
Notez que cela ne fonctionne correctement que si l'option de préférence "Main/Plugins"
est correctement définie.
Plusieurs plugins d'objets personnalisés sont déjà distribués avec Ayam. Ils sont documentés dans les sections suivantes.
L'objet SfCurve crée une courbe superformulée à partir de quatre paramètres nommés m
, n1
, n2
, et n3
(voir aussi l'image ci-dessous).
La superformule est une généralisation de la superellipse ; en coordonnées polaires, elle est définie comme suit
r(t) = (cos((m·t)/4)n2 + sin((m·t)/4)n3)-(1/n1)
où r est le rayon et t l'angle.
L'objet SfCurve permet de spécifier les valeurs de début et de fin pour t ainsi que le nombre de points d'échantillonnage entre deux.
La courbe NURBS générée est toujours fermée, mais l'ordre peut être configuré librement.
Le tableau suivant énumère brièvement certaines capacités de l'objet SfCurve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
SfCurve | No | No | NCurve | No* |
L'objet SfCurve propose les paramètres suivants :
"M"
, "N1"
, "N2"
, et "N3"
contrôlent la superformule."TMin"
est l'angle de départ."TMax"
est l'angle final.
Notez que l'angle défini par "TMin"
et "TMax"
peut en fait être supérieur à 360, comme on peut le voir dans l'image ci-dessous :
Notez également que, par exemple, le réglage de "TMin"
à 1 et de "TMax"
à 361 peut donner de meilleurs résultats que l'utilisation des valeurs par défaut.
"Sections"
est le nombre de points d'échantillonnage.
Les courbes présentant des caractéristiques nettes peuvent nécessiter des valeurs élevées d'environ 100."Ordre"
est l'ordre souhaité de la courbe."Tolerance"
et "DisplayMode"
.
La courbe de la superformule peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert"
.
De plus, la courbe de superformule supporte entièrement les opérations de réversion, de revêtement finement ????? et de dégrossissage.[∗]
Les objets SfCurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement comme Courbe Trim).
L'objet BCurve (courbe de base) crée une courbe paramétrique cubique à partir d'un certain nombre de points de contrôle rationnels et d'une base (qui est une matrice 4 par 4).[∗] La base définit l'interprétation des points de contrôle, à l'instar de la primitive du maillage bicubique de l'interface RenderMan, voir aussi la section Les patchs maillés (PatchMesh).
La BCurve représente donc une gamme de courbes paramétriques comme : B-Spline, Bezier, Catmull-Rom et Hermite.
Voir aussi l'image ci-dessus qui représente des exemples de courbes simples de certains types de base.
Le tableau suivant énumère brièvement certaines capacités de l'objet BCurve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
BCurve | No | No | NCurve | Yes |
L'objet BCurve propose les paramètres suivants :
"Closed"
détermine si la courbe est fermée."Length"
est le nombre de points de contrôle, les valeurs valables dépendent du type / étape de base ci-dessous, voir également la discussion correspondante dans la section
Propriété PatchMeshAttr.
<Control>
est maintenue enfoncée."BType"
est le type de base.
Les types de base suivants sont disponibles : "Bezier"
, "B-Spline"
, "Catmull-Rom"
, "Hermite"
, "Power"
, et "Custom"
."Basis"
est la base."BStep"
est la taille du pas, cette valeur doit être 1, 2, 3 ou 4."Tolerance"
et "DisplayMode"
.
"Basis"
et "BStep"
ne sont visibles que si le type de base est "Custom"
.
La courbe de base peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert"
.
De plus, la courbe de base supporte pleinement les opérations de retour, d'ouverture, de fermeture, de raffinement et de dégrossissage.[∗]
Les objets BCurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement comme Courbe Trim).
Le plugin d'objet BCurve définit une commande d'interface de script pour convertir les objets BCurve sur une base différente, voir aussi la section tobasisBC.
L'objet SDCurve (courbe de subdivision) crée une courbe à partir d'un certain nombre de points de contrôle non rationnels.<.[∗] Les courbes de subdivision sont similaires aux surfaces de subdivision, mais un polygone est subdivisé en une courbe limite au lieu d'un maillage polygonal en une surface limite, voir aussi la section L'objet SDMesh.
Voir également l'image ci-dessus représentant quatre exemples de courbes simples.
Le tableau suivant énumère brièvement certaines capacités de l'objet SDCurve.
Type | Parent of | Material | Converts to / Provides | Point Edit |
SDCurve | No | No | NCurve | Yes |
L'objet SDCurve propose les paramètres suivants :
"Closed"
détermine si la courbe est fermée."Length"
est le nombre de points de contrôle."Type"
est la méthode de subdivision à utiliser, les méthodes actuellement mises en oeuvre sont "Chaikin"
et "Cubic"
."Chaikin"
insère deux nouveaux points dans chaque section du polygone de contrôle original, tous les anciens points sont supprimés."Cubic"
insère un nouveau point dans chaque section du polygone de contrôle original, les points originaux ne seront pas supprimés mais plutôt déplacés vers le barycentre des deux nouveaux points environnants et du point original."Level"
détermine le nombre d'itérations de l'algorithme de subdivision à effectuer."SLength"
est le nombre de points générés par l'algorithme de subdivision.La courbe de subdivision peut être convertie en une courbe NURBS ordinaire d'ordre 2 en utilisant l'entrée de menu principale "Tools/Convert"
.
Les objets de courbe quelconques peuvent également être convertis en courbes de subdivision à l'aide de l'outil de conversion fourni qui est accessible via l'entrée du menu principal "Custom/SDCurve/From Curve"
.
Cet outil prend directement en charge les objets NCurve, ICurve et ACurve, tous les autres objets de courbe n'ayant qu'à fournir leurs points pour être pris en charge.
En outre, la courbe de subdivision prend entièrement en charge les opérations de retour, d'ouverture, de fermeture, d'affinage et de dégrossissage.
Les objets SDCurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement comme Courbe Trim).
Un objet métaballe est un objet personnalisé (voir aussi la section Gestion des objets personnalisés).
Il permet de modéliser avec des surfaces implicites en temps réel.
Pour commencer la modélisation, vous devez d'abord créer un objet "MetaObj"
en utilisant l'entrée de menu "Create/Custom Object/MetaObj"
(si cette entrée de menu n'est pas disponible, vous devez d'abord charger le plugin "metaobj"
en utilisant l'entrée de menu "File/Load Plugin"
).
"Create/Custom Object/MetaObj"
crée un soi-disant méta-monde avec un seul composant (une sphère). Le méta-monde est représenté par un objet "MetaObj"
et le composant par un objet "MetaComp"
qui est un enfant de l'objet "MetaObj"
.
Le modèle complet de la hiérarchie des objets MetaObj ressemble donc à ceci :
+-MetaWorld(MetaObj)
| C1(MetaComp)
| [...
\ Cn(MetaComp)]
Le tableau suivant énumère brièvement certaines capacités des objets MetaObj et MetaComp.
Type | Parent of | Material | Converts to / Provides | Point Edit |
MetaObj | MetaComp+ | Yes | PolyMesh | No |
MetaComp | No | No | N/A | No |
Les méta-composants ne vivent que dans un méta-monde, il n'est donc pas logique de créer des objets "MetaComp"
dans d'autres endroits, sauf en tant qu'enfant d'un objet "MetaObj"
.
Le type, les paramètres et les attributs de transformation des méta-composants définissent la fonction d'une surface implicite.
L'objet "MetaObj"
, qui représente le méta-monde, évalue cette fonction sur une grille tridimensionnelle régulière et crée une représentation polygonale pour une valeur de fonction spécifique (la valeur dite seuil).
Les attributs suivants contrôlent la création de la surface implicite :
"NumSamples"
vous spécifiez la résolution de la grille régulière tridimensionnelle, sur laquelle la fonction implicite est évaluée, dans chaque dimension.
Un nombre plus élevé d'échantillons donne une meilleure qualité, mais plus de polygones sont créés et plus de puissance CPU et de mémoire sont nécessaires. Pour la modélisation, vous devez fixer une valeur inférieure d'environ 40.
Pour le rendu final, vous pouvez augmenter cette valeur à environ 160."IsoLevel"
, définit la valeur seuil pour laquelle une représentation polygonale de la fonction implicite doit être créée.
Normalement, vous ne devriez pas avoir besoin de modifier cette valeur."ShowWorld"
. "Adaptative"
.
Dans le mode de calcul adaptatif, Ayam tente de faire varier la résolution du maillage polygonal résultant en fonction des caractéristiques de la surface implicite afin de capturer les détails fins, même si une grille grossière est utilisée.
Ceci n'est pas fait en utilisant une grille successivement affinée mais par un raffinement des triangles créés par l'algorithme original (voir aussi XXXX).
Vous pouvez contrôler le processus d'adaptation à l'aide de trois paramètres : "Flatness"
, "Epsilon"
, et "StepSize"
.
Si "Adaptive"
est réglé sur "automatic"
, Ayam n'utilisera pas le calcul adaptatif pendant qu'une action de modélisation est en cours.
Ce mode a été introduit, car le mode adaptatif peut consommer une quantité considérable de ressources CPU.
Lors de la modélisation avec des metaball, vous pouvez ajouter d'autres objets "MetaComp"
à l'objet "MetaObj"
et les paramétrer.
Un objet "MetaComp"
a les propriétés suivantes.
"Formula"
spécifie le type du méta-composant. Les types suivants sont disponibles : Metaball, Torus, Cube, Heart et Custom.
Ce dernier vous donne la possibilité d'utiliser vos propres formules."Negative"
vous définissez un composant ayant un effet négatif sur la valeur de la fonction implicite.
Les composantes négatives ne sont pas visibles en soi, mais elles sont utiles pour modéliser les trous. Essayez-le.
"Radius"
fixe le rayon du méta-ballon"EnergyCoeffA"
, "EnergyCoeffB"
, et "EnergyCoeffC"
sont quelques paramètres de la formule du méta-ball.
En général, vous pouvez laisser ces paramètres à leurs valeurs par défaut.
Si vous les modifiez, soyez prudent.
"Ri"
le rayon intérieur du tore,"Ro"
le rayon extérieur du tore,"Rotate"
fait tourner le tore d'environ 90 degrés.
"EdgeX"
, "EdgeY"
, et "EdgeZ"
, vous permettent de définir la netteté des bords du cube.
"Expression"
est un morceau de script Tcl, qui représente votre propre formule personnalisée pour un méta-composant.
L'expression peut appeler n'importe quelle commande Tcl pour calculer une valeur de champ à partir de la position actuelle de la grille, qui est donnée dans les variables globales "x"
, "y"
, et "z"
.
L'expression doit simplement renvoyer la valeur de champ calculée.[∗]
Voici un exemple d'expression personnalisée :
expr {pow($x,4)+pow($y,4)+pow($z,4)}
"f"
devait être définie pour retourner la valeur du champ.
Ce n'est plus le cas, mais l'ancien code d'expression qui se termine par set f [expr ...]
est toujours valable.Les objets Metaball peuvent être convertis en objets PolyMesh en utilisant l'entrée du menu principal "Tools/Convert"
.
Les objets Metaball seront exportés sous forme de primitives RiPointsGeneralPolygons (indépendamment du fait que la configuration réelle s'inscrive dans une primitive polygonale plus simple de l'interface RenderMan, par exemple RiGeneralPolygon).
Les balises PV ne sont pas prises en charges.
L'objet personnalisé SDNPatch est disponible depuis Ayam 1.16 et permet de modéliser avec les NURBS de subdivision, qui étendent le schéma de subdivision traditionnel avec des valeurs de noeuds et des coordonnées rationnelles. Voir également l'image ci-dessus, où dans le maillage du milieu une valeur de noeud a été fixée dans le côté gauche du maillage. The SDNPatch plugin is based on libsnurbs by Tom Cashman.
Tl existe des actions de modélisation spéciales pour la subdivision NURBS définie (voir ci-dessous) et il existe des installations d'importation/exportation PLY. En outre, il existe deux opérations de conversion qui convertissent les objets NURBS et PolyMesh en objets SDNPatch. Ainsi, les objets SDMesh peuvent également être convertis en objets SDNPatch objects in two steps: first to a PolyMesh then to the SDNPatch.
Veuillez noter que le plugin est encore à l'état expérimental, que la vérification des erreurs est limitée et que des plantages peuvent se produire, si les actions de modélisation spéciales sont utilisées.
Le tableau suivant énumère brièvement certaines capacités de l'objet SDNPatch.
Type | Parent of | Material | Converts to / Provides | Point Edit |
SDNPatch | No | Yes | PolyMesh | Yes |
La propriété SDNPatchAttr permet de définir les attributs spécifiques suivants de SDNPatch :
"Degree"
est le degré de la surface de la subdivision NURBS, les seules valeurs valables sont actuellement 3, 5 et 7."Level"
est le niveau de subdivision, un niveau élevé conduit à de nombreux polygones et à une surface lisse ; les valeurs utiles vont de 0 à 5."IsRat"
informe, si le patch est rationnel (a des valeurs de poids différentes de 1,0)."NPolys"
est le nombre de polygones générés par l'algorithme de subdivision.Cette section explique brièvement les actions de modélisation spéciales définies pour l'objet personnalisé SDNPatch.
Afin de sélectionner une face ou un bord pour une telle opération, il suffit de sélectionner tous les points de contrôle définissant la face ou le bord.
Toutes les actions de modélisation peuvent être lancées via le menu principal "Custom/SDNPatch"
.
"Face Extrude"
, de nouvelles faces sont insérées dans le maillage sur tous les bords des faces sélectionnées, les faces sélectionnées elles-mêmes sont déplacées le long de leurs normales respectives.
Si cette opération ne va pas dans le bon sens, essayez d'abord d'inverser toutes les faces, voir ci-dessous.
Depuis Ayam 1.17, cette opération a deux paramètres qui contrôlent le décalage de l'opération d'extrusion (paramètre "Length"
) et un facteur d'échelle appliqué au nouvel ensemble de points de contrôle déplacés (paramètre "Scale"
).
Le paramètre "Length" peut être négatif, pour inverser la direction de l'extrusion."Face Remove"
, la face sélectionnée est retirée du maillage."Face Merge"
, les deux premières faces sélectionnées sont retirées du maillage, les patchs voisins de la seconde face sont connectés aux faces voisines de la première face.
La décision, à savoir quels sommets des faces seront effectivement connectés, dépend des distances relatives entre les sommets : vous devez rapprocher les deux faces l'une de l'autre pour indiquer clairement comment la nouvelle connexion doit être établie."Face Connect"
, les deux premières faces sélectionnées sont retirées du maillage, les patchs voisins de la deuxième face sont connectés aux faces voisines de la première face via un ensemble de nouvelles faces.
La décision, entre quels sommets des faces les nouvelles faces sont construites,
dépend des distances relatives entre les sommets : vous devez rapprocher les deux faces pour indiquer clairement comment la nouvelle connexion doit être établie."Reset All Knots"
, réglez toutes les valeurs de noeuds sur 1.0 (par défaut)."Set Knot"
, définissez la valeur de noeud du bord sélectionné."Revert"
, inverse toutes les faces."Merge"
, fusionne plusieurs objets SDNPatch en un nouveau."Import PLY"
, importe un fichier PLY."Export PLY"
, exporte l'objet SDNPatch actuellement sélectionné vers un fichier PLY.Les objets SDNPatch peuvent être convertis en objets PolyMesh en utilisant l'entrée du menu principal "Tools/Convert"
.
Les objets SDNPatch seront exportés sous la forme de primitives RiPointsGeneralPolygons
(indépendamment du fait que la configuration réelle s'inscrive dans une primitive polygonale plus simple de l'interface RenderMan, par exemple RiGeneralPolygon
).
Les balises PV ne sont actuellement pas prises en charge.
La plupart des objets Ayam ont des propriétés standard.
Elles sont utilisées pour contrôler les transformations et les attributs communs des objets.
Les sections suivantes décrivent les propriétés standard "Transformations"
, "Attributes"
, "Material"
, "Shaders"
, et "Tags"
.
Utilisez la propriété "Transformations"
pour modifier l'emplacement, l'orientation et la taille d'un objet.
L'interface graphique de propriété correspondante contient les éléments suivants :
"Reset All !"
réinitialise immédiatement tous les attributs de transformation aux valeurs par défaut."Translate_X (_Y, _Z)"
est le déplacement de l'objet à partir de l'origine du monde dans la direction X (Y, Z)."Rotate_X (_Y, _Z)"
est l'angle (en degrés) de la rotation de l'objet autour de l'axe X (Y, Z).
Voir ci-dessous pour plus d'informations sur la manière d'utiliser ces entrées."Quaternion"
le quaternion qui est utilisé pour déterminer l'orientation de l'objet dans l'espace. "Echelle_X (_Y, _Z)"
détermine un facteur d'échelle qui sera appliqué à l'objet dans la direction de l'axe local X (Y, Z).Comment utiliser les attributs de rotation ?
L'orientation d'un objet dans l'espace peut être exprimée en utilisant les angles d'Euler. Cette notation (simplement trois angles déterminant une rotation autour des axes principaux du système de coordonnées) souffre d'un phénomène appelé gimbal lock (blocage de cardan ou perte d'un degré de liberté).
Pour éviter les blocages de cardan, Ayam maintient en interne l'orientation d'un objet dans un quaternion. Ce quaternion contient non seulement des informations sur les angles, mais aussi sur l'ordre dans lequel les rotations partielles se sont produites.
Il est important de savoir que les valeurs des angles de la propriété de rotation ne doivent pas être lues de manière à ce que l'objet soit d'abord tourné autour de X par des degrés d'angle x puis autour de Y par des degrés d'angle y puis autour de Z par des degrés d'angle z. En fait, aucune information sur l'ordre dans lequel les rotations partielles se sont produites ne peut être déduite de ces trois valeurs. Cela implique, par exemple, que les valeurs 0 0 45 peuvent en fait indiquer une orientation différente de celle exprimée par les mêmes valeurs 0 0 45.
La rotation d'un objet est facile, il suffit d'ajouter la quantité de rotation de l'objet par rapport à la valeur actuellement affichée dans l'entrée appropriée.
Par exemple, si un objet doit être tourné de 45 degrés autour de X et que l'entrée de l'angle x affiche un 30, entrez 75.
Ensuite, appuyez sur le bouton "Apply".
Si plusieurs entrées sont modifiées, les rotations seront effectuées dans l'ordre suivant : X (si modifié), Y (si modifié), Z (si modifié).
Ne modifiez pas plus d'une entrée à la fois, sauf si vous savez vraiment ce que vous faites et à vos risques et périls.
L'annulation d'une rotation unique fonctionne de la même manière, il suffit d'utiliser une soustraction au lieu d'une addition.
Annuler toutes les rotations (remettre l'objet dans son orientation d'origine) est également simple : entrez 0 pour les trois entrées en même temps, puis appuyez sur "Apply".
Pour copier uniquement l'orientation d'un objet vers d'autres objets en utilisant le presse-papiers des propriétés, tous les éléments de propriété Translate et Scale doivent être marqués/sélectionnés par double-clic, puis "Edit/Copy Property"
peut être utilisé.
Marquer simplement les éléments Rotate et utiliser "Edit/Copy Marked Prop"
ne fonctionnera pas, car le quaternion ne sera alors pas copié correctement.
La propriété "Attributs"
d'un objet contient actuellement :
"Objectname"
, le nom de l'objet.
Il est également affiché dans la boîte de liste ou l'arbre des objets et peut être écrit dans les flux RIB."Hide"
, si cet attribut est défini, l'objet n'est pas dessiné.
Il peut également être exclu de l'exportation RIB."HideChildren"
, si cet attribut est défini, les objets enfants de cet objet ne sont pas dessinés.
Cet attribut est par exemple utilisé par les objets "NPatch"
pour empêcher que les courbes de trim ne soient dessinées dans des vues normales."RefCount"
, affiche simplement le nombre d'objets qui pointent vers cet objet, par exemple par le biais de relations maître-instance ou objet-matériau.
Les objets ayant un nombre de référence supérieur à zéro ne peuvent pas être supprimés.La propriété "Material"
vous permet de connecter des objets géométriques à des matériaux (voir aussi la section
Les matériaux).
L'interface graphique de la propriété Material se compose des éléments suivants :
"Clear Material!"
efface immédiatement toute connexion de l'objet actuel avec son matériau."Add/Edit Material!"
ajoute un matériau à l'objet courant (s'il n'en a pas) et sélectionne immédiatement le nouvel objet "Material" pour l'édition.
Si l'objet courant possède déjà un matériau, celui-ci est recherché et sélectionné pour être édité."Materialname"
est le nom du matériau de cet objet.
Si le nom est modifié, l'objet sera déconnecté de l'ancien matériau et connecté au nouveau matériau.
Une façon plus simple de connecter des objets géométriques à des objets matériaux est de déposer simplement les objets géométriques sur l'objet matériau en utilisant le glisser-déposer dans la vue arborescente.Les propriétés "Shader" sont utilisées pour attacher des ombres d'un certain type à des objets.
Le nom de la propriété contient le type d'ombre, par exemple les ombres de lumière peuvent être attachés en utilisant une propriété nommée "LightShader"
uniquement.
Les autres type d'ombres ou de propriétés d'ombrages sont : "Surface"
, "Displacement"
, "Interior"
, "Exterior"
, "Atmosphere"
, et "Imager"
.
Chaque interface graphique de propriété d'ombrage, même si aucune ombre n'est attachée à un objet, commence par le bouton "Set new shader."
.
Ce bouton permet de sélectionner une nouvelle ombre du type approprié.
Si vous appuyez sur le bouton "Set new shader."
, un dialogue avec une liste d'ombres apparaît.
Si cette liste est vide, Ayam n'est probablement pas configuré correctement (ou vous n'avez tout simplement pas d'ombre du type approprié).
Vérifiez le réglage des préférences "Main/Shaders"
.
Une fois qu'une nouvelle ombre a été définie, les arguments de l'ombre seront analysés et une interface graphique sera générée pour permettre de remplir les arguments de l'ombre avec des valeurs.
Le bouton "Delete shader."
peut être utilisé pour supprimer l'ombre actuellle de l'objet sélectionné.
Le bouton "Default Values."
réinitialise tous les arguments de l'ombre aux valeurs par défaut.
Voir aussi la section
Travailler avec des ombres ci-dessous.
Tous les autres éléments de l'interface graphique des propriétés de l'ombre dépendent du moteur de rendu actuellement attaché, c'est-à-dire qu'ils représentent les arguments de la fonction du moteur.
L'analyse d'une ombre comprend la détection du type d'ombre et la lecture des noms, types et valeurs par défaut de tous les arguments de l'ombre.
Les ombres seront analysées dans les occasions suivantes :
"Scan for Shaders !"
dans le dialogue des préférences,"Special/Scan Shaders"
,"ScanShaders"
option dans le dialogue "Select Renderer"
, "Default Values"
dans l'interface graphique des propriétés de l'ombre.Notez qu'actuellement, Ayam ne fonctionne correctement qu'avec les ombres qui ont au plus deux points dans leur nom de fichier et que Ayam va simplement sauter tous les arguments de tableau (et émettre un message d'avertissement) pendant l'analyse d'une ombre. Ces arguments de tableau n'apparaissent donc jamais dans les propriétés des ombres des interfaces graphiques et des RIB exportés par Ayam. Notez également que les valeurs par défaut des arguments de l'ombre de type couleur seront fixées, sans notification, dans la plage 0-255.
Certains moteurs de rendu utilisent des arguments de tableau pour définir les matrices de transformation. Si c'est le cas et que vous avez accès au code source du moteur, vous pouvez modifier ces moteurs pour permettre de travailler avec la matrice de transformation portant les arguments de l'ombre. Pour ce faire, il suffit de changer toutes les définitions de matrice de transformation portant des tableaux à virgule flottante en matrices réelles. Par exemple, si le moteur contient un
"float a_matrix_parameter[16]"
changez cela en
"matrix a_matrix_parameter"
.
Notez que ces modifications des définitions des arguments du moteur nécessitent probablement aussi des modifications du code source du moteur qui utilise ces arguments. Ayam est capable de traiter les matrices grâce à leur taille fixe de 16 valeurs flottantes, et parce que libslcargs est capable de fournir les valeurs par défaut pour une matrice (mais pas pour un tableau !).
Si Ayam a été compilé sans bibliothèque d'analyse des ombres (par exemple sans libslcargs), Ayam analysera les fichiers XML créés par "sl2xml"
du projet K-3D (voir "http://www.k-3d.org/"
) au lieu des ombres compilées.
Le bouton "Set new shader."
ouvrira dans ce cas toujours une boite de dialogue de recherche de fichier, vous permettant de sélectionner un fichier XML, qui a été créé par sl2xml.
De plus, le bouton "Default Values."
ne sera pas disponible ; vous devez utiliser "Set new shader."
à la place.
A partir de la version 1.3, Ayam prend également en charge les plugins d'analyse des ombres pour permettre l'analyse des ombres compilées avec différents compilateurs d'ombres, voir aussi la section Plugins d'analyse des ombres (shaders).
Enfin, depuis la version 1.25, il existe un script qui analyse le code source des ombres, voir aussi la section Analyse des ombrages (shaders).
Le bouton "Default Values."
réinitialise tous les arguments de l'ombre aux valeurs par défaut.
De plus, l'ombre compilée sera à nouveau analysée et l'interface graphique des propriétés sera adaptée (les nouveaux arguments de l'ombre apparaîtront, les arguments de l'ombre supprimée disparaîtront).
Par conséquent, ce bouton est très pratique si vous avez à gérer des ombres changeantes : il suffit d'éditer l'ombre, de la recompiler, puis de revenir dans Ayam en appuyant sur le bouton "Default Values."
.
Notez que cela détruit vos valeurs d'arguments de l'ombre éventuellement soigneusement ajustés.
Si vous souhaitez conserver les anciennes valeurs des arguments de l'ombre lorsqu'une ombre change, il suffit de copier la propriété de l'ombre en utilisant le presse-papiers des propriétés (menu principal : "Edit/Copy Property"
) avant de charger les nouvelles valeurs par défaut et de recoller la propriété en utilisant "Edit/Paste Property"
après le chargement des nouvelles valeurs par défaut.
Attention ! Cela ne fonctionne correctement que si le type d'arguments de l'ombre existant ne change pas et si aucun argument de l'ombre n'est supprimé dans la nouvelle version de l'ombre.
Il est également possible de copier simplement certaines valeurs de paramètres (arguments de l'ombre dont les types ne changent pas) en les sélectionnant en double-cliquant sur les noms de paramètres dans l'interface graphique des propriétés de l'ombre, puis en utilisant par exemple "Edit/Copy Marked Prop"
(voir également la description du presse-papiers des propriétés dans la section
Propriétés).
De nombreux objets-outils ont une propriété "Caps"
pour fermer facilement la surface créée.
Les noms exacts des attributs disponibles dans cette propriété sont spécifiques à chaque type d'objet, car les noms des bornes de chaque type d'objet sont différents : les noms des bornes d'un objet Skin sont par exemple "Left"
, "Right"
, "Start"
, et "End"
, tandis que les noms des bornes d'un objet NPatch sont "U0"
, "U1"
, "V0"
, et "V1"
(voir aussi l'image ci-dessus).
Pour réduire l'encombrement de l'interface graphique, la propriété Caps ne contient initialement que des boutons qui permettent d'activer/désactiver le bouchon associé et de contrôler l'apparence des autres options.
Pour chaque bouchon activé, un bouton de menu apparaîtra qui permet de définir le type de bouchon correspondant (voir la section Propriété CapAttr pour plus d'informations sur les types de bouchon disponibles).
En outre, la propriété Caps permet de créer des bouchons qui s'intègrent à la surface de l'objet ancètre correspondant (après l'intégration éventuelle de biseaux) via le paramètre supplémentaire "Integrate"
.
Toutefois, l'intégration n'est prise en charge que pour les types de bouchons "Simple"
et "Simple3D"
.
Si l'intégration est activée et qu'il y a un biseau qui ne s'intègre pas à la surface de l'ancêtre, le bouchon s'intégrera dans le biseau à la place.
L'intégration modifiera le nombre d'objets fournis et les paramètres de la surface de l'ancêtre.
De nombreux objets-outils ont une propriété "Bevels"
qui permet d'arrondir facilement les bords de la surface créée, qui sinon seraient tranchants.
Les noms exacts des attributs disponibles dans cette propriété sont spécifiques à chaque type d'objet, car les noms des bornes de chaque type d'objet sont différents : les noms des bornes d'un objet Skin sont par exemple "Left"
, "Right"
, "Start"
, et "End"
, tandis que les noms des bornes d'un objet NPatch sont "U0"
, "U1"
, "V0"
, et "V1"
(voir aussi l'image ci-dessus).
Pour réduire l'encombrement de l'interface graphique, la propriété Bevels ne contient initialement que des boutons qui permettent d'activer/désactiver le biseau associé et de contrôler l'apparence des autres options.
De nombreux attributs de la propriété Bevels sont également disponibles pour l'objet Bevel (voir aussi Propriété BevelAttr).
En plus de ces attributs, la propriété Bevels permet d'intégrer la surface biseau créée avec la surface parent de l'objet/outil correspondant via le paramètre supplémentaire "Integrate"
.
L'intégration modifiera le nombre d'objets fournis et les paramètres de la surface d'origine.
Utilisez la propriété "Tags"
pour modifier les balises d'un objet.
Voir aussi l'image ci-dessous.
Toutes les entrées de balises ont un menu contextuel, où la balise correspondante peut être copiée/ajoutée dans le presse-papiers des propriétés.[∗]
Les valeurs des balises longues et multilignes seront affichées de manière abrégée (avec une ellipse – ...).
L'interface graphique des propriétés des balises se compose également des éléments standard suivants (voir également l'image ci-dessus) :
"Remove all Tags!"
supprime immédiatement tous les tags de l'objet."Remove Tag!"
est un menu qui permet de sélectionner et de supprimer rapidement une seule balise de l'objet."Add Tag!"
ouvre une petite fenêtre de dialogue, où un nouveau type de balise et une nouvelle valeur peuvent être saisis (voir aussi l'image ci-dessous).
La ligne de type de balise possède un menu de valeurs par défaut, contenant les types de balises les plus importants.[∗]"Ok"
, une nouvelle entrée sera ajoutée à la propriété des balises, affichant la nouvelle balise.
Il suffit de cliquer sur l'entrée pour revenir au dialogue, pour supprimer la balise en utilisant "Clear"
puis "Ok"
, ou pour changer le type ou la valeur de la balise.<Alt-Down>
et <Alt-Up>
respectivement.
Notez qu'en mode multiligne, les touches <Enter>
, <Return>
, et aussi <Tab>
se comporteront différemment.
Les balises permettent d'attacher facilement des informations quelconques (par exemple, des attributs d'interface RenderMan supplémentaires, des attributs spéciaux pour les plugins ou même des scripts) aux objets. Une balise se compose de deux chaînes de caractères, l'une définissant le type et l'autre la valeur de la balise.
Les balises peuvent être manipulées via l'interface graphique des propriétés des balises (voir la section Propriété Tags (balises)) ou l'interface de script (voir la section Manipuler les balises (tag)).
En outre, il existe un sous-menu correspondant dans le menu principal (voir la section Tags Menu).
Les deux tableaux suivants contiennent une liste compacte des noms de balises et de brèves explications pour tous les types de balises connus dans Ayam et dans toutes les extensions (plugins) qui les accompagnent ; les types de balises marqués d'un astérisque (*) sont réservés à un usage interne.
Name | Description |
ANS | After Notify Script |
AsWire | X3D export control |
BNS | Before Notify Script |
BP | Bevel Parameter |
CP | Cap Parameter |
CIDR | Importance Driven Rendering |
CCIDR | Importance Driven Rendering |
DANS | Disabled After Notify Script |
DBNS | Disabled Before Notify Script |
DC | Depth Complexity |
HC | Has Children* |
IDR | Importance Driven Rendering |
IIDR | Importance Driven Rendering |
MI | Material ID* |
MN | Mean Normal |
mn | master name* |
MP | Mean Point |
NC | Notify Count* |
NM | Notify Master* |
NO | Notify Object* |
NoExport | Export Control |
NP | New Property |
NT | Normals Tangents |
Name | Description |
OI | Object ID* |
PV | Primitive Variable |
RiAttribute | RenderMan Export |
RiDisplay | RenderMan Export |
R3IDR | Importance Driven Rendering |
RIDR | Importance Driven Rendering |
RiHider | RenderMan Export |
RiOption | RenderMan Export |
RP | Remove Property |
SaveMainGeom | Geometry Management |
SavePaneLayout | Geometry Management |
SP | Selected Points |
TC | Texture Coordinates |
TM | Transformation Matrix* |
TP | Tessellation Parameters |
UMM | U Min Max |
VMM | V Min Max |
XML | XML Data |
Le type de balise "RiAttribute"
peut être utilisé pour attacher des attributs d'interface RenderMan quelconques aux objets.
Ceci est pratique si un moteur de rendu avec beaucoup d'attributs RiAttributes différents des attributs RiAttributes standard est utilisé.
Les balises "RiAttribute"
attachées à un objet géométrique remplacent les balises "RiAttribute"
éventuellement attachées à l'objet matériau de cet objet géométrique.
Pour créer une balise de type RiAttribute, la chaîne de caractères doit être "RiAttribute"
.
La syntaxe de la chaîne de valeur est la suivante :
<attrname>,<paramname>,<paramtype>,<param>
où
<attrname>
est le nom de l'attribut (par exemple "render") ;
<paramname>
est le nom du paramètre (par exemple "displacementbound") ;
<paramtype>
est un caractère unique définissant le type de paramètre (il peut s'agir d'un f
– float, g
– float pair, i
– integer, j
– integer pair, s
– string, c
– color, p
– point); et enfin
<param>
est la valeur du paramètre lui-même (par exemple une valeur flottante : "1.2", une valeur entière : "3", une chaîne de caractères : "on", une couleur : "1,1,1" ou un point : "0.4,0.5,1.0").
Exemple
Quelques exemples de balises RiAttribute valides :
RiAttribute
render,truedisplacement,i,1
RiAttribute
dice,numprobes,j,3,3
RiAttribute
radiosity,specularcolor,c,0.5,0.5,0.5
Notes
La balise "RiAttribute"
ne gère qu'un seul paramètre à la fois.
Notez également que les balises "RiAttribute"
peuvent être créées beaucoup plus facilement en utilisant l'entrée de menu "Special/Tags/Add RiAttribute"
.
La base de données des RiAttributs pour cette interface graphique peut être étendue en éditant le fichier ayamrc, voir la section
Le fichier Ayamrc.
Le type de balise "RiOption"
peut être utilisé pour attacher des options d'interface RenderMan quelconques à la scène. Ceci est pratique si un moteur de rendu avec de nombreuses RiOptions différentes des RiOptions standard est utilisé.
Cependant, elles ne seront utilisées par l'exportateur RIB que si elles sont attachées à l'objet "Root"
.
La syntaxe est similaire à celle du type de balise "RiAttribute"
, voir ci-dessus.
Exemple
RiOption
radiosity,steps,i,16
RiOption
shadow,bias0,f,0.01
Notes
Les balises "RiOption" peuvent être créées facilement en utilisant l'entrée de menu "Special/Tags/Add RiOption"
.
Les balises créées avec cette interface graphique seront toujours ajoutées à l'objet "Root"
.
Il n'est pas nécessaire de les sélectionner lorsque l'interface graphique est utilisée.
En outre, la base de données des RiOptions pour cette interface graphique peut être étendue en éditant le fichier ayamrc, voir la section
Le fichier Ayamrc.
Le type de balise "TC"
peut être utilisé pour attacher des coordonnées de texture à des objets ou des matériaux.
La balise "TC"
contient toujours une liste de huit valeurs flottantes séparées par des virgules, qui spécifient un mappage pour quatre points 2D (un quadrilatère) dans l'espace de texture à partir des valeurs par défaut (0,0), (1,0), (0,1) et (1,1) vers les nouvelles valeurs spécifiées.
Exemple
TC
0,0,10,0,0,10,10,10
Modifie l'espace des coordonnées de la texture de manière à ce qu'un nombre plus important et plus petit de tuiles d'une texture soient affichées sur une primitive.
TC
0,0,0,1,1,0,1,1
Retourne l'espace des coordonnées de la texture sur deux coins.
Une ombre générant normalement des bandes verticales créera maintenant des bandes horizontales.
TC
0,1,0,0,1,1,1,0
Tourne l'espace des coordonnées de texture de 90 degrés.
Une ombre générant normalement des bandes verticales créera maintenant des bandes horizontales.
Notes
Les balises "TC"
attachées à un objet géométrique remplacent les balises "TC"
éventuellement attachées à l'objet matériau de cet objet géométrique.
Le comportement exact d'un objet équipé d'une balise "TC"
dépend fortement de l'ombre et de son utilisation des coordonnées de la texture.
Notez également qu'en utilisant les balises "TC"
, toutes les coordonnées de primitive de de texture sont modifiées. (????)
Pour modifier les coordonnées de texture de sous-primitives (par exemple de points de contrôle uniques d'un patch NURBS), il faut utiliser les balises "PV"
(Primitive Variable) à la place.
Pour faciliter le réglage des valeurs des balises "TC"
, Ayam fournit un éditeur graphique spécial comme indiqué ci-dessous.
L'éditeur de coordonnées de texture
peut être ouvert en utilisant l'entrée de menu principal "Special/Tags/Edit TexCoords"
et vous permet d'éditer les balises de coordonnées de texture de manière intuitive.
Pour cela, les coordonnées de la texture actuelle sont affichées comme un polygone noir dans un canevas par rapport aux valeurs d'origine (par défaut), qui sont affichées en gris. De petites flèches indiquent respectivement les directions s et t positives.
Les boutons "RotateR"
et "RotateL"
décalent les valeurs des coordonnées entre les quatre points.
Il en résulte une rotation de 90 degrés de l'espace de texture.
Les boutons "FlipS"
et "FlipT"
inversent les valeurs des coordonnées de texture dans les directions s et t respectivement.
Ceci est utile, par exemple, si un mappage de texture doit être corrigé pour une image qui apparaît à l'envers.
Les boutons suivants permettent de déplacer (en utilisant "MoveS"
et "MoveT"
) et d'échelonner (en utilisant "ScaleS"
et "ScaleT"
) les coordonnées de la texture d'une quantité spécifique qui est donnée dans le premier champ de saisie.
Les boutons de menu "Load"
et "Save"
permettent de :
Le dialogue de coordonnées de texture est sans mode, il peut rester ouvert tout en faisant du maquettage (???? modelling).
Le type de balise "PV"
peut être utilisé pour attacher des données quelconques à des primitives géométriques et même à des sous-primitives.
À l'aide de variables primitives, les coordonnées de texture peuvent être attachées
aux sommets du patch NURBS des couleurs primitives ou distinctes sur les faces ou même sur les sommets uniques d'un maillage polygonal.
Dans ce dernier cas, les données sont correctement interpolées par le moteur de rendu RenderMan avant d'être transmises à l'ombre de surface.
Lors du rendu, toutes les données définies dans une balise "PV"
sont remises à l'ombre de surface qui est attaché à la primitive géométrique respective en utilisant des paramètres de l'ombre supplémentaires.
Pour l'exportation RIB, les déclarations "RiDeclare"
appropriées seront créées automatiquement par Ayam.
Cependant, Ayam ne vérifie pas si les ombres utilisent réellement les données de la balise "PV"
.
La syntaxe de la valeur de la chaîne d'une balise PV est la suivante :
<name>,<detail>,<type>,<ndata>,<data>
où
<name>
est le nom de la variable primitive ;
<detail>
(ou la classe de stockage) doit être l'une des suivantes : "uniform"
, "varying"
, "sommet"
, ou "constant"
;
<type>
est un caractère unique décrivant le type de données ("c"
(color), "f"
(float), "g"
(float[2]), "n"
(normal), "p"
(point), "s"
(string), or "v"
(vector), Voir aussi la documentation de la balise "RiAttribute"
ci-dessus);
<ndata>
est un nombre entier décrivant combien d'éléments de données suivront ; et
<data>
est une liste séparée par des virgules composée de <ndata>
éléments de type <type>
.
Exemples
PV
mycolor,constant,c,1,0,1,0
ajoute une seule valeur de couleur (0,1,0), qui est la même sur toute la primitive, l'ombre de surface respectif doit avoir un paramètre "color mycolor"
;
PV
mys,varying,f,4,0.1,0.2,0.3,0.4
pourrait être utilisé pour ajouter une valeur flottante distincte à chaque point d'angle d'un patch NURBS à quatre points (d'ordre, de largeur et de hauteur 2), l'ombre de surface correspondante devrait avoir un paramètre "varying float mys"
.
Notes
Les types de données suivant ne sont pas pris en charge : "i"
, "j"
.
La prise en charge des type "n"
(normal), et "v"
(vector) ont été ajoutés dans Ayam 1.17.
Actuellement, tous les objets géométriques ne respectent pas les étiquettes PV à l'exportation des RIB. Les objets géométriques qui prennent actuellement en charge les étiquettes PV le sont : SDMesh, PolyMesh, PatchMesh, NPatch, et BPatch. La plupart des objets outils qui créent en interne des objets NPatch prennent également en charge les balises PV.[∗] N'oubliez pas que le même ensemble de balises sera utilisé pour toutes les surfaces qui composent l'objet outil, par exemple la surface balayée, ses biseaux et ses bouchons.
En outre, le nombre d'éléments de données, qui dépend du détail ou de la classe de stockage, du type de primitive géométrique et de la configuration de la primitive géométrique, n'est pas vérifié par Ayam. Certaines bibliothèques d'écriture RIB, cependant, vérifient les nombres et omettent silencieusement la variable primitive en cas de non-concordance. Le RIB doit être examiné pour détecter la présence de la variable primitive après l'exportation, en particulier si des balises PV ont été ajoutées ou modifiées manuellement.
Le type de balise "RiHider"
peut être utilisé pour choisir et paramétrer différents algorithmes de suppression des surfaces cachées lors du rendu de la scène exportée avec un moteur de rendu compatible RenderMan. Les balises RiHider doivent être attachées à l'objet racine pour pouvoir être utilisées.
La syntaxe d'une balise RiHider est assez similaire à celle d'une balise RiAttribute : "<type>,<parameterlist>"
où "<type>"
est le nom d'un algorithme et "<parameterlist>"
est une liste de triplets séparés par des virgules, composée du nom, du type et de la valeur d'un paramètre.
Exemple
Une étiquette RiHider pourrait ressembler à ça :
RiHider
hidden,depthfilter,s,midpoint
Le type de balise "RiDisplay"
peut être utilisé pour ajouter des fichiers de sortie de différents types (par exemple, contenant des informations de tampon de profondeur) à la scène ou pour contrôler directement le format de sortie lors du rendu de la scène exportée avec un moteur de rendu compatible RenderMan.
Les balises RiDisplay doivent être attachées à l'objet Root pour pouvoir être utilisées.
La syntaxe d'une balise RiDisplay est la suivante : "<name>,<type>,<mode>,<parameterlist>"
, où
"<name>"
est un nom de fichier ou d'appareil,
"<type>"
spécifie la destination des données d'image (par exemple écran ou fichier),
"<mode>"
spécifie les informations qui doivent être stockées ou affichées (par exemple valeur des couleurs : rgb, ou valeur de la profondeur : z), et
"<parameterlist>"
est une liste de triplets séparés par des virgules, facultativement présente, consistant en un nom, un type et la valeur d'un paramètre.
Exemple
Une balise RiDisplay pour ajouter la sortie des informations de la mémoire tampon de profondeur au fichier "imagez.tif"
pourrait ressembler à ceci :
RiDisplay
imagez.tif,file,z
Notes
Le nom sera automatiquement changé en "+nom"
à l'exportation RIB s'il ne commence pas déjà par un plus (sauf pour la toute première déclaration RiDisplay).
Le type de balise "AsWire"
fait passer l'exportation de certains objets du mode surface au mode filaire.
La valeur de la chaîne de cette balise est ignorée.
Tout ce qui compte est la présence de la balise.
Notez que seule l'exportation X3D honore cette balise.
Le type de balise "NoExport"
peut être utilisé pour exclure certains objets des RIB exportés.
Lavaleur de la chaîne de cette balise est ignorée.
Tout ce qui compte est la présence de la balise.
Les objets enfants des objets avec la balise "NoExport"
seront également exclus du RIB.
Depuis Ayam 1.6, les objets légers reconnaissent également le tag "NoExport"
.
Notez qu'indépendamment des balises "NoExport"
potentiellement présentes, des archives RIB seront créées en permanence pour tous les objets référencés (même si les balises "NoExport"
sont ajoutées à toutes les instances).
Le type de balise "SaveMainGeom"
peut être utilisé pour enregistrer la géométrie de la fenêtre principale et de la fenêtre de la boîte à outils (si elle est ouverte) dans un fichier de scène.
Pour cela, le code de sauvegarde de la scène vérifie la présence d'une balise "SaveMainGeom"
pour l'objet Root et la remplit avec les informations géométriques actuelles.
Le code de lecture de la scène vérifie la présence d'une balise "SaveMainGeom"
pour l'objet Root après le remplacement d'une scène et rétablit les géométries de la fenêtre principale et de la boîte à outils.
Cette balise n'est remplie que de données significatives et la géométrie n'est restaurée que si Ayam est en mode GUI multi-fenêtres.
Le type de balise "SavePaneLayout"
peut être utilisé pour enregistrer les tailles relatives des fenêtres internes de la fenêtre principale lorsque Ayam fonctionne en mode GUI à fenêtre unique dans un fichier de scène.
Pour cela, le code de sauvegarde de la scène vérifie la présence d'une balise "SavePaneLayout"
pour l'objet Root et la remplit avec les informations géométriques actuelles.
Le code de lecture de la scène vérifie la présence d'une balise "SavePaneLayout"
pour l'objet Root après le remplacement d'une scène et rétablit les géométries des fenêtres internes.
Cette balise n'est remplie que de données significatives et la disposition du volet n'est restaurée que si Ayam est en mode GUI à fenêtre unique.
La balise de type "TP"
peut être utilisée pour enregistrer les paramètres de tessellation sur les objets de type "NPatch"
(et les objets qui peuvent être convertis en objets de type "NPatch"
).
Ces paramètres de tessellation seront utilisés lorsque l'objet NPatch est tesselé pour, par exemple, une conversion en un objet PolyMesh.
La syntaxe de la balise TP est :
"<smethod>,<sparamu>,<sparamv>[,<refinetrims>]"
où
<smethod>
est une valeur entière comprise entre 1 et 6, qui décrit la méthode d'échantillonnage à utiliser (1 – ParametricError, 2 – PathLength, 3 – DomainDistance, 4 – NormalizedDomainDistance, 5 – AdaptiveDomainDistance, et 6 – AdaptiveKnotDistance) et
<sparamu>
et <sparamv>
sont des valeurs flottantes décrivant la valeur du paramètre respectif pour la méthode d'échantillonnage choisie.
La deuxième valeur du paramètre est ignorée pour les méthodes d'échantillonnage 1 et 2.
La dernière valeur, "refinetrims"
, est un nombre entier entre 0 et 5 contrôlant combien de fois les courbes de trim doivent être affinées avant la tessellation pour améliorer la fidélité de la tessellation le long des bords de trim.
La valeur "refinetrims"
peut être omise et est fixée par défaut à 0.
Notez que la syntaxe de la balise "TP"
a changé dans Ayam 1.9, l'ancienne syntaxe n'autorisait qu'un seul paramètre.
Les balises TP peuvent être facilement créées à l'aide de l'interface graphique de tessellation, qui peut être lancée à partir de l'entrée de menu principal "Tools/Surface/Tesselate"
(voir aussi la section
Outil de tessellation (triangularisation)).
Exemple
Une balise "TP" peut ressembler à ça :
TP
1,0.5,0.6
Le type de balise "DC"
n'est utilisé que par le plugin de prévisualisation AyCSG CSG pour stocker la complexité de profondeur des primitives CSG.
La syntaxe de la balise DC est : "<dcval>"
où "<dcval>"
est une valeur entière positive décrivant la complexité en profondeur de la primitive CSG.
Voir aussi la section
Aperçu CSG à l'aide du plugin AyCSG pour plus d'informations concernant la valeur de la complexité de profondeur.
Exemple
Une étiquette DC (valable par exemple pour un tore) pourrait ressembler à ceci :
DC
2
Le type de balise "NP"
(nouvelle propriété) peut être utilisé pour ajouter de nouvelles interfaces graphiques de propriété à des objets individuels.
La valeur de la balise est le nom d'une nouvelle propriété.
Le code nécessaire pour gérer les données de la propriété et les fenêtres qui constituent l'interface graphique de la propriété elle-même doivent être présents dans le contexte Tcl de Ayam avant que l'utilisateur ne clique sur la nouvelle propriété dans la zone de liste des propriétés.
Exemple
NP
Transformations
Cette balise peut par exemple être ajoutée aux objets Script qui créent des objets.
Toute GUI de propriété contrôlée par script doit également être activée en utilisant une balise NP comme celle-ci :
NP
MyProperty
Notes
Les balises NP peuvent être gérées plus facilement grâce à un dialogue spécialisé disponible dans le menu principal "Special/Tags/Add Property"
.
Le type de balise "RP"
(remove property) peut être utilisé pour supprimer l'accès à l'interface graphique d'une propriété à partir d'objets individuels.
La valeur de la balise est le nom de la propriété à supprimer.
L'accès à l'interface graphique sera bloqué en omettant simplement la propriété dans la liste des propriétés.
Notez bien : la propriété est toujours présente et active dans les objets eux-mêmes et les valeurs peuvent toujours être définies à l'aide de l'interface de script.
Exemple
RP
Script
supprime l'accès direct à la propriété Script d'un objet Script.
Idéalement, l'objet Script possède également une balise "NP"
, pour permettre un contrôle direct des paramètres du script.
De cette façon, l'utilisateur ne voit pas le script (code), mais seulement une interface graphique de paramètres propre.
Ci-dessous un autre exemple : la balise
RP
Transformations
peut être ajouté aux objets Instance pour les transformer en références (instances sans attributs de transformation propres).
Notes
Les balises RP peuvent être gérées plus facilement grâce à un dialogue spécialisé disponible dans le menu principal "Special/Tags/Remove Property"
.
Le type de balise "BNS"
(before notify script) peut être utilisé pour ajouter des scripts à un objet, qui sera exécuté avant que la notification de cet objet ne commence.
Une notification, à son tour, sera exécutée parce que, par exemple, l'un des enfants de l'objet a changé (Voir aussi la section
Le concept de modélisation outils-objets).
Lorsque le script s'exécute, l'objet correspondant avec la balise BNS sera déjà sélectionné. Le niveau et la sélection actuels seront rétablis lorsque le script se terminera, c'est-à-dire que le script n'aura plus besoin de faire ni l'un ni l'autre.
Exemple
Une simple balise BNS pourrait ressembler à ceci :
BNS
puts "notify callback about to fire"
Un exemple plus utile (qui est également disponible comme scène d'exemple "ayam/scn/scripts/bnstag.ay"
) :
BNS
getProp;
set ::RevolveAttrData(Sections) [expr int($::RevolveAttrData(ThetaMax)/10)];
setProp
Cette balise calcule le nombre de sections à partir de la valeur "ThetaMax" d'un objet "Revolve".
Chaque fois que le "ThetaMax" est modifié, le nombre de sections s'adapte, de sorte que chaque section couvre toujours le même angle.
L'appel de fonction int()
est nécessaire car le code C de la commande setProp
de la propriété RevolveAttr ne recherche que les données entières dans la variable Sections
et sans int()
la variable contiendrait des données incompatibles en virgule flottante.
Un deuxième exemple similaire serait :
BNS
getProp;
set ::ACurveAttrData(ALength) [expr int($::ACurveAttrData(Length)/2)];
setProp
Cette balise dérive automatiquement une bonne valeur pour le paramètre ALength
d'un objet "ACurve" à partir du nombre de points de données à approximer.
Lorsque cette balise est ajoutée à un objet "ACurve", les actions interactives d'insertion/suppression de points peuvent être utilisées plus librement.
Voici un autre exemple plus court ; la balise BNS
BNS
applyTrafo -all
s'assure qu'un objet "NCurve" ou "NPatch" a toujours les transformations par défaut, car toute modification des attributs de transformation sera immédiatement appliquée aux points de contrôle et les attributs de transformation seront réinitialisés au fur et à mesure.
Notes
Dans les versions de Ayam antérieures à la version 1.16, les scripts de balises BNS pouvaient utiliser n'importe quelle fonctionnalité de Tcl, Tk et l'interface de script Tcl de Ayam, ce qui représentait un énorme risque pour la sécurité. Ce n'est plus le cas aujourd'hui. Les scripts de balises BNS fonctionnent maintenant dans un interpréteur sécurisé avec un jeu d'instructions réduit. Ils ne peuvent plus écrire dans le système de fichiers, accéder au réseau ou brouiller l'état de l'application, Voir aussi la section Interpréteur sécurisé.
Par conséquent, le dialogue d'avertissement qui apparaissait lors du chargement de fichiers avec des balises BNS a également disparu.
La fonctionnalité originale peut encore être réactivée en recompilant Ayam.
Si cette fonction est activée et que des fichiers de scène contenant des balises BNS sont chargés, Ayam ouvrira à nouveau une boîte de dialogue d'avertissement, proposant de désactiver temporairement toutes les balises de ce type qui seront lues pour des raisons de sécurité évidentes.
Pour désactiver une balise BNS, Ayam change simplement son type de "BNS"
à "DBNS"
(désactivé avant le script de notification).
Elle ne sera pas exécutée à ce moment-là.
Les balises de script de notification désactivées peuvent être activées après une inspection minutieuse en changeant simplement leur type en "BNS"
ou en utilisant l'entrée du menu principal "Special/Enable Scripts"
.
Si le script d'une balise BNS échoue, la balise sera désactivée en changeant le type en DBNS.[∗]
Notez également que les scripts des balises BNS ne doivent pas modifier la hiérarchie des scènes, c'est-à-dire qu'ils ne doivent pas créer ou supprimer des objets ni utiliser le presse-papiers des objets.
Le type de balise "ANS"
(after notify script) peut être utilisé pour ajouter des scripts à un objet, qui sera exécuté une fois la notification de cet objet terminée.
La notification, à son tour, sera exécutée parce que, par exemple, un des enfants de l'objet a changé (Voir aussi la section
Le concept de modélisation outils-objets).
Lorsque le script s'exécute, l'objet correspondant avec la balise ANS sera déjà sélectionné. Le niveau et la sélection actuels seront rétablis lorsque le script se terminera, c'est-à-dire que le script n'aura plus besoin de faire ni l'un ni l'autre.
Exemple
Une simple balise ANS pourrait ressembler à ceci :
ANS
puts "notify callback completed"
Notes
Dans les versions de Ayam antérieures à la version 1.16, les scripts de balises ANS pouvaient utiliser n'importe quelle fonctionnalité de Tcl, Tk et l'interface de script Tcl de Ayam, ce qui représentait un énorme risque pour la sécurité. Ce n'est plus le cas aujourd'hui. Les scripts de balises ANS fonctionnent désormais dans un interpréteur sécurisé avec un jeu d'instructions réduit. Ils ne peuvent plus écrire dans le système de fichiers, accéder au réseau ou brouiller l'état de l'application, Voir aussi la section Interpréteur sécurisé.
Par conséquent, le dialogue d'avertissement qui apparaissait lors du chargement de fichiers avec des balises ANS a également disparu.
La fonctionnalité originale peut encore être réactivée en recompilant Ayam.
Si cette fonction est activée et que des fichiers de scène contenant des balises ANS sont chargés, Ayam affichera à nouveau une boîte de dialogue d'avertissement, proposant de désactiver temporairement toutes les balises qui seront lues pour des raisons de sécurité évidentes.
Pour désactiver une balise ANS, Ayam change simplement son type de "ANS"
à "DANS"
(désactivé avant le script de notification).
Elle ne sera pas exécutée à ce moment-là.
Les balises de script de notification désactivées peuvent être activées après une inspection minutieuse en changeant simplement leur type de nouveau en "ANS"
ou en utilisant l'entrée du menu principal "Special/Enable Scripts"
.
Si le script d'une balise ANS échoue, la balise sera désactivée en changeant le type en DANS.[∗]
Notez également que les scripts des balises ANS ne doivent pas modifier la hiérarchie des scènes, c'est-à-dire qu'ils ne doivent pas créer ou supprimer des objets ni utiliser le presse-papiers des objets.
Les types de balises "UMM"
(u min max) et "VMM"
(v min max) peuvent être utilisés pour stocker des valeurs de découpage de domaine paramétrique supplémentaires aux objets de courbe NURBS et de patch NURBS.
Notez que les modes d'affichage GLU NURBS ne tiennent pas compte de ces balises, mais certains plugins d'exportation le font (RIB, Wavefront OBJ, 3DM (Rhino)). Ces balises seront également créées par l'importation RIB ou l'importation Wavefront OBJ.
Exemple
Une étiquette UMM pourrait ressembler à cela :
UMM
0.4,0.6
Le type de balise "BP"
(bevel parameters) est utilisé par tous les outils prenant en charge le biseau pour stocker leurs informations sur les paramètres de biseau.
Voir aussi les sections
Propriété Bevels (biseaux) et
Propriété BevelAttr.
La syntaxe de la balise BP est :
"<side>,<type>,<radius>,<revert>"
où<side>
est une valeur entière de 0 à 3 définissant le côté de la surface, à laquelle on ajoute le biseau,<type>
est une valeur entière définissant le type de biseau,<radius>
est une valeur en virgule flottante définissant le rayon du biseau, et<revert>
est soit 0 soit 1 et peut être utilisé pour inverser le biseau.
Exemple
Une étiquette BP pourrait ressembler à ça :
BP
0,0,0.1,0
Le type de balise "CP"
(cap parameters) est utilisé par tous les outils, prenant en charge le bouchon, pour stocker leurs informations de paramètres de bouchon.
Voir aussi la sections
Propriété Caps (bouchon) et
Propriété CapAttr.
La syntaxe de la balise CP est :
"<side>,<type>,<integrate>,<fraction>"
où<side>
est une valeur entière de 0 à 3 définissant le côté de la surface, à laquelle on ajoute le bouchon,<type>
est une valeur entière de 0 à 3 définissant le type de bouchon,<integrate>
détermine s'il faut intégrer le bouchon dans la surface du parent (0 ou 1)<fraction>
une valeur de paramètre à virgule flottante pour le type de bouchon Simple3D.
Exemple
Une balise CP pourrait ressembler à ceci :
CP
0,0,0,0.5
Le type de balise "MN"
(normale moyenne) peut être ajouté à l'objet Biseau pour contrôler la normale moyenne/cible du mode Biseau "RoundToNormal"
.
La valeur du tag est une liste de trois nombres à virgule flottante séparés par des virgules, un vecteur 3D.
Le vecteur n'a pas besoin d'être normalisé.
Exemple
Une balise MN pourrait ressembler à cela :
MN
0.0,1.0,0.1
Le type de balise "MP"
(point moyen) peut être ajouté à l'objet Cap ou aux objets avec bouchons pour contrôler le point central des bouchons "Simple"
et "Simple3D"
.
Ceci est utile si, par exemple, le point moyen calculé automatiquement de la courbe des paramètres est désactivé.
La valeur de la balise est une liste de trois nombres à virgule flottante séparés par des virgules, un vecteur 3D, suivi d'une valeur entière entre 0 et 3 désignant le bouchon.
Sur les objets Cap, le numéro de bouchon peut être omis.
Exemple
Une étiquette MP pourrait ressembler à cela :
MP
0.5,0.25,0.1,0
Le type de balise "XML"
peut être utilisé pour enrichir les formats d'exportation basés sur XML avec des données quelconques définies par l'utilisateur (attributs et noeuds).[∗]
Il ne peut actuellement être ajouté qu'aux objets de surface Material et NURBS pour l'exportation X3D (Voir aussi la section
Exportation X3D (Web3D)).
Cette balise doit avoir pour valeur une hiérarchie de noeuds XML valide où le noeud extérieur spécifie le noeud cible des données XML. Les attributs du noeud extérieur seront ajoutés au noeud XML cible pour l'exportation, les attributs déjà existants seront écrasés (c'est-à-dire que la balise de données XML sera traitée après que l'exportation XML aura converti l'objet Ayam correspondant en une hiérarchie de noeuds XML). De même, tous les noeuds enfants du noeud extérieur seront ajoutés au noeud XML cible correspondant. Les sections CDATA sont également prises en charge correctement (c'est important pour le code source du moteur de rendu GLSL).
Examples
Les balises XML pourraient ressembler à ceci :
XML
<Material shininess='0.7'/>
pour ajouter l'attribut de brillance à un matériau.
XML
<Appearance>
<ComposedShader language='GLSL'>
...
</ComposedShader>
</Appearance>
pour ajouter une ombre GLSL à un matériau.
Les balises suivantes sont utilisées par Ayam en interne uniquement ; elles n'apparaîtront pas dans l'interface graphique des propriétés des balises et elles ne peuvent être supprimées ou modifiées à l'aide de l'interface de script.
Cette balise est utilisée par l'exportateur de RIB et l'installation de stockage de scènes pour établir des liens entre les objets d'instance et les objets maîtres vers lesquels ils pointent.
Cette balise est utilisée par l'exportateur de RIB et l'installation de stockage des scènes pour établir des liens entre les objets matériaux et les objets auxquels ils sont affectés.
Cette balise est utilisée par l'installation de stockage des scènes.
Balise binaire interne pour stocker les matrices de transformation, utilisée par le plugin AyCSG.
Balise interne utilisée par le plugin d'import/export X3D. Renommée (anciennement mn) depuis Ayam 1.26.
Balise interne utilisée par le mécanisme de notification.
Ces balises sont des balises binaires internes qui diffusent la notification à travers la scène.
Cette balise est une balise binaire interne qui porte les normales et les tangentes des courbes extraites des surfaces.