| 
 | 
      
 
        
          
            |    Structure
des fichiers 2/n
Objet
Povray 3.5 : Mesh2  |  
            | Objectif Syntaxe
 Textures
multiples
 Textures
UV mappées
 Taille
des fichiers
 Faces
adoucies
 Mélanges:
 textures
et faces adoucies...
 Modificateurs :
 inside
vector
 |  
            | Le mesh2
est un objet récent dans la boite à outil de povray. Il
n'existe
que dans la toute dernière version en date, la 3.5 (mais son
utilisation
a été banalisée par les versions de Megapov, 
fer de lance des nouvelles technologies de Povray) Objectif:
            Permettre l'utilisation
d'un très grand nombre de triangles en se basant sur une
définition
plus proche de la géométrie des objets produits  par
les modeleurs les plus
courants
qui sont généralement de type "surfacique"
...
 |  
            |  |  
            | ...alors que povray manipule
des objets de manière "volumique". |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | A gauche, un mesh réalisé
dans Blender. A droite, le même mesh exporté au format
mesh2
à l'aide d'un script  python, Povanim, et rendu au travers
de povray 3.5 |  
            | Syntaxe: |  
            | 
              
                
                  | mesh2 {// Vecteurs:
 vertex_vectors
 {
 nombre_de_sommets,
 <sommet1>, <sommet2>, ...
 }
 normal_vectors
 {
 nombre_de_normales,
 <normale1>, <normale2>, ...
 }
 uv_vectors
 {
 nombre_de_vecteurs_uv,
 <vect_uv1>, <vect_uv2>, ...
 }
 
 // Listes:
 texture_list
 {
 nombre_de_textures,
 texture { Texture1 },
 texture { Texture2 }, ...
 }
 
 // Indices:
 face_indices
 {
 nombre_de_faces,
 <sommet_index_a, sommet_index_b, sommet_index_c> [,texture_index [,
 texture_index, texture_index]],
 <sommet_index_a, sommet_index_b, _sommet_index_c> [,texture_index [,
 texture_index, texture_index]],
 ...
          }normal_indices
 {
 nombre_de_faces,
 <index_a, index_b, index_c>,
 <index_d, index_e, index_f>,
 ...
 }
 uv_indices
 {
 nombre_de_faces,
 <index_a, index_b, index_c>,
 <index_d, index_e, index_f>,
 ...
 }
 
 // Modificateurs de Mesh :
 inside_vector <direction>
 (..modificateurs d'objets..)
 (..transformations..)
 }
 |  |  
            | La syntaxe peut paraître
très compliquée mais la définition minimale d'un
mesh2
peut  se limiter à cela: |  
            | 
              
                
                  | mesh2 { // Vecteurs:
 vertex_vectors
 {
 nombre_de_sommets,
 <sommet1>,
<sommet2>, ...
 }
 // Indices:
 face_indices
 {
 nombre_de_faces,
 <sommet_index_a,
sommet_index_b, sommet_index_c> [,texture_index [,
 texture_index, texture_index]],
 <sommet_index_a,
sommet_index_b, _sommet_index_c> [,texture_index [,
 texture_index, texture_index]],
 ...
 }
 }
 |  |  
            | Voici un exemple très
simple de mesh2   (celui qui illustre le haut de cette page): |  
            | 
              
                
                  | //povray 
version 3.5 sky_sphere{
 pigment{   gradient z
 color_map{
 [0.0 color rgb<0.14,0.45,0.47>][0.50 color
rgb<0.0,0.64,0.77>]
 [1.0 color rgb<0.14,0.45,0.46>]
 } } scale 2 rotate x*45 }
 #declare Material_001_pig=pigment{color rgb
<0.0,1.0,0.41> }  #declare Material_001_fsh=finish { ambient 0.1  diffuse 0.6  specular 0.325 roughness
0.029 }
 #declare Plane2 = mesh2 { vertex_vectors{
 4,
 <3.8,16.9,0.45>,<4.07,4.4,-2.23>,
 <-8.7,1.48,-1.49>,<-7.3,15.55,-4.02>
 }
 face_indices{
 2,
 <0,2,1>,<0,3,2>
 }
 }
 object{ Plane2  scale<1.27,1.27,1.27> 
rotate<65.85,20.24,-2.42>
translate<4.16,-1.77,-12.80>
 pigment{Material_001_pig}   
finish{Material_001_fsh}
 }
 camera { location <0, 0, 0> look_at <0, 0, 1>
 right <-1.33333333333, 0, 0>
 up    <0, 1, 0> angle 27.912
 rotate <0, 180, 0> scale <1.0, 1.0, 1.0>
 rotate <90, 0.0, 0.0> translate <5.42,
-50.4,
-2.2>
 }
 #declare Lamp_001 = light_source{ 0*x  color rgb<1.0, 1.0, 1.0>
 spotlight point_at <0,0,-1>  radius  12.95
