back to Rob's Digital Art Page
Ipod in D minor

My third entry to the Internet Ray Tracing Competition (Mar-Apr, 2006). The theme was "music."

Victoria was thrilled to win two tickets to the symphony. Her boyfriend, Michael was not as excited. In the midst of the third movement, he decided he had had enough and decided to listen to something more his style.

The image won an Honourable Mention for Concept, Originality, and Interpretation of Theme.



The making of "Ipod in D minor"
I decided early on to have a group of musicians playing together, but the setting eluded me. I started modelling instruments in Wings3d and experimented with the venue.

I tried a concert in the park and one in the middle of a highway (called traffic jammin'), but I wasn't pleased with the composition. In the end, I turned to a formal stage and after a few weeks, came up with the idea of an audience member listening to his own music during a concert.

At first, I was unclear as to which tool I would use to model the instruments. I'm more comfortable using POV's CSG than Wings, but in the end I chose Wings. The deciding factor was that I would have to pose the people around the instruments.  Doing that in POV would mean a lot of trial and error trying to position things just so. With Wings, I could export the models as OBJ, import them into DAZ|Studio (where all the humans are posed) and position them quickly. Then I used PoseRay to convert the models to POV's mesh2 format.

My first model was a  violin, which I later scaled up to form the cello (I know, I know the two instruments have different proportions, but I was on a deadline).

Once I had a few people and instruments, I started rendering group shots. The nice thing about using the mesh2 format is that multiple instances take very little additional memory. That was important to me because I would likely need many copies to form a sizeable orchestra. The disadvantage is that I didn't want to have an orchestra full of clones.



I had trouble deciding on the camera position for the scene. I started with an "over the conductor's shoulder" viewpoint, but it lacked interest. Next, I thought it might be better to get right up to the players. I played with this perspective for a couple of weeks.

I felt this perspective was more dynamic, but still lacked some composition/meaning/humour. That's when I had the idea of an audience member listening to an mp3 player.

There are multiple instances of 17 different human models in this scene:
3 violinists, 3 cellists, 3 trumpeters, 2 clarinetists, 1 flutist, 2 french hornists, 1 timpanist/conductor, 2 audience members. One of the challenges in this scene was to make it fit into my computer's memory.

The humans models take up a lot of RAM - but surprisingly, it's not the mesh, but the high resolutions (often 4000x4000 pixel) image_maps that are used to texture them. Each mesh2 instance would reallocate the image_map (even if it was used by another model).

In some cases, I could downsample the images. I also shared most of the textures between the models (for example there are only three male face textures used). Furthermore, sometimes a simple pigment would do - as in the case of the suits, shoes, shirts, skin, etc.

Another technique was to position the clones so that you couldn't see their entire face - you can see that there's someone there, but can't necessarily tell it's the same object as elsewhere. The conductor and timpanist are actually the same model. The audience members in the first row are two clarinetists.

In one case, I changed the skin color on the left side of a cellist's face and then had two copies of the same model next to each other, with one scaled to make them mirror images.

Optimizing the texture usage probably recovered about 40-50% of the memory. The final image still used up about 2.3GB of RAM!





The stage floor is a little macro to draw random lengths of wood. The curtains are just a bunch of cones squished together. The risers and music stands are CSG based macros. The chairs are very basic CSG constructs.

The violins, cellos, flutes, trumpets, clarinets, bassoon, and ipod are all Wings 3D models. The timpani (kettle drums), bass drum, and chimes are CSG.

The spotlights are media filled cones.
Update (Oct. 2008)
The original scene in this project only had four people in the audience. I decided to use my crowd macro to add an audience with very little additional memory.

Some of the shortcuts of the original scene are apparent: The conductor is holding a timpani hammer, some of the musicians' skin sticks through the clothing. I also discovered I never added side walls to the auditorium: I just used a background {rgb 0}.

Some people are dressed a bit too casually for a night out at the symphony!

Scene Statistics

  Finite objects:        14715
  Infinite objects:          0
  Light sources:             7
  Total:                 14722

Render Statistics
Image Resolution 1024 x 768

Pixels:           798065   Samples:         1221217   Smpls/Pxl: 1.53
Rays:           55920222   Saved:           1419477   Max Level: 100/100

Ray->Shape Intersection          Tests       Succeeded  Percentage

Box                          127417527        22046265     17.30
Cone/Cylinder               1706201350       643176514     37.70
CSG Intersection                122814           27118     22.08
CSG Union                       122814           29274     23.84
Mesh                        1084891673       557324298     51.37
Prism                           122814           43691     35.57
Prism Bound                    1030870          787388     76.38
Sphere                         1694079          221804     13.09
Superellipsoid                33032057         2475749      7.49
Torus                          2364987          191338      8.09
Torus Bound                    2364987          240054     10.15
Clipping Object                1277970          618784     48.42
Bounding Box              207789688711     72309122420     34.80
Vista Buffer                 100875598        62575388     62.03

Roots tested:                284036   eliminated:                51225
Calls to Noise:             7563087   Calls to DNoise:              10

Media Intervals:         1061484024   Media Samples:       13799292386 (13.00)
Shadow Ray Tests:        1082356622   Succeeded:             503096096
Reflected Rays:             4888548
Transmitted Rays:          30362469
I-Stack overflows:             1061

Radiosity samples calculated:           249673 (0.78 %)
Radiosity samples reused:             31657174

Smallest Alloc:                  34 bytes
Largest  Alloc:            48000032 bytes
Total Scene Processing Times
  Parse Time:    0 hours  2 minutes 51 seconds (171 seconds)
  Photon Time:   0 hours  0 minutes  0 seconds (0 seconds)
  Render Time:   6 hours 32 minutes 40 seconds (23560 seconds)
  Total Time:    6 hours 35 minutes 31 seconds (23731 seconds)
CPU time used: kernel 7.08 seconds, user 23692.94 seconds, total 23700.02 seconds
Render averaged 33.18 PPS over 786432 pixels

POV-Ray finished

Interestingly, the peak memory usage stat did not come out. I suspect there's a POV-Ray bug if the memory used exceeds 2 GB (perhaps a 32 bit signed arithmetic limit). The Windows Task Manager showed POV-Ray using about 2.35 GB while rendering.