The pursuit of realism in image synthesis has typically meant the abandonment of efficiency. The two most popular shading techniques, ray tracing and radiosity, become quite inefficient when generalized to simulate both diffuse and specular reflection. This project develops a new, unified shading algorithm that will simulate the full range of reflectance phenomena without sacrificing efficiency. The approach employs a combination of radiosity and ray tracing ideas we called bidirectional ray tracing. The algorithms and data structure developed should be useful for architectural design, computer-aided product design, scientific visualization, motion picture special effects, and improved models of image formation for computer vision.