Path tracing

From Wikipedia, the free encyclopedia

Path tracing is a technique by James Kajiya when he presented his paper on the rendering equation in the 1980s. The main goal of path tracing is to fully solve the rendering equation.

A form of ray tracing whereby each ray is recursively traced along a path until it reaches a light emitting source where the light contribution along the path is calculated. This recursive tracing helps for solving the lighting equation more accurately than conventional ray tracing.

A simple path tracing pseudocode might look something like this:

 Color TracePath(Ray r,depth) {
   if(depth==MaxDepth)
     return Black;  // bounced enough times

   r.FindNearestObject();
   if(r.hitSomething==false)
     return Black;  // nothing was hit

   Material &m=r.thingHit->material;
   Color emittance=m.emittance;

   // pick a random direction from here and keep going
   Ray newRay;
   newRay.origin=r.pointWhereObjWasHit;
   newRay.direction=RandomUnitVectorInHemisphereOf(r.normalWhereObjWasHit);
   float cost=DotProduct(newRay.direction,r.normalWhereObjWasHit);

   Color BRDF=m.reflectance/PI;
   float scale=1.0*PI;
   Color reflected=TracePath(newRay,depth+1);

   return emittance + ( BRDF * scale * cost * reflected );
 }

In the above example if every surface of a closed space emitted and reflected (0.5,0.5,0.5) then every pixel in the image would be white.

A variation of this algorithm is to trace rays in the opposite direction, from light sources to the camera, this is called photon tracing. Furthermore, these two algorithms can be combined to enhance the image results, which is called bidirectional path tracing.

Languages