www.realtimerendering.com Open in urlscan Pro
162.241.219.23  Public Scan

Submitted URL: http://www.realtimerendering.com/
Effective URL: https://www.realtimerendering.com/
Submission: On May 21 via api from US — Scanned from DE

Form analysis 1 forms found in the DOM

<form class="gsc-search-box gsc-search-box-tools" accept-charset="utf-8">
  <table cellspacing="0" cellpadding="0" role="presentation" class="gsc-search-box">
    <tbody>
      <tr>
        <td class="gsc-input">
          <div class="gsc-input-box" id="gsc-iw-id1">
            <table cellspacing="0" cellpadding="0" role="presentation" id="gs_id50" class="gstl_50 gsc-input" style="width: 100%; padding: 0px;">
              <tbody>
                <tr>
                  <td id="gs_tti50" class="gsib_a"><input autocomplete="off" type="text" size="10" class="gsc-input" name="search" title="search" aria-label="search" id="gsc-i-id1" dir="ltr" spellcheck="false"
                      style="width: 100%; padding: 0px; border: none; margin: 0px; height: auto; background: url(&quot;https://www.google.com/cse/static/images/1x/en/branding.png&quot;) left center no-repeat rgb(255, 255, 255); outline: none;"></td>
                  <td class="gsib_b">
                    <div class="gsst_b" id="gs_st50" dir="ltr"><a class="gsst_a" href="javascript:void(0)" title="Clear search box" role="button" style="display: none;"><span class="gscb_a" id="gs_cb50" aria-hidden="true">×</span></a></div>
                  </td>
                </tr>
              </tbody>
            </table>
          </div>
        </td>
        <td class="gsc-search-button"><button class="gsc-search-button gsc-search-button-v2"><svg width="13" height="13" viewBox="0 0 13 13">
              <title>search</title>
              <path
                d="m4.8495 7.8226c0.82666 0 1.5262-0.29146 2.0985-0.87438 0.57232-0.58292 0.86378-1.2877 0.87438-2.1144 0.010599-0.82666-0.28086-1.5262-0.87438-2.0985-0.59352-0.57232-1.293-0.86378-2.0985-0.87438-0.8055-0.010599-1.5103 0.28086-2.1144 0.87438-0.60414 0.59352-0.8956 1.293-0.87438 2.0985 0.021197 0.8055 0.31266 1.5103 0.87438 2.1144 0.56172 0.60414 1.2665 0.8956 2.1144 0.87438zm4.4695 0.2115 3.681 3.6819-1.259 1.284-3.6817-3.7 0.0019784-0.69479-0.090043-0.098846c-0.87973 0.76087-1.92 1.1413-3.1207 1.1413-1.3553 0-2.5025-0.46363-3.4417-1.3909s-1.4088-2.0686-1.4088-3.4239c0-1.3553 0.4696-2.4966 1.4088-3.4239 0.9392-0.92727 2.0864-1.3969 3.4417-1.4088 1.3553-0.011889 2.4906 0.45771 3.406 1.4088 0.9154 0.95107 1.379 2.0924 1.3909 3.4239 0 1.2126-0.38043 2.2588-1.1413 3.1385l0.098834 0.090049z">
              </path>
            </svg></button></td>
        <td class="gsc-clear-button">
          <div class="gsc-clear-button" title="clear results">&nbsp;</div>
        </td>
      </tr>
    </tbody>
  </table>
</form>

Text Content

 * Blog
 * Graphics Books
 * Intersections
 * Portal
 * Ray tracing
 * Resources
 * USD & glTF
 * WebGL

 


Real-Time Rendering Resources
Last changed: January 21, 2024

This is the main resources page for the book Real-Time Rendering, Fourth
Edition, by Tomas Akenine-Möller, Eric Haines, Naty Hoffman, Angelo Pesce,
Michał Iwanicki, and Sébastien Hillaire, 1198 pages, from A K Peters/CRC Press,
ISBN-13: 978-1138627000, ISBN-10: 1138627003, list price $89.95 (Amazon $53.07,
Look inside; Kindle $71.99, free sample; Google Play $79.96, free sample; CRC
Press $99.95, eBook $89.96). View cover. BibTeX entry.

Korean edition available from the Kyokobook store, YES24 online bookstore, and
Aladin online bookstore.

Search site and resources, such as the Advances in Real-Time Rendering course
notes:

×

search
 

Web
Image

Sort by:
Relevance

Relevance
Date







The red betta fish in our website's banner is by Elinor Quittner, and can be
viewed in 3D.

 

The Amazon "Look inside" link and the free Kindle sample includes around the
first 80 pages of the book, including the first three chapters.

The Bibliography is available online with links to the entries. The Table of
Contents, Preface, the Introduction, Bibliography, and Index are available in a
PDF. You can also view the Table of Contents below.

Two chapters and two appendices are available only online, for free:

 * Collision Detection - The 3rd edition's chapter on this subject has been
   fully updated, but could not fit in the bounds of the physical book, so we
   offer it here, along with its hyperlinked bibliography.
 * Real-Time Ray Tracing - API support for this area was announced in March
   2018, too late for inclusion in the book, so we wrote an additional chapter
   about the subject as a whole. Its hyperlinked bibliography is available.
 * Appendices - The two appendices, Some Linear Algebra and Trigonometry, also
   had to be cut from the physical book. They have both been updated (a small
   bit) from the 3rd edition. The hyperlinked bibliography is also available.

