Page suivante Page précédente Table des matières

4. Objets, propriétés et balises

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 :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
Object TypeNo / Object Type+/∗Yes/NoN/A / Children / Object Type+/∗Yes/No*

Object Capabilities Template

Les caractéristiques sont :

Exemple :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RevolveNCurveYesNPatch+No*

Object Capabilities Example

Explication:

4.1 Aperçu des types d'objets

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.

Organisation de la scène

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) :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RootView+NoN/ANo
LevelAny+YesN/A / Children+No
CloneAny+NoChildren+No*
MirrorAny+NoChildren+No*
InstanceNoNoMasterNo*
SelectAny+NoN/A / Children+No
RiIncAnyNoN/ANo
RiProcNoNoN/ANo
ViewNPatchNoN/AYes
CameraNoNoN/AYes
LightNoNoN/AYes
MaterialNoN/AN/ANo

Scene Organization

Pour une documentation complète, voir la section Objets de l'organisation de la scène.

Primitives CSG / Solides

Ces objets servent de primitives géométriques dans les hiérarchies des CSG :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
BoxNoYesNPatchNo*
SphereNoYesNPatch+No*
DiskNoYesNPatchNo*
ConeNoYesNPatch+No*
CylinderNoYesNPatch+No*
TorusNoYesNPatch+No*
ParaboloidNoYesNPatch+No*
HyperboloidNoYesNPatch+No*

CSG / Solid Primitives

Pour une documentation complète, voir la section CSG / primitives des solides (Solid).

Courbes de forme libre

Ces objets sont principalement utilisés comme objets enfants pour les outils de génération de surface :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
NCurveNoNoN/AYes
ICurveNoNoNCurveYes
ACurveNoNoNCurveYes
NCircleNoNoNCurveNo*

Freeform Curves

Pour une documentation complète, voir la section Les courbes libres.

Surfaces de formes libres

Ces objets permettent de manipuler directement des surfaces de forme libre :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
NPatchNCurve+/ Level+YesPolyMeshYes
IPatchNoYesNPatchYes
BPatchNoYesNPatchYes
PatchMeshNoYesNPatchYes

Freeform Surfaces

Pour une documentation complète, voir la section Les surfaces libres.

Outils pour les courbes

Ces objets modifient les courbes existantes ou créent de nouvelles courbes :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ConcatNCNCurve+NoNCurveNo*
ExtrNCNPatchNoNCurveNo*
OffsetNCNCurveNoNCurveNo*

Curve Tool Objects

Pour une documentation complète, voir la section Outils pour ces courbes.

Outils pour les surfaces

Ces objets créent des surfaces de forme libre à partir de courbes ou D'autres surfaces :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RevolveNCurveYesNPatch+No*
ExtrudeNCurve+YesNPatch+No*
SwingNCurveYesNPatch+No*
SweepNCurveYesNPatch+No*
Birail1NCurveYesNPatch+No*
Birail2NCurveYesNPatch+No*
SkinNCurveYesNPatch+No*
GordonNCurve/ Level / NPatchYesNPatch+No*
BevelNCurve+YesNPatchNo*
CapNCurve+YesNPatchNo*
TextNoYesNPatch+No*
TrimNPatch / NCurve+/ Level+YesNPatchNo*
ConcatNPNPatch/ NCurveYesNPatch+No*
ExtrNPNPatchYesNPatch+No*
OffsetNPNPatchYesNPatch+No*

Surface Tool Objects

Pour une documentation complète, voir la section Les outils de surface.

Objets polygonaux et de subdivision

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 :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
PolyMeshNoYesSDMeshYes
SDMeshNoYesPolyMeshYes

Polygonal and Subdivision Objects

Pour une documentation complète, voir la section Objets polygonaux et de subdivision.

Scripts et plugins

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é.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ScriptAny+NoAnyNo*
MetaObjMetaComp+YesPolyMeshNo
MetaCompNoNoN/ANo
SDNPatchNoYesPolyMeshYes
SfCurveNoNoNCurveNo*
SDCurveNoNoNCurveYes
BCurveNoNoNCurveYes

Scripts and Plugins

Pour une documentation complète, voir la section Scénario (Script) et objets personnalisés.

Un certain nombre d'objets Script sont déjà distribués avec Ayam :

TypeParent ofMaterialConverts to / ProvidesPoint Edit
HelixNoNoNCurveNo*
SpiralNoNoNCurveNo*
TConeNoNoHyperboloidNo*
CBoxNoNoNPatchNo*
TCircleNoNoNCurveNo*
DualSweepNCurve*NoNPatchNo*
TSurfNCurve*NoNPatchNo*
ExtrudeNNCurveNoNPatchNo*
PolyhedronNoNoPolyMeshNo*

Distributed Script Object Scripts

Pour une documentation complète, voir la section Objets script distribués.

4.2 Objets de l'organisation de la scène

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).

L'objet Racine (Root)

Root Object

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RootView+NoN/ANo

Root Object Capabilities

Les options de rendu de la scène sont documentées dans les sections suivantes.

Les propriétés RiOptions

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 :

Des options spécifiques au moteur de rendu peuvent également être définies avec les balises RiOption (voir la section Balise RiOption), qui peuvent être ajoutées plus facilement via le menu principal "Special/Tags/Add RiOption" (voir la section Menu spécial balises).

