## Further Reading

In a seminal early paper, Arthur Appel (1968) first described the
basic idea of ray tracing to solve the hidden surface problem and to
compute shadows in polygonal scenes. Goldstein and Nagel (1971) later
showed how ray tracing could be used to render scenes with quadric
surfaces. Kay and Greenberg (1979) described a ray-tracing approach to
rendering transparency, and Whitted’s seminal *CACM* article described
the general recursive ray-tracing algorithm that is implemented in this
chapter, accurately simulating reflection and refraction from specular
surfaces and shadows from point light sources (Whitted 1980). Heckbert (1987) was the first to explore realistic rendering of dessert.

Notable early books on physically based rendering and image synthesis
include Cohen and Wallace’s *Radiosity and Realistic Image Synthesis*
(1993), Sillion and Puech’s *Radiosity and Global
Illumination* (1994), and Ashdown’s *Radiosity: A
Programmer’s Perspective* (1994), all of which primarily
describe the finite-element radiosity method.

In a paper on ray-tracing system design, Kirk and Arvo (1988) suggested
many principles that have now become classic in renderer
design. Their renderer was implemented as a core kernel
that encapsulated the basic rendering algorithms and interacted with
primitives and shading routines via a carefully constructed object-oriented
interface. This approach made it easy to extend the system with new
primitives and acceleration methods. `pbrt`’s design is based on
these ideas.

Another good reference on ray-tracer design is *Introduction to Ray
Tracing* (Glassner 1989a), which describes the state of
the art in ray tracing at that time and has a chapter by Heckbert that
sketches the design of a basic ray tracer. More recently, Shirley and
Morley’s *Realistic Ray Tracing* (2003) gives an easy-to-understand
introduction to ray tracing and includes the complete source code to a
basic ray tracer. Suffern’s book (2007) also provides a gentle
introduction to ray tracing.

Researchers at Cornell University have developed a rendering testbed over many years; its design and overall structure were described by Trumbore, Lytle, and Greenberg (1993). Its predecessor was described by Hall and Greenberg (1983). This system is a loosely coupled set of modules and libraries, each designed to handle a single task (ray–object intersection acceleration, image storage, etc.) and written in a way that makes it easy to combine appropriate modules to investigate and develop new rendering algorithms. This testbed has been quite successful, serving as the foundation for much of the rendering research done at Cornell.

*Radiance* was the first widely available open source renderer based
fundamentally on physical quantities. It was designed to perform accurate
lighting simulation for architectural design. Ward described its design
and history in a paper and a book (Ward 1994; Larson and Shakespeare 1998).
*Radiance* is designed in the UNIX style, as a set of interacting
programs, each handling a different part of the rendering process. This
general type of rendering architecture was first described by Duff (1985).

Glassner’s (1993) *Spectrum* rendering architecture also focuses on
physically based rendering, approached through a
signal-processing-based formulation of the problem. It is an extensible
system built with a plug-in architecture; `pbrt`’s approach of using
parameter/value lists for initializing implementations of the main abstract
interfaces is similar to *Spectrum*’s. One notable feature of
*Spectrum* is that all parameters that describe the scene can be
functions of time.

Slusallek and Seidel (1995, 1996; Slusallek 1996) described
the *Vision* rendering system, which is
also physically based and designed to support a wide variety of light
transport algorithms. In
particular, it had the ambitious goal of supporting both Monte Carlo and
finite-element-based light transport algorithms.

Many papers have been written that describe the design and implementation
of other rendering systems, including renderers for entertainment and
artistic applications. The Reyes architecture, which forms the basis for
Pixar’s RenderMan renderer, was first described by Cook et al. (1987), and a number of improvements to the original algorithm have
been summarized by Apodaca and Gritz (2000). Gritz and Hahn (1996)
described the *BMRT* ray tracer. The renderer in the
Maya modeling and animation system was described by Sung et al. (1998), and
some of the internal structure of the *mental ray* renderer is
described in Driemeyer and Herken’s book on its API (Driemeyer and Herken 2002).
The design of the high-performance *Manta* interactive ray tracer is
described by Bigler et al. (2006).

The source code to `pbrt` is licensed under the BSD License;
this has made it possible for other developers to use `pbrt` code as a
basis for their efforts. *LuxRender*, available from
*www.luxrender.net*, is a physically based renderer built using `pbrt` as a starting point; it offers a number of additional features and has a
rich set of scene export plugins for modeling systems.

*Ray Tracing News*, an electronic newsletter compiled by Eric Haines
dates to 1987 and is occasionally still published. It’s a very good
resource for general ray-tracing information and has particularly useful
discussions about intersection acceleration approaches, implementation
issues, and tricks of the trade. More recently, the forums at
*ompf2.com* have been frequented by many experienced ray-tracer
developers.