We talk more about changes in this new edition on our blog. Information about
the previous, third edition of this book can be found here.

Other pages and resources hosted here:

 * A blog about new developments and our own explorations in the field. We're
   also on Twitter: Tomas, Eric, Naty, Angelo, Michał, and Sébastien.
 * The bibliography of the book, with hyperlinked resources (the Third Second,
   and First Edition bibliographies are also available).
 * The book corrections area (for all editions).
 * A gallery of over 400 of the 676 figures in the fourth edition, provided for
   Fair Use. Read the information there and our blog for more details.
 * A portal page for key real-time web resources.
 * Our book recommendation list for real-time computer graphics; we would
   appreciate your comments.
 * The object/object intersection page for information on 3D object
   intersections.
 * Tomas' Powerpoint slides for a semester's course derived from the second
   edition of book. Dated in spots, but useful as a place to start.
 * The 3rd Edition resources page has been kept around just in case. This page
   is no longer maintained, so expect dead links and stale information.

Much of this site is on Github, if you want to submit any fixes.


TABLE OF CONTENTS

The rest of this page is dedicated to providing information related to the
book's contents: new techniques, worthwhile websites, etc. This page is
organized into categories based on the table of contents. We also have a portal
page that is an extremely condensed set of some of the best links available, as
well as API-specific resources.

 * Chapter 1 Introduction
 * Chapter 2 The Graphics Rendering Pipeline
 * Chapter 3 The Graphics Processing Unit
 * Chapter 4 Transforms
 * Chapter 5 Shading Basics
 * Chapter 6 Texturing
 * Chapter 7 Shadows
 * Chapter 8 Light and Color
 * Chapter 9 Physically Based Shading
 * Chapter 10 Local Illumination
 * Chapter 11 Global Illumination
 * Chapter 12 Image-Space Effects
 * Chapter 13 Beyond Polygons
 * Chapter 14 Volumetric and Translucency Rendering
 * Chapter 15 Non-Photorealistic Rendering
 * Chapter 16 Polygonal Techniques
 * Chapter 17 Curves and Curved Surfaces
 * Chapter 18 Pipeline Optimization
 * Chapter 19 Acceleration Algorithms
 * Chapter 20 Efficient Shading
 * Chapter 21 Virtual and Augmented Reality
 * Chapter 22 Intersection Test Methods
 * Chapter 23 Graphics Hardware
 * Chapter 24 The Future
 * Chapter 25 Collision Detection (download chapter)
 * Chapter 26 Real-Time Ray Tracing (download chapter)
 * Linear Algebra (download chapter)
 * Trigonometry (download chapter)
 * Bibliography (page link)


INTRODUCTION

Our book is something of a practitioner's manual; it assume some basic knowledge
of the field. For the basics, and not so basics, you may want to start at
Scratchapixel (you can skip some of the Mathematics sections to start). For a
video introduction to computer graphics from the ground up, see Cem Yuksel's
lectures at the University of Utah.

How to pronounce all these graphics terms? Here's a guide. Remember, "SIGGRAPH"
rhymes with "pig laugh". For Bézier, Gouraud, Fresnel," listen here.

There is not much else related to the Introduction of the book to put here, so
we'll list some free graphics books that may be of interest. See our graphics
book list for upcoming, recent, and recommended books.

These are books that are FREE ONLINE, ordered by publication date. Do not be
fooled by the price; all but one were published as physical books and each has
valuable information.

