overview covered topics rendering details downloads |
Christian's topics: |
SAH-KDTree Description: A KDTree recursively splits the objects and creates a tree-like structure with this information. During raytracing you don't have to test all of the primitives for intersection but can traverse the tree for a huge speedup. When building the tree the focus lies on how to find a good split location. In our implementation we use the surface area heuristic (SAH) to find such good locations. The implementation follows the method described in "On building fast kd-Trees for Ray Tracing, and on doing that in O(NlogN)". Where to find in the scene: The effect of the SAH-KDTree can't be seen directly in the scene since it's used to accelerate the traversal speed of ray-tracing. Therefore we present three example scenes with different complexity to show the benefit of the tree. For each scene in the setup, we compare the times of the SAH-KDTree with the times of the standard (median split) KDTree. Test setup: 1) our final scene: 279875 triangles, many reflections 2) the blender monkey: 908 triangles 3) the Stanford Bunny: 69451 triangles
Where to find in source code: SAH_KDTree.hxx, SAH_KDTree.cxx |
![]() |
Depth of Field Description: When looking at things in reality one can observe that only objects that lay in the focus of the eye look really sharp. All other objects are more or less blurred with respect to the disctance to the focus point. To create this effect in a raytracing we replace our simple point camera with one that owns a lens with some radius. Then many rays are shot towards the given focus point but starting at different points on the lense. Where to find in the scene: This effect is used to create the blurring at the beginning and at the end of our animation (compare the picture on the left). Applying the effect to the whole animation wasn't possible since you need many rays per pixel to create a goodlooking effect (we used 81 rays just for the blurring). This would give a huge explosion towards rendering time. Where to find in source code: DoFPerspectiveCamera.hxx |
Tone Mapping Description: Tone mapping transforms a picture with high dynamic range to an image with displayable range. This is necessary since normal display devices (like monitors or printers) have a strictly limited tone range. The goal of tone mapping is to maintain all details given in the high dynamic range. Where to find in the scene: This effect can be perceived in the whole scene since we apply tone mapping to any frame of our animation. To clarify the effect we give two sample images: the upper image without tone mapping applied, the lower one with tone mapping. Where to find in source code: image.cxx |
|
Procedural Shading Description: If you look at a wood structure in nature you won't find the same pattern twice. This is because nature doesn't care about randomness and applying limited sized textures to its objects. To achieve a comparable effect we use the "randomness" that is given by Perlin Noise. We applied this noise generation to a 3D function to create nice looking structures at any point of the scene. Furthermore we implemented the effect in such a way that it's used as an texture and can therefore be used by any shader we want. Where to find in the scene: The effect of procedural shading can be perceived on many objects in our scene: the marble structures in the kitchen, the bath and on the stairs, the wood parquet and the stone wands. In this picture its applied to the walltiles for example. Where to find in source code: ProceduralTexture.hxx, StoneTexture.hxx, WoodTexture.hxx |
![]() |
![]() |
Bump Mapping Description: Bump mapping is a technique to create uneven surfaces by manipulating the normals of the surface. So we can create complex looking models without changing the model at all. We implemented bump mapping by perturbating the shading normal of the object according to the derivatives of luminance at the shading point. As additional feature we linked bump mapping with procedural shading to create a procedural bump mapping. Where to find in the scene: Bump mapping can be seen on any procedural shaded surface (parquet, stairs etc.) and on the tag with our names in the end of the animation. The tiles in the image are made with procedural bump mapping, resulting in a stunning glossy effect. Where to find in source code: BumpMap.hxx |
topics handled by us both: |
Multithreading Description: Nowadays many computers are armed with multicore processors. To make advantage of this infrastructure we implemented multicore support for our raytracer. As we want this benefit for both systems, Windows and Linux, we decided to use the solution given by the OpenMP-Package (www.openmp.org). Where to find in the scene: As with SAH-KDTree this feature cannot be perceived in the scene but gives huge benefit to raytracing times. So we give example scenes and times as before. Test setup: 1) our final scene: 279875 triangles, many reflections 2) the blender monkey: 908 triangles 3) the Stanford Bunny: 69451 triangles
Annotation: the writing of the image (which is not multithreaded) is involved in the measurement. Where to find in source code: SAH_KDTree.cxx, RayTracer.cxx |
Daniel's topics: |
Photon Mapping with Final Gathering Description:
Where to find in the scene: Basically everywhere and huge parts of the scene are solely illuminated by the final gather photon map. Where to find in source code: PhotonMap.h, PhotonMap.cxx, PhotonMap_KDTree.cxx, PhotonTracer.h, PhotonTracer.cxx |
Reflection Mapping Description: We sent the rays from the middle point of the object into all spherical directions and stored the result as an image on the surface of a surrounding sphere. When a ray hits the object, the reflection ray intersects the surrounding sphere and gets its color from the image. This is computed in O(1) since there is no need to intersect the scene anymore. This is especially helpfull in animations with a static world. Where to find in the scene: On the sphere in image to the right. Where to find in source code: ReflectionMap.h, ReflectionMap.cxx |
Physically-Based Surface Models Description:
Where to find in the scene: We have applied the Cook-Torrance model on many objects, it can be best seen on the wash vase in the bath room. Where to find in source code: CookTorranceBRDF.h |
Shadow Cache Description:
Since we have few direct illumination, it seems natural to speed up the shadow calculation. We have achieved this by
storing the the last hit primitive and object for every pixel and bounce depth (since we have many bounces) for every light source.
Where to find in source code: ShadowCache.h, ShadowCache.cxx |