This is my first project in POVRay. I actually did fool around with it a bit in 1994. At that time, I think I got to about the stage of making reflective spheres on a plane of checkers. I didn't really have any time, or use, for it then, so I gave up on rendering for a while. I recently decided to pick it back up again in March of this year (2004), almost ten years later.
This time, I skipped right past the reflective sphere on a checkered plane, and dove into a useful project. I had the vision of making an animation of some of my son's favorite toys. I wanted to use the animation in some DVDs of home videos. I decided that his Fisher-Price Peek-a-Blocks wouldn't be too difficult to build out of CSG primitives, and would be a fun subject. I started out with the "stripey_cylinder" block, as I called it in code, and then moved on to the "wavy_mirror", "balloon_block", and "circus_cylinder". As I worked, I refined my models, added more blocks, and was having a great time doing it. Eventually, I got a bit ambitious and decided to try making a "bell_block". This turned out to be more difficult than I anticipated. It used more complicated primitives than I had previously tried, such as the prism and lathe objects. I eventually became frustrated and decided to take a break for a while.
This was in late April. I didn't pick the project back up again until near the end of August. At that point, I tackled it with renewed vigor and was able to finish the bell easily this time. I then moved on to make the simpler "smiley_block". Once these two new blocks were complete, I realized that I had enough blocks to make a pyramid! I placed my pyramid on a wood floor, with a mirror behind it so that everyone could see the detail of my blocks on both sides. I liked the pyramid, but I kind of missed the haphazard arrangement that I had before, so I pulled the camera out a bit and added more blocks strewn around the pyramid in interesting configurations, as though a child had just placed them there.
I next realized that, although the main scene was now full of blocks, the mirror reflected a mostly empty room. I decided to create a macro that would place a large number of blocks, stacked to random heights, in random positions around the room. This yielded a very pleasing image. I continued adding new types of blocks, and started playing with radiosity and photons for the first time. As I added these features, the render time started increasing to ridiculous proportions.
I decided that it would be a good idea to try using SMPOV to distribute the work load among multiple computers. Xerox granted me permission to use some of the lab PCs at work for my experiments, and while I had some difficulties with the configuration, the author of SMPOV, Theo Gottwald, was very helpful in correcting some of my problems. Even with my issues, SMPOV was far preferable to rendering on a single CPU.
The final scene consists of nine different block types, eight of which are featured in the foreground, and one is buried in the reflection only. Counting both foreground and background, there are a total of 294 blocks placed in the room. The entire image is comprised exclusively of CSG shapes, with the exception of the bell, which is a lathe, the gears, which are isosurfaces, and the lens, which is also an isosurface. (Are lathe objects and isosurfaces considered CSG shapes? I'm not sure.) All modeling was designed and coded by hand with the gVIM text editor. The scene is lit by three point sources near the ceiling, intended to simulate a three-bulb ceiling fixture in my office, and an area light along the right-hand wall, intended to simulate the window in my office.
The final image is rendered in a four-pass system. Pass one consists of only the room and the mirror. I shoot photons at the mirror to get the resultant highlight on the floor. Pass two is radiosity. I use the photon map generated in pass one to help illuminate the far side of the pyramid better. All the scene elements are present in pass two. Pass three calculates a second photon map to be used in the final render. All the foreground blocks are present in this pass, but the random blocks reflected in the mirror are taken out. Calculating a photon map with all the reflected blocks as well is too complicated. The resulting file is over 1 GB in size.
All of these first three passes are performed on a single CPU, although pass two and pass three can be done concurrently. On the fourth pass, I use SMPOV to distribute the work among up to 23 computers. I say "up to" because some computers enter the project late, and some leave early, but in all there are about 23 computers sharing the work. This fourth pass uses the radiosity data calculated in the second pass, and the photon map calculated in the third pass, and generates the final, high-quality image.
The final image required almost excatly 24 hours to render 100 tiles in a 10x10 arrangement on a number of computers that ranged between 4 and 23 total PCs throughout the render process. Each PC used is a 3.2 GHz P4 with 512 MB RAM. Most of these computers run Windows XP Pro or Windows 2000. Two run Windows 98, one runs Windows ME, and one runs Windows NT4. SMPOV's control files are located on a SAMBA share hosted by another 3.2 GHz P4 running RedHat 9. The slowest tile in the image was tile number 26 (+SC800 +EC960 +SR240 +ER360), which required almost 8 hours to render. The fastest was tile number 1, which rendered in less than a minute. A very rough estimate of total processing time, including the three pre-renders and all time spent on all machines, is approximately 265 hours.
The second detail image required just shy of 19 hours to render, again broken up among up to 23 computers. The slowest tile in the image was tile number 23 (+SC152 +EC304 +SR342 +ER456) which took almost the entire 19 hours to render.
Pictures of previous rendering iterations and supplemental images can be found at:
Update: Between October 2004 and January 2005, I did practically nothing except play with changing the lighting and radiosity settings. I now have the scene such that the main image compiles within a few days on a single 3.2 GHz P4, and the detail images take only a few hours each. It is much faster now, and also looks significantly better. There are many other things I would have liked to have done, but time did not permit.