tightness  0.42
 falloff  22.5
 area_light<8, 0, 0> <0, 0, 8> 4, 4
 adaptive 0  jitter  circular orient
 fade_distance 110.0   fade_power 1
 }
 object{ Lamp_001 rotate <59, -25.68, -35.81>   translate
<-17.02,
-15.51, 14.34>
 }
 |  |  
            | Textures
multiples et texture_list : Certains logiciels de 3D, 
offrent la possibilité de "peindre" les couleurs sur chaque
sommet
d'un triangle. La définition d'une texture_list permet de
reproduire
cet effet en offrant la possibilité d'associer une texture
différente
à chaque sommet d'une face .
 |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | Le mesh de gauche est modelé
et colorié dans Blender. Dans ce cas particulier, la
lumière
a été augmentée pour  faire ressortir les
couleurs. 
Celui de droite est rendu dans povray. Un tel objet devrait être
déclaré  de la manière suivante: |  
            | 
              
                
                  | #declare Plane2
= mesh2 { vertex_vectors{4, <3.8058,16.9311,0.4496>,
 <4.0735,4.3990,-2.2274>,
 <-8.6940,1.4797,-1.4879>,
 <-7.2997,15.5429,-4.0221>
 }
 texture_list{ 4,
 texture{pigment{rgb<0.0,0.44,0.66>}finish{Material_001_fsh}}
 texture{pigment{rgb<0.87,0.19,0.0>*1.0}finish{Material_001_fsh}}
 texture{pigment{rgb<0.01,0.39,0.16>*1.0}finish{Material_001_fsh}}
 texture{pigment{rgb<0.0,0.13,0.054>*1.0}finish{Material_001_fsh}}
 }
 face_indices{2, <0,2,1>,0,1,2,
 <0,3,2>,0,3,1 }
 }
 |  |  
            | Textures
UV mappées : La grande
force des logiciels surfaciques est la possibilité d'ajouter des
images repérées par des coordonnées uv . Ces
informations
sont gérées par un tableau de vecteurs nommé
uv_vectors.
Chacun de ces vecteurs est associé à un sommet de
face. 
Noter bien qu'un sommet  de la liste vertex_vectors peut
être
utilisé par un nombre indéterminé de faces et que
chaque face uvmappée aura automatiquement trois uv_vectors
associés.
 |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | L'exemple ci-dessus sera
déclaré
de la manière suivante: |  
            | 
              
                
                  | #declare Plane2
= mesh2 { vertex_vectors{ 4,
 <3.8058,16.9311,0.4496>,<4.07356,4.3990,-2.2274>,
 <-8.694,1.4797,-1.4879>,<-7.2997,15.5429,-4.0221>
 }
 uv_vectors{ 6,
 <0.98907,0.98907>,<0.00546,0.00546>,<1.0,0.01093>,
 <0.98907,0.98907>,<0.00546,1.0>,<0.00546,0.00546>
 }
 texture_list{ 4,
 texture{pigment{average
 pigment_map{
 [1.0 color rgb<0.0,0.44,0.66>][1.0 img0]}}
 finish{Material_001_fsh}}
 texture{pigment{average
 pigment_map{
 [1.0 color rgb<0.875,0.19,0.0>][1.0img0]}}
 finish{Material_001_fsh}}
 texture{pigment{average
 pigment_map{
 [1.0 color rgb<0.011,0.39,0.16>][1.0 img0]}}
 finish{Material_001_fsh}}
 texture{pigment{average
 pigment_map{ [1.0 color rgb<0.0,0.13,0.054>][1.0 img0]}}
 finish{Material_001_fsh}}
 }
 face_indices{ 2,
 <0,2,1>,0,1,2, <0,3,2>,0,3,1
 }
 uv_indices{ 2,
 <0,1,2>,<0,1,2>+3
 }
 uv_mapping
 }
 |  |  
            | Taille