Physically Based Rendering, Fourth Edition: from Theory to Implementation, by
Matt Pharr, Wenzel Jakob, and Greg Humphreys, The MIT Press, March 2023 (more
information), Patreon page, read for free. Ray Tracing Gems II: Next Generation
Real-Time Rendering with DXR, Vulkan, and OptiX, edited by Adam Marrs, Peter
Shirley, and Ingo Wald, Apress, August 4, 2021 (Book's website, publisher's
page), download for free. Developing Graphics Frameworks with Python and OpenGL,
by Lee Stemkoski and Michael Pascale, CRC Press, July 7, 2021 (Publisher's
website). Computer Graphics from Scratch: A Programmer's Introduction to 3D
Rendering, by Gabriel Gambetta, No Starch Press, May 18, 2021 (publisher's page
includes download of chapter 3, Google Books sample), read for free. The
Graphics Codex, by Morgan McGuire, 2011-2021: main site. Learn OpenGL - Graphics
Programming: Learn modern OpenGL graphics programming in a step-by-step fashion,
by Joey de Vries, Kendall & Welling, June 2020 (Book's website, with free
downloadable version; also, the beginnings of a new book, Learn Vulkan). Ray
Tracing Gems, edited by Eric Haines and Tomas Akenine-Möller, Apress, March 2019
(Book's website, publisher's page), download for free. Ray Tracing in One
Weekend, by Peter Shirley, January 2016 (Code, tweet, blog), download for free,
read (corrected version) for free. Ray Tracing: the Next Week, by Peter Shirley,
March 2016 (Code, tweet, blog), download for free, read (corrected version) for
free. Ray Tracing: The Rest Of Your Life, by Peter Shirley, March 2016 (Code,
tweet, blog), download for free, read (corrected version) for free. WebGL
Insights, edited by Patrick Cozzi, CRC Press, July 2015 (book's website, blog),
download for free. Immersive Linear Algebra, by J. Ström, K. Åström, and T.
Akenine-Möller, 2015-2019 (an interactive book on the subject), read for free.
Computer Vision Metrics: Survey, Taxonomy, and Analysis, by Scott Krig, Apress,
July 2014 (table of contents and free download; see our blog for options).
Learning Modern 3D Graphics Programming, by Jason L. McKesson, 2012. download
for free 3D Math Primer for Graphics and Game Development, 2nd Edition, by
Fletcher Dunn and Ian Parberry, AK Peters, November 2011, read for free.
Computer Vision: Algorithms and Applications, by Richard Szeliski, Springer,
Nov. 2010, download for free. GPU Gems 3, edited by Hubert Nguyen, August 2007,
read for free, code. NVIDIA wanted people to learn about shaders, so this
excellent book being free. GPU Gems 2: Techniques for Graphics and Compute
Intensive Programming, edited by Matt Pharr, March 2005, read for free, code
(and repo). Another gift from NVIDIA; a wonderful book. GPU Gems: Programming
Techniques, Tips, and Tricks for Real-Time Graphics, edited by Randima Fernando,
March 2004, read for free, code (and repo). Likewise, still worthwhile and great
that it's free. ShaderX2: Shader Programming Tips and Tricks with DirectX 9.0,
edited by Wolfgang Engel, Nov. 2003, download for free, also free code download
and notes. Ancient, but worth a peek. ShaderX2: Introductions and Tutorials with
DirectX 9.0, edited by Wolfgang Engel, Nov. 2003, download for free, also free
code download and notes. Ancient, but impressive that there's an 82-page article
on shadow volumes. The Cg Tutorial, by Randy Fernando and Mark J. Kilgard, March
2003, read for free. Pro tip: no one uses Cg any more. But, free is free.
Direct3D ShaderX: Vertex and Pixel Shader Tips and Tricks, edited by Wolfgang
Engel, June 2002, download for free, also free code download and notes. Again,
ancient, left here for historic purposes. Computational Geometry: Algorithms and
Applications, 3rd Edition, by Mark de Berg, Otfried Cheong, Marc van Kreveld,
and Mark Overmars, Springer Verlag, 2008: download 2nd Edition (from 2000) for
free. A well-illustrated text that explains key computational geometry
algorithms. Note that the free version is the second edition; other than these
errata fixes, the 3rd edition's major changes are that Chapter 7 includes
information on Voronoi diagrams of line-segments and for farthest point, and
Chapter 12 includes BSP trees for low-density scenes. Michael Abrash's Graphics
Programming Black Book, by Michael Abrash, July 1997, read for free and
alternate. Truly ancient, yes, but there are still articles of general interest,
and Abrash is a fine story-teller. Principles of Digital Image Synthesis, by
Andrew S. Glassner, Morgan Kaufmann, 1995: download for free, errata. An
incredible book, and physics doesn't change (much), so despite the age this book
is full of useful information. Radiosity: A Programmer's Perspective, by Ian
Ashdown, Wiley, 1994: download for free. Starts with a fine introduction to
photometry concepts. Radiosity and Realistic Image Synthesis, by Michael F.
Cohen and John R. Wallace, Academic Press Professional, 1993: download for free.
The first book on the use of radiosity in computer graphics, again with an
approachable introduction to photometry. Simulating Humans: Computer Graphics
Animation and Control, by Norman I. Badler, Cary B. Phillips, Bonnie Lynn
Webber, Oxford University Press, 1993: download for free. All about the human
figure and how to model it in the computer. Old, but chock full of information.
Introduction to Computing with Geometry, by Adrian Bowyer and John Woodwark,
Information Geometers Ltd, 1993: download for free and alternate. About surfaces
and other geometry-related bits. Written in an approachable and entertaining
manner, with solid math and (occasionally dusty but workable) code bits. An
Introduction to Ray Tracing, edited by Andrew Glassner, Morgan Kaufmann, 1989.

The first book on ray tracing. Ancient, but most of the information is still
valid - math is math, data structures are data structures. Download the PDF or
DJVU version. Andrew Glassner's page on the book here, errata page for first
printing here (all errata are corrected in the PDF version); review by Matt
Pharr here; download for free.

Note that the ShaderX Books page gives links to various portions of these books
that are available online. Excerpts of many other graphics books are also
available on Google books.


THE GRAPHICS RENDERING PIPELINE

Commercial game engines include: Unity, Unreal engine, and CryEngine, to name a
few. Find a overflowing table of engines on Wikipedia.

See our WebGL resources page for various easy-to-use libraries for 3D display on
your web browser. Since Javascript is an interpreted language, modifying,
running, and sharing demos is ridiculously easy. See the three.js examples page
and Lee Stemkoski's site for a start.

There are a wide range of open source renderers available. NVIDIA's Falcor gives
access to DXR ray tracing capabilities, among many other features. G3D is a
research-oriented renderer that offers a wide range of modern effects and works
on all major PC operating systems. OpenSWR is a fast pure-CPU OpenGL-compatible
renderer from Intel. Irrlicht, bgfx, OGRE, Godot, and sauerbraten are open
source 3D games engines with some popularity. Open Scene Graph is a free, open
source scene graph system. Coin is an open source retained mode scene graph
library based on Open Inventor.

Ancient technologies can be entertaining. Source code for DOOMs and Quakes is
available for download under GPL. The ioquake3 site builds upon Quake 3, adding
a huge number of improvements (even ray tracing). There are also ports of DOOM
to a huge number of platforms, and Wolfenstein is on the iPhone. Arcade
emulators such as MAME allow you to port classic games to most any platform.

Of course, one of the best game engines is Excel.


THE GRAPHICS PROCESSING UNIT

Figure 3.14, about user-defined clipping planes, was generated with this and
this live interactive three.js demo.

The series A trip through the Graphics Pipeline 2011 is an excellent in-depth
presentation on all the major elements of the GPU.

The Humus 3D site has some excellent sample programs that show advanced
techniques.

Guides to tessellation shaders, most with an OpenGL-bias, include this tutorial,
this description, descriptions of triangle and quad subdivision, this more
technical set of slides, and this reference/tutorial.

See this article for writing an efficient Vulkan renderer. There are
NVIDIA-specific extensions for Vulkan.


TRANSFORMS

Immersive Linear Algebra is a free interactive book on linear algebra,
coauthored by Tomas. This interactive demo from Eric's course shows how the set
of transforms changes due to camera and model modifications. Another interactive
demo shows how various common camera model parameters affect the view.

If you need to start from scratch, Wolfire's blog has a basic two-part tutorial
on linear algebra, here and here.

Dave Eberly's site has useful papers and code on a wide variety of geometric
operations, including quaternion interpolation. J.M.P. van Waveren discusses
matrix to quaternion transforms and how to use SIMD for them. Code for rotating
from one vector to another rapidly using quaternions (as described in our book)
is available online from Tomas.

The Portable Game Library includes code for a Simple Geometry library.

Dual quaternion skinning offers improved quality at relatively little additional
cost. The process can be done using a vertex shader. An old-but-free Maya plugin
is also available.

The Graphics Gems book series contains a number of articles on transformations,
with code online.

As we touch upon in our book, moving your z-buffer's near plane as far from the
eye as possible is a good idea. Steve Baker has an article on this topic with a
little calculator to explore the effect. Nathan Reed discusses options to
improve precision in depth (we use one of his graphs in our book). An older
article gives other visualizations of precision problems. Using a reversed
z-buffer is one solution - this article also links to other articles on the
subject.

It's possible to perform skinning in a compute shader.


SHADING BASICS

We drew upon Tarek Sherif's WebGL 2 Examples for our shader examples. This code
is an easy way to start playing with shaders.

There are many shader tutorials out there. For example, Unity 3D and Learn
OpenGL provide basics, Ronja gives some more elaborate effects. The Book of
Shaders is an introduction to fragment shaders, under development. Shadertoy is
at the far end of the spectrum, an interactive web environment doing everything
in the fragment shader; Omar Shehata provides an introduction. Other web-based
systems for experimentation include GLSL Sandbox (similar to Shadertoy), Shdr
for basic inputs and meshes to play with, Shadershop for visualizing shader
functions, and ISF for video DJs.

Dealing with the explosion of shaders caused by material systems is an ongoing
concern. This article discusses the problem in depth and offers solutions.

Storing semitransparent textures so that the colors are premultiplied by the
alphas makes compositing and blending operations much faster to compute. Tom
Forsyth gives a rundown of the math and formats involved (search "Premultiplied
alpha part 2").

Transparency is difficult to perform correctly in a single pass when using a
Z-buffer. Steve Baker gives a good summary of the basics of the problem and
traditional solutions. NVIDIA's developer site and the Humus 3D site each have
sample code for using stencil routing to provide order-independent transparency.
Tarek Sherif made a WebGL 2 browser demo of depth peeled transparency.

NVIDIA provides a good summary of basic techniques for transparency and some
common optimizations. This article at Sketchfab gives an artist's view of
transparency and using blending modes to simulate it.

The dangers of improperly accounting for alpha in cutouts is lavishly
illustrated in this blog post.

24 bits of color is usually enough, but not always. Here's an image showing
concentric bands only one pixel intensity value apart. Most monitors will show
some banding somewhere on the image.

Here is a comparison generated using Scott R. Nelson's program of lines drawn
with gamma=1.0 (note the severe roping and Moíre patterns) and properly drawn
with gamma=2.2. I find this pretty convincing.

Larry Gritz's article The Importance of Being Linear is an excellent explanation
of gamma correction and other monitor transforms. If that article doesn't click
for you, maybe this one will.

The difference between linear, sRGB, and gamma 2.2 are shown in this Shadertoy.

The chart on this page shows different MSAA patterns used on various vendors'
GPUs. Lots more on sampling pattern theory here. This FXAA vs. SMAA interactive
demo lets you examine the differences. Matt Pettineo's blog post describes the
problems with MLAA approaches under animation. The retrospective here gives a
thorough history of the use of MLAA techniques in games.

This article on alpha coverage includes some excellent animations and figures
showing various problems and solutions.

Font antialiasing via sub-pixel LCD rendering is dealt with in depth on the
Anti-Grain Geometry site. GPU-accelerated 2D engines include Will Dobbie's (try
the War and Peace demo, YMMV).

This thorough survey of temporal antialiasing (TAA) techniques is from 2020.
Code that demonstrates the MSAA and temporal antialiasing techniques used in
"The Order: 1886" can be found here. The demos here are not truly temporal
antialiasing, but rather progressive antialiasing, and still worth a look to see
the improvement over time.

Newer techniques continue to be developed. DLSS, deep-learning super-sampling,
is as it sounds, using deep learning training to create a neural net that
improves an aliased image.


TEXTURING

Live interactive demos associated with this chapter's contents:

 * The three.js anisotropy demo for Figure 6.19.
 * Stéphane Guillitte's "Playing Marble" shadertoy for Figure 6.24.
 * The three.js demo showing multiple texture types for Figure 6.25.

S3TC texture compression is a standard part of DirectX, renamed DXTn texture
compression. An outdated but free manipulation and compression library is
available for manipulating DXTn (DDS) format textures (the package also converts
heightfields to normal maps). Source code is available. The Unreal developer
network has an excellent article on DXTC compression and quality comparison.
DevIL is an open-source image conversion library that reads and writes DDS and
many other formats.

Cutout textures pose interpolation problems along their edges. Adam Sawicki has
an article all about the problems with and solutions, including his own, for
mipmaps with alpha cutouts.

The USC-SIPI Image Database has many classic images (Lena, Mandrill) and other
texture samples for research. For free stock images, one site is Free images,
among many others.

Just because a paper is ancient does not mean it's dated - math doesn't rot.
Heckbert has written a worthwhile Survey of Texture Mapping and a more in-depth
work, Fundamentals of Texture Mapping and Image Warping. Many classic
applications of texture mapping are discussed at Paul Haeberli's site.

AMD has an old program called MeshMapper which generates normal, displacement,
and ambient occlusion maps from a low and high resolution model. I know I've
seen this somewhere in a newer open-source version, but can't find it... (help
appreciated)

