Path tracing
From Wikipedia, the free encyclopedia
The introduction to this article provides insufficient context for those unfamiliar with the subject. Please help improve the article with a good introductory style. |
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.