Recursion and Data Structures in Computer Graphics Ray Tracing 1
Forward Ray Tracing imagine that you take a picture of a room using a camera exactly what is the camera sensing? light reflected from the surfaces of objects into the camera lens 2
Forward Ray Tracing 3 light source camera or "eye"
Forward Ray Tracing forward ray tracing traces the paths of light from the light source to the camera to produce an image computationally infeasible because almost all of the possible paths of light miss the camera 4
Backward Ray Tracing backward ray tracing traces the paths of light from the camera out into the environment to produce an image computationally feasible because the process starts with a single* ray per screen pixel 5
Why Ray Tracing: Shadows 6 shadows with ~1000 light sources Ray Tracing for the Movie 'Cars', P. Christensen et al
Ray Tracing: Reflections 7 Ray Tracing for the Movie 'Cars', P. Christensen et al
Ray Tracing: Reflections 8 Ray Tracing for the Movie 'Cars', P. Christensen et al
Comment on Previous Images most of the rendering in the previous images was not done using ray tracing ray tracing was only used on those parts of the image that would produce a noticeable difference 9
Backward Ray Tracing 10
11 Pseudocode for recursive raytracing (missing base cases) Color raytrace(ray) { if ray hits an object { color0 = object_color if object is shiny { color1 = raytrace(reflected_ray) } if object is transparent { color2 = raytrace(transmitted_ray) } return color0 + color1 + color2; } return background_color }
Shadows we can determine if a point is in shadow by tracing rays from the point to each light source called shadow rays if a shadow ray hits an object before it reaches the light source then the point is in shadow 12
Shadows 13 shadowed from L2 shadowed from L3 not shadowed from L1
Reflections if the ray hits a shiny object then we would like to know what reflection is seen at the hit point we can cast a new ray in the mirror reflection direction to determine the reflection 14
Reflections 15 incoming rayreflection ray
Transparent Objects if the ray hits a transparent object then we would like to know what can be seen through the object we can cast a new ray in the refraction direction to determine what can be seen through the object 16
Transparent Objects 17 incoming ray refraction ray
Recursion each reflected and refracted ray can be treated as a new view ray emanating from a hit point i.e., we recursively trace the reflected and refracted rays 18
Ray Tracing as a Binary Tree 19 shadow rays
Stopping the Recursion what are the base cases? ray misses all objects level of recursion exceeds a fixed value other cases outside the scope of EECS
How Fast is Ray Tracing approaching real time for non-cinematic quality, e.g., Brigade 2 game engine NVIDA OptiX demos here if you have a high-end NVIDIA graphics card demos here if you have a high-end NVIDIA graphics card cinematic quality is much slower 21
How Fast is Ray Tracing 678 million triangles rays 111 million diffuse 37 million specular 26 million shadow 1.2 billion ray-triangle intersections 106 minutes on 2006 hardware 22
Bounding Volumes it is easy to compute the intersection of a ray with certain shapes, e.g., spheres and cubes it is hard or expensive to compute the intersection of a ray with arbitrary shapes idea put complex shapes inside simple ones 23
Bounding Volumes 24
Hierarchy of Bounding Volumes why stop at putting complex shapes into bounding volumes? why not put bounding volumes inside bounding volumes? 25
Hierarchy of Bounding Volumes 26
Spatial Subdivision instead of putting objects inside volumes we can subdivide space 27
Quadtree Decomposition 28
29 and so on...
Using a Quadtree in Ray Tracing 30
Open Source Ray Tracers Art of Illusion Art of Illusion POV-Ray POV-Ray YafaRay YafaRay Manta Manta several others 31