An implementation of megatexturing is available.

Andreas Mischok gives great visual comparisons and explanations of the various
types of bump and displacement techniques.


SHADOWS

Figure 7.12 was generated with this demo by Christoph Peters using the Sintel
model. Another good shadow exploration tool is Matt Pettineo's sample app.

Lauritzen and all have copious notes and demo code for their Sample Distribution
Shadow Maps scheme.


LIGHT AND COLOR

The CVRL website has a huge amount of easily downloadable primary research data
relating to color. There are numerous other webpages on colorimetry and related
topics, such as this overview. Poynton's color space FAQ contains much solid
information on the topic.

Color spectra data for acrylic paints from one company are available for
download.

Bruce Lindbloom's site summarizes color conversion equations, and includes a
table for converting between the popular color spaces (see his "Math" link).
There are some useful notes on correct and efficient conversion between RGB and
YUV color spaces. Interestingly, the chromaticity function is not a simple
triangle, as it is usually shown.


PHYSICALLY BASED SHADING

The Advances in Real-Time Rendering SIGGRAPH course notes for the past few years
are available for download, with talks discussing many areas. Stephen Hill's
blog is an great guide to SIGGRAPH courses and other resources.

The Learn OpenGL site has a surprisingly detailed page on microfacet theory and
other elements of physically based rendering.