Les propriétés de l'imageur et de l'atmosphère

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.

Les exportations RIB

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.

L'objet View

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ViewNPatchNoN/AYes

Les caractéristiques de l'objet View

Les sections suivantes détaillent les propriétés de l'objet View.

La propriété Camera

Cette section décrit tous les éléments de la propriété "Camera" :

Notez que le vecteur montant n'est pas vérifié pour des valeurs erronées (par exemple en pointant dans la direction From de To) lors de l'application des changements de la propriété "Camera".

La propriété ViewAttrib

Cette section décrit les éléments de la propriété "ViewAttrib" :

Soutien au glisser-déposer

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).[∗]

L'objet Camera

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
CameraNoNoN/AYes

Camera Object Capabilities

Soutien au glisser-déposer

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.

Exportation RIB

Les objets Camera ne sont jamais exportés lors d'un export RIB.

L'objet Light

Exemple d'éclairages (l: Distant, m: Point, r: Spot)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
LightYesNoN/AYes

Caractéristiques de l'objet Light

La propriété LightAttr

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 :

Afin de faciliter le paramétrage des spots, l'objet source de lumière peut être déposé sur un objet de la vue ou dans une fenêtre de visualisation (de préférence une fenêtre avec une transformation de vue en perspective et avec une largeur et une hauteur égales) pour voir quels objets de la scène sont réellement éclairés par l'objet lumineux.

Utilisation des ombrages (ShadowMaps)

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 :

  1. Aller aux préférences (section "RIB-Export") et définir "ShadowMaps" to "Automatic".
  2. Créer deux boîtes.
  3. Ouvrir la propriété "Transformations" de la deuxième boîte.
  4. Déplacer la en X : 0.0, Y : -1.0, Z : 0.0.
  5. Mettre à l'échelle avec X : 4.0, Y : 1.0, Z : 4.0.
  6. Créer une source de lumière.
  7. Ouvrir la propriété "LightAttr".
  8. Changer le type en "Spot". Appuyez sur "Apply".
  9. Changez maintenant les paramètres du spot lumineux en "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.
  10. Créer une nouvelle vue et la mettre en perspective (Menu : "Type/Perspective").
  11. Exporter un RIB depuis cette vue en perspective (Menu : "View/Export RIB").
  12. Rendu de la RIB avec un moteur de rendu compatible RenderMan, qui utilise des ombrages, par exemple Photorealistic RenderMan (prman) ou Aqsis.
Cette scène est distribuée avec Ayam comme exemple de scène nommée "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 :

Exemple d'ombrage

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.

Utiliser des sources lumineuses étendues

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:

Il existe un exemple de scène nommée "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 :

Area Light (l) and Point Light (r)

Les matériaux

Exemples de matériaux (bois, céramique et marbre veiné)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
MaterialNoN/AN/ANo

Material Object Capabilities

La propriété RiAttributes

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.

Les propriétés "Surface", "Displacement", "Interior" et "Exterior"

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

La propriété MaterialAttr contient des attributs liés à la gestion des objets Matérial :

Effets du glisser-déposer

Lorsque des objets géométriques sont déposés sur un objet Material, ils seront reliés à cet objet Material.

Exportation RIB

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
...

L'objet Level (niveau)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
LevelAny+YesN/A / Children+No

Level Object Capabilities

La propriété LevelAttr

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:

Exemple CSG multicolore

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.

Exportation RIB

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();

L'objet Instance

Exemple d'instanciation

Les objets d'instance sont des copies légères transformées d'un seul ou de plusieurs objets et peuvent donc contribuer à économiser la consommation de mémoire dans les scènes comportant de nombreux objets similaires ou répétitifs. Voir également l'image ci-dessus, où il n'y a qu'un seul ensemble de patchs stockés pour les trois éléphants. La quantité d'espace économisé peut être très importante, en fonction de la scène réelle et des niveaux hiérarchiques utilisés. Cependant, s'il n'y a pas d'objets similaires dans la scène, l'instanciation peut difficilement être utilisée. Dans ce contexte, similaire signifie "identique à l'exception de la propriété de transformation".

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
InstanceNoNoMasterNo*

Capacités de l'objet Instance

Instances sans Transformations (References)

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.

Instances et presse-papier

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)".

Conversion

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.

Exportation RIB

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

L'objet clone (bleu) avec courbe de trajectoire (blanc)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
CloneAny+NoChildren+No*

Capacités de l'objet Clone

La propriété CloneAttr

Les attributs suivants contrôlent le processus de clonage :

Le tableau suivant résume les attributs de transformation utilisés dans les modes de clonage respectifs.
ModeUse Child TransformUse CloneAttrib TransformUse Clone Transform
CloneNoYesYes
TrajectoryYesYesYes
MirrorYesN/AYes

Exemples de paramétrisation des clones

Conversion

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.

Exportation RIB

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 (Mirror)

L'objet miroir (blue) à partir d'une courbe (white)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
MirrorAny+NoChildren+No*

Capacités de l'objet Mirror

La propriété MirrorAttr

Les attributs suivants contrôlent le processus miroir :

Conversion

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).

Exportation RIB

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 sélection (Select)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SelectAny+NoN/A / Children+No

Capacités de l'objet Select

La propriété SelectAttrib