des fichiers : Une
simple sphère peut comporter 42  sommets et 80 faces.
 |  
            | . 
              
                
                  |  |  |  |  
                  | Sommet/Vertex | Cotés/Edges | Facette/Face |  |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | Le modèle qui est
présenté
ci-dessus (à gauche le mesh Blender, à droite le mesh2
rendu
par povray) devient un texte particulièrement indigeste comme on
peut le voir dans les lignes qui suivent. |  
            | 
              
                
                  | #declare
Sphereexport2 = mesh2
{ vertex_vectors{ 42,
 <6e-008,0.0,-3.979780674>,
 <2.879769325,-2.092250109,-1.779817104>,
<-1.099951625,-3.385360479,-1.779817104>,
 <-3.559614897,0.0,-1.779817581>,<-1.099951625,3.385360718,-1.779817581>,
 <2.879769325,2.092250347,-1.779817581>,<1.099951744,-3.385360479,1.779817581>,
 <-2.879769325,-2.092250109,1.779817581>,<-2.879769325,2.092250347,1.779817343>,
 <1.099951744,3.385360718,1.779817343>,<3.559614897,0.0,1.779817581>,
 <6e-008,0.0,3.979780436>,<1.692691207,-1.22979784,-3.385416508>,
 <-0.646537423,-1.98987174,-3.385417461>,<1.04616034,-3.219688654,-2.092320442>,
 <1.692691207,1.229797363,-3.385416508>,<3.385391712,0.0,-2.09231329>,
 <-2.092288971,0.0,-3.385406971>,<-2.738842487,-1.989877939,-2.09231472>,
 <-0.646537423,1.989871502,-3.385417461>,<-2.738842487,1.989877701,-2.09231472>,
 <1.04616034,3.219688416,-2.092320442>,<3.785001755,1.229802608,0.0>,
 <3.785001755,-1.229802608,0.0>,<2.339257956,-3.21970892,0.0>,
 <6e-008,-3.979780674,0.0>,<-2.339257717,-3.21970892,0.0>,
 <-3.785001755,-1.229802608,0.0>,<-3.785001755,1.229802608,0.0>,
 <-2.339257717,3.219708443,0.0>,<6e-008,3.979780197,0.0>,
 <2.339257956,3.219708443,0.0>,<2.738842726,-1.989877701,2.092314959>,
 <-1.046160221,-3.219688654,2.092320681>,<-3.385391712,0.0,2.09231329>,
 <-1.046160221,3.219688416,2.092320204>,<2.738842726,1.989878178,2.092314482>,
 <2.092288971,0.0,3.385406733>,<0.646537542,-1.989871264,3.385417461>,
 <-1.692691088,-1.229797363,3.385416985>,<-1.692691088,1.22979784,3.385416985>,
 <0.646537542,1.989871502,3.385417461>
 }
 face_indices{80,
 <12,14,13>,<12,15,16>,<13,18,17>,<17,20,19>,<19,21,15>,
 <16,22,23>,<14,24,25>,<18,26,27>,<20,28,29>,<21,30,31>,
 <23,32,24>,<25,33,26>,<27,34,28>,<29,35,30>,<31,36,22>,
 <32,37,38>,<33,38,39>,<34,39,40>,<35,40,41>,<36,41,37>,
 <9,41,36>,<11,37,41>,<10,36,37>,<8,40,35>,<11,41,40>,
 <9,35,41>,<7,39,34>,<11,40,39>,<8,34,40>,<6,38,33>,
 <11,39,38>,<7,33,39>,<10,37,32>,<11,38,37>,<6,32,38>,
 <5,31,22>,<10,22,36>,<9,36,31>,<4,29,30>,<9,30,35>,
 <8,35,29>,<3,27,28>,<8,28,34>,<7,34,27>,<2,25,26>,
 <7,26,33>,<6,33,25>,<1,23,24>,<6,24,32>,<10,32,23>,
 <4,30,21>,<9,31,30>,<5,21,31>,<3,28,20>,<8,29,28>,
 <4,20,29>,<2,26,18>,<7,27,26>,<3,18,27>,<1,24,14>,
 <6,25,24>,<2,14,25>,<5,22,16>,<10,23,22>,<1,16,23>,
 <0,19,15>,<5,15,21>,<4,21,19>,<0,17,19>,<4,19,20>,
 <3,20,17>,<0,13,17>,<3,17,18>,<2,18,13>,<0,15,12>,
 <5,16,15>,<1,12,16>,<0,12,13>,<2,13,14>,<1,14,12>
 }
 |  |  
            | Si l'on fait appel à
des opérations de subdivision pour adoucir la forme, on va
multiplier
de manière exponentielle les informations rébarbatives.
Si
l'on prend en considération que des objets de moyenne
résolution
peuvent atteindre plusieurs dizaines de milliers de faces, la gestion
de
toutes les informations groupées d'un mesh2 devient proprement
impossible
dans un traitement de texte classique. Heureusement il est possible de
réaliser des #include |  
            | .. 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | Alors que l'objet ci-dessus
contient 4 fois plus de faces que le précedent, sa gestion se
limite
maintenant à deux simples lignes. |  
            | . 
              
                
                  | #declare
Sphereexport2 = mesh2
{ vertex_vectors{ #include "Sphereexport2verts.inc"}
 face_indices{ #include "Sphereexport2faces.inc"}
 }
 |  |  
            | Face
adoucies: |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | Les vecteurs normaux permettent  de donner un
aspect plus lissé
à la forme de manière plus économique que la
subdivision
des facette. |  
            | 
 |  
            | Si certaines faces restent à l'état brut,
il faut ajouter
la déclaration: |  
            | .
 |  
            | Exemple: |  
            | 
              
                .
                  | #declare Sphereexport2 = mesh2 { vertex_vectors{ #include "Sphereexport2verts.inc"}
 normal_vectors{ #include "Sphereexport2norm.inc"}
 face_indices{ #include "Sphereexport2faces.inc"}
 normal_indices{ #include "Sphereexport2nindice.inc"}
 }
 |  |  
            | Mélanges:
listes de textures  et faces adoucies... |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | Exemple: |  
            | 
              
                
                  | #declare Sphereexport2 = mesh2 { vertex_vectors{ #include "Sphereexport2verts.inc"}
 normal_vectors{ #include "Sphereexport2norm.inc"}
 texture_list{ #include "Sphereexport2text_list.inc"}
 face_indices{ #include "Sphereexport2faces.inc"}
 normal_indices{ #include "Sphereexport2nindice.inc"}
 }
 |  |  
            | ...
plus texture uvmappées: |  
            | 
              
                
                  |  |  |  
                  | Blender | Povray |  |  
            | Exemple: |  
            | 
              
                
                  | #declare Sphereexport2 = mesh2 { vertex_vectors{ #include "Sphereexport2verts.inc"}
 uv_vectors{ #include "Sphereexport2uvco.inc"}
 normal_vectors{ #include "Sphereexport2norm.inc"}
 texture_list{ #include "Sphereexport2text_list.inc"}
 face_indices{ #include "Sphereexport2faces.inc"}
 normal_indices{ #include "Sphereexport2nindice.inc"}
 uv_indices{ #include "Sphereexport2uvind.inc"}
 uv_mapping
 }
 |  |  
            | ...
Modificateurs : inside_vector: |  
            |  |  
            | CSG, union et difference
ou intersection: |  
            | Exemple: |  
            |  |  
            | 
 |  
            | . |  
            | 
 |  
            | 
 |  
 |