|
File
Structure 2/n Povray 3.5 's
Object : Mesh2 
|
Goal
Syntaxes
multiples
textures
UV
mapped textures
Size
of the files
Softened
Faces
Mixtures:
textures
and softened faces ...
Modifyings
:
inside_vector |
The mesh2 is a recent object among
the tool box
of povray. It only exist in the very last version, the 3.5 (but its
utilization
is very commonplace now due to Megapov, the spearhead of the new Povray
technologies).
Goal:
Allowing the use of a great number of triangles based on an object
definition closer to the geometry as used in most of the modellers
and that generally produces objects of the type "surfaced"
...
|
|
...when povray uses objects in a " volumic"
manner.
|
 |
 |
Blender
|
Povray
|
|
On the left, a mesh realised in
Blender. On the
right, the same mesh exported in mesh2 format with the help of a python
script, named Povanim and rendered through povray 3.5.
|
Syntaxes:. |
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..) }
|
|
The syntaxes may appear very
complicated but the
mesh2 minimum definition can be reduced to this:
|
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]],
...
}
} |
|
Here is a very simple example of
mesh2 (the
one that illustrates the top of this 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>
}
|
|
Multiples
textures and texture_list :
Some 3D software offers the ability to paint colours on each vertex
of a triangle. The definition of a texture_list allows reproducing this
effect offering the ability to join a texture to each vertex of a
face. |
 |
 |
Blender
|
Povray
|
|
The mesh on the left is modelled and
painted in
Blender. In this particular case, the light has been increased to
improve
the visibility of the colours. The one on the right is rendered in
povray.
Such an object should be declared the following manner:
|
#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 }
} |
|
UV
mapped textures:
The great strength of surfaced software is the ability to add pictures
located with uv coordinates. These information are handled through a
vectors
table named uv_vectors. Each of the vectors is linked to a face's
vertex.
Take notice of that, the vertex of the list vertex_vectors can
be
used by a undetermined number of faces and that each uvmapped face will
have automatically three uv_vectors associated. |
 |
 |
Blender
|
Povray
|
|
The example here above will be
declared the following
way :
|
#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
} |
|
Size
of the files :
A simple sphere can contain 42 vertices and 80 faces. |
.
 |
 |
 |
Sommet/Vertex
|
Cotés/Edges |
Facette/Face |
|
 |
 |
Blender
|
Povray
|
|
The model shown here above (on the
left the Blender
mesh, on the right the mesh2 rendered by povray) becomes a particularly
indigestible text as you can see by reading the following lines..
|
#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>
} |
|
If we use dividing operations to
soften the shape,
we are going to dramatically increase the number of points composing
the
object and thus, heavy and repugnant information. Even if weonly
consider
objects of middle resolution, they contain tens of thousand faces.
Handling
with such an amount of data becomes queeckly impossible in a basic word
processor. Luckily we can use #include.
|
..
 |
 |
Blender
|
Povray
|
|
However the here above object
contains 4 times more
faces than the preceding one, you can see that it takes only two lines
in the file.
|
.
#declare
Sphereexport2 = mesh2
{
vertex_vectors{ #include "Sphereexport2verts.inc"}
face_indices{ #include "Sphereexport2faces.inc"}
} |
|
Softened
faces : |
 |
 |
Blender
|
Povray
|
|
The normals vectors allow giving a
smother aspect
to the shape in a more economic way than the subdivision of the faces.
|
|
If certain faces stay at the raw
state, you have
to add the declaration:
|
. |
Example: |
#declare Sphereexport2 = mesh2 {
vertex_vectors{ #include "Sphereexport2verts.inc"}
normal_vectors{ #include "Sphereexport2norm.inc"}
face_indices{ #include "Sphereexport2faces.inc"}
normal_indices{ #include "Sphereexport2nindice.inc"}
} |
. |
Mixtures:
textures list and softened faces ... |
 |
 |
Blender
|
Povray
|
|
Example: |
#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 uvmapped textures: |
 |
 |
Blender
|
Povray
|
|
Example:. |
#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
} |
|
...
Modifying : inside_vector: |
|
CSG,
union and substraction
or intersection: |
Example:. |
|
|