L'attribut suivant contrôle le processus de sélection :

Exportation RIB

Les objets sélectionnés n'apparaissent jamais dans la sortie RIB.

L'objet RiInc

RiInc Example

Les objets RiInc peuvent être utilisés pour inclure dans vos scènes des objets ou des parties de scènes entières qui ne sont disponibles que sous forme d'un morceau de RIB, appelé archive. Ils peuvent donc aider à gérer des scènes énormes qui sont trop lourdes pour être traitées en totalité dans Ayam.

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RiIncAnyNoN/ANo

Les capacités de l'objet RiInc

La propriété RiIncAttr

Les attributs suivants contrôlent le processus d'inclusion :

Exportation RIB

Les objets RiInc sont exportés comme une déclaration simple :

ReadArchive <filename>

L'objet RiProc

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RiProcNoNoN/ANo

Les capacités de l'objet RiProc

La propriété RiProcAttr

Les attributs suivants contrôlent l'objet RiProc :

Exportation RIB

Les objets RiProc sont exportés sous la forme d'une seule instruction

RiProcedural
.

4.3 CSG / primitives des solides (Solid)

Ces objets servent de primitives géométriques dans les hiérarchies des CSG.

L'objet boîte (Box)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
BoxNoYesNPatchNo*

Capacités de l'objet Box

La propriété BoxAttr

Les paramètres suivants contrôlent la forme de la boîte :

Conversion

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.

Exportation RIB

L'objet Box sera toujours exporté sous forme de six patchs bilinéaires.

L'objet sphère (Sphere)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SphereNoYesNPatch+No*

Capacités de l'objet Sphere

La propriété SphereAttr

Les paramètres suivants contrôlent la forme de la sphère :

Conversion

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.

Exportation RIB

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.

L'objet disque (Disk)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
DiskNoYesNPatchNo*

Capacités de l'objet Disk

La propriété DiskAttr

Les paramètres suivants contrôlent la forme du disque :

Conversion

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.[∗]

Exportation RIB

L'objet Disk sera toujours exporté sous forme de simple disque :

RiDisk(...);

L'objet Cône (Cone)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ConeNoYesNPatch+No*

Capacités de l'objet Cone

La propriété ConeAttr

Les paramètres suivants contrôlent la forme du cône :

Conversion

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.

Exportation RIB

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.

L'objet cylindre (Cylinder)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
CylinderNoYesNPatch+No*

Capacités de l'objet Cylinder

La propriété CylinderAttr

Les paramètres suivants contrôlent la forme du cylindre :

Conversion

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.

Exportation RIB

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.

L'objet tore (Torus)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
TorusNoYesNPatch+No*

Capacités de l'objet Torus

La propriété TorusAttr

Les paramètres suivants contrôlent la forme du tore :

Conversion

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.

Exportation RIB

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.

L'objet paraboloïde (Paraboloid)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ParaboloidNoYesNPatch+No*

Capacités de l'objet Paraboloid

La propriété ParaboloidAttr

Les paramètres suivants contrôlent la forme du paraboloïde :

Conversion

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.

Exportation RIB

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.

L'objet hyperboloïde (Hyperboloid)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
HyperboloidNoYesNPatch+No*

Capacités de l'objet Hyperboloid

La propriété HyperboloidAttr

Les paramètres suivants contrôlent la forme de l'hyperboloïde :

Conversion

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.

Exportation RIB

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).

4.4 Les courbes libres

Ces objets sont principalement utilisés comme objets enfants pour les outils de génération de surface.

L'objet NCurve (NURBS)

Une courbe NURBS simple

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
NCurveNoNoN/AYes

Capacités de l'objet NCurve

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 propriété NCurveAttr

La première section de la propriété NCurveAttr contient des paramètres spécifiques à la courbe :

Les paramètres GLU contrôlent l'apparence de la courbe lorsque l'affichage courbe/surface est activé. En cas de modification de plus d'une des valeurs ci-dessus, les modifications seront appliquées dans l'ordre des valeurs dans la propriété. Le résultat des valeurs modifiées doit décrire une courbe NURBS valide. Il est parfaitement légal de modifier la longueur de la courbe, son ordre, et de passer à un vecteur de noeud personnalisé (assurez-vous de saisir réellement un nouveau vecteur de noeud valide) en une seule fois. Ayam vérifiera vos modifications et reviendra à certaines valeurs par défaut si, par exemple, votre séquence de noeuds est incorrecte. Vérifiez la présence de messages dans la console après avoir appuyé sur le bouton "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 :

Lorsqu'on modifie l'ordre d'une courbe périodique (sans toucher à sa longueur), Ayam ajoute ou supprime automatiquement des points de contrôle sur la courbe afin que la forme de la courbe reste globalement identique et que les extensions périodiques soient plausibles.[∗]

Points multiples

Une courbe NURBS avec des points multiples (grandes poignées)

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

Notez que les points de contrôle qui composent un point multiple n'ont pas à être consécutifs (dans le vecteur de points de contrôle de la courbe NURBS). Des points multiples peuvent également être créés à l'aide de l'outil regroupement (collapse), et divisés à nouveau à l'aide de l'outil de décompression (voir les sections Outil de regroupement de points (Collapse Points) et Outil d'éclatement de point multiple (Explode Points) pour plus d'informations concernant ces outils).

