Rendering Competition Entry

For the Computer Graphics Course Winter Term 2017/18

Conception of the Scene

At the beginning of the rendering competition, we looked for available assets and tried out a small variety of quick mockup scenes with different art styles. We compared the results and rendering times. Realistic images already had a longer rendering time and needed either a lot of light sources or global illumination to look good. Still life scenes with the iconic Raytracer glass material looked odd, because they were to "to perfect". The absence of impurities like dust, fingerprints or other environmental influences directly disclosed that one is looking at an computer generated image. Our low poly scene had the best performance, already looked appealing without any additional code and offered a lot of assets which we could use.

Our scene idea is based on an illustration series by Katarína Macurová for the award winning children's book Zajíčkova Cesta. We found it during our research for ideas and did really like the cute tone and the storytelling attributes of the images. But there were two things which we did not like. First of all, that the scene consists of mainly white materials. And second that it makes no sense for a herbivore to eat fish. So we took the camping fire idea and transferred it into a forest. We replaced the wolf with a fox and the fish with some marshmallows to create greater familiarity with a forest. Additionally we many elements which further contribute to the story we wanted to create: A fox and a rabbit are going on a camping trip.

Blender Iterations

The different compositions and milestones we went through during development.
Those were rendered with the internal Blender Renderer.

In the first iteration we started with creating a rough prototype of one of the main characters: the fox. We created a scene which we filled with plants and and a camping tent. We roughly positioned everything and gave the fox the intended posture for cooking some marshmallows. At this point, we were unsure about the color of the ground and the tent.

After some experimentation, we decided to paint the tent yellow and to make the ground green. We added a camping fire and gave our characters the sticks with the tasty marshmallows at the end. With this iteration we started an experiment where we planned to add the moon as a light source which should reflect its light on an empty plateau in the background. Therefore we included some clouds, some rocks and the plateau with a lot of grass on it. Also we made two noticeable changes to the camera: First of all we changed the focal length to better capture the landscape. Second, we placed the camera into a tree to create a natural frame. Now the observers eyes will be drawn to the main object of the scene. With this placement we also created a leading line (known from photography) from the moon to the campfire.

In the third iteration we finalized the fox and created the bunny. We noticed that the background is too distracting with all the grass and so we removed it. This enhanced our leading line even further. Unfortunately our renderer was not suitable to render our plan, although we created an implementation for global illumination. Either the moon was to bright and overexposed everything or everything was to dark. When we found an acceptable balance we couldn't find a solution to make the fire light noticeable without overexposing our main characters.

So we had to abort our experiment and come back to the core concept. We reorganized the scene and extended the forest with more trees and plants. Without the moon it was rather easy to make our characters well lit and to give the whole scenery a comfy camping fire vibe. We also made the focal length bigger to create a better focus upon our camping friends.

Global Illumination

To simulate Global Illumination we use Path tracing. So we had to consider not only the direct light from light sources but also consider indirect illumination in a scene caused by interreflections from other surfaces. The code can be found in our global.h and in GlobalRecRayIntegrator.cpp

Self Created Models

During the creation of this project, we couldn't find some low poly models. So we created a fox, a rabbit, a tent and some sticks with marshmallows with Blender ourselfs.

SAH Splitting

To greatly optimize rendering time we included and used SAH splitting to create our BVH trees. This fact isn't visible in the image, but it was very noticable in the rendering time. The code can be found in bvh.cpp


In our scene we used three light sources: two point lights and one area light. The point lights are around the campfire and one of them emits red and the other emits orange light. This simulates very realistic lighting conditions. The area light was used to simulate a moon which is not in the frame. This moonlight helps lighting the bushes and the surrounding area.