Filament is an open-source rasterizer. It includes an extensive and impressive
amount of documentation and theory about physically-based materials.

Morgan McGuire's Graphics Codex is a great compendium of short, readable
articles on advanced rendering techniques and much else. It can be accessed on
the web or on an iPad.

Andrew Glassner's classic Principles of Digital Image Synthesis is free for
download; a bit old, but physics and math don't change that much.

BRDF data is available from Cornell and Columbia-Utrecht Universities. FreeSnell
has the refractive indices and coefficients of extinction for many materials, as
well as a thin-film simulator.

If you have only a minute to learn about modeling layered materials, watch this.
You might then be tempted to watch his free series of lectures.


LOCAL ILLUMINATION

Figure 10.24 is from this interactive three.js demo, with a few of our own
modifications. Figure 10.32 was derived from this Shadertoy by Nimitz.

A great history of reflection mapping is available from Paul Debevec's site.
Some normally difficult to obtain early papers and videos can be found here.
High dynamic range environment map image data is available at this site, along
with 8 bit/channel spherical map images.

Humus has a large set of cube maps available for experimentation.

The IVRPA is a good place to see panorama images and learn about how to make
them. 360 Cities also has panoramas.


GLOBAL ILLUMINATION

Figure 11.27 showing light baking was generated using content from this live
interactive three.js demo.

Phil Dutre's old Global Illumination Compendium, mentioned in "Further
Resources", has much useful information on BRDFs and other facets global
illumination theory.

