A POV Scene
Explained Step by Step
I don't intend to provide a POV user
guide. You will have to learn the POV syntax by yourself if
you want to add fancy textures on your molecules. However, I
will explain a typical POV scene generated by the
Swiss-PdbViewer. Usually, the image generated by POV will be
very close to the one you can see with the QuickDraw3D
preview. The only thing you will probably have to adjust is
the distance between the camera and the model.
First of all, a syntax definition: // at the
beginning of a line means that it will be ignored by POV. To
comment a block of lines, put a /* before the first caracter
to ignores and a */ after the last caracter to ignore.
Now, let's look step by step at the scene description:
//
// POV-Ray ray tracer scene file, generated by Swiss-PdbViewer
// File:1crn*.pov
// Swiss-PdbViewer can be retrieved by anonymous ftp at:
// http://www.expasy.ch/spdbv/../mainpage.htm
//
// POV-Ray can be retrieved at: http://www.povray.org
// N.Guex, 1995/96
//
#version 2 // this scene uses POV-Ray 2.x syntax
#include "colors.inc"
#include "textures.inc"
Includes colors, shapes and textures
definitions.
// ------ COLORS ---------
#declare ATM_FINISH = finish {specular 1 roughness 0.001}
Defines the finish (aspect) of atoms. This is
"Shiny", but you could change these values to get something
metallic.
#declare Surf_tex = texture { pigment { colour red 0.500 green 0.500 blue 0.500 filter 0.000} finish{ metallic }}
#declare N_tex = texture { pigment { colour red 0.240 green 0.320 blue 1.000 } finish{ ATM_FINISH }}
#declare C_tex = texture { pigment { colour red 1.000 green 1.000 blue 1.000 } finish{ ATM_FINISH }}
#declare O_tex = texture { pigment { colour red 1.000 green 0.000 blue 0.000 } finish{ ATM_FINISH }}
#declare P_tex = texture { pigment { colour red 1.000 green 0.660 blue 0.090 } finish{ ATM_FINISH }}
#declare H_tex = texture { pigment { colour red 0.300 green 0.800 blue 1.000 } finish{ ATM_FINISH }}
#declare S_tex = texture { pigment { colour red 1.000 green 0.940 blue 0.000 } finish{ ATM_FINISH }}
#declare X_tex = texture { pigment { colour red 0.625 green 0.625 blue 0.625 } finish{ ATM_FINISH }}
#declare SS_Bnd_tex = texture { pigment { colour red 1.000 green 0.940 blue 0.000 } finish{ ATM_FINISH }}
#declare Strong_HBnd_tex = texture { pigment { colour red 0.000 green 1.000 blue 0.000 filter 0.5} finish{ ATM_FINISH }}
#declare Weak_HBnd_tex = texture { pigment { colour red 0.562 green 0.687 blue 0.562 filter 0.5} finish{ ATM_FINISH }}
Define rgb colors for GRASP surfaces, atoms and
H-bond. Note that the "filter" value present for some colors
defines the transparency from 0 (solid) to 1 (completely
transparent).
#declare r_Atm = 0.200 // atom radius
#declare r_Bnd = 0.200 // bond radius
#declare r_HBnd = 0.075 // H-bond radius
All these numbers are in Angstroms. By default,
atom radius is equals to bond radius. It allows to generate
smooth "sticks" models.
Note that all these radii can be modified directly from
within Swiss-PdbViewer.
// ---- Radius for "spacefilled" atoms ----
#declare rO_ = 1.4
#declare rN_ = 1.5
#declare rC_ = 1.7
#declare rS_ = 1.85
#declare rP_ = 1.9
#declare rH_ = 1.1
#declare rX_ = 1.0
The previous section assign radii for
"space filled"
atoms.
Note that atoms are rendered as "Spacefilled" only when the
column "dot surface" of the control
Panel is checked. It allows you to render very easily
models in "mixed
mode".
// ---- Radius for "joining" atoms ----
#declare VDW_factor = 0.200 // changing this value will alter the
radius of "joining" atoms
// when atom radii below are all set to 1.0, you obtain
a smooth "sticks" model
#declare rO = 1.0 * VDW_factor
#declare rN = 1.0 * VDW_factor
#declare rC = 1.0 * VDW_factor
#declare rS = 1.0 * VDW_factor
#declare rP = 1.0 * VDW_factor
#declare rH = 1.0 * VDW_factor
#declare rX = 1.0 * VDW_factor
The previous section assigns the radii for the
atoms (spheres) that will be joined by the bonds. Obviously,
in the case demonstrated here, you won't see them. However,
you could modify these values to obtain a
"balls & sticks"
model.
// ---- some TEXT parameters ----
#declare Label_scale = .75 // Text height in angstroms
#declare Label_XDecal = .6 // Horizontal offset from CA
#declare Label_YDecal = -.5 // Vertical offset from CA
#declare Dist_scale = .5 // Text height in angstroms
#declare Dist_XDecal = -.3 // Horizontal offset from middle of H-bond
#declare Dist_YDecal = 0 // Vertical offset from middle of H-bond
#declare Label_tex = texture { pigment { colour red 1.000 green 1.000
blue 1.000} finish{ metallic }}
#declare Label_tex = texture { pigment { colour red 1.000 green 1.000
blue 0.000} finish{ metallic }}
The previous section defines some parameters (such
as label placement and color) that will be used to place
"solid 3D text" that will
be rendered along with your image (available only with
POV3).
//************ OBJECTS *********
#include "molcolor.inc"
#include "asphis.inc"
object{ A0_shape } // ASP156
text{ttf "cyrvetic.ttf", "Asp 156",.5,0.1*x
texture{Label_tex} scale
translate <-3.625+Label_XDecal,-3.279+Label_YDecal,-1.095>}
object{ A1_shape } // HIS183
text{ttf "cyrvetic.ttf", "His 183",.5,0.1*x
texture{Label_tex} scale
translate <1.340+Label_XDecal,1.641+Label_YDecal,1.434>}
object{ Hbnds }
The first include get the atoms colors definitions.
You can edit this file to change the default atoms colors,
H-bond colors and so on.
This file must reside either in
the same folder as the .pov and .inc files you want to
render, or in the folder where all other includes files
(colors.inc, textures.inc and so on...) reside.
The next line calls the molecule atoms and bonds
definitions. The next bunch of lines call each groups If you
want to remove just one amino-acid from the final rendering,
you will just have to put // in front of the object you want
to remove.
As you may notice, the three lines slightly decaled onto the
right define "solid 3D
text" that will be rendered along with your image
(available only with POV3). You will probably need to modify
the position of some labels to insure they are visible.
//************ CAMERA *********
camera { location < 0, 0, -15.727> // get closer to <0,0,0> to
zoom in on the model
// rotate < 0, 2.000, 0> // uncomment to get left Eye stereo view
// rotate < 0, -2.000, 0> // uncomment to get right Eye stereo view
direction < 0, 0, 1.207>
up <0, 1, 0>
right <100/100, 0, 0> // **NOTE:** do not forget to adjust this value
according to final Width/Height rendering
look_at <0, 0, 0>
}
This section defines the camera position and
direction. You may have to change the last term of the
"location" part. Increasing it will put the camera closer to
the model, and so it will appear enlarged.
The "right" term difines the width/height ratio. Its default
value is 1, meaning that you will have to render squared
images in order to observe no distortion. If you change the
image size to 640 by 480 pixels, do not forget to modify the
first term by 640/480 = 1.333333
Note: if you want to render the left or right part of a
stereo view, simply uncomment the appropriate "rotate"
command. Only one of the two "rotate" should be uncommented
at the same time.
Note that you can specify which image has to be calculated
directly from within Swiss-PdbViewer, as the parameters set
in the QuickDraw3D preference dialog will be taken into
account.
//************ LIGHTS *********
#declare Intensity = 2
background { color rgb <0.000,0.000,0.125> }
object { light_source {<-20.000,20.000,-20.000> color rgb Intensity*1.000 }}
object { light_source {<0,0,-200.000> color rgb Intensity*0.7 }}
Obviously, here are the light sources. You may have
to move their locations to get nice results, but it usually
works like that. The more light sources you put, the longer
it takes to render the scene.
Note that you can modify the position and intensity of the
light sources directly from within
Swiss-PdbViewer.
|