Ray tracing acceleration techniques can be can be placed into three categories:

- Ones that reduce the average time needed to intersect a ray with the world
- Ones that reduce the total number of rays that need to intersect with the world
- Ones that replace the individual rays with with a more generalized entity

Techniques that reduce the average time needed to intersect a ray with the world can then be divided into 2 sub-categories.

- Faster object intersection algorithms
- Fewer object intersections

- Find if the ray's origin is outside the sphere.
- Find the closest approach, t
_{ca}, of the ray with the sphere- If the ray is outside and points away from the sphere, the ray must miss the sphere.

- Find the squared distance from the closest approach,
t
_{2hc}, to the sphere surface.- If the value is negative the ray misses

- Using t
_{ca}& t_{2hc}calculate the time, t, of intersection with the sphere- t = t
_{ca}- sqrt(t_{2hc}), origin outside sphere - t = t
_{ca}+ sqrt(t_{2hc}), origin inside sphere

- t = t

- Bounding Volumes
- Spatial Subdivision
- Nonuniform
- Uniform

- Directional Techniques
- Light Buffer
- Ray Coherence
- Ray Classification

Bounding volumes and there effectiveness will be discussed further in the implementation section

In Non-Uniform subdivision the world is divided into 8 quadrants, a check is then made of the number of objects whose surfaces occupy some portion each quadrant. If the number is greater then some threshold that quadrant is further subdivided into eight quadrants, etc.. An octree is used as the data structure for indexing the candidate objects for each voxel in a hashtable. Tracing a ray involves finding which voxel the ray originates from, checking it against all the objects in that voxels candidate list for intersection, if no objects are hit, determine which voxel the ray passes through next (How?) and repeat the process.

Uniform Subdivision

Uniform subdivision is very much the same except the world is divided into equal sized voxels Because of this algorithms similar to the Bresenham line drawing algorithm can be used for quickly determining which voxel the ray hits next.

- The same ray may test the same object for intersection multible times. Mailbox?
- Need to make sure the intersection occurs in that voxel

Both of these issues are illustrated above. The triangle will be tested for intersection with the ray in voxel 2. If a check is not made to see that the intersection occurs in that voxel the correct intersection with the sphere will not be found. When the ray enters voxel 3 the intersection for the triangle should not have to be recalculated. When ever a ray is intersected with an object the result of that intersection along with the rays ID is stored in the objects

A directional cube is an axis aligned cube with side of length 2 at the origin. The six faces are labeled by there dominant axis +X, -X, +Y, -Y, +Z, -Z. A ray can be represented as two coordinates (u, v) on one of these faces. Also the surface of each of the faces can subdivided (uniform or non-uniform) to define directional pyramids with the origin at there apex

The above presentation is by no means complete. Its purpose was to demonstrate that there are a variety of techniques available for improving ray tracer performance. The potential benefit of implementing any technique should be weighed against the requirements of the system and the effort needed both in implementation and maintenance of a more complex system.