Exportation RIB

Les objets NCurve n'apparaissent jamais directement dans les sorties RIB (seulement indirectement sous forme de Courbe Trim).

Les courbes interpolées (ICurve)

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.

Differentes ICurves à partir de la même configuration de points (en haut: Ouvert, en bas fermé; à gauche d'ordre 3, à droite d'ordre 4)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ICurveNoNoNCurveYes

Capacités de l'objet ICurve

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.

La propriété ICurveAttr

Les paramètres suivant contrôlent le processus d'interpolation :

Les paramètres "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).

Conversion

La courbe d'interpolation peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert".

Exportation RIB

Les objets ICurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).

Les courbes approximées (ACurve)

Differentes ACurves (Haut gauche: ALength 3, Ordre 3; haut droite: ALength 4, Ordre 4; Bas gauche: ALength 4, Ordre 4; bas droite: ALength 6, Ordre 3)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ACurveNoNoNCurveYes

Capacités de l'objet ACurve

Les objets ACurve peuvent être créés via le menu principal ou l'interface de script, voir aussi Création d'objets.

La propriété ACurveAttr

Les paramètres suivants contrôlent le processus d'approximation :

Voir aussi l'outil correspondant pour créer des courbes NURBS approximatives : Outil d'approximation (Approximate).

Conversion

Les courbes approximées peuvent être converties en courbes NURBS ordinaires en utilisant l'entrée de menu principale "Tools/Convert".

Exportation RIB

Les objets ACurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).

L'objet NCircle (Cercle NURBS)

Differents objets NCircle (g: default, c: TMax 180, d: Radius 0.5, TMax -200)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
NCircleNoNoNCurveNo*

Capacités de l'objet NCircle

La propriété NCircleAttr

Les paramètres suivants contrôlent la forme du cercle ou de l'arc.

Conversion

La courbe circulaire/arc peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert".

Exportation RIB

Les objets NCircle n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).

Autres types de courbes

Des types de courbes plus basiques sont disponibles via des plugins et des scripts, ce sont :

4.5 Outils pour ces courbes

Ces objets modifient les courbes existantes ou créent de nouvelles courbes.

L'objet ConcatNC (Concatène les courbes NURBS)

Concaténation (blue) à partir d'une ligne et 3 instances (white)

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 :

  1. Les ordres de toutes les courbes paramètres seront élevés à l'ordre maximum de toutes les courbes paramètres (voir aussi la section Outil d'élévation (Elevate) pour plus d'informations sur l'élévation) et toutes les courbes seront serrées (voir aussi la section Outil de resserrage (Clamp) pour plus d'informations sur le serrage).
  2. Si le paramètre "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.
  3. Maintenant, les points de contrôle de toutes les courbes paramètres et des raccordements sont simplement copiés dans un nouveau grand vecteur de points de contrôle, sans vérifier les points doubles. Cela signifie que pour les courbes paramètres qui se touchent à leurs extrémités respectives, il en résultera au moins des points de contrôle doubles dans la nouvelle courbe concaténée.
  4. Si "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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ConcatNCNCurve+NoNCurveNo*

Capacités de l'objet ConcatNC

La propriété ConcatNCAttr

Les paramètres suivants contrôlent le processus de concaténation :

Conversion

La courbe concaténée peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert".

Exportation RIB

Les objets ConcatNC n'apparaissent jamais directement dans la sortie RIB (seulement indirectement en tant que courbe Trim).

L'objet ExtrNC (Extraction de courbe NURBS) Object

courbe extraite (white) à partir d'une surface quelconque (blue)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ExtrNCNPatchNoNCurveNo*

Capacités de l'objet ExtrNC

La propriété ExtrNCAttr

Le processus d'extraction est contrôlé par les attributs suivants :

Voir la section Propriété NCurveAttr pour une description des deux autres attributs "DisplayMode" et "Tolerance".

Conversion

La courbe extraite peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert".

Exportation RIB

Les objets ExtrNC n'apparaissent jamais directement dans la sortie RIB (seulement indirectement sous forme de courbe Trim).

Les courbes de décalage (OffsetNC)

Courbes de décalage (blanc) des courbes NURBS (bleu) avec décalage de 0.2, -0.2 et 0.3

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
OffsetNCNCurveNoNCurveNo*

Capacités de l'objet OffsetNC

La propriété OffsetNCAttr

Les paramètres suivants contrôlent le processus de compensation :

Conversion

La courbe de décalage peut être convertie en une courbe NURBS ordinaire en utilisant l'entrée de menu principale "Tools/Convert".

Exportation RIB

Les objets OffsetNC n'apparaissent jamais directement dans la sortie RIB (seulement indirectement sous forme de courbe Trim).

4.6 Les surfaces libres

Ces objets permettent de manipuler directement des surfaces de forme libre.

Patch NURBS (NPatch)

Patch NURBS : Surface (bleu) à partir d'un polygone de contrôle (blanc)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
NPatchNCurve+/ Level+YesPolyMeshYes

Capacités de l'objet NPatch

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 propriété NPatchAttr

La première section de la propriété NPatchAttr contient les paramètres spécifiques des patchs :

Les paramètres suivants contrôlent son apparence pour l'affichage dans Ayam :

Courbes de trim (coupe)

Un patch NURBS découpé

Les courbes de coupe peuvent être utilisées pour découper certaines parties d'un patch NURBS (voir aussi l'image ci-dessus). Il s'agit de simples courbes NURBS 2D définies dans l'espace paramétrique du patch NURBS associé. Les courbes de découpe doivent être définies comme des objets enfants de l'objet du patch NURBS auquel elles appartiennent. Toutefois, contrairement aux autres objets enfants, elles n'héritent pas des attributs de transformation de l'objet parent. L'édition des courbes d'ajustement peut se faire dans les vues de type "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 :

