Render time (hrs)
- We decided to keep our scene simple and derived inspiration from things we saw in
our neighbourhood. To maximize the features of our ray tracing engine, we experimented a lot and arrived at a
hopefully good scene.
- We used Blender to model our scene. Some of the objects in the scene were hand modelled as well.
- We highlight the major features used in the scene here.
- Disclaimer: It is a night scene and hence is better in night time!!
- Most real world objects have a specular component and
a diffuse component. To simulate this effect, we primarily use cook torrance material for most
of our objects with varying roughness. The roughness defines the ratio between the specular and
This is noticable in the image below on the edges of the table, as well as on the cup and the vase and flowers. The cup is more rougher and we get a nice matt look.
- We implemented tinted glass which has the properties of glass with
emissive properties. We use this to get both the night effect as seen through the window as well
as subtle reflections of the room on the window.
- We also use fuzzy-mirrors, metals/mirror with appropriate refractive indices to simulate different objects in the scene. For example, the pen is really expensive!! Its made of gold, silver and steel. The lamp was hand-modelled and is made of steel with fuzziness to give it this look.
- The main focus of our scene is the books, cup on the
table and so we place a spotlight above it. We have 6 area light sources to simulate real
world shadow effects, a spot light and a point light. The lamp has a light source shaped
like a ring (LED)
which is an additional solid we implemented to save some intersections.
- Every area light source contributes to the scene in a unique way.
- We sample points on a sphere to create this spherical area light
source. The bloom pass that we apply at the end gives the glow effect (on the sphere and the
- We also place a point light (negligible contribution) behind the camera to remove some artifacts in the scene.
- The moon and the stars are emissive and are significantly deep into the scene and are not exactly in this position. Our glass window bends light to reposition them this way in the scene.
- We gave the books a nice leather texture. The papers
in the book are lambertian as that is how papers are in real life. We modeled the table mat to
resemble a marvel
stone by using a constant texture with perlin noise as a normal map for bump mapping.
- The pencils were textured in blender and exported for direct use in
- The note is a way of mimicking artists. The way you see artists signing their works on a hidden part of their work. Of course we are not artists and the note is not exactly hidden! But I suppose it adds a nice touch :)
The moon is textured with perlin noise to simulate craters and is an emissive material.
- We optimise our room for noise isolation ;) by using our bump map
implementation for the walls. This is most conspicuous at the left wall in the scene.
- We make use of the smoothTriangle implementation to remove
tesselations. This smooth shading is most prominent in the vase.
- Our initial idea was to render hot vapours (from coffee) coming out
of the mug. We tried to get this effect thrugh motion blur and almost succeeded but decided to
not include it in the scene. Here you see the results of the rendered "smoke" through motion
blur (in low resolution). We assign velocities to two spheres moving at different directions
to get this effect. Dearly missed volumetric rendering for this one! :(
- Our "ultimate" camera implementation which includes all camera effects are in rt/cameras/doftimeperspective.cpp
- We apply a subtle depth of field effect which can
be seen here. The focal distance is set to the cup around which we get a circular blur
- To get the "night" effect as seen through the windows,
we use an environment scene of a starry sky. The moon was modelled in blender. The stars are
just an intersection of two planes at an angle and are positioned in such a way to mimic three
stars in a row (Mintaka, Alnilam, and Alnitak), the most common view in a night sky.
- rt/coordmappers/envmap.cpp; rt/solids/envsolid.cpp
- We build a BVH tree based on the Surface Area
Heuristic which is faster than the Middle Split Heuristic. The higher quality resolution (1920
x 1280) ran 600 samples took 45 mins, and the (480 x 320) ran 600 samples in under 11
- When constructing the bounding volume hierarchy (BVH) we used surface area heuristic to speed up the rendering time. During the BVH construction time, in each dimension, we sort the primitives based on their bounds' centers. We then iterate the primitives in each dimension to find the best-cost split. The complexity of the construction algorithm is O(NlogN), in which N is the number of primitives. For the unbounded primitives, we store them in a separate list. We tested our implementation on CPU intel i5, 1.4GHz, 8 cores. With this implementation, we were able to render the cow scene (39K faces) in less than 1 second. Compared to the middle heuristic implementation, our implementation is 5% faster. We also enable multi-core processing to speed up the rendering.
- Multi-threading is done using the OpenMP library
- The bloom effect produces fringes of light extending
from the bright area in an image. This effect creat an illusion of intense bright light happening
in the scene. To get this effect, we first extract the bright area of the rendered image. We apply
a 2D convolution to blur the extracted brightness image then add the blurred image (scaled by a
constant factor and pixel intensities) to the original image. We repeat the convolution and
addition several times to produce the final image that has the bloom effect.
- As a post processing step, we do do a bit of contrast
adjustment and then gamma correction for our scene. To reproduce image textures (environment, book
texture images) exactly how we percieve them on our screens, we apply gamma when we read the
images. Works wonders when we correct gamma back, the result of which is the scene here!! Color
correction is really important!
- rt/renderer.cpp; core/image.cpp; core/color.cpp
- We would like to thank Prof. Slusallek, our tutor Philippe Weier and
the others too for helping us throughout the semester. And our friends for their valuable and creative inputs
and discussions when creating our scene. And lastly, past year submissions for their amazing renders. It was a
pleasure thinking about how a particular effect is achieved.
- The more complex models were downloaded and are linked here. Book,Vase,pen,penholder,orb,curtain. The entire scene contains approximately 100K triangles.
- The website was built using Nicepage. This a joint project implemented by the members of group1 - Adarsh Djeacoumar and Anh Tuan Tran.