Lonely Snowman

He is waiting for you

You are watching the last snow globe of christmas market. The globe is on the last shelf of a store, while all of his friends have found a new family. The objects that you see are as follows: The scene, except for the globe and snowman, is generated by us using blender. Second, the glass and its confetti is created with modifying Disc and Sphere solids from previous assignments. Third, the snowman is available for free on here. We have added several features to the engine.

Double Sided Discs

The confetti in the globe is created by randomly sampling points inside the sphere (the glass) and giving random rotation and color to it. Inside the snow globe there are a few point lights to give the discs an additional shine. However, since the Disc solid is one sided, many of them would turn appear black with random rotation. To fix this, we derived a DoubleSidedDisc class from the original Disc class that is colored on both sides. You can view the code on rt/solids.

Random Name

Magic Glass

The original glass the we had developed for the assignment, would block out shadow rays and cast shadows. Also, the block would prevent the objects inside the glass to receive light from the outside. To fix this, we modified the recraytrace integrator to cast shadow rays a bit more percisely. When the shadow ray is blocked by an object, the integrator checks its material type. If it's glass, then the shadow will be ignored and light passes through.

However, this would make false illumination. As some of the rays should get blocked with the items inside the sphere (snowman and confetti). As we have point lights inside the globe together with random confetti, this would make enlarged shadows outside the globe (if the shadow ray can pass the glass). To fix this, we again improved the integrator to handle this. So, in short, light from outside can illuminate inside, but light from inside can't illuminate outside. And if light can pass through the glass completely to illuminate behind the glass.

Shadows from Inside

Random Name

No Outside Shadows

Random Name

Illumination from Outside

Random Name

Bump Map

We added bump maps to both shelves and walls to make them look more realistic. We applied a-bit noisy bump map for the wall, and a wood pattern for the shelves.

Random Name Random Name Random Name Random Name

Depth of Field

We added depth of field to put more attention to our cute snowman.

Random Name

Instancing for Imported Objects

We added instancing to the loaders, so that we can have multiple of the same object, or adjust object in the scene. Here is one of our experimental scenes, where the snowman is not lonely and his friend is coming for "netflix and chill". Sadly, we removed his friend because we figured that having one globe in focus seems more artistic.

Random Name


We used the acceleration structures that we had developed to lower rendering time.