|
MKCYL (télécharger) |
|
a. LES PRIMITIVES. b. LES METHODES DE MODELAGE/MODELISATION. c. MODELAGE PAR SURFACE DE ROTATION: LE TOUR. Surfacique:SORG Volumique :MKCYL d. MODELAGE PAR BALAYAGE DE FORME: L'EXTRUSION. Palliatif: Worm et CTDS. |
a. LES PRIMITIVES Les Primitives sont des formes géométriques élémentaires dont on se sert pour construire des objets complexes en 2D ou en 3d. En 3d il existe plusieurs types de primitives: Les PRIMITIVES SOLIDES FINIES POV en gère 7. les BLOBS (ou méta-sphères, groupe de sphères enrichies d'un coefficient d'attraction qui les déforme en fonction de la proximité d'autres éléments), les BOITES, les CONES, les CYLINDRES, Les "height_fields"( 'champs de hauteur', et c'est effectivement ce que c'est: une surface dont chaque point défini vaut pour une hauteur , à noter que ce n'est qu'une extension des boites.. tronquées, il est vrai, et en apparence cela ressemble beaucoup plus à un champ de triangle, les paramètres de hauteurs sont passés sous forme de code couleur dans une image), les SPHERES et les tores. Les PRIMITIVES "PATCHES" FINIES POV en connaît 4: les surfaces BI-CUBIQUES ("surfaces de Bézier", surfaces définies par un certain nombre de point de contrôle, plutôt un groupe de triangles dont la normale est contrôlée par les courbes que définissent les points de contrôle), les DISQUES, les TRIANGLES, et TRIANGLES de PHONG (le terme anglais est "smooth_triangle", que l'on pourrait traduire par 'triangle adouci' ou 'triangle lissé', mais ce n'est pas le triangle qui est lissé c'est la forme qu'il définit, habituellement avec un gros paquet de ses congénères). A quoi peut s'ajouter le POLYGONE... Les PRIMITIVES SOLIDES INFINIES Ce sont des ... demi-espaces? dont la surface serait infinie. Le PLAN est le plus utilisé. Les autres sont des volumes définis pas des polynomes à n degrés dont les variations sont quasiment infinies et font la joie de tous les matheux. |
b. LES METHODES DE MODELAGE/MODELISATION Si on appelle modelé le résultat de l'assemblage de primitives pour obtenir une scène 3d, on peut considérer qu'il existe deux manière de modeler. Par primitives solides, on parle alors de modelage volumique, par primitives patches et cela se nomme le modelage surfacique. POV travaille entre les deux. Mais d'autres logiciels de rendu d'images 3d sont exclusivement surfaciques (c'est le cas du plus célèbre d'entre eux: 3DStudio. |
c. MODELAGE PAR SURFACE DE ROTATION: LE TOUR. L'outil principal du modelage surfacique est le tour. On décrit par une série de coordonnées 2D une surface de révolution. En lui faisant faire une rotation de 360 degrés on obtient un volume. En fait une sphère paramétrée n'est rien d'autre qu'une série de valeur organisées en cercle à laquelle on fait effectuer une rotation sur un axe coincidant avec le diamétre. Le plus célèbre des tours du domaine public est SORG (Surface Of Revolution Generator) de sean KELLY. Comment fonctionne-t-il? Simplement à partir d'un fichier texte où l'on indique au début de l'objet son type, PHONG, on obtient en sortie un fichier contenant un objet constitué de smooth_triangle, ou rien, et ce ne seront que de simples triangles; ensuite on fournit un nom, la longueur de l'arc de rotation le nombre de division de l'arc, et les anneaux sous la forme d'une hauteur et d'une distance àparir du centre. Exemple: +------------------------> début de l'objet | +-------------------> type | | +-------------> nom SOR PHONG name +--------------------> 360 = un tour complet ARC 360 +--------------------> segmentation: 6 triangles SEG 6 +----------------> hauteur, le premier, c'est | normal RING 0 5 +--------------> distance du centre RING 1 6 RING 2 5 END_SOR -----------------> fin de l'objet Le fichier SORG.EXE que je possède a été modifié par G. BILGER pour être compatible avec les dernières versions de POV. Le résultat de l'exemple ressemblera très exactement à ‡a: #declare essai = object{ union{ smooth_triangle{ <2.5,0,4.33013> <0.5,0,0.866025> <5,0,0> <1,0,0> <3,1,5.19615> <0.5,0,0.866025> } smooth_triangle{ <5,0,0> <1,0,0> <3,1,5.19615> <0.5,0,0.866025> <6,1,0><1,0,0> } smooth_triangle{ <-2.5,0,4.33013> <-0.5,0,0.866025> <2.5,0,4.33013> <0.5,0,0.866025> <-3,1,5.19615> <-0.5,0,0.866025> } (une vingtaine de ligne plus loin: ...) smooth_triangle{ <5,2,-1.22461e-15> <1,0,-2.44921e-16> <2.5,2,-4.33013> <0.5,0,-0.866025> <6,1,-1.46953e-15> <1,0,-2.44921e-16> } smooth_triangle{ <2.5,2,-4.33013> <0.5,0,-0.866025> <6,1,-146953e-15> <1,0,-2.44921e-16> <3,1,-5.19615> <0.5,0,-0.866025> } } } Le point délicat: il n'y a pas de virgule entre les coordonnées 3D, ce que POV 2.2 ne digère pas trop. Le problème des objets 3d issus d'un tour: on ne peut pas les utiliser dans des opérations de CSG (sauf l'UNION). L'idée de produire un tour pour modelage solide s'impose d'elle-même. La réalisation en est d'une grande facilité (une des raisons pour lesquelles je ne fournirai pas les sources), en fait chaque anneau sera remplacé par un cône. J'ai d'ailleurs écrit un tour volumique dont le détail du langage suit et que l'on trouvera en annexe: ; Fichier de donnés fcy. ; (c) j.m. Soler. ; ; Six types d'objets peuvent être définis: ; ANEL_ et ANELC, ; CONE_ et CONELC ; ANNEA et LIENS ; ANEL renvoie un cylindre plein , ANELC un cylindre évidé ; de l'épaisseur indiquée ; FCY ; entrée d'objet ; NOM cylindre ; nom de l'objet DIRECTION z ; direction du "tour" ; Localisation ; | Longueur ; | | Largeur ; | | | ; v v v ANEL_ <0.1,0.2,2.0> <2.001> <2.11> ; ; Donne la formulation suivante acceptée par pov2.2: ; object{ union{ ; object{ cylinder{<0,0,0>,<0,0,2>,2}} ; // object_cylindre_1 ; ... ; ANELC <0,0,0> <2> <2> <0.1> ; A ; | ; Epaissseur de l'objet ; ;ajoute: ; object{ difference{ ; object{ cylinder{<0,0,0>,<0,0,2>,2}} ; object{ cylinder{<0,0,0.05>,<0,0,2.05>,1.9}} ; }} // object_cylinder_2 FCY_FIN ;termine par : ; } // fin_union ; } // object_cylinder_fin Le seul reproche que l'on peut faire à SORG ou MKCYL c'est de laisser des traces horizontales. Le lissage de la forme ne se faisant que sur ce plan, des lignes sont visibles à la séparation de chaque anneau. |
d. MODELAGE PAR BALAYAGE DE FORME: L'EXTRUSION On peut se demander pourquoi dans MKCYL les objets sont localisés en 3d alors que sur un tour tous les volumes devraient avoir le même axe. J'avais pensé dans un premier temps à développer (et ce n'est pas complètement abandonné) un version capable de gérer le déplacement des formes dans l'espace. Donc à réaliser une sorte de modelage par balayage de forme... Je dois avouer que L'operateur LIENS devait servir dans ce sens et qu'il n'a pas été implémenté parce que j'avais quelques difficultés à réaliser des raccords de volumes satisfaisant dans l'espace (pour donner une idée du problème cela revient à combiner une paire de tangentes et deux raccord de cercles dans une même formule. La partie est remise, mais je ne baisse pas définitevement les bras) En matière de modelage par balayage de forme, il n'existe pas grand chose dans le domaine public. Et pour tout dire je ne vois rien qui permette de définir une forme en 2D et lui fasse parcourir un chemin en 3D, tout en récuperant les données sous la forme de triangles. Ce qui s'en rapproche le plus c'est WORM de Robert Flores. Et WORM tout seul ne produit guère que des sphères positionnées dans l'espace (mais avec l'avantage d'une interface graphique). Le fichier de données fourni peut être destiné à POV, VIVID ou apparaître sous la forme de données brutes, RAW, au format: [x],[y],[z], [rayon] Exemple: 121 -22,10,0,.5,0 -23.74991,8.912839,0,.5833333,1 -25.27064,7.523061,0,.6666666,1 -26.51056,5.877853,0,.7499999,1 ( ... et 115 lignes plus loin: ... ) 28,-3,0,1,1 28,-10,0,1,1 Si on veut réellement avoir un objet volumique plein il faut utiliser CTDS de Truman Brown (Connect The Dot Smoother) qui effectue des liens de sphères lissés dans l'espace (pour reprendre textuellement la description de l'auteur). Dans ce cas particulier WORM peut fournir un fichier dans ce format: ; Worm 1 ; -7.250 -1.750 0.0 0.5 -5.5 -3.5 0.0 0.5 -4.0 -5.0 0.0 0.5 10.250 -7.0 0.0 8.0 que CDTD transformera en : //------------------------------------------------ // This file generated by CTDS 2.3 Copyright 1992, // 1993 Truman Brown //------------------------------------------------ #declare CTDS_Texture = texture { color red 0.556863 green 0.419608 blue 0.137255 ambient 0.2 diffuse 0.7 } #declare Dot = quadric { < 1 1 1 > < 0 0 0 > < 0 0 0 > -1 } #declare Connector_1 = object { quadric { < 0 1 1 > < 0 0 0 > < 0 0 0 > -1 } clipped_by { plane { < 1 0 0 > 1 } plane { <-1 0 0 > 0 } } } #declare Connector_2 = quadric { < 1 -1 1 > < 0 0 0 > < 0 0 0 > 0 rotate < 0 0 90 > } #declare transx1 = 0 #declare transy1 = 0 #declare transz1 = 0 #declare transx2 = 0 #declare transy2 = 0 #declare transz2 = 0 #declare scalex1 = 1 #declare scaley1 = 1 #declare scalez1 = 1 /*-----------------------------------------*/ #declare YourThing = composite { object { quadric { Dot scale < 0.50 0.50 0.50> translate <-7.25 -1.75 0.> } texture { CTDS_Texture } } object { Connector_1 scale < 2.474874 0.50 0.50> rotate < 0. 0. -45.> translate <-7.25 -1.75 0.> texture { CTDS_Texture } } object { quadric { Dot scale < 0.50 0.50 0.50> translate <-5.50 -3.50 0.> } texture { CTDS_Texture } } object { Connector_1 scale < 2.121320 0.50 0.50> rotate < 0. 0. -45.> translate <-5.50 -3.50 0.> texture { CTDS_Texture } } object { quadric { Dot scale < 0.50 0.50 0.50> translate <-4. -5. 0.> } texture { CTDS_Texture } } object { quadric { Connector_2 } clipped_by { plane { < 1. 0. 0.> 6.827441 } plane { < 1. 0. 0.> 0.426715 inverse } } translate <-0.426715 0. 0.> scale < 1.637410 1. 1.> translate <-0.260604 0. 0.> rotate < 0. 0. -7.989327> translate <-4. -5. 0.> texture { CTDS_Texture } } object { quadric { Dot scale < 8. 8. 8.> translate < 10.25 -7. 0.> } texture { CTDS_Texture } } bounded_by { box { < -7.75 -15. -8.> < 18.25 1. 8.> } } } Etonnant de longueur pour quelques malheureuses données de départ. On doit pouvoir faire plus sobre, d'autant que ce fichier ne sera pas accepté par POV2.2 san s l'option +M1. MAis c'est une autre histoire... Par contre, CTDS n'est pas la panacée en matière de liaison de forme. son gros défaut, outre la longueur des scripts, c'est sa gestion des "fenêtrages". Dans un groupe de sphères, il peut y avoir un vide cerné. Ce vide n'est pas pris en compte; il est "comblé" tout simplement. |