Ecrit par Olivier Saraja (olivier_at_linuxgraphic.org)
Dans ce didacticiel, nous allons voir comment modéliser un tournevis en utilisant la technique du CSG (Constructive Solid Geometry). La procédure est assez linéaire, et repose sur la logique Booléenne. Cela nécessite de la rigueur et quelques connaissances de base pour obtenir le résultat souhaité. Heureusement, l'Arbre des Objets (voir notre précédent didacticiel) va nous aider à obtenir le bon résultat. Mais intéressons-nous d'abord à quelques explications sur les opérations Booléennes.
Quelques mots sur les opérations Booléennes
Kpovmodeler permet d'utiliser quatre type d'opérations Booléennes au cours des étapes de modélistation. Union, Intersection, Différence et Merge (Fusion en français, le logiciel n'étant pas encore francisé au moment où cet article est rédigé). Regardons de plus près comment ces opérations fonctionnent lorsque deux (ou plus!) volumes interfèrent:
Union et Merge:
Ces deux opérations semblent se comporter de la même façon: les deux objets semblent collés l'un à l'autre (de même que sur l'image précédente qui n'implique aucune opération Booléenne). Mais en fait, il y a de légères différentes entre les deux résultats, qui peuvent aisément être mis en évidence si vous donnez la même texture -avec un peu de transparence- aux deux objets (disons un Pigment de type Solid Color, avec une valeur de Filter réglée à environ 0.4).
En fait, Union se contente de lier les deux objets ensembles tout en en respectant les frontières individuelles, alors que Merge ne prend en compte que la frontière extérieure de la somme des deux objets fusionnés. C'est pourquoi le volume d'interférence est visible sur l'image représentant l'Union, et pas sur l'image du Merge. En première approche, vous pouvez considérer que la différence entre Union et Merge n'est imoprtante que si vous travaillez avec des matériaux transparents.
Une question courante pourrait être « Pourquoi dois-je m'embêter à utiliser Union ou Merge lorsque je peux obtenir exactement le même résultat en n'utilisant pas la CSG? » Il faut bien l'admettre, vous avez certainement raison: au rendu de l'image (à moins que vous n'utilisiez des matériaux semi-transparents), vous ne verrez pas la différence. C'est plus dans la façon que vous allez traiter les objets impliquant une opération Merge ou Union que vous remarquerez une différence. Lorsque plusieurs objets sont impliqués, vous pouvez faire tourner, déplacer, redimensionner, assigner un matériau et faire bien plus de choses encore (comme exporter l'objet, comme nous le verrons dans la conclusion!) en une seule opération, si vous avez au préalable utilisé une opération Booléenne de ce type. Si vous êtes passé outre, il ne vous reste plus qu'à appliquer chacune des transormations envisagées à chaque objet, un par un! Mais bon, c'est votre temps et votre argent, libre à vous de vous embêter inutilement!
Intersection:
Le résultat d'une opération d'intersection est assez facile à comprendre: le volume résultat est égal au volume d'interférence des deux objets. Notez dans tout ce qui suit la couleur des surfaces résultantes: une face commune hérite des propriétés de texture de l'objet qui a été supprimé.
Différence:
L'ordre dans lequel les objets sont présentés dans l'Arbre des Objets (en lisant du haut vers le bas) est particulièrement important dans ce cas: un objet Boîte (Box) suivi d'un objet Sphère se lirait, de façon Booléenne, comme une opération « soustraire le volume de la Sphère au volume de la Boîte». Réciproquement, l'objet Sphère suivi de l'objet Boîte se lirait comme une opération Booléenne de type « soustraire le volume de la Boîte au volume de la Sphère ».
A nouveau, vous pouvez prêter attention aux couleurs des surfaces communes résultant de ces opérations Booléennes. Sur la figure Difference = Sphere - Box, il n'apparaît pas clairement, par exemple, que l'intérieur de la Sphère découpée est rouge, couleur de la Boîte ayant servi à la découpe.
Tout d'abord, lancez kpovmodeler et chargez la scène de base contenue sur le cédérom. J'ai configuré cette scène avec quelques éléments fondamentaux pour nous permettre de nous concentrer sur la modélisation du tournevis: un plan en guise de sol, deux sources de lumières (une en provenance d'un plafond virtuel, une autre issue d'une fenêtre tout aussi virtuelle) ainsi qu'une caméra. J'ai également configuré les paramètres globaux (global settings), mais j'ai conservé toutes les valeurs par défaut: il pourrait être, plus tard, intéressant de jouer avec ces valeurs afin d'obtenir un rendu plus attrayant, mais c'est bien au-delà des objectifs immédiats de ce didacticiel.
Qu'ai-je mis de particulier dans ce fichier? Rien: il s'agit tout simplement de la scène de base que j'utilise toujours lorsque je modélise de nouveaux objets: toute l'attention est dirigée vers le sujet, aux dépends du reste de la scène, qui ne doit pas avoir de valeur. Son utilisation est parfaite pour la constitution d'une bibliothèque d'objets prêts à l'emploi, comme ceux-ci, que j'ai très récemment modélisés:
Veuillez donc copier le fichier default.kpm présenté sur le cédérom dans un répertoire approprié de votre disque dur. Une fois ceci fait, vous pouvez le charger dans kpovmodeler (Fichier > Ouvrir... ou Icône ) puis naviguer jusqu'à son emplacement et cliquer sur le bouton OK.
Vous êtes invités à sauvegarder immédiatement ce fichier sous un autre nom (Fichier > Enregistrer sous...): saisissez alors le nouveau nom de fichier (tournevis.kpm, par exemple) dans le champ intitulé 'Emplacement' et appuyez sur le bouton Enregistrer pour générer le fichier.
C'est parti! Cette étape paraît particulièrement longue, car elle est particulièrement détaillée pour cette fois-ci. Il est important que vous assimiliez bien ses subtilités, car elles ne seront pas reprises dans le reste du didacticiel, où les instructions se feront plus concises. Tout d'abord, sélectionnez l'entité 'Scene' dans l'Arbre des Objets. Les objets créés en suivant seront ajoutés en tant qu'objets 'enfant'. Ajoutez un cylindre à votre scène (Insertion > Finite Solid Primitives > Cylinder or Icon). Il vous sera demandé si l'entité à insérer dans l'arbre doit l'être en tant que Premier Enfant (First Child) ou Dernier Enfant (Last Child). Choisissez Dernier Enfant. De cette façon très pratique, vous pourez placer tous les éléments concernant l'objet que vous voulez créer à la fin de l'Arbre des Objets.
Cliquez sur le symbole '+' placé juste devant le nom de la nouvelle entité afin de développer l'arbre et visualiser toutes les propriétés déjà disponibles.
<
Chaque objet nouvellement inséré vient habituellement avec ces trois propriétés: dimensionnement (scale), rotation (rotate), translation (translate). Lorsqu'elles ne sont pas immédiatement disponibles, vous pouvez malgré tout les conférer à l'objet en cliquant sur l'entité correspondante dans l'Arbre des Objets et en effectuant l'une des manipulations suivantes:
En utilisant le menu: Insertion > Transformations > Scale, Rotate et/ou Translate
En utilisant la barre d'outils: cliquez sur les Icônes , ou
Pour les primitives de type Finite Solid Primitives, cela ne devrait pas être nécessaire, aussi pouvez-vous directement cliquer sur l'icône de rotation déjà existant dans la Vue des Propriétés des Objets et modifier les paramètres comme suit (n'oubliez pas de cliquer sur le bouton Appliquer ou d'appuyer sur la touche Entrée):
rotate
x = 0, y = 0, z = 90
De la même façon, cliquez sur l'icône de redimensionnement et ajustez les paramètres comme suit:
scale
x = 1, y = 8, z = 1
Finalement, cliquez sur l'entité Cylinder de l'Arbre des Objets, ajustez les paramètres suivants et décochez la case Hollow déterminant si l'objet doit être considéré comme creux (nous le voulons plein, comme toutes les primitives que nous ajouterons au cours de ce didacticiel):
cylinder
End 1: x = 0, y = 0.5, z = 0
End 2: x = 0, y = -0.5, z = 0
Créons maintenant une sphère qui va combler l'une des extrémités du cylindre (Insertion > Finite Solid Primitives > Sphere ou Icône ).
Veuillez noter que la sphère a automatiquement été insérée en tant que Dernier Enfant dans l'Arbre des Objets, parce que la dernière entité sélectionnée était le cylindre et que ce type d'objet ne supporte pas de primitives de type Finite Solid comme Enfant. Cliquez maintenant sur l'entité sphère de l'arbre et ajustez les paramètres suivants tout en décochant la case Hollow:
sphere
Center: x = -4, y = 0, z = 0
Radius: 0.15
Bien sûr, la sphère sera très bientôt fusionnée avec le cylindre, au cours de l'étape numéro trois. En respectant la même logique, nous allons ajouter deux objets de type Boîte, dont les volumes seront soustraits au groupe d'objet précédemment fusionnés, au cours de la méme prochaine étape, afin de décrire la lame du tournevis.
Mais dans un premier temps, ajoutez un nouvel objet de type Boîte à la scène (Insertion > Finite Solid Primitives > Box ou Icône ).
Cliquez sur le symbole '+' situé juste devant le nom de la nouvelle entité pour développer l'arborescence et afficher toutes les propriétés de l'objet Boîte. De la même façon que nous avons déjà paramétré les objets cylindre et sphère, ajustez les paramètres comme suit, tout en décochant la case Hollow:
box
Corner 1: x = -0.5, y = -0.25, z = -0.25
Corner 2: x = 0.5, y = 0.25, z = 0.25
rotate
x = 0, y = 0, z = -13
translate
x = 3.7, y = 0.35, z = 0
Attaquons-nous maintenant à la seule réelle difficulté de l'exercice: nous allons dupliquer la Boîte Supérieure et transformer cette copie en Boîte Inférieure. Heureusement, l'Arbre des Objets va nous aider à effectuer très simplement cette manipulation. Voici ce que nous avons actuellement dans l'Arbre des Objets, et ce que nous voudrions y voir, la Boîte Inférieur étant le symétrique selon l'axe x de la Boîte Supérieure:
Voici comment obtenir ce résultat. Tout d'abord, sélectionnez la Boîte Supérieure dans l'Arbre des Objets. Faites une copie de cette entité (Edition > Copier ou CTRL+C ou Icône ) et collez-là (Edition > Coller ou CTRL+V ou Icône ). Sélectionnez cette nouvelle entité, et changez immédiatement son nom dans la Vue des Propriétés des Objets, et enfin changez les valeurs de rotation et de translation conformément à ce qui suit
rotate
x = 0, y = 0, z = 13
translate
x = 3.7, y = -0.35, z = 0
Tout le sale boulot est déjà terminé, nous n'avons plus qu'à nous attaquer à la tâche la plus simple et la plus significative: en nous appuyant sur l'Arbre des Objets, nous allons trier les différentes primitives que nous avons insérées et faire appel aux opérations Booléennes afin de 'tailler' la lame du tournevis.
Avec l'entité Scene sélectionnée, veuillez insérer un objet Union, Fusion et Difference (Insertion > Constructive Solid Geometry > Union, Difference et Merge ou les Icônes , et ).
A chaque fois, vous allez devoir déclarer le nouvel objet en tant que Dernier Enfant lorsque le logiciel demandera des précisions. Voici ce que vous devriez obtenir dans l'Arbre des Objets:
En utilisant le Glisser/Déposer, CTRL+X (Couper) et CTRL+V (Coller) ou bien encore les icônes Couper et Coller, tries les entités de l'Arbre des Objets de sorte à obtenir le résultat suivant (sélectionnez Premier Enfant ou Dernier Enfant selon le cas):
L'entité Union ne sera exploitée que plus tard dans le didacticiel, lorsque nous commencerons à modéliser le manche du tournevis (elle permettra de décrire le tournevis dans son ensemble, lame et manche compris). Dans la Vue des Propriétés des Objets, l'entité Difference pourrait être renommée quelque chose comme Lame du Tournevis, pour une meilleurs lisibilité de l'Arbre des Objets.
Bien sûr, effectuer le rendu de la scène immédiatement ne résultera en rien d'autre qu'une lame de tournevis d'un noir absolu et mat: nous avons besoin de spécifier un matériau. Il y a plusieurs façons de s'y prendre, mais j'aimerai vous présenter une méthode qui vous permettra de très facilement réutiliser le matériau que nous allons définir ici dans d'autres scènes. Bien sûr, vous pouvez tout aussi bien ne pas vous embêter et réutiliser l'une des textures de Chrome livrées avec les fichiers d'exemples de kpovmodeler, mais j'ai pensé qu'il serait plus intéressant, pour mieux comprendre les choses, de construire une telle texture par nous-mêmes.
Sélectionnez l'entité Scene dans l'Arbre des Objets, puis insérez un objet Déclaration en tant que Dernier Enfant (Insertion > Declaration ou Icône ).
Dans la Vue des Propriétés des Objets, vous pouvez le renommer Chrome. Insérez alors une Texture (Insertion > Textures > Texture ou Icône ), un Pigment (Insertion > Textures > Pigment ou Icône ) et une Solid Color (Insertion > Textures > Solid Color ou Icône ). Cliquez ensuite sur l'entité Solid Color et modifiez les paramètres comme suit:
solid color
red = 0.93333, y = 0.93333 , z = 0.93333
filter = 0, transmit = 0
Sélectionnez maintenant l'entité Texture, insérez un objet de type Finish (Insertion > Textures > Finish ou Icône ) et ajustez les paramètres comme suit:
La texture a convenablement été déclarée, mais vous devez encore l'assigner à la lame du tournevis pour qu'elle soit fonctionnelle. Pour y parvenir, commencez par déplacer la déclaration de texture juste après la déclaration T_Grnt16 déjà présente dans mon Arbre des Objets. Ce faisant, vous vous assurez que tous les objets déclarés 'après' dans l'arbre peuvent utiliser cette déclaration de texture comme s'il s'agissait d'une texture propre.
Ensuite, sélectionnez la Lame de Tournevis, et insérez une Texture (Insertion > Textures > Texture ou Icône ) en tant que Dernier Enfant. Cliquez sur le bouton Select et choisissez enfin 'Chrome' dans la liste déroulante qui ne manquera pas d'apparaître.
Voici le résultat que vous obtenez:
Plutôt facile, n'est-ce pas? En fait, vous verrez que la modélisation du manche du Tournevis est tout aussi facile et linéaire.
Vous devriez désormais être habitués aux techniques les plus communes de modélisation grâce à la CSG, aussi nous allons essayer d'aller au but plus rapidement et avec moins de bla-bla que précédement: vous avez toutes les bases à votre disposition, il ne vous reste plus qu'à vous améliorer par l'usage!
Tout d'abord, avec l'entité Scene sélectionnée, ajoutons un cylindre (Insertion > Finite Solid Primitives > Cylinder ou Icône ) en tant que Dernier Enfant. Gardez telles quelles les propriétés d'objet pour le cylindre, mais ajustez toutefois les paramètres suivants:
rotate
x = 0, y = 0, z = 90
translate
x = -5, y = 0, z = 0
Décochez la case Hollow. Avec l'entité Cylinder sélectionnée, ajoutez maintenant une sphère (Insertion > Finite Solid Primitives > Sphere ou Icône ): la sphère apparaît immédiatement après le cylindre dans l'Arbre des Objets. Dans la Vue des Propriétés des Objets de la Sphère, modifiez les paramètres qui suivent:
Center
x = -8, y = 0, z = 0
De nouveau, prenez soin de décocher la case Hollow. Avec la sphère sélectionnée dans l'Arbre des Objets, nous allons maintenant insérer un tore, car c'est une primitive que nous n'avons pas encore utilisée à ce jour (Insertion > Finite Solid Primitives > Torus ou Icône ) et parce que cela va épicer un peu notre didacticiel.
Torus
Minor radius: 0.25
Major radius: 0.6
rotate
x = 0, y = 0, z = 90
translate
x = -2.5, y = 0, z = 0
Enfin, avec le Tore toujours sélectionné, nous pouvons désormais insérer un objet de type boîte (Insertion > Finite Solid Primitives > Box ou Icône ) et modifier ses paramètres comme suit (tout en décochant, bien sûr, la case Hollow!):
Boîte Supérieure
Corner 1: x = -9, y = 0.4, z = -1
Corner 2: x = -1.5, y = 0.6, z = 1
Dupliquez cette boîte trois fois, de la même façon que nous l'avons déjà fait lors de l'étape numéro deux. Renommez respectivement les boîtes de la façon suivante: Boîte Supérieure, Boîte Inférieure, Boîte Gauche et Boîte Droite. Changez ensuite les propriétés des objets comme suit:
Boîte Inférieure
Corner 1: x = -9, y = -0.4, z = -1
Corner 2: x = -1.5, y = -0.6, z = 1
Boîte Gauche
Corner 1: x = -9, y = -1, z = 0.4
Corner 2: x = -1.5, y = 1, z = 0.6
Boîte Droite
Corner 1: x = -9, y = -1, z = -0.4
Corner 2: x = -1.5, y = 1, z = -0.6
Et voilà! Toutes les primitives sont enfin en place, il ne nous reste plus qu'à laisser la magie de la CSG opérer, une nouvelle fois!
Comme d'habitude, on va démarrer en sélectionnant l'entité Scene dans l'Arbre des Objets. Ensuite, insérons en tant que Derniers Enfants un objet Merge et un objet Différence (Insertion > Constructive Solid Geometry > Difference et Merge ou les Icônes et ). Vous devriez plus ou moins avoir quelque chose comme cela dans votre arbre des objets, sinon, il vous est assez facile d'y remédier:
Comme nous l'avons déjà fait dans l'étape numéro trois, en utilisant le glisser/déposer, CTRL+X (Couper) et CTRL+V (Coller) ou tout simplement les icônes Couper et Coller, réarrangez les entités dans l'Arbre des Objets afin d'obtenir le résultat suivant (bien sûr, vous serez amenés à choisir Premier Enfant ou Dernier Enfant selon ce qui vous paraîtra le plus approprié au fûr et à mesure de cette opération):
Veuillez noter que la Lame et le Manche du tournevis ont tous deux été déplacés sous l'entité Union que nous avions mise en place lors de l'étape numéro trois. Vous pouvez désormais renommer sereinement l'entité Différence 'Manche du Tournevis' et l'entité Union 'Tournevis'. Si vous n'avez raté aucune étape, nous en avons fini avec la modélisation, mais nous devons encore conférer au Manche une texture appropriée.
Cela va finir par devenir ennuyeux, mais nous devons une fois de plus nous montrer rigoureux et commencer cette étape comme la plupart des autres, en sélectionnant l'entité Scene dans l'Arbre des Objets. Nous pouvons alors insérer en tant que Dernier Enfant un objet Déclaration (Insertion > Declaration ou Icône ).
Dans la Vue des Propriétés des Objets, vous pouvez la renommer Plastic puis insérer une Texture (Insertion > Textures > Texture ou Icône ), un Pigment (Insertion > Textures > Pigment ou Icône ) et enfin une Solid Color (Insertion > Textures > Solid Color ou Icône ). Cliquez sur l'entité Solid Color et modifiez les paramètres comme suit:
solid color
red = 0.98039, y = 0.94902 , z = 0.05490
filter = 0.45, transmit = 0.2
Sélectionnez maintenant l'entité Texture, insérez une Finition (Insertion > Textures > Finish ou Icône ) et ajustez les paramètres comme suit:
La texture a été convenablement définie, mais nous devons encore l'assigner au Manche du tournevis. Pour y parvenir, commencez par déplacer la Déclaration de texture immédiatement après celle de la Déclaration Chrome, précédement définie, dans l'Arbre des Objets.
Sélectionnez maintenant le Manche du Tourevis, et insérez une nouvelle Texture (Insertion > Textures > Texture ou Icône ) en tant que Dernier Enfant. Cliquez sur le bouton Select et choisissez alors 'Plastic' dans la liste déroulante qui surgira.
Et voici le résultat final, qui devrait vous enchanter:
Nous y voici enfin! Notre tournevis flambant neuf est pratiquement prêt à être réemployé dans une autre nouvelle scène. Afin de faciliter les choses, vous aimeriez sans doute sélectionner l'entité Tournevis, et insérer des propriétés de transformations (Insertion > Transformations > Scale, Rotate et/ou Translate, ou les Icônes , et ). Importer cet objet dans une autre scène se révèle très facile: vous devez avoir le fichier source et le fichier destination ouverts en même temps dans kpovmodeler. Dans le fichier source (tournevis.kpm, dans ce cas), sélectionnez les entités Tournevis, Chrome et Plastic. Vous pouvez désormais les copier et les coller dans le fichier de destination (votre_scene.kpm, par exemple). En fait, vous pouvez copier et coller n'importe quel entité de l'Arbre des Objets depuis un fichier source vers un autre fichier ouvert. Cela veut dire que vous pouvez très facilement importer des textures, des systèmes entiers d'éclairage, des caméras et tout un tas d'autres choses. Allez, on vous laisse expérimenter tout ça: amusez-vous bien!