Notez que Ayam ne vérifie pas si les courbes de coupe suivent ces règles.

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.

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Les patch interpolés (IPatch)

Surface interpolée (bleu) à partir de points (blanc)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
IPatchNoYesNPatchYes

Capacités de l'objet IPatch

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

La propriété IPatchAttr contient les éléments suivants :

Les paramètres suivants contrôlent l'aspect du patch pour l'affichage dans Ayam : Voir aussi l'outil correspondant pour créer des courbes NURBS d'interpolation : Outil d'interpolation de surface (Interpolate Surface).

Bouchons et biseaux

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.

Conversion

La surface interpolée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert".

Exportation RIB

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.[∗]

Patch bilinéaires (BPatch)

Patch bilinéaires

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
BPatchNoYesNPatchYes

Capacités de l'objet BPatch

La propriété BPatchAttr

La propriété BPatchAttr permet de contrôler directement les quatre points définissant la géométrie du patch :

Conversion

Le patch bilinéaire peut être converti en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert".

Exportation RIB

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.

Les patchs maillés (PatchMesh)

Surfaces PatchMesh (bleu) bicubiques (gauche) et bilinéaires (droite) de leurs polygones de contrôle respectifs (blanc)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
PatchMeshNoYesNPatchYes

Capacités de l'objet PatchMesh

La propriété PatchMeshAttr

La première section de la propriété PatchMeshAttr contient les paramètres spécifiques des patchs :

Les paramètres "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 :

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

4.7 Les outils de surface

Ces objets créent des surfaces de forme libre à partir de courbes ou d'autres surfaces.

Les surfaces de révolution (Revolve)

L'objet Revolve (à gauche: la courbe, à droite la surface de révolution)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
RevolveNCurveYesNPatch+No*

Capacités de l'objet Revolve

La propriété RevolveAttr

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".

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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[∗]

Les surfaces par extrusions (Extrude)

Extrusion (à gauche la courbe, au centre l'extrusion simple, à droite l'extrusion avec bouchon)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ExtrudeNCurve+YesNPatch+No*

Capacités de l'objet Extrude

La propriété ExtrudeAttr

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".

Utilisation des Trous et Biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Les surfaces par balayage (Swing)

L'objet Swing (à gauche les courbes, à droite la surface)

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.

A gauche la section transversale de balayage, à droite la trajectoire et la surface résultat en bleu

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SwingNCurveYesNPatch+No*

Capacités de l'objet Swing

La propriété SwingAttr

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éé.

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Les surfaces par glissements (Sweep)

L'objet Sweep (à gauche les courbes, à droite lac surface résultat)

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.

En blanc, à gauche la section transversale, à droite la trajectoire et en bleu la surface résultat

Cela signifie qu'une simple courbe circulaire, créée par exemple avec la boîte à outils, doit être tournée de 90 degrés autour de l'axe Y. Cela peut se faire soit en modifiant les points de contrôle, soit en réglant les attributs de transformation en conséquence. L'édition ultérieure de cette courbe doit être effectuée dans une vue latérale. Notez que l'outil de création du glissement 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).[∗]

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.

Sweep Object (bleu) avec une fonction d'échelle (blanc)