A pleasant visualization of how the coffee-cup caustic is formed is available.

A gallery of game screenshots shows the evolution of how water is rendered in
games - click through the images near the bottom.


IMAGE-SPACE EFFECTS

Matt Pettineo's BakingLab demo generated Figure 12.16, and is a good way to play
with depth of field, tone mapping, and many other effects.

Tarek Sherif's depth of field demo runs in the browser, so is just a click away.
It is part of his set of WebGL 2 examples.

Matt Pettineo's Baking Lab demo lets you explore depth of field, tone mapping,
and other effects. G3D takes more work to get going, but also include depth of
field, motion blur, and many other effects.


BEYOND POLYGONS

The particle system images shown in Figure 13.4 of the book are better enjoyed
as animated programs that run in your browser (i.e., just a click away):

 * "The Spirit" by Edan Kwan (more demos).
 * "Fluid Particles" by David Li.
 * "Southern Delta Aquariids meteor shower" by Ian Webster (more demos).

If you want to play with source, start with this three.js demo, one of many
particle demos in that codebase. Tarek Sherif's WebGL 2 particle demo is another
starting spot.

Unsurprisingly, point sprites are more efficient than particles generated using
the geometry shader.

There are any number of presentations about using particles and other effects in
games, such as in Unity.

Potree is a great open-source point cloud rendering system with a number of
worthwhile features. Source code and a demo for the ancient point rendering
system QSplat is still available for download.

The OpenEXR image format, developed by ILM, allows higher precision formats to
be written and read, including support for the 16-bit floating point "half"
format used in NVIDIA's Cg format. It is an extensible format that allows
arbitrary buffers of data.


VOLUMETRIC AND TRANSLUCENCY RENDERING

Figure 14.37, refractive glass angels, is from a tweaked version of this live,
interactive three.js demo and from Lee Stemkoski's Bubble demo at his site.

Figure 14.40, water ripples, is from Evan Wallace's live WebGL demo, explained
here.

If you want to know just a bit about volume rendering, Kyle Hayward's old 101
and 102 tutorials are worth a look.

Compared to polygon rendering, volume-related test data is relatively rare.
Disney provides a volumetric cloud dataset at different resolutions. The
USC-HairSalon is a set of 343 hair models.

Sébastien Hillaire has made his HLSL spherical harmonics code available for use
as a submodule, used for example in directional ambient occlusion for clouds


NON-PHOTOREALISTIC RENDERING

See the Non-Photorealistic Animation and Rendering Proceedings for the latest on
NPR research.

One important new area in NPR that we mostly ignore in the book is style
transfer, mostly because it's much more related to image processing and deep
learning. This is the seminal paper, and there's now even an app, Prisma.

Aaron Hertzmann has a recent three-part series on image stylization. Here is
part 1, part 2, and the third part to appear.

The old Stylized Rendering in Games SIGGRAPH 2010 course materials have a number
of worthwhile presentations.

A dated but worthwhile NPR resources page has been put together by Craig
Reynolds.

Even gibbets can be stylized, see NPRQuake.


POLYGONAL TECHNIQUES

MeshLab is an open source system for manipulating meshes. It has a huge number
of meshing operations available. The Meshlab blog has worthwhile articles,
including a rundown of experiments performed comparing three different vertex
normal computation techniques.

The McGuire Graphics Data page is a curated collection of a variety of model
types, extremely useful for research. The Stanford 3D Scanning Repository
contains the famous bunny model, happy buddha, dragon, armadillo, and other
dense polygonal meshes. The relatively new ORCA repository has a few complex
models that see use in research papers. See our portal page for more model
sources.

Unity provides a free 96-page guide to using photogrammetry.

CGAL has a computational geometry bias, but supports many operations on
polygonal models. If you need meshes with various constraints (e.g., avoiding
long, thin polygons), try Jonathan Shewchuk's Triangle software.

For translating various file formats, we recommend Assimp. For file format
information, start at Wikipedia or the Graphics File Format Page. glTF is a new
file format that is a tight match with how GPUs store and display 3D data. In
the film world, Pixar's Universal Scene Description (USD) software is gaining
traction for asset interchange.

Gavin Bell describes a bit more about how to get the normals to point outwards,
along with sample code.

GTS is an (ancient) open-source, LGPL polygonal manipulation library that does
VIPM, stripification, hierarchical bounding box generation, and more.

Mark Duchaineau's free LibGen has simplification code buried in it (see the
"surf" library and "surftools" commands).

The Virtual Terrain Project has a huge amount of useful information about
terrain storage and rendering, large terrain datasets, as well as source code.


CURVES AND CURVED SURFACES

Figure 17.32 was generated using Tamy Boubekeur's Phong tessellation Windows
demo. Figure 17.37 was generated from Iñigo Quilez's shadertoys rainforest and
Snail.

Pixar's Open Subdiv open source libraries site includes a tutorial on
subdivision surfaces.

Paul Baker has an old demonstration program with source that tessellates and
renders metaballs.

