ray tracing. new concepts the recursive ray tracing algorithm generating eye rays non real-time...

14
Ray tracing

Upload: trevon-baxley

Post on 14-Dec-2015

225 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Ray tracing

Page 2: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

New Concepts

• The recursive ray tracing algorithm• Generating eye rays• Non Real-time rendering

Page 3: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Ray tracing

• Using ray tracing you can achieve photorealistic effects• You can achieve many complex lighting effects, such as shadows,

refraction and reflection. • It is incredibly hard, if not impossible to achieve these accurate

effects with the standard rendering pipeline.• While you get a huge advance in visual quality, it comes with the

price of very long rendering times.

Page 4: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Camera Rays• First you shoot rays from the camera out into the scene.• Pixels can be rendered in any order, but in this lab we

will go from top to bottom left to right.• We loop over the pixels and generate an initial primary

ray (eye ray)• The ray origin is just the camera’s position• The direction is computed by first finding the 4 corners of

a virtual image in world space, then interpolating to the correct spot, and finally computing a normalized direction from the camera to the virtual pixel.

Page 5: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Ray Intersection• The eye ray is then tested for intersection against every

object in the scene.• If there is no intersection then we just color that pixel the

specified ‘background’ color.• If there is a hit, then we want to find out what the closest

object hit was.• At the intersection, we need to know the position,

normal, color, texture coordinates, material etc…about that exact location.

• If the hit is inside a triangle, then all that information is just interpolated from the vertex data.

Page 6: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Lighting

• Once we have the key intersection information, we can apply any lighting model we want.

• This can include procedural shaders, lighting computations, texture lookups, bump mapping etc…

• Many of the most interesting forms of lighting involve spawning additional rays and tracing them recursively. (Which we will be doing in this lab for shadows)

• The result of the lighting equation is a color which is used to color the pixel.

Page 7: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Shadows

• Shadows are really easy to achieve• Just trace another ray from a hit point to every light in the

scene, if you hit an object before you hit the light, then that light cannot contribute to the color.

• Shadow rays only need to know if something is hit, where as normal rays need to know position, color, normal, etc.

• When we spawn new rays off of a surface, it is a good idea to add a bit of an offset to the origin. That is to push it up slightly (0.0001) along the normal of the surface. – This prevents the ray from intersecting with the object

it spawned off of.

Page 8: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Reflection Rays

• Reflections are another awesome and easy to do effect with ray tracing.

• Instead of calculating the lighting equation at a particular hit point, you just trace a secondary ray, called the reflection ray, and trace it into the scene.

• Reflection rays, like shadow rays, should also be nudged up a bit.

Page 9: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Reflection Rays

• If the reflection ray hits a normal material, we compute the illumination and use that as the final color.

• But if the reflection hits another mirror, then we just recursively generate a new reflection ray and trace it.

• To prevent the system from getting trapped in an infinite loop, you can set a limit to the depth of the recursion. 10 is a good number…

Page 10: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Intersection Test

• For this lab, everything has been created by using triangles, so you will only have to write an intersection test for ray-triangle intersections.

• Once we know a ray hits a triangle at a point q we must verify that q lies inside the 3 edges of the triangle.

• We do this by calculating the barycentric coordinates.– q’ = q-v0– e1 = v1 - v0– e2 = v2- v0– b1 = (q’ * e2)/(e1 * e2)– b2 = (q’ * e1)/(e1 * e2)– Reject if b1 <0 , b2 <0 or b1 + b2 > 1

Page 11: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

File Overview• Camera.[cpp h] : You will do most of the work in these files,

including writing the actual RayTrace algorithm, and all the code for producing eye rays.

• Image.[cpp h] : All the functions for drawing, and setting the screen pixels. You don’t have to write any code here

• Light.[cpp h] : All the information for the lights. You don’t have to write any code.

• Model.[cpp h] : You will have to write the triangle and model intersection code here

• Ray.h : Has the structures for ray’s and intersections defined here• Vector.h : All of the vector manipulation stuff.• Scene.[cpp h] : The scene is defined in here• Raytracer.cpp : this is the main file.

Page 12: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Requirements

Complete the ray tracer so that you end up with an image that has shadows and mirror reflections. Similar to this:

Page 13: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Implementation Suggestions

• MAKE SURE YOU LOOK THROUGH ALL THE FILES AND UNDERSTAND THEM

• There is a TODO in every function where you need to write code. “grep TODO *” <--- type that in the terminal

• It helps to have a function like bool inShadow(…)• You will probably have to write a function called Trace() !!!

• The first thing your gonna have to work on is writing the intersection functions and the eyeray generating function.

• Work on this every day.

Page 14: Ray tracing. New Concepts The recursive ray tracing algorithm Generating eye rays Non Real-time rendering

Resources

• There are resources on the webpage. PLEASE download them, there are helpful pictures, and information on eye ray generation.