Real Time Rendering Pdf

Current Interests

This page is mostly about my professional interests, with some hobby bits interspersed. You can also check LinkedIn.

I recently worked on a series of seven short talks on the basics of ray tracing.

  • Real-Time 3D Rendering with DirectX and HLSL takes the approach of giving you a full understanding of what a modern rendering application consists of, from one end of the pipeline to the other.” —Joel Martinez, Software Engineer, Xamarin “This practical book will take you on a journey of developing a modern 3D rendering engine.
  • Plants are present in almost any type of interactive virtual environment like video games, movie pre-visualization or architectural or urban walkthroughs. The simulation complexity of plants increases with the evolution of graphics hardware, but rendering of plants still poses a lot of challenges. This is due to both the inherent geometric complexity of an individual tree having thousands of.

I'm a cochair for I3D 2020, sadly delayed this year.

A is the ray origin and B is the ray direction. The ray parameter t is a real number (float in the code). Plug in a different t and p ( t) moves the point along the ray. Add in negative t a nd you can go anywhere on the 3D line. For positive t, you get only the parts in front of A, and this. A real-time computer-generated integral imaging (CGII) display rendering method based on depth-image-based multiple reference viewpoints (MDIBR) is presented, and good three-dimensional (3D) image quality with the high frame rate can be achieved. The traditional rasterization pipeline and 3D image warping are used to accelerate CGII, and the proposed method is suitable for dynamic and complex.

I am a co-editor for the book Ray Tracing Gems, released in March 2019. On that site we provide an unofficial version of the free PDF version of the book, one with the errata corrected.

I helped coauthor Real-Time Rendering, now in its fourth edition, released in 2018. The book's site has and points to all sorts of resources.My portal page sums up what real-time computer graphics resources I use the most. There are also pages on ray tracing and WebGL resources.I maintain the 3D Object Intersection Page, a handy table of references to algorithms for object/object intersection, and the obscure and entertaining (IMO) Real Artifacts collection. Oh, and a free graphics books list, a recent graphics books list, and a recommended graphics books list.

I created and narrated Udacity's free course 'Interactive 3D Graphics'; read more about it here. The site is starting to decay, so this page can help you get going. If you don't like video instruction, you can instead download the 800+ pages of text making up the course.

I'm a founder and editor of the free & open-access Journal of Computer Graphics Techniques (JCGT), the successor to the Journal of Graphics Tools (JGT).

I maintain the Graphics Gems, Journal of Graphics Tools, and Ray Tracing Gems code repositories.

I like Minecraft, and wrote Mineways, a model exporter for the game. Andrew Glassner and I collaborated on T2Z, a little art project using Processing. I also like to keep track of basic resources for 3D printing.

My various other public repositories are here, and includemodifiable illusions (see one here) and a simple, flexible tool for checking LaTeX and text files for errors.

I finally made a demo for the demoscene, which was fun to do. Fourth place, woo hoo, and about what it deserved.

I also have an ancient personal page with book and game recommendations, plus wildflower, tree, and bird identification programs. The wildflower program in particular is surprisingly popular.

People I'm not: the comedian/one-man-band/juggler/stilt-walker, the Nashville songwriter who penned 'Moonshine Margaritas' and other tunes, the photographer, and the karma-filled Unity developer eric5h5, to name a few.

This is the main resources page for the book Real-TimeRendering, Fourth Edition, byTomas Akenine-Möller,Eric Haines,Naty Hoffman,Angelo Pesce,Michał Iwanicki, andSé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.

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

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ł, andSébastien.
  • The bibliography of the book, with hyperlinkedresources (the ThirdSecond, and First Edition bibliographies are also available).
  • The book correctionsarea (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-timecomputer graphics; we would appreciate your comments.
  • The object/object intersectionpage 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 25 Collision Detection (download chapter)
  • Chapter 26 Real-Time Ray Tracing (download chapter)
  • Linear Algebra (download chapter)
  • Trigonometry (download chapter)
  • Bibliography (page link)


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.

Ray Tracing Gems, edited by Eric Haines and Tomas Akenine-Möller, Apress, March 2019 (Book's website, publisher's page, Amazon).
Physically Based Rendering, Third Edition: from Theory to Implementation, by Matt Pharr, Wenzel Jakob, and Greg Humphreys, Morgan Kaufmann, November 2016 (more information).
Ray Tracing in One Weekend, by Peter Shirley, January 2016 (Code, tweet, blog), download for free.
Ray Tracing: the Next Week, by Peter Shirley, March 2016 (Code, tweet, blog), download for free.
Ray Tracing: The Rest Of Your Life, by Peter Shirley, March 2016 (Code, tweet, blog), download 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).
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.
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.
ComputationalGeometry: 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. 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. An incredible book, and physics doesn't change (much), so despite the age this book is full of useful information.
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. 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 for free. 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.

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, andCryEngine, 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.


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').

Real Time Rendering Pdf Editor

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.

Auto-Tune Pro is the most advanced edition of Auto-Tune available. This professional plugin includes both Auto Mode, for real-time pitch correction, effects. Red Room Audio Cue Builders Cinematic Rhythms For Kontakt Free Download. Get notified about the best Cracked VSTs and Audio Sample libraries straight into your Inbox! Autotune free vst plugin.

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.


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.


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.

Real Time Rendering 4th Edition Pdf Download Free

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 higherprecision 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'ssite.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 Windowsand Linux. One notable tool provided is a static shader analyzer that gives performance estimates withoutneeding 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 integrateswith 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 interactionbetween 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 problemsand 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:

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.

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.

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 GameWorks 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, 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. Theseinclude 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 Libraryfor Interference Detection. Now a commercial product, and GPL'ed with source.
  • ColDet - a free collisiondetection 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.

Maximais 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.


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


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.