We do not cover NURBS in our book, but these are important in CAD. The verb
library is a relatively recent open-source system for manipulating these. Dean
Macri has an article on using NURBS in real-time applications at Gamasutra's
site. The source code for the book An Introduction to NURBS is available online.
There is also an older Sourceforge NURBS manipulation library.

A short history discusses the most famous spline surface model, the Utah Teapot;
here's a video about it that Eric made; a C program to generate it is available
for download.


PIPELINE OPTIMIZATION

This beginner guide to GPU optimization does a nice job of discussing some of
the major performance bottlenecks and tools used to discover these.

We list a number of tools for debugging in the book, here are the links:

 * RenderDoc - a high-quality Windows, Linux, and Android debugger for DirectX,
   OpenGL, and Vulkan, originally developed by Crytek and now open source.
 * AMD's GPU PerfStudio - AMD's suite of tools for their graphics hardware
   offerings, working on Windows and Linux. One notable tool provided is a
   static shader analyzer that gives performance estimates without needing to
   run the application. AMD's Radeon GPU Profiler is a separate, related tool.
 * NVIDIA Nsight - a performance and debugging system with a wide range of
   features. It integrates with Visual Studio on Windows and Eclipse on Mac OS
   and Linux.
 * Microsoft's PIX - has long been used by Xbox developers and has been brought
   back for DirectX 12 on Windows. Visual Studio's {\em Graphics Diagnostics}
   can be used with earlier versions of DirectX.
 * GPUView - from Microsoft; uses Event Tracing for Windows (ETW), an efficient
   event logging system. GPUView is one of several programs that are consumers
   of ETW sessions. It focuses on the interaction between CPU and GPU, showing
   which is the bottleneck.
 * Graphics Performance Analyzers (GPA) - a suite from Intel, not specific to
   their graphics chips, that focuses on performance and frame analysis.
 * Instruments - for Xcode on OS X; has several tools for timing, performance,
   networking, memory leaks, and more.
 * OpenGL ES Analysis - detects performance and correctness problems and
   proposes solutions
 * Metal System Trace - provides tracing information from the application,
   driver, and GPU for Metal applications.

For profiling, this tool allows you to see how the waves (warps) are executed;
the documentation explains various stalls and other problems that can happen.
The Kernel Occupancy Viewer is aimed at determining occupancy, how many warps
are available for processing. This archived page on occupancy describes how this
can be measured and expressed.

There are a fair number of in-depth articles on how various engines perform
rendering:

 * GTA V - Graphics Study
 * DOOM (2016) - Graphics Study
 * How Unreal Renders a Frame
 * Unreal Engine 4 Rendering
 * World of Tanks: Graphical Update Technical Overview
 * Godot 3's Renderer Design Explained
 * Mud and Water of Spintires: MudRunner
 * Reverse engineering the rendering of The Witcher 3

