## 1.5 How to Proceed through This Book

We wrote this book assuming it will be read in roughly front-to-back order. Generally, we tried to minimize the number of forward references to ideas and interfaces that haven’t yet been introduced, but we do assume that the reader is acquainted with the previous content at any particular point in the text. However, some sections go into depth about advanced topics that some readers may wish to skip over (particularly on first reading); each advanced section is identified by an asterisk in its title.

Because of the modular nature of the system, the main requirement is that
the reader be familiar with the low-level classes like `Point3f`,
`Ray`, and `Spectrum`; the interfaces defined by the abstract base
classes listed in Table 1.1; and the rendering loop in
`SamplerIntegrator::Render()`. Given that knowledge, for example, the
reader who doesn’t care about precisely how a camera model based on a
perspective projection matrix maps `CameraSample`s to rays can skip
over the implementation of that camera and can just remember that the
`Camera::GenerateRayDifferential()` method somehow turns a
`CameraSample` into a `RayDifferential`.

The rest of this book is divided into four main parts of a few chapters
each. First, Chapters 2 through 4
define the main geometric functionality in the system.
Chapter 2 has the low-level classes like `Point3f`,
`Ray`, and `Bounds3f`. Chapter 3 defines the `Shape`
interface, gives implementations of a number of shapes, and shows how to
perform ray-shape intersection tests. Chapter 4 has
the implementations of the acceleration structures for speeding up ray tracing
by skipping tests with primitives that a ray can be shown to definitely not
intersect.

The second part covers the image formation process. First,
Chapter 5 introduces the physical units used to
measure light and the `Spectrum` class that represents wavelength-varying
distributions (i.e., color). Chapter 6 defines the
`Camera` interface and has a few different camera implementations. The
`Sampler` classes that place samples on the image plane are the topic of
Chapter 7, and the overall process of turning
radiance values on the film into images suitable for display is explained in
Section 7.9.

The third part of the book is about light and how it scatters from surfaces and participating media. Chapter 8 includes a set of building-block classes that define a variety of types of reflection from surfaces. Materials, described in Chapter 9, use these reflection functions to implement a number of different surface materials, such as plastic, glass, and metal. Chapter 10 introduces texture, which describes variation in material properties (color, roughness, etc.) over surfaces, and Chapter 11 has the abstractions that describe how light is scattered and absorbed in participating media. Finally, Chapter 12 has the interface for light sources and a number of light source implementations.

The last part brings all of the ideas from the rest of the book together to
implement a number of interesting light transport algorithms.
Chapter 13 introduces the theory of Monte
Carlo integration, a statistical technique for estimating the value of
complex integrals, and describes low-level routines for applying Monte Carlo
to illumination and light scattering. The integrators in
Chapters 14, 15, and
16 use
Monte Carlo integration to compute more accurate approximations of the
light transport equation than the `WhittedIntegrator`, using techniques
like path tracing, bidirectional path tracing, Metropolis light transport,
and photon mapping.

Chapter 17, the last chapter of the book, provides a brief retrospective and discussion of system design decisions along with a number of suggestions for more far-reaching projects than those in the exercises. Appendices describe utility functions and details of how the scene description is created as the input file is parsed.

### 1.5.1 The Exercises

At the end of each chapter you will find exercises related to the material covered in that chapter. Each exercise is marked as one of three levels of difficulty:

- ① An exercise that should take only an hour or two
- ② A reading and/or implementation task that would be suitable for a course assignment and should take between 10 and 20 hours of work
- ③ A suggested final project for a course that will likely take 40 hours or more to complete