Voici un petit exemple pour la création d'un balayage :

  1. Créez une courbe B-Spline circulaire en utilisant la boîte à outils. (Ce sera notre section transversale.)
  2. Créer une courbe NURBS simple en utilisant la boîte à outils. (Ce sera notre trajectoire).
  3. Sélectionnez les deux courbes. (Sélectionnez la première courbe, maintenez la touche "Shift" enfoncée et sélectionnez l'autre courbe).
  4. Créer l'objet Sweep en utilisant la boîte à outils.
  5. Observez que la courbe de section transversale a été tournée automatiquement vers le plan YZ.
  6. Maintenant vous pouvez entrer dans l'objet Sweep et modifier par exemple la deuxième courbe, la trajectoire. (Appuyez sur <e>, puis faites glisser quelques points de contrôle).
  7. Pour modifier la section transversale, vous devez passer à une vue de type "Side". (Utilisez le menu des vues "Type" ou le raccourci clavier <PgDwn> alors que la vue a le focus d'entrée).
La section Interpolation facile dispose d'un script d'exemple qui automatise la création et le paramétrage d'une courbe de section transversale adapté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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SweepNCurveYesNPatch+No*

Capacités de l'objet Sweep

La propriété SweepAttr

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.

Glissement sur un quart de cercle à gauche sans et à droite avec interpolation

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.

SectionsTrajectory LengthTrajectory OrderSweep LengthSweep Order
02222
05464
06575
46554
1065114

Exemples de configurations de paramètres pour l'objet Sweep

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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

L'objet Birail1(à gauche les courbes, à droite la surface résultat)

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.

Une configuration valide des courbes paramètres (blanc) et la surface résultat (bleu)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
Birail1NCurveYesNPatch+No*

C apacités de l'objet Birail1

La propriété Birail1Attr

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.

SectionsRail1 LengthRail1 OrderBirail1 LengthBirail1 Order
02222
05464
06575
46554
1065114

exemples de configurations de paramètres pour l'objet Birail1

Bouchons et bieaux

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.

Conversion

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.

Exportation RIB

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

L'objet Birail2 Object (à gauche les courbes, à droite la surface résultat)

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.

Configuration valide des courbes paramètres (blanc) pour Birail2 (bleu)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
Birail2NCurveYesNPatch+No*

Capacités de l'objet Birail2

La propriété Birail2Attr

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.

SectionsRail1 LengthRail1 OrderBirail2 LengthBirail2 Order
02222
05464
06575
46554
1065114

Exemples de configurations de paramètres pour l'objet Birail2

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Les revêtements (Skin)

Skin Object (à gauche les courbes, à droite le revêtement résultat)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SkinNCurveYesNPatch+No*

Capacités de l'objet Skin

La propriété SkinAttr

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éé.

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Surface de Gordon

Surface de Gordon (à gauche les courbes, à droite la surface résultat)

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.

Surface de Gordon (bleu) avec ses courbes paramètres (blanc)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
GordonNCurve/ Level / NPatchYesNPatch+No*

Capacités de l'objet Gordon

La propriété GordonAttr

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éé.

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Les biseaux (Bevel)

L'objet Bevel (à gauche la courbe, à droite la surface biseautée)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
BevelNCurve+YesNPatchNo*

Capacités de l'objet Bevel

La propriété BevelAttr

Les paramètres suivants de l'objet Biseau contrôlent la création de la surface biseauté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éé.

Bouchons

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.

Conversion

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.

Exportation RIB

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. [∗]

Les bouchons (Cap)

L'objet Cap (à gauche la courbe, à droite la surface bouchon)

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).

Bouchon à partir d'une courbe non plane (à gauche la courbe, à droite la surface bouchée)

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 :

TypePlanarConcaveHolesCompatibility / Integration
TrimYesYesYesNo
GordonNoNoNoNo
SimpleYesNoNoYes
Simple3DNoNoNoYes

Aperçu des types de bouchons

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
CapNCurve+YesNPatchNo*

Capacités de l'objet Cap

La propriété CapAttr

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 :

Voir également la discussion générale sur l'objet Cap ci-dessus.

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éé.

Conversion

La surface du bouchon peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert".

Exportation RIB

Les objets Cap seront exportés en tant que primitives NURBS :

RiNuPatch(...);
Les balises PV sont prises en charge[∗]

Concaténer (relier) les patch NURBS (ConcatNP)

L'objet ConcatNP (blanc) à partir de deux patch NURBS (bleu)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ConcatNPNPatch/ NCurveYesNPatch+No*

Capacités de l'objet ConcatNP

La propriété ConcatNPAttr

Les paramètres suivants contrôlent le processus de concaténation.

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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.[∗]

Extraction d'un patch NURBS (ExtrNP)

Surface extraite (blanc) de la surface du parent (bleu)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ExtrNPNPatchYesNPatch+No*

Capacités de l'objet ExtrNP

La propriété ExtrNPAttr

Le processus d'extraction est contrôlé par les attributs suivants :

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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. [∗]

Les décalages de surfaces(OffsetNP)

Surface décalée (blanc) par rapport à la surface NURBS (bleu) avec un décalage de 0,2

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
OffsetNPNPatchYesNPatch+No*

Capacités de l'objet OffsetNP

La propriété OffsetNPAttr

Les paramètres suivants contrôlent le processus de décalage :

Bouchons et biseaux

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.

Conversion

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.

Exportation RIB

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. [∗]

Le texte (Text)

Un objet texte avec la police Verdana

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
TextNoYesNPatch+No*

Capacités de l'objet Text

La propriété TextAttr

Les attributs suivants contrôlent la création des objets text.

Voir la section Propriété NPatchAttr pour une description des deux autres attributs "DisplayMode" et "Tolerance".

Conversion

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.

Exportation RIB

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.[∗]

Les découpes ou ajustements (Trim)

Exemple d'objet Swing découpé

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
TrimNPatch / NCurve+/ Level+YesNPatchNo

Capacités de l'objet Trim

La propriété TrimAttrib

Les paramètres suivants contrôlent le processus de découpage :

Conversion

La surface découpée peut être convertie en un patch NURBS ordinaire en utilisant l'entrée du menu principal "Tools/Convert".

Exportation RIB

Les objets de découpe seront exportés en tant que primitives NURBS :

RiNuPatch(...);
Les balises PV ne sont pas prises en charge.

4.8 Objets polygonaux et de subdivision

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

Exemple PolyMesh

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
PolyMeshNoYesSDMeshYes

Capacités de l'objet PolyMesh

La propriété PolyMeshAttr

L'interface graphique PolyMeshAttr affiche seulement quelques informations sur l'objet PolyMesh :

Conversion

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.

Exportation RIB

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

L'objet SDMesh avec le maillage polygonal origine (bleu)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SDMeshNoYesPolyMeshYes

Capacités de l'objet SDMesh

La propriété SDMeshAttr

L'interface graphique SDMeshAttr affiche seulement quelques informations sur l'objet SDMesh :

Conversion

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é.

Exportation RIB

Les objets SDMesh seront exportés sous forme de primitives RiSubdivisionMesh :

RiSubdivisionMesh(...);
Les balises PV sont prises en charge.

4.9 Scénario (Script) et objets personnalisés

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é.

L'objet Script

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
}
     