Tom Forsyth gives his view on renderstate change costs (search "Renderstate
change costs").

In these older articles, Christer Ericson discusses how to order draw calls
around for efficiency (this article is pretty popular) and how to optimize
particle systems.

Noel Llopis explains the basics of data alignment and what to know to improve
efficiency.

Concurrency now needs to be designed into rendering systems from the start. Herb
Sutter's classic article is a good start as to why this is now so. One popular
tool for programming in parallel is Intel's Threading Building Blocks.

YCoCg compression can be explored with this interactive WebGL demo, explained
here.

Matt Pharr describes the challenges of reading an extremely large dataset, the
Moana island scene. While focused on his ray tracer's performance, the issues of
profiling and finding the bottlenecks and memory wasters affect all graphics
applications.


ACCELERATION ALGORITHMS

The Windows demo used to generate Figure 19.33 still works and can be found
here. Quick to download and run, and to the point.

The old-but-good book Level of Detail for 3D Graphics covers many aspects of
level of detail algorithms in depth. This book has a companion web site.

Some excellent examples of LOD popping in games are available; move your mouse
in and out of each image to see the effect.

See this demo, which runs in your browser, for a straightforward visualization
of occlusion culling's effect.


EFFICIENT SHADING

Matt Pettineo has an in-depth rundown of his and others' experiments with
various light deferred shading techniques, and provides a demo for testing. He
also has an article and code for efficient rendering of deferred decals.

Other demos and code for efficient shading of many lights are available, such
as:

 * Ola Olsson's clustered forward code, and his older tiled shading code.
 * Andrew Lauritzen's
 * Marc Fauconneau Dufresne's
 * Emil Persson's
 * Jeremiah van Oosten's

Sebastian Sylvan gives an overview of Drobot's approach and explains why
clustering is so useful. Eidos provides a summary of a deferred+ system they
developed, and explain further in GPU Zen, direct article link here.

If you want more on micropolygons, these lecture slides from CMU describe the
challenges of using this technique on the GPU.


VIRTUAL AND AUGMENTED REALITY

There are many sources of information on new VR and AR technologies and
applications. These include the Oculus blog, SteamVR, NVIDIA's Technical blog,
and the Google AR and VR blog. Some of the projects posted in the Made with
ARKit are magic. There are also way too many other blogs tracking these fields.

Keep an eye on the OpenXR working group, whose goal is to set an open standard
for VR and AR applications.


INTERSECTION TEST METHODS

We created a 3D Object Intersection page, giving references and pointers to code
for a wide variety of object/object intersection tests.

Dan Sunday's GeometryAlgorithms.com (defunct, but archived) has some good
summaries of algorithms for making bounding containers for various geometric
primitives.


GRAPHICS HARDWARE

Wikipedia has some excellent articles on hardware-related topics, such as this
one on color depth. The comments on this post on our blog are great for why
there are high refresh rates.

Humus gives a rundown of the various ways of computing and storing z-depths.

Valve's Steam hardware survey tracks what is used by their subscribers;
incredibly valuable for knowing what is out there.

Tech Power Up has an up-to-date summary of the clock speed, memory size, and
other characteristics for every major consumer PC GPU. Ars Technica sometimes
covers GPU architectures.

One reason little is published about commercial graphics hardware architectures
is that there are trade secrets and possible patent infringement involved. The
Patent Arcade site tracks patent infringement, copyright infringement, and other
videogame related legal issues. Knowingly violating patents causes triple
damages, so you've been warned.

24 bits of color is usually enough, but not always. Here's an image showing
concentric bands only one pixel value apart. On most displays some area of the
image will exhibit banding.

A good resource on graphics hardware architectures is the course notes for the
Beyond Programmable Shading course at SIGGRAPH.

NVIDIA's list of technologies gives some information about each. They also have
a light overview of conservative rasterization.

The UserBenchmark site provides benchmarking, along with GPU ratings, and can
find performance problems on systems. FurMark is a free OpenGL stress test.

Already mentioned in "Pipeline Optimization" but worth a repeat: This tool
allows you to see how the waves (warps) are executed; the documentation explains
various stalls and other problems that can happen. The Kernel Occupancy Viewer
is aimed at determining occupancy, how many warps are available for processing.

A recent paper by Zhe Jia et al. dissects various elements of the NVIDIA Volta
and compares it to its predecessors.

Matt Pharr's The story of ispc discusses the failure of Larrabee, and his
subsequent project of making a better compiler for SIMD. Along the way he
describes the various political factors that went into decisions. A worthwhile
read on a number of levels.

Two software-only solutions for making movies of interactive programs are FRAPS
and HyperCam. FRAPS also measures and displays the frame rate of any 3D
application.

There are many little utilities for checking various hardware capabilities,
mostly for overclocking but also just educational to examine. GPU-Z displays the
GPU's capabilities and monitors temperatures and voltages of various components.

The Accelenation site has an excellent history of the early years (1995-2002) of
consumer graphics cards. Maximum PC has an extensive visual history of the GPU
boards from 1995 on. For a general history of computer graphics, see Wayne
Carlson's site. Steve Collins has a fascinating look at ancient consoles from a
programmer's perspective. Emulators for many old machines can be found at the
Emulator Zone.


THE FUTURE (RESOURCES)

Our still image from Claybook doesn't capture its dynamic nature, so check out
the preview.

GPUs have improving in speed faster than Moore's Law, and this brief article
summarizes some reasons why.

For a glimpse at what goes into a AAA title game, this short (and old, 2013, but
worthwhile) video shows some of the many elements involved.

Inspired to go write some code? Consider studying the Unreal Engine (some free
assets) or Unity, each for free.

Almost last mention: don't forget our portal for a list of some of the best
resources.


COLLISION DETECTION

The Physics Simulation Forum has many threads about collision detection and
physical simulation.

One related hardware product is NVIDIA's PhysX processor (they purchased Ageia),
a dedicated physics action accelerator.

A number of free collision detection packages are available on the Web. These
include source, and most have limitations on commercial reuse:

 * Bullet Physics Library - library for performing rigid-body collision
   detection and response. Open source and free for commercial use, and is
   integrated with Blender.
 * SOLID - Software Library for Interference Detection. Now a commercial
   product, and GPL'ed with source.
 * ColDet - a free collision detection library for generic polyhedra.
 * Havok - a popular commercial library for games

Related to collision detection, Qhull implements the Quickhull algorithm for
finding convex hulls quickly. The Stony Brook Algorithm Repository has convex
hull and other code in its computational geometry section.


REAL-TIME RAY TRACING

See our Ray Tracing Resources page.


LINEAR ALGEBRA

The interactive Immersive Linear Algebra book is a great way to build up your
intuition on the geometric interpretation of various operators and elements.

Flipcode has a 3D geometry primer online.

Wolfram MathWorld is an incredible resource for (sometimes dense) mathematical
definitions. You can find a collection of math-related definitions at Cut the
Knot.

Christer Ericson has a nice presentation on the scalar triple product, a way to
compare the orientation of one line compared to another. He also has a followup
article.

Maxima is a symbolic computation program, like Mathematica and Maple: you define
equations and can easily combine them, integrate, take the derivative, etc.
Maxima is GNU source now, and free.


TRIGONOMETRY

Trig formulas, tables, and other mathematical reference material can be found at
Dave's Math Tables.


BIBLIOGRAPHY

You can access the bibliography of the book, with many of the articles having
hyperlinks.

One last mention: our portal is where we list all the best ways to find more
information, including Ke-Sen Huang's great conference article site.

 * Contacts:
 * Tomas
 * Eric
 * Naty