Home |  Contact |  Feedback 

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 OpenGL preview. The only thing you will probably have to adjust is the distance between the camera and the model.

Note: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.