The Peek-a-Blocks
"The Peek-a-Blocks" by 'danBhentschel' - ranked 20th
[Order Poster from Zazzle]

A handful of blocks in the foreground, with a glimpse of a whole room full of blocks reflected in the mirror.

Prev - Index - Next ]
Long Description

The Peek-a-Blocks

A neatly-built pyramid of Fisher-Price Peek-a-Blocks sits on a wood floor at the edge of the room. Inside the clear plastic windows of the blocks can be seen colorful pictures, fun shapes, and interesting visual puzzles. One block shows a parade of circus animals prancing in a circle. Another has gears that spin moving rainbows. There is a block with a twirling smiley-face inside it, and a block that resembles a fun house hall-of-mirrors. There is a barber-pole-like block with swirling stripes, and at the peak of the pyramid are some circus balloons.

Various other blocks are strewn about the floor around the pyramid. Some of them are of the same variety as those in the central structure, but there are a few new surprises here as well. One block has a tinkling bell inside it. There is also a block that explores refracted light.

A mirror leans against the wall, offering a view of the other reverse side of the toys. Through this glass, we catch a glimpse of a whole room full of glittering fun. The especially astute observer may even notice a special block with a familiar logo in it, tossed in among the other playthings.

For more information on Fisher-Price Peek-a-Blocks, see:

The Peek-a-Block likenesses, and Fisher-Price name are both used with permission:

Dear Mr. #########:

This letter will confirm the authorization granted to you to enter your computer-generated image based on the Fisher-Price Peek-a-Blocks toys in a contest, as described in your letter dated September 24, 2004.

By sending this letter of consent, Fisher-Price is not granting a license; this is a one-time permission requested by you as described above. Any use other than as described above is prohibited. Furthermore, such use does not imply a grant to you of any rights or ownership interest in the Peek-a-Blocks products, the Fisher-Price and Peek-a-Blocks trademark, or in the copyright of the Peek-a-Blocks products.

You acknowledge that Fisher-Price has invested substantial money and time in developing the goodwill associated with its products and trademarks and warrant not to use or depict such products in any manner which shall adversely or negatively impact the acquired goodwill.

If you have any questions about the permission granted, please feel free to contact me. We appreciate your interest in Fisher-Price products - best wishes in the contest.

Very truly yours,

Dennis M. Wesolowski Vice President and General Counsel

Making Of

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.
Tools Used

POVRay 3.6 for windows
gVim 6.3 - Edit source code
Canon PowerShot S45 digital camera - acquire the circus image map
Canon PhotoStitch - Stitch multiple pictures together for circus image map
Photoshop 5.5 - Create the smiley-face and polka-dot image maps, and edit circus image map
JESTER.TTF font - "Fisher Price" logo (Not submitted in source code because I don't have a license to distribute it)
Mathematica 5 - Solve some systems of linear equations for placement of objects
SMPOV 4.2 - Distributed rendering system
(Maximum of) 23 Dell Optiplex GX270 computers, each with a 3.2 GHz P4 CPU and 512 MB RAM

Supplied Files

99_image.jpg (9418 kb) (154 kb)

Detail Images

Detail 1: 801x802 @ 1303,424

Detail 2: 1068x802 @ 892,193
Judges Comments

Good image, good modelling, but the lighting is too flat and the subject matter isn't very appealing (unless one works for Fisher-Price).

Prev - Index - Next ]
All entries and comments are copyrighted and the property of the author.
No content on this site may be used without appropriate permission.