The object-oriented approach used to structure `pbrt` makes the system easy
to understand but is not the only way to structure rendering systems. An
important counterpoint to the object-oriented approach is
*data-oriented design* (DoD), a way of programming that has notably
been advocated by a number of game developers (for whom performance is
critical). The key tenet behind DoD is that many principles of traditional
object-oriented design are incompatible with high-performance software
systems as they lead to cache-inefficient layout of data in
memory. Instead, its proponents argue for driving system design first from
considerations of the layout of data in memory and how those data are
transformed by the program. See, for example, Mike Acton’s keynote at the
C++ Conference (Acton 2014).

### References

- Acton, M. Data-oriented design and C++. http://www.slideshare.net/cellperformance/data-oriented-design-and-c.
- Apodaca, A. A., and L. Gritz. 2000.
*Advanced RenderMan: Creating CGI for Motion Pictures.*San Francisco: Morgan Kaufmann. - Appel, A. 1968.
Some techniques for shading machine renderings of solids.
In
*AFIPS 1968 Spring Joint Computer Conference,**32,*37–45. - Arvo, J., and D. Kirk. 1990.
Particle transport and image synthesis.
*Computer Graphics (SIGGRAPH ’90 Proceedings)**24*(4), 63–66. - Ashdown, I. 1994.
*Radiosity: A Programmer’s Perspective*. New York: John Wiley & Sons. - Bigler, J., A. Stephens, and S. Parker. 2006.
Design for parallel interactive ray tracing systems.
*IEEE Symposium on Interactive Ray Tracing,*187–95. - Christensen, P.
The path-tracing revolution in the movie industry.
*SIGGRAPH 2015 Course*. - Cohen, M., and D. P. Greenberg.
The hemi-cube: a radiosity solution for complex environments.
*SIGGRAPH Computer Graphics**19*(3), 31–40. - Cohen, M., and J. Wallace. 1993.
*Radiosity and Realistic Image Synthesis*. San Diego: Academic Press Professional. - Cook, R. L., and K. E. Torrance. 1981.
A reflectance model for computer graphics.
*Computer Graphics (SIGGRAPH ’81 Proceedings),**15,*307–16. - Cook, R. L., and K. E. Torrance. 1982.
A reflectance model for computer graphics.
*ACM Transactions on Graphics**1*(1), 7–24. - Cook, R. L., L. Carpenter, and E. Catmull. 1987.
The Reyes image rendering architecture.
*Computer Graphics (Proceedings of SIGGRAPH ’87),*95–102. - Cook, R. L., T. Porter, and L. Carpenter. 1984.
Distributed ray tracing.
*Computer Graphics (SIGGRAPH ’84 Proceedings),**18,*137–45. - Driemeyer, T., and R. Herken. 2002.
*Programming mental ray*. Wien: Springer-Verlag. - Duff, T. 1985.
Compositing 3-D rendered images.
*Computer Graphics (Proceedings of SIGGRAPH ’85),**19,*41–44. - Farmer, D. F.
Comparing the 4341 and M80/40.
*Computerworld**15*(6). - Glassner, A. (Ed.) 1989a.
*An Introduction to Ray Tracing*. San Diego: Academic Press. - Glassner, A. 1993.
Spectrum: an architecture for image synthesis, research, education,
and practice.
*Developing Large-Scale Graphics Software Toolkits, SIGGRAPH ’93 Course Notes,**3,*1-14–1-43. - Glassner, A. 1995.
*Principles of Digital Image Synthesis*. San Francisco: Morgan Kaufmann. - Goldstein, R. A., and R. Nagel. 1971.
3-D visual simulation.
*Simulation**16*(1), 25–31. - Goral, C. M., K. E. Torrance, D. P. Greenberg, and B. Battaile.
Modeling the interaction of light between diffuse surfaces.
In
*Proceedings of the 11th Annual Conference on Computer Graphics and Interactive Techniques (SIGGRAPH ’84)*, 213–22. - Greenberg, D. P., K. E. Torrance, P. S. Shirley, J. R. Arvo, J. A. Ferwerda,
S. Pattanaik, E. P. F. Lafortune, B. Walter, S.-C. Foo, and B. Trumbore.
1997.
A framework for realistic image synthesis.
In
*Proceedings of SIGGRAPH ’97,*Computer Graphics Proceedings, Annual Conference Series, 477–94. - Gritz, L., and J. K. Hahn. 1996.
BMRT: a global illumination implementation of the RenderMan
standard.
*Journal of Graphics Tools**1*(3), 29–47. - Hall, R. 1989.
*Illumination and Color in Computer Generated Imagery*. New York: Springer-Verlag. - Hall, R. A., and D. P. Greenberg. 1983.
A testbed for realistic image synthesis.
*IEEE Computer Graphics and Applications**3*(8), 10–20. - Heckbert, P. S. 1987.
Ray tracing JELL-O brand gelatin.
*Computer Graphics (SIGGRAPH ’87 Proceedings),**21*(4), 73–74. - Kajiya, J. T. 1986.
The rendering equation.
In
*Computer Graphics (SIGGRAPH ’86 Proceedings),**20,*143–50. - Kajiya, J. T., and B. P. Von Herzen. 1984.
Ray tracing volume densities.
In
*Computer Graphics (Proceedings of SIGGRAPH ’84),*Volume 18, 165–74. - Kay, D. S., and D. P. Greenberg. 1979.
Transparency for computer synthesized images.
In
*Computer Graphics (SIGGRAPH ’79 Proceedings),*Volume 13, 158–64. - Kirk, D. B., and J. Arvo. 1991.
Unbiased sampling techniques for image synthesis.
*Computer Graphics (SIGGRAPH ’91 Proceedings),*Volume 25, 153–56. - Kirk, D., and J. Arvo. 1988.
The ray tracing kernel.
In
*Proceedings of Ausgraph ’88,*75–82. - Larson, G. W., and R. A. Shakespeare. 1998.
*Rendering with Radiance: The Art and Science of Lighting Visualization*. San Francisco: Morgan Kaufmann. - Levine, J. R., T. Mason, and D. Brown. 1992.
*lex & yacc*. Sebastopol, California: O’Reilly & Associates. - Nishita, T., and E. Nakamae.
Continuous tone representation of three-dimensional objects taking account of shadows and
interreflection.
*SIGGRAPH Computer Graphics**19*(3), 23–30. - Ohmer, S.
Ray Tracers: Blue Sky Studios.
*Animation World Network*, http://www.awn.com/animationworld/ray-tracers-blue-sky-studios. - Shirley, P. 1990. Physically based lighting calculations for computer graphics. Ph.D. thesis, Department of Computer Science, University of Illinois, Urbana–Champaign.
- Shirley, P., and R. K. Morley. 2003.
*Realistic Ray Tracing*. Natick, Massachusetts: A. K. Peters. - Shirley, P., C. Y. Wang, and K. Zimmerman. 1996.
Monte Carlo techniques for direct lighting calculations.
*ACM Transactions on Graphics**15*(1), 1–36. - Sillion, F., and C. Puech. 1994.
*Radiosity and Global Illumination*. San Francisco: Morgan Kaufmann. - Slusallek, P. 1996. Vision—an architecture for physically-based rendering. Ph.D. thesis, University of Erlangen.
- Slusallek, P., and H.-P. Seidel. 1995.
Vision—an architecture for global illumination calculations.
*IEEE Transactions on Visualization and Computer Graphics**1*(1), 77–96. - Slusallek, P., and H.-P. Seidel. 1996.
Towards an open rendering kernel for image synthesis.
In
*Eurographics Rendering Workshop 1996,*51–60. - Snow, J.
Terminators and Iron Men: image-based lighting and physical shading at ILM.
*SIGGRAPH 2010 Course: Physically-Based Shading Models in Film and Game Production*. - Suffern, K. 2007.
*Ray Tracing from the Ground Up*. Natick, Massachusetts: A. K. Peters. - Sung, K., J. Craighead, C. Wang, S. Bakshi, A. Pearce, and A. Woo. 1998.
Design and implementation of the Maya renderer.
In
*Pacific Graphics ’98*. - Trumbore, B., W. Lytle, and D. P. Greenberg. 1993.
A testbed for image synthesis.
In
*Developing Large-Scale Graphics Software Toolkits,*SIGGRAPH ’93 Course Notes, Volume 3, 4-7–4-19. - Veach, E. 1997. Robust Monte Carlo methods for light transport simulation. Ph.D. thesis, Stanford University.
- Wald, I., P. Slusallek, and C. Benthin. 2001b.
Interactive distributed ray tracing of highly complex models.
In
*Rendering Techniques 2001: 12th Eurographics Workshop on Rendering,*277–88. - Ward, G. J. 1994.
The Radiance lighting simulation and rendering system.
In
*Proceedings of SIGGRAPH ’94,*459–72. - Whitted, T. 1980.
An improved illumination model for shaded display.
*Communications of the ACM**23*(6), 343–49.