KPovModeler:
Travailler
le verre
écrit par Olivier SARAJA
e-mail:
olivier@linuxgraphic.org
C'est souvent sur la base du rendu de quelques images avec des objets transparents, tels les sempiternels verres et bouteilles que l'on s'amuse très tôt à modéliser, que l'on peut la plupart du temps tester la solidité d'un moteur de rendu. Il est en effet facile de le juger selon des critères de rapidité, mais également de qualité: beauté des reflets, réalisme des réfractions et gestion des caustiques sont quelques unes des qualités des meilleurs moteurs de rendu. Et au vu des résultats, il ne fait pas de doute que POV-Ray en fait partie...
Un endroit chaleureux pour prendre un verre
Vous trouverez sur le cédérom un fichier intitulé base.kpm, que nous vous invitons à copier 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) afin que nous puissions nous en servir comme fondation de notre didacticiel. Vous êtes invités à sauvegarder immédiatement ce fichier sous un nom (Fichier > Enregistrer sous...ou Icône ) plus approprié: saisissez le nouveau nom de fichier (verre.kpm, par exemple) dans le champ intitulé 'Emplacement' et appuyez sur le bouton Enregistrer pour générer le fichier.
Cette scène de base (Figure 1) présente un environnement par défaut, des éclairages et une caméra, tous indispensables aux rendus que nous allons effectuer au fur-et-à-mesure de nos expérimentations. Cela n'en rendra les expérimentations avec les reflets, les indices de réfraction et les caustiques que plus intéressantes. Il s'agit en fait d'un extrait d'environnement complet que je suis actuellement en train de modéliser.
Les objets de révolution
Il y a en particulier deux Finite Solid Primitives qui sont susceptibles de nous intéresser dans le cadre de cette étude: Lathe et Surface of Revolution (SOR) . Les deux semblent fonctionner de façon identique: il s'agit de faire tourner autour de l'axe y une courbe (Lathe) ou une fonction mathématique (SOR) décrite dans le plan x-z. Les différences sont toutefois subtiles:
1- comme pour toutes les fonctions mathématiques, une ordonnée et une seule doit correspondre à une abscisse donnée. Cela implique que seule la Primitive Lathe vous permet de créer des profils de révolution clos (comme un tube, un verre ou même un tore) tandis que SOR vous permet d'avoir toutes les variations de rayon que vous souhaitez, mais le long d'une trajectoire strictement croissante (comme un cylindre, un pion de jeu d'échec ou un arbre avec des rayons et des épaulements, en construction mécanique). A noter que vous pouvez très bien créer avec une SOR le profil extérieur d'un verre et cocher l'option 'Open', ce qui vous donnera l'illusion d'un vrai verre (voir Figure 2) à ceci près que sa paroi n'aura pas d'épaisseur et que sa base sera toute aussi ouverte que l'extrémité par laquelle l'on boit. Mais nous y reviendrons un peu plus tard.
2- dans les deux cas, vous aurez à éditer les points de contrôle par lesquels la courbe (Lathe) ou la fonction mathématique (SOR) passeront. Mais l'autre principale différence réside dans l'allure de la courbe qui joindra tous ces points. Dans le cas du SOR, c'est forcément une Spline lissée qui passera par les points de contrôle, tandis que dans le cas du Lathe, vous pourrez choisir entre différents modèles: Linear Spline, Quadractic Spline, Cubic Spline, Bezier Spline.
Qui peut le plus peut le moins, et par conséquent, vous pouvez très bien vous servir de Lathe pour construire les objets auxquels est limité SOR: pourquoi donc utiliser ce dernier? Tout simplement parce que le modèle mathématique qui le régit est plus simple et que le temps de rendu est sensiblement plus court lorsque c'est un grand nombre de SOR est impliqué que lorsque ce sont des Lathes qui sont utilisés.
Choisir l'une ou l'autre des primitives est plus un choix d'ordre stratégique que technique: si vous avez une puissance de calcul infernale ou si vos scènes sont très simples, vous pouvez sans souci utiliser Lathe, considérablement plus flexible. L'avantage, c'est que Lathe et SOR respectent à quelques détails près la même philosophie, ainsi que le montre la figure 3.
Spline type (Lathe): c'est ici que vous choisissez l'allure de la Spline qui reliera les points de contrôle qui seront définis juste après: Linear Spline, Quadratic Spline, Cubic Spline, Bezier Spline.
1- Linear Spline: relie simplement les points de contrôle par un segment de droite
2- Quadratic Spline: la position du point précédent est prise en compte pour déterminer l'allure de la courbe jusqu'au point courant, mais le point suivant n'est pas pris en compte; il en résulte des courbes de jonction parfois brutales.
3- Cubic Spline: comme précédemment, sauf que la position du point suivant est également prise en compte, ce qui permet d'obtenir des courbes de jonction toujours lisses.
4- Bezier Spline: son fonctionnement est un peu plus particulier. Considérons des groupes de quatre points, qui chacun sont nécessaires pour déterminer un segment de courbe entier. Les points 1 et 4 définissent les deux extrémités du segment de courbe, tandis que les points 2 et 3 sont utilisés pour déterminer la pente de la courbe de jonction. Bien sûr, ces deux points particuliers ne sont pas des points de passage de la courbe, mais plus des points permettant de contrôler la pente de celle-ci. Ce type de courbe est très populaire dans les logiciels de dessin vectoriel.
Spline points (Lathe, SOR): ici, aucune différence entre les deux primitives. Par défaut, quatre points de contrôle sont générés, car c'est le minimum que peut gérer POV-Ray. La composante u indique le rayon de l'objet correspondant à l'ordonnée v de l'objet. Le bouton vert vous permet d'insérer une paire de composantes (u,v), tandis que la croix rouge vous permet d'en supprimer une. Il est toujours utile de garder un oeil sur la vue graphique de la scène pour voir ce que vous faites, voire même de bâtir votre objet dans ce mode. Vous pouvez en effet déplacer les points de contrôle avec la souris, en appuyant sur le bouton gauche et en la déplaçant. De plus, vous pouvez sélectionner plusieurs points de contrôle à la fois, et ce, de plusieurs façons:
1- bouton gauche vous permet de dessiner une boîte qui sélectionne tous les points contenus dedans ;
2- CTRL+bouton gauche vous permet de sélectionner/déselectionner des points individuels sans déselectionner les autres ;
3-SHIFT+CTRL+bouton gauche vous permet de faire des sélections multiples en enchaînant les boîtes.
A noter que pour obtenir une courbe fermée, le premier et le dernier point doivent être identiques.
Open (SOR): par défaut, SOR décrit une surface de révolution fermée. Cette option vous permet de l'ouvrir à ses deux extrémités si la composante u est différente de 0. Ce peut être intéressant pour modéliser rapidement des verres ou des vases que vous souhaitez creux. Attention cependant: les deux extrémités sont ouvertes et l'objet n'a pas d'épaisseur réelle. L'illusion est satisfaisante à une certaine distance, mais de plus près, la primitive Lathe est plus pertinente. Voir la Figure 2, plus haut.
Sturm (Lathe, SOR): il s'agit d'un modèle de calcul plus lent mais plus exact, que vous pouvez utiliser si les Lathes et SOR ne sont pas rendus correctement par POV-Ray, comme c'est le cas sur la figure 4: l'usage de l'option Sturm corrige en effet la distorsion de l'image observée sur le verre de gauche.
Les autres options sont communes à toutes les primitives et seront passées sous silence.
Création d'un verre
C'est un exercice auquel l'on se livre généralement très tôt dans une carrière (même jeune) d'artiste 3D. Plusieurs façons de procéder existent, et c'est à chacun d'employer celle qui répond le plus à sa propre sensibilité. Je ne détaillerai toutefois que celles qui me sont personnellement familières:
1-approche cartésienne: tracez le profil de votre objet sur du papier millimétré. Définissez à des intervalles significatifs des points de contrôle dont vous relèverez les composantes u (rayon) et v (ordonnée). Reportez ces valeurs dans la vue des propriétés des objets;
2-approche libre: ajoutez petit à petit des points de contrôle dans la vue des propriétés des objets et déplacez-les à la souris dans la vue 3d.
Etape 1: modélisation du verre
Nous avions vu, en conclusion de l'exercice de modélisation d'un tournevis par la CSG dans le numéro 46 qu'il était intéressant, pour faciliter les importations d'objets de scène en scène, de regrouper toutes les primitives d'un même modèle au sein d'un objet Union auquel l'on conférait les attributs de Transformations Rotation , Echelle ou Déplacement . Nous allons maintenant voir une méthode équivalente, mais qui tend à minimiser les efforts du modeleur et la taille du fichier décrivant la scène.
Dans un premier temps, ajoutez comme dernier enfant à la scène un objet de type Declaration:
En utilisant le menu: Insertion > Declaration
En utilisant la barre d'outils: cliquez sur l'icone
Avec ce nouvel objet sélectionné dans l'Arbre des Objets, insérez maintenant en tant que premier enfant un objet de type Lathe:
En utilisant le menu: Insertion > Finite Solid Primitives > Lathe
En utilisant la barre d'outils: cliquez sur l'icone
Vous pouvez maintenant observer dans la fenêtre des Propriétés des Objets les paramètres suivants (voir Détail 1 de la Figure 5), qui vous sont désormais familiers si vous avez bien étudié notre figure 3.
Nous allons commencer à décrire le profil (complexe, vous êtes prévenu!) de notre flûte à champagne. Nous nous en tiendrons à l'approche cartésienne (c'est à dire que nous allons vous donner les coordonnées de tous les points intéressants) afin que nous ayons tous le même résultat final à l'issu de cette étape. Cette approche est longue et fastidieuse, mais elle a le mérite d'être efficace.
Commencez par remplacer les valeurs des quatre premiers points par défaut par les valeurs ci-dessous:
1: u = -0.5 v = 0.1
2: u = 0 v = 0
3: u = 4.6 v = 0
4: u = 4.1 v = 0.26667
Une fois ceci fait, cliquez sur l'icône d'insertion de la 4ème ligne. Cela aura pour effet de créer une cinquième ligne. Par défaut, elle sera remplie avec les valeurs de la ligne précédente. Reportez-y plutôt les valeurs cinquième point décrit ci-dessous, puis répétez l'opération jusqu'au 21ème et dernier point (voir Détail 2 de la Figure 5). Après avoir validé les modifications en appuyant sur le bouton Apply, vous pouvez visualiser le résultat dans la fenêtre 3D (Détail 3 de la Figure 5).
Vous pouvez maintenant cocher la case Sturm pour éviter tout problème de rendu, et définir le type de Spline comme étant « Cubic » ce qui vous donnera une courbe particulièrement lisse et continue. Afin d'avoir une description de scène cohérente, renommez l'objet de type Declaration de façon plus suggestive: Flute_à_champagne, par exemple.
Etape 2: création du matériau
Avec l'objet Lathe sélectionné dans l'Arbre des Objets, sous la déclaration d'objet Flute_à_champagne, insérez en tant que premier enfant un objet de type Texture:
En utilisant le menu: Insertion > Textures > Texture
En utilisant la barre d'outils: cliquez sur l'icone
puis procédez de même pour ajouter un objet de type Pigment:
En utilisant le menu: Insertion >
Textures > Pigment
En utilisant la barre d'outils: cliquez sur
l'icone
et enfin un dernier de type Solid Color:
En utilisant le menu: Insertion > Textures > Solid Color
En utilisant la barre d'outils: cliquez sur l'icone
Nous ne serons pas très imaginatifs quant à la couleur à donner à notre flûte à champagne, mais nous aurions pu nous amuser à donner au verre une teinte verte s'il s'était agi d'une bouteille de vin, ou un marron ambré dans le cas d'une bouteille de bière, par exemple. Contentons-nous des paramètres suivants, la valeur importante étant Transmit qui permet de gérer le taux de transparence (voir Détail 1 de la Figure 6). De bons effets peuvent parfois être obtenus en donnant au verre un léger éclat verre ou bleu, selon le goût de chacun.
Avec l'objet Texture sélectionné dans l'Arbre des Objets, c'est maintenant un objet de type Finish que nous allons insérer en tant que dernier enfant et paraméter comme dans le Détail 2 de la Figure 6:
En utilisant le menu: Insertion > Textures > Finish
En utilisant la barre d'outils: cliquez sur l'icone
Quelques explications peuvent se montrer intéressantes. Les tâches lumineuses de vos objets sont gérées par les paramètres Phong et Phong Size, qui fonctionnent de paire. Ils vous permettent de déterminer si la surface de votre objet a une finition mate ou brillante, et en quelle proportion. En activant Phong, les tâches lumineuses sont de la même couleur que la lumière qui les produit. Généralement, ce paramètre varie entre 0 et 1. A zéro, aucune tâche de lumière n'est observable. A un, le centre de la tâche lumineuse est totalement saturé par la couleur de la lumière. Le paramètre Phong size, quant à lui, permet de déterminer la taille de la tâche lumineuse. Les faibles valeurs produisent des tâches de dimensions réduites, propres aux objets très brillants, tandis que les valeurs élevées rendent des tâches très diffuses et plus subtiles, ainsi que l'illustre la figure 7.
Enfin, avec l'objet Lathe sélectionné dans l'Arbre des Objets, il ne nous reste plus qu'à mettre en place un objet de type Interior, établi comme suivant le Détail 3 de la Figure 6:
En utilisant le menu: Insertion > Textures > Finish
En utilisant la barre d'outils: cliquez sur l'icone
C'est principalement ici que réside la magie d'un bon moteur de rendu: la façon dont sont gérés les réfractions lumineuses (la distorsion de la lumière, et donc de l'image, au travers d'une épaisseur donnée de verre) et les caustiques (ces petites tâches lumineuses présentes dans l'ombre des objets de verre). En observant la sphère de verre dans chacun des exemples de la figure 8, nous pouvons voir en particulier l'influence de l'indice de réfraction. Plus difficile à observer, sur la seconde ligne de vignettes, la taille et la dureté du caustique dans l'ombre de la sphère: plus le paramètre est faible, plus le caustique est large et diffus.
Et voilà! Nous en avons terminé avec la description de notre flûte à champagne. Malheureusement, cet objet n'a pour l'heure aucune réalité dans notre scène. En effet, si nous effectuons maintenant une tentative de rendu, nous obtiendrons la même scène vide que celle présentée dans la Figure 1. En effet, une Declaration n'est jamais rien qu'une note d'intention dans la scène. C'est un peu comme si, au sein d'un programme informatique, vous déclariez une ou plusieurs variables, sans vous en servir concrètement. Mais nous allons y remédier immédiatement!
Etape 3: mise en place de l'objet dans la scène
Nous allons commencer par disposer un premier clone de notre flûte à champagne nouvellement créée. Commencez par insérer un objet de type Link (lien) dans votre scène, en tant que dernier enfant. En effet, il est essentiel que l'objet de type Lien soit défini après l'objet de type Déclaration dans l'Arbre des Objets:
En utilisant le menu: Insertion > Finite Solid Primitives > Object Link
En utilisant la barre d'outils: cliquez sur l'icone
Dans la vue des Propriétés des Objets, appuyez sur le bouton Select, puis choisissez dans la liste déroulante qui apparaîtra la Déclaration que vous souhaitez. En l'occurence, nous n'en avons créé qu'une seule dans ce didacticiel: Flûte_à_champagne. Dans le cadre d'une scène plus complexe, nous aurions une fois de plus vu l'intérêt de nommer à propos les objets que nous créons au fur-et-à-mesure. Ne perdons pas cette habitude, et renommons l'objet lien nouvellement créé: appelons-le Flûte #1, par exemple.
Allons maintenant modifier ses propriétés de transformation comme suit:
Flûte #1:
Scale: x = 0.35 y = 0.35 z = 0.35
Rotate : x = 0 y = 0 z = 0
Translate : x = 0 y = -0.6 z = 0
Voilà! Un rendu, à ce stade, nous montrerait l'environnement de départ avec notre flûte à champagne dans le coin de la pièce. Toutefois, il serait dommage d'avoir tant peiné à mettre en place un objet de type Déclaration si ce n'est pas pour utiliser commodément plusieurs de ses clones à la fois!
Dans l'Arbre des Objets, sélectionnez l'entité Flûte #1 et dupliquez le trois fois. Renommez respectivement les copies Flûte #2, #3 et #4. Sélectionnez-les un à un pour changer leurs propriétés de transformation comme suit:
Flûte #2:
Rotate : x = 0 y = 0 z = -180
Translate : x = -3.2 y = 9.9 z = -2.1
Flûte #3:
Rotate : x = -73.2 y = -1 z = -90.3
Translate : x = 2.9 y = 1.05 z = 4.5
Flûte #4:
Rotate : x = 0 y = 0 z = 0
Translate : x = 6.6 y = -0.6 z = 2.9
Ca y est, il ne vous reste plus qu'à effectuer un rendu de la scène et à goûter au plaisir d'un moteur de rendu puissant et beau à la fois. De quoi s'avouer comblé!
Conclusions
C'en est fini pour ce mois-ci. Outre les bases pour la modélisation et le rendu d'objets en verre, nous avons vu un usage pratique des objets de type Declaration et Link. Si nous l'avons mis en oeuvre pour un objet complet (modélisation + paramètres matériau), sachez que vous pouvez indifféremment déclarer des matériaux, des textures, des sources d'éclairage et les rappeler plus bas grâce à l'objet Link. Que de temps gagné lors de la modélisation répétitive de scènes complexes! Sans compter que l'importation d'un objet déclaré est plus facile que l'importation d'une multitude d'objets disséminés au travers de votre scène... Pour ne revenir qu'un instant sur la qualité de rendu de POVray, il est regrettable de souligner que les caustiques, bien que souvent convaincants, ne sont que simulés avec la version 3.1 de POV actuellement supportée par KPovModeler. La version 3.5 présente toutefois un système de lancer de photons qui permet une gestion rigoureuse des caustiques, mais également des reflets lumineux des surfaces brillantes sur les objets environnants. Espérons que les prochaines évolutions de KpovModeler nous permettront très rapidement de manipuler cette passionnante fonction.
Références:
-La homepage de kpovmodeler: http://www.kpovmodeler.org/
-La homepage de povray (version v3.5): http://www.povray.org/
-La homepage de kde: http://www.kde.org
-La homepage de linuxgraphic: http://www.linuxgraphic.org