Exemple d'objet Script: à gauche le code Tcl, et à droite le résultat

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
ScriptAny+NoAny+No*

Capacités de l'objet Script

Utilisation de l'objet Script

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.

La propriété ScriptAttr

Cette section traite des types d'objets Script disponibles et des paramètres de contrôle supplémentaires.

GUI de propriété de script avec menu contextuel et poignée de redimensionnement

GUIs des paramètres et propriété des objets Script

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>

alors le tableau global Tcl <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.

Scénarios en utilisant un autre langage

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 */

Les commentaires spéciaux pour la sauvegarde des éléments de tableau et le changement de langage peuvent être utilisés conjointement comme ceci :
/* Ayam, use: JavaScript, save array: MyArr */

Interpréteur sécurisé

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".

Transformation

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.

Conversion

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 :

  1. Si un seul objet est créé/modifié, ses balises sont ajoutées aux balises de l'objet Script et son paramètre matériau n'a la priorité que s'il existe effectivement un ensemble matériau.
  2. S'il y a plusieurs objets créés/modifiés, l'objet Script est transformé en un objet Level, en gardant ses balises et ses paramètres de matériau.
  3. Les objets créés/modifiés deviendront les enfants du nouvel objet Level (avec les balises et les propriétés du matériau inchangées).
  4. Les enfants actuels de l'objet Script seront supprimés avant la conversion. Si cela échoue (par exemple, à cause des références), ils peuvent se retrouver dans le presse-papiers de l'objet.
Si le script a créé un objet maître et des instances de ce maître, la conversion normale ne pourra pas dupliquer cette relation (en raison de la sémantique de copie des objets instances, voir aussi la section Instances et presse-papier).

Pour contourner ce problème, il suffit de copier l'objet Script, puis d'utiliser la conversion en place sur la copie.

Bouchons et biseaux

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.

Exportation RIB

Les objets de script seront exportés dans des fichiers RIB en tant qu'objets qu'ils créent/modifient.

Exemple de ligne paramétrique

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

Script simple pour une primitive deligne paramétrique

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

et en ajoutant une balise "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 :

Primitive de ligne paramétrique avec GUI de paramètre

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.

Exemple de construction d'une hiérarchie

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

Ce petit script détermine d'abord la longueur de la courbe, puis il crée un objet Clone et y déplace les enfants de l'objet Script (via le presse-papiers de l'objet). Enfin, l'objet Clone est paramétré, de sorte que la trajectoire est entièrement remplie d'objets (en supposant que chaque copie du premier enfant a besoin d'une unité de longueur sur la trajectoire). La courbe peut maintenant être modifiée par des actions de modélisation interactives, ou sa longueur peut être changée, et la trajectoire sera toujours complètement remplie d'un nombre approprié d'objets de la boîte. Voir l'image d'exemple ci-dessous (comparer les configurations de clones des deux différentes courbes de trajectoire) :

Exemple d'objet Script créant une hiérarchie

Gestion des objets personnalisés

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 (courbe superformulée)

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.

Courbe superformulée avec pour paramètres 10, 22, -11, 3

Le tableau suivant énumère brièvement certaines capacités de l'objet SfCurve.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SfCurveNoNoNCurveNo*

Capacités de l'objet SfCurve

La propriété SfCurveAttr

L'objet SfCurve propose les paramètres suivants :

Opération

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.[∗]

Exportation RIB

Les objets SfCurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement comme Courbe Trim).

L'objet BCurve (Basis Curve - courbe de base)

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.

BCurves des type de base Bezier (hg), B-Spline (hd), Catmull-Rom (bg), et Hermite (bd)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
BCurveNoNoNCurveYes

Capacités de l'objet BCurve

La propriété BCurveAttr

L'objet BCurve propose les paramètres suivants :

Les entrées "Basis" et "BStep" ne sont visibles que si le type de base est "Custom".

Conversion

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.[∗]

Exportation RIB

Les objets BCurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement comme Courbe Trim).

Interface de Script

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.

Les courbes de subdivision (SDCurve)

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.

Exemple de SDCurve de niveau 4 (Chaikin: h, Cubic: b)

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SDCurveNoNoNCurveYes

Capacités de l'objet SDCurve

La propriété SDCurveAttr

L'objet SDCurve propose les paramètres suivants :

Conversion

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.

Exportation RIB

Les objets SDCurve n'apparaissent jamais directement dans la sortie RIB (seulement indirectement comme Courbe Trim).

Les objets Metaball

Un objet métaballe issu de six méta-composants

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
MetaObjMetaComp+YesPolyMeshNo
MetaCompNoNoN/ANo

Capacités des objets MetaObj et MetaComp

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).

La propriété MetaObjAttr

Les attributs suivants contrôlent la création de la surface implicite :

