Page by [Theo Verelst] The type of language Tcl is obviously most reknowned for to be is 'scripting language' which calls for a comparison with a movie script. Of course that is no coincidence, so let's start small but good with a simple script to govern a computer graphics animation. Without intent to affiliate with NVidia in this space, recently their Gelato language has been made freely available to run high quality rendering on computers with a recent graphics card of theirs (I think 6200+, though that cheap one is not very well compatible), which comes with a [python] and C interface. Being used to Tcl since at least '94 or so, and not liking python very much, I though I´d try what the possibilities and penalties (calling of the interpreter and running a program all the time) of using [Tcl] for certain rendering calls would be, so I made a very small starting script to rotate the famous teapot in a gelato-rendered scene by a small tcl script run under [tclsh] from a [Cygwin] prompt: set d [open head.pyg r] set t [read $d] close $d for {set i 0} {$i<50} {incr i 2} { set f [open rn.pyg w] puts $f $t puts $f "Rotate ( $i, 0,0,1)" puts $f "Rotate ( 0, 0, 0, 1 )" puts $f "Input (\"teapot.pyg\")" puts $f "PopAttributes ()" puts $f "" puts $f "Render (\"camera\")"; puts $f "" close $f catch {exec gelato -iv -o im$i.tiff rn.pyg} puts "finished i=$i"; } That´s 25 frames, which can be made into an animation (can be added to the tcl script' by using ffmpeg (I used 'ffmpeg -s 1920x1080 -i imageout%d.jpg -r 25 -s 1920x1080 -b 50000 -f mpeg2video -y ani.mpg', and played it back using (heavy) HW accelerated PureVideo on a 1080 HD compatible screen). [http://82.171.148.176/Wiki/imageout11s.jpg] head.pyg contains mostly after the ´layered shader´ example the graphics scene in gelato-python. the loops calls gelato in a loop from the tcl interpreter, which works ok, the progress bar is visible. The resulting 25 TIFF files (they can be made HDR too, for those who like that) were converted with this tcl script (under cygwin): for {set i 0} {$i < 50} {incr i 2} { exec tifftopnm T/im$i.tiff 2&>/dev/null | cjpeg -q 95 -outfile imageout[format "%d"; [expr int($i/2)]].jpg } In this case I used a 1920x1080 (HD) resolution, which made this 1 second 'animation' rendered in about 30 secs IIRC. Quite doable. Oh, I added the envmap on the teapot myself, let me see if I will get requests to put all the files together. Perfect TCL use! ---- [TV] (''May 1 '08'') Recently I did a similar 'trick' but then with the caustic example from the most recent Gelato distribution, where I changed the light direction and rotated the whole scene various directions and then made a short HD movie of the resulting frames, transcoding them over h246 (for motion estimation), on of the scripts I used was: set d [open gather_h1a.pyg r] set th2a [read $d] close $d set d [open gather_h1b.pyg r] set th2b [read $d] close $d set d [open gather_h2.pyg r] set th2 [read $d] close $d set d [open gather_b.pyg r] set t2 [read $d] close $d set d [open shoot_h.pyg r] set u [read $d] close $d set d [open shoot_b.pyg r] set u2 [read $d] close $d set j 111 set f [open rn2.pyg w] puts $f $u # puts $f "Rotate ( [expr 130+$i], 1, 0, 0 )" puts $f "Rotate ( [expr 170], 1, 0, 0 )" puts $f $u2 close $f if { $j == 0 } { catch "exec gelato rn2.pyg" } puts -nonewline "finished shooting j=$j "; flush stdout for { set i 111 } { $i<200 } { incr i 1 } { set f [open rn.pyg w] puts $f $th2a puts $f "Rotate ( [expr $i/2.0], 0, 0, 1 )" puts $f $th2b puts $f "Output (\"im[ format "%03d" $j].tiff\", \"tiff\", \"rgb\", \"perspShape\" )" incr j puts $f $th2 # puts $f "Rotate ( [expr 130+$i], 1, 0, 0 )" puts $f "Rotate ( [expr 170], 1, 0, 0 )" puts $f $t2 close $f # catch "exec gelato -iv -ivpage 1 rn.pyg" catch "exec gelato rn.pyg" puts "finished i=$i"; flush stdout } The header files contain the relevant parts of the original gelato graphics file, which of courseis a bit clumsy, but it works fine... I didn't make a tl script to define parameter progressions for the whole animation, which may be a good idea. The result is a 1920x1080 25fps mp4 file, to which I added a audio track with Cinelerra (Open Source Video Edit software), and in fact I could put the est of the production process in a tcl script with the right ffmpeg calls, but didn't yet. Nicer would be a good Tk UI with parameter settings, and menus and explanations. The above script starts rendering at frame 111 from the 200, so is a partial render. That is because for some reason the computer I used to make all these big frames with (a power soaking 3GHz pentium D with a bulky NVidia graphics card) had a problem I think with the monitor power off, and in fact I have suspected the combined tcl/gelato memory householding under fedora 8/64, because it had frozen at frame 110, which was probably after about an hour, I don't recall. A frame from a downconverted 720 movie file: [http://82.171.148.176/Diary/Ldi46/geltrac4_720_1.jpg] The movies resulting from the script: http://www.theover.org/Diary/Ldi46/geltrac4.mp4 ( 84 MB , 1920x1080 , 25 fps , mpeg4 video/sound ) http://www.theover.org/Diary/Ldi46/geltrac4_720.mp4 ( 8.4 MB , 1280x720 , downconverted) ---- See also [DataViewer] (? This a demo of Final Film Frame Rendering, not 3D data viewing) ---- [Category Animation]