KPovModeler: modélisations organiques

Dans le précédent didacticiel, nous avons vu comment tirer parti des Champs de Hauteur pour créer des paysages, histoire de nous changer des primitives habituelles de KPovModeler, plus appropriées à la modélisation d'objets artificiels ou manufacturés. Nous allons voir maintenant quels usages nous pouvons faire de la primitive Blob. Même si elle devrait plutôt être réservée à un usage « cartoonesque », cette primitive permet de modéliser aussi bien des arbres, des vaches ou les pingouins qui nous sont si chers.

De nouvelles primitives à étudier: les Formes

Les Blobs sont idéaux pour la modélisation organique, et même si elles sont très limitées en quantité (on ne compte pour l'instant que des sphères et des cylindres, et j'ignore s'il est prévu d'en ajouter d'autres à POV-Ray) elles permettent d'obtenir des résultats assez intéressants, souvent impossible à reproduire simplement avec les autres primitives et la CSG classique. En effet, les Blobs s'assemblent un peu à la façon de gouttes de mercure, avec une jonction grossière mais progressive de leurs frontières. Il est à noter que lorsqu'ils sont mis en oeuvre seuls, les blobs sphériques apparaissent comme de simples sphères. Pour leur part, les blobs cylindriques apparaissent avec les extrémités arrondies, ainsi qu'en témoigne l'illustration suivante, qui montre un Blob constitué de trois blobs sphériques (un vert, un bleu et un rouge) et un blob cylindrique (jaune), incliné sur le côté.

intro

Comme d'habitude avec toutes les primitives de KPovModeler, il y a deux façons privilégiées d'insérer un blob dans votre scène.

Les Blobs suivent une hiérarchie clairement établie. L'objet que vous venez d'insérer se comportera un peu à la façon d'un objet Fusion (voir le didacticiel Modéliser un tournevis en utilisant la "Constructive Solid Geometry") du point de vue de l'application des Matériaux et des Transformations. Il s'agit donc d'une simple opération booléenne à laquelle vous devrez associer des composantes choisies parmi Blob Sphérique et Blob Cylindrique pour que des volumes concrets soient définis et pris en compte par le moteur de rendu. Ces composantes s'insèrent de façon très conventionnelle:

et

Bien sûr, chacun de ces éléments peut se voir appliquer des transformations (échelle, translation, rotation, matrice) indépendantes ou communes selon qu'elles soient placées en tant qu'enfant ou parent dans l'arbre des objets. D'ailleurs, un Blob père, ou un Blob enfant (une composante sphérique ou cylindrique) sont toujours insérées dans KPovModeler avec les trois transformations de base. Bien sûr, les transformations appliquées au Blob père sont répercutés sur toutes les composantes filles (ce qui est bien pratique pour déplacer ou redimensionner votre objet dans la scène), tandis que les transformations appliquées aux composantes n'affectent que celles-ci à défaut de toute autre (ce qui vous permet d'en contrôler plus précisément l'aspect).

De même, les matériaux et textures peuvent être appliqués soit au Blob père, soit aux Blobs enfants. Dans le premier cas, tous les blobs auront la même coloration. Dans le second, la couleur de transition entre un blob et une autre sera interpolée de façon à ce qu'elle soit progressive. Cela permet de réaliser des effets potentiellement très intéressants.

demo_color

Ainsi, l'arbre des objets pour l'illustration d'introduction se présenterait de la façon suivante:

intro_arbre

On peut aisément y voir la hiérarchie établie entre le Blob générique et chacune de ses composantes. On note en particulier que chaque composante s'est vue attribuer un Pigment propre, et que le cylindre jaune a également un objet de Transformation de plus que les autres.

Pour bien utiliser les Blobs, il est nécessaire de comprendre que chacun d'eux génère à partir de son centre (pour un blob sphérique) ou de son axe (pour un blob cylindrique) une sorte de champ de force à l'intensité décroissante, variant donc entre sa valeur nominale (le paramètre Force, ci-après) au centre ou sur l'axe du Blob et zéro. Bien entendu, les champs de force de plusieurs blobs s'attirent ou se repoussent, et l'intensité du champ à un endroit donné résulte de la puissance et de la distance de tous les champs environnants. Il est alors envisageable de tracer tous les points du champ de force d'une même intensité donnée, à la manière d'une ligne de niveau sur un plan topographique. En fait, déterminer une valeur de Seuil revient à fixer la ligne de niveau qui vous intéresse, et donc à régler le volume finalement affiché par le moteur de rendu. Ceci étant compris, étudions brièvement les différents paramètres qui entrent en ligne de compte dans l'utilisation des Blobs.

demo_seuil

Un sujet classique: se faire cuire un oeuf!

Il est étonnant de constater combien certains outils peuvent être très appropriés à certaines applications, et très peu performants avec d'autres. En fait, les Blobs sphériques semblent avoir été créés spécialement pour la modélisation des oeufs au plat, tellement l'exercice se montre facile! Ce qui suit est une transposition pour KPovModeler du modèle d'oeuf au plat écrit pour POV3.1 par Christian Perle (christian.perle@tu-clausthal.de), code dont je m'inspire librement. Voici l'arbre des objets que nous devrions obtenir au final, afin de mieux appréhender le cheminement de ce qui suit.

oeufs_arbre

Commencez par ouvrir une nouvelle scène dans KPovModeler (Fichier > Nouveau) et supprimez l'élément Boîte qui apparaît par défaut (version 1.0) au centre de la scène en le sélectionnant dans l'arbre des objets et en appuyant sur la touche Suppr ou l'icône symbolisant la poubelle edittrash. Sélectionnez l'élément Caméra et modifiez les paramètres suivants:

pmcameraCaméra:

Localisation: x = 0 y = 3 z = -6

Direction : x = 0 y = 0 z = 3.5

Inutile de changer le paramètre Regarde vers dont les composantes par défaut nous conviennent parfaitement.

Sélectionnez maintenant l'objet Lumière dans l'arbre des objets. Gardez tous les paramètres par défaut afin d'obtenir un point de lumière de couleur blanche, à l'exception de celui-ci:

pmlightLumière:

Localisation: x = -5 y = 6 z = -8

Entrons maintenant dans le vif du sujet, les Blobs! Dans l'arbre des objets, sélectionnez l'objet scène, et ajouter une nouvelle Union en tant que Dernier Fils:

Insérez maintenant un nouveau Blob en tant que Premier Fils:

Modifiez tout de suite la valeur du Seuil à 0.6, ce qui permet de spécifier la taille effective du Blob à 60% de la taille de son noyau. Nous allons maintenant insérer 4 composantes de Blob Sphérique. Chacune aura un Rayon de 1 et une Force d'attraction de 1. Le centre de chaque composante sera toutefois défini comme suit:

pmblobsphereSphère #1:

Centre: x = -0.4 y = 0 z = -0

pmblobsphereSphère #2:

Centre: x = 0.6 y = 0 z = -0.5

pmblobsphereSphère #3:

Centre: x = 0 y = 0 z = -0.2

pmblobsphereSphère #4:

Centre: x = 0.2 y = 0 z = 0.5

Dans l'arbre des objets, sélectionnez l'objet changer d'échelle et appliquez les paramètres suivants:

Changer d'échelle:

x = 1 y = 0.1 z = 1

Cela a pour effet d'aplatir les Blobs cylindriques, les transformant pratiquement en disques. Il ne nous reste plus qu'à donner un matériau à nos blobs pour obtenir le blanc de l'oeuf. Dans l'arbre des objets, sélectionnez le Blob et ajoutez en tant que Dernier Fils un Pigment, une Normale et une Finition.

Dans l'arbre des objets, sélectionnez le Pigment et ajoutez-lui une Couleur pleine: que vous réglez de manière à obtenir une couleur blanche:

pmsolidcolorCouleur:

rouge = 1 vert = 1 bleu = 1

Sélectionnez maintenant la Normale et ajoutez-lui un Motif que vous réglerez sur Bosses:

Normale:

Taille de la bosse: 0.5

pmpatternMotif:

Profondeur: 0.3

Enfin, sélectionnez la Finition et réglez tout simplement le paramètre suivant pour donner au blanc de l'oeuf sa patine gélatineuse:

pmfinishFinition:

Phong: 1

A ce stade, à la couleur près, vous avez déjà obtenu jolie flaque de liquide sur une surface parfaitement lisse, avec un effet de bord des plus satisfaisants. Il ne nous reste plus qu'à créer le jaune d'oeuf et le tour sera joué. Dans l'arbre des objets, sélectionnez l' Union et insérez en tant que Dernier fils une Sphère de Rayon 1.

Cliquez sur le signe + en face de la sphère dans l'arbre des objets afin de faire apparaître les objets de Transformation par défaut, et appliquez les modifications suivantes:

pmscaleChanger d'échelle:

x = 0.4 y = 0.1 z = 0.4

pmtranslateTranslater:

x = 0 y = 0.05 z = -0.1

Enfin, pour achever l'exercice, insérez immédiatement un Pigment et une Finition, puis, avec le Pigment sélectionné dans l'arbre des objets, insérez une Couleur pleine.

pmfinishFinition:

Phong: 1

Couleur:

pmsolidcolorrouge = 1 vert = 0.7 bleu = 0.1

Le rendu final nous montre que le résultat est plutôt satisfaisant, alors qu'il est plutôt facile à obtenir.

oeufs

En attendant Noël: une boule de sapin

Dans le cadre de l'exercice suivant, qui nous permettra de mettre en oeuvre à la fois des Blobs Sphériques et Cylindriques, vous remarquerez qu'il est possible de reprendre cette approche pour modéliser une ampoule et même, avec un peu d'imagination, un modeste verre à pied. Ce didacticiel m'a été inspiré par Olivier Boyaval (olivierb@linuxgraphic.org) alors que je préparais une petite image de voeux à l'attention des visiteurs de linuxgraphic.org à l'approche de Noël 2002. Il me paraît suffisamment pédagogique pour être adapté ici, car il reprend des notions vues dans les précédents didacticiels, en particulier les déclarations d'objets (voir le didacticiel Travailler le Verre) et l'usage de la CSG (voir le didacticiel Modéliser un tournevis en utilisant la "Constructive Solid Geometry"). Comme précédemment, je vous livre ici l'arbre des objets que nous allons obtenir.

boule_noel_arbre

Commencez par ouvrir une nouvelle scène dans KPovModeler (Fichier > Nouveau) et supprimez l'élément Boîte qui apparaît par défaut au centre de la scène en le sélectionnant dans l'arbre des objets et en appuyant sur la touche Suppr ou l'icône symbolisant la poubelle edittrash. Sélectionnez l'élément Caméra et modifiez les paramètres suivants:

Caméra:

Localisation: x = 0 y = 1.5 z = -3

Direction : x = 0 y = 0 z = 1.5

A nouveau, inutile de changer le paramètre Regarde vers dont les composantes par défaut nous conviennent parfaitement.

Sélectionnez maintenant l'objet Lumière dans l'arbre des objets. Gardez tous les paramètres par défaut afin d'obtenir un point de lumière de couleur blanche, à l'exception de celui-ci:

pmlightLumière:

Localisation: x = -30 y = 30 z = -30

Avec l'objet scène sélectionné dans l'arbre des objets, insérez une Déclaration en tant que Dernier Fils, et renommez-la Blob_boule, par exemple.

Il ne nous reste « plus » qu'à définir l'objet déclaré. Pour cela, insérez maintenant un objet Blob en tant que Premier Fils, puis une composante Sphère et une composante Cylindre.

Ajustez les paramètres des Blobs père et fils comme suit:

pmbobBlob:

Seuil: 0.6

Sturm: coché

pmblobsphereBlob sphérique:

Rayon: 1

Force: 1

pmbobcylinderForme cylindrique:

Fin1: x = 0 y = 0 z = 0

Fin2: x = 0 y = 2 z = 0

Rayon: 0.15

Force: 1

Et enfin communiquez à la Déclaration l'échelle souhaitée:

pmscaleChanger d'échelle:

x = 2 y = 2 z = 2

Maintenant que nous avons la forme générale de notre boule de Noël, nous allons utiliser la CSG pour générer l'enveloppe réelle de la boule. Insérez en tant que Dernier fils de la scène une nouvelle Déclaration que nous nommerons cette fois Boule_noel.

Ajoutons maintenant successivement une Intersection (en tant que Premier Fils), une Différence (en tant que Premier fils de l'Intersection), un Lien objet (en tant que Premier Fils de la Différence) puis un autre Lien objet et enfin une Boîte (en tant que Dernier Fils de l'Intersection). La séquence d'icônes à cliquer est la suivante: pmintersection, pmdifference, pmobjectlink, pmobjectlink et pmbox. Sélectionnez dans l'arbre des objets le premier Lien objet et cliquez sur le bouton Sélectionner pour choisir dans la liste des Prototypes la Déclaration Forme_boule que nous avons créé précédemment. Faîtes exactement de même pour le deuxième Lien objet, mais appliquez en plus le changement de paramètres suivant:

pmscaleChanger d'échelle:

x = 0.9 y = 0.9 z = 0.9

Enfin, sélectionnez la Boîte dans l'arbre des objets et modifiez sa géométrie de la façon suivante:

pmboxBoîte:

Angle 1: x = -1 y = -1 z = -1

Angle 2: x = 1 y = 0.5 z = 1

L'enveloppe de la boule de Noël a très simplement été créée en définissant le volume commun à notre Blob de base pour l'enveloppe extérieure, le Blob de base légèrement sous-dimensionné pour l'enveloppe intérieure, et la boîte pour arrêter l'extrémité de la boule, grâce à l'opération Intersection de la CSG. Il ne nous reste plus qu'à mettre en place l'objet ainsi déclaré dans notre scène au moyen d'un Lien objet, en tant que Dernier fils de celle-ci, et en choisissant Boule_noel comme Prototype (bouton Sélectionner).

Une fois ceci fait, insérons un Pigment (et une Couleur pleine, fille de celui-ci) et une Finition.

pmfinishFinition:

Diffusion: 0.3

Spéculaire: 0.6

Réflexion: rouge = 0.8 vert = 0.8 bleu = 0.8

Métallique: coché

pmsolidcolorCouleur:

rouge = 0.8 vert = 0.8 bleu = 1

Nous pouvons maintenant observer le résultat, au terme d'un ultime rendu. Bien sûr, il manque encore à modéliser l'extrémité avec son petit anneau en plastique par lequel vous attacherez votre boule à votre sapin, mais il vous suffit d'un cône tronqué grâce à la CSG et d'un tore en guise d'anneau pour que le tour soit définitivement joué.

boule_noel

Conclusion

L'usage des Blobs se révèle facile et rapide, surtout à l'usage, mais souvent difficile et imprévisible lorsque vous souhaitez modéliser des objets complexes. En effet, pour ceux-ci, vous risquez d'être amené à effectuer de nombreux rendus intermédiaires à mesure que vous ajoutez des composantes à votre Blob, car il ne vous sera pas toujours facile d'anticiper les champs de force mis en oeuvre, et encore moins la valeur de Seuil à retenir pour avoir l'apparence souhaitée. Pour cette raison, il vous faudra sans doute composer votre objet organique à l'aide de multiples Blobs pères, chacun avec un Seuil spécialement spécifié, et faire montre de beaucoup de patience. Les résultats peuvent toutefois être payants, ainsi qu'en témoigne le script Blob Man People écrit par Peter Houston et disponible sur http://objects.povworld.org/ qui permet de composer et de donner une posture à des personnages modélisés à l'aide de Blobs. Bien sûr, le résultat n'est pas d'un très grand réalisme, mais il convient parfaitement à des scènes « cartoonesques ». Malheureusement, ce script n'est pour l'instant pas encore directement exploitable sous KPovModeler, à l'instar de la plupart des objets du même site qui demandent quelques efforts et adaptations pour intégrer une scène composée avec KPovModeler. Mais les auteurs de KPovModeler travaillent à améliorer les fonctions d'imports et d'exports, alors gageons que ce n'est qu'une question de temps!

Tufgirlz