La nouveauté de Ayam 1.5 est un mode de calcul adaptatif de la surface implicite. Il peut être activé en utilisant le nouvel attribut "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.

La propriété MetaCompAttr

Les autres paramètres sont spécifiques au type de composant :

Metaball

Torus

Cube

Custom

Conversion

Les objets Metaball peuvent être convertis en objets PolyMesh en utilisant l'entrée du menu principal "Tools/Convert".

Exportation RIB

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.

SDNPatch Object

SDNPatches, g: maillage de contrôle, c : maillage subdivisé avec noeuds, d : maillage subdivisé sans noeud

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.

TypeParent ofMaterialConverts to / ProvidesPoint Edit
SDNPatchNoYesPolyMeshYes

Capacités de l'objet SDNPatch

La propriété SDNPatchAttr

La propriété SDNPatchAttr permet de définir les attributs spécifiques suivants de SDNPatch :

Actions de modélisation SDNPatch

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".

En outre, il existe deux opérations de conversion qui convertissent les objets patch NURBS (ou objets fournissant un patch NURBS) et les objets PolyMesh (ou objets fournissant un PolyMesh) en objets SDNPatch. Notez que la conversion de PolyMesh en SDNPatch n'accepte que les maillages polygonaux quadrilatéraux fermés (les triangles sont omis) et attend un maillage optimisé (c'est-à-dire que les faces adjacentes doivent partager les mêmes sommets).

Conversion

Les objets SDNPatch peuvent être convertis en objets PolyMesh en utilisant l'entrée du menu principal "Tools/Convert".

Exportation RIB

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.

4.10 Standard Properties

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".

La propriété Transformations

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 :

Les transformations sont appliquées à l'objet dans l'ordre suivant : "Scale", "Rotation", "Translation" (Échelle, Rotation, Translation).

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é Attributes

La propriété "Attributs" d'un objet contient actuellement :

La propriété Material

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 :

La propriété Shader

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.

Shader Parsing

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 :

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).

Travailler avec des ombres

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).

La propriété Caps (Bouchon)

De nombreux objets-outils ont une propriété "Caps" pour fermer facilement la surface créée.

La propriété Cap d'un objet "NPatch"

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.

La propriété Bevels (biseaux)

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.

La propriété Bevel de l'objets "NPatch"

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.

La propriété Tags (Balises)

Utilisez la propriété "Tags" pour modifier les balises d'un objet. Voir aussi l'image ci-dessous.

GUI de la propriété Tags avec un menu contextuel

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) :

Les sous-sections suivantes décrivent les types de balises actuellement disponibles dans Ayam et les plugins distribués avec Ayam. Notez que les extensions et plugins étrangers peuvent définir leurs propres types.

4.11 Tags

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.

NameDescription
ANSAfter Notify Script
AsWireX3D export control
BNSBefore Notify Script
BPBevel Parameter
CPCap Parameter
CIDRImportance Driven Rendering
CCIDRImportance Driven Rendering
DANSDisabled After Notify Script
DBNSDisabled Before Notify Script
DCDepth Complexity
HCHas Children*
IDRImportance Driven Rendering
IIDRImportance Driven Rendering
MIMaterial ID*
MNMean Normal
mnmaster name*
MPMean Point
NCNotify Count*
NMNotify Master*
NONotify Object*
NoExportExport Control
NPNew Property
NTNormals Tangents

Vue d'ensemble des balises (1/2), * – interne

NameDescription
OIObject ID*
PVPrimitive Variable
RiAttributeRenderMan Export
RiDisplayRenderMan Export
R3IDRImportance Driven Rendering
RIDRImportance Driven Rendering
RiHiderRenderMan Export
RiOptionRenderMan Export
RPRemove Property
SaveMainGeomGeometry Management
SavePaneLayoutGeometry Management
SPSelected Points
TCTexture Coordinates
TMTransformation Matrix*
TPTessellation Parameters
UMMU Min Max
VMMV Min Max
XMLXML Data

Vue d'ensemble des balises (2/2), * – interne

Balise RiAttribute

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>


<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.

Balise "RiOption"

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.

Balise "TC" (Texture Coordinates)

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.

Editeur de coordonnée de texture

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 :

Notez que les numéros de balises dans les entrées du menu ne comptent que les balises TC.

Le dialogue de coordonnées de texture est sans mode, il peut rester ouvert tout en faisant du maquettage (???? modelling).

Balise PV (Primitive Variable)

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>


<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.

Balise "RiHider"

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>""<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

Balise "RiDisplay"

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).

Balise "AsWire"

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.

Balise "NoExport"

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).

Balise "SaveMainGeom"

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.

Balise "SavePaneLayout"

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.

Balise "TP" (Tessellation Parameter)

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>]"
<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

Balise "DC" (Depth Complexity)

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>""<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

Balise "NP" (New Property)

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".

Balise RP (Remove 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".

Balise BNS (Before Notify Script)

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.

Balise ANS (After Notify Script)

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.

Balises UMM/VMM (U/V Min Max)

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

Balise BP (Bevel Parameters)

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>"

<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

Balise CP (Cap Parameters)

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>"

<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

Balise MN (Mean Normal)

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

Balise MP (Mean Point)

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

XML Tag

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.

Balises internes

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.


Page suivante Page précédente Table des matières