(Deprecated) Real-Time Rendering Resources | ||||||||||||||||||||

Other pages and resources hosted here: - A
**blog**(and its About page) containing new information we think is worthwhile. - A
**Portal Page**for the best real-time web resources. - The
**book corrections**area (for all editions). - 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. - An
**archive of most of the figures**from the third edition, provided for Fair Use. Read the README for more details. - Tomas'
**Powerpoint Slides**for a semester's course derived from the second edition of book. A bit dated in spots, but useful as a place to start. - The
**Bibliography**of the book, with hyperlinked resources (the First Edition and Second Edition bibliographies are also available). - Older resources: A Google map of the top 20 game publishers of 2006 (really, gamedevmap is more useful now), and the Fantasy Graphics League results.
- The 2nd Edition resources page has been kept around just in case. This page is no longer maintained, so expect dead links and stale information. That said, there are some articles linked that we no longer link to here, since we have added the material to our book.
## Introduction and OverviewThe rest of this page is dedicated to providing information related to the book's contents: new techniques, worthwhile websites, etc. After coverage of books and graphics APIs, the page is organized into categories based on the book. We also have a portal page that is an extremely condensed set of some of the best links available; we won't repeat these here (much). What follows are categories for resources. All information is included on this single page, for ease of searching. - Introduction
- Books Online
- DirectX
- OpenGL
- The Graphics Rendering Pipeline
- The Graphics Processing Unit
- Transforms
- Visual Appearance
- Texturing
- Advanced Shading
- Area and Environmental Lighting
- Global Illumination
- Image-Based Effects
- Non-Photorealistic Rendering
- Polygonal Techniques
- Curves and Curved Surfaces
- Acceleration Algorithms
- Pipeline Optimization
- Intersection Test Methods
- Collision Detection
- Graphics Hardware
- The Future
- Linear Algebra
- Trigonometry
- Bibliography
## Books OnlineSee ourgraphics book list for upcoming, recent, and recommended books.
What follows are books that are
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. ## DirectXMicrosoft owns DirectX. Download the DirectX SDK for documentation and a large set of demos with sample code. Microsoft also provides many articles relevant to using DirectX effectively. Related to DirectX, XNA is for the XBox 360, for both hobbyists and professionals. The newsgroups to read are microsoft.public.win32.programmer.directx.graphics and microsoft.public.win32.programmer.directx.graphics.shaders. Microsoft's DirectX blog provides news and useful information about related Windows technologies. NVIDIA and AMD each have a large number of presentations about using DirectX. NVIDIA's are categorized by DirectX 9 and DirectX 10; search around for newer stuff. Tom Forsyth's little FAQ on DirectX is more about performance than usage, but can still be helpful. A DirectX 9.0 reference poster is useful for getting a detailed overview of the pipeline in one figure. There are some simple code examples for DirectX 9.0 and OpenGL at CodeSampler.com. More involved samples are at Humus-3D. Chris Dragan maintains a Direct3D and OpenGL extension capabilities database. ## OpenGLThe best source for OpenGL information is OpenGL.org. The latest OpenGL specification lives there, as well as a 3rd party OpenGL SDK. A handy resource is online documentation. An old version of the Red Book is available online. A good way to learn OpenGL is to use it; Nate Robins's tutorials are an excellent starting place. TyphoonLabs has some tutorial chapters on OpenGL and OpenGL ES, as well as code samples. Another good set of OpenGL tutorials can be found on Neon Helium's site. More involved samples are at Humus-3D. There's also a short OpenGL Win32 tutorial. One more: an introductory GLSL tutorial. A list of all OpenGL extensions is maintained at OpenGL.org. The GLEW library is an open source project which helps with the use of OpenGL extensions. Simon Green explains the useful FrameBuffer Object extension for rendering to texture. NVIDIA's extensions and a huge amount of other OpenGL related information is available at their site. Mark Kilgard's GLUT (GL Utilities Toolkit) is another good way to try out and experiment with code for many advanced features in OpenGL, and provides a basic platform independent windowing API for OpenGL. See this GLUT Tutorial. A newer version of GLUT is on SourceForge, called freeglut. There are a number of other toolkits available. For example, GLUI is an interface library built on top of GLUT, for making user interface buttons, checkboxes, arcballs, etc. The Fast Light Toolkit is a GUI toolkit that has GLUT emulation. Opengl.org hosts a number of useful OpenGL FAQs. AMD's GPUOpen site has some resources for developers. To see what makes OpenGL tick, take a look at Mesa or . The OpenGL newsgroup is comp.graphics.api.opengl. An old mailing list for OpenGL game developers can be worth a search. This site has useful tips and pointers to resources for debugging OpenGL GLSL shaders. OpenGL can be called from a number of languages other than C, such as Java via GL4Java, Perl via POGL or , Python via PyOpenGL. OpenGL ES is the standard way to use OpenGL on smaller devices. ## WebGLWe've made a whole separate page of WebGL resources.## VulkanVulkan is the next incarnation of OpenGL. Khronos has a good page of resources.## The Graphics Rendering PipelineTime for some ancient technologies to start off; you can probably port these to your thermostat at this point. 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. 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 and running code is super-fast and fun. Open Scene Graph is a free, open source scene graph system. Irrlicht, OGRE, and sauerbraten are open source 3D games engines with some popularity. The well-known (though unchanged since 2003) Open Inventor scene graph system is now open source. Coin is an open source retained mode scene graph library based on Open Inventor. An ancient article on pure CPU-side rendering, with its tricks and pitfalls, is presented by Charles Bloom. SwiftShader is a product that does DirectX 9.0 and OpenGL ES rendering on the CPU. Of course, one of the best game engines is Excel. ## The Graphics Processing UnitThe Humus 3D site has some excellent sample programs that show advanced techniques. ## TransformsImmersive Linear Algebra is a free interactive book on linear algebra, coauthored by one of the authors of Wolfire's blog has a very 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. Code for rotating from one vector to another rapidly using quaternions (as described in our book) is available online from Tomas. Animats has a C++ version of the speedy and useful Doué's Graphics Gems vector manipulation classes (another way to manipulate vectors is Hollasch's vector macros). The Portable Game Library includes code for a Simple Geometry library. Dual quaternion skinning offers improved quality at relatively little additional cost. An old-but-free Maya plugin is 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. ## Visual AppearanceHere 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. 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. 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. and the Humus 3D site each have sample code for using stencil routing to provide order-independent transparency. Poynton's web site talks about gamma correction and color spaces. Chris Cox also has a useful page, with links to many resources. 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 ## TexturingGamasutra has a old but informative article on the theory behind mipmapping. S3TC texture compression has become 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. 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. Humus has some textures available for experimentation. We mention this overview in the book, and it's worth another mention here: an old but thorough survey of displacement mapping techniques. Just because a paper is ancient does not mean it's dated - math doesn't rot. Heckbert has written a worthwhile ATI has an old program called MeshMapper which generates normal, displacement, and ambient occlusion maps from a low and high resolution model. Megatexturing is something id has been promoting, but with little technical description. An implementation that appears similar is now available. ## Advanced ShadingThe Advances in Real-Time Rendering SIGGRAPH course notes for the past few years are available for download. Stephen Hill's blog is an great guide to SIGGRAPH courses and other resources. 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. contains much solid information on the topic. 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 and this on chromaticity diagrams. Color spectra data for acrylic paints 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. 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. ## Area and Environmental LightingA 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. Humus has a large set of cube maps available for experimentation. ## Global IlluminationPhil Dutre's Global Illumination Compendium, mentioned in "Further Resources", has much useful information on BRDFs and other facets global illumination theory. Andrew Lauritzen gives some further details on variant schemes for variance shadow maps, along with a demo. GPGPU.org is a worthwhile site for information on using GPUs for general purpose computation. 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. Embree and OptiX are two well-known interactive ray tracing systems for building renderers. ## Image-Based EffectsHumus has a large number of cube maps licensed under Creative Commons. The IVRPA is a good place to see panorama images and learn about how to make them. 360 Cities also has panoramas. High dynamic range environment map image data is available at Paul Debevec's site, along with 8 bit/channel spherical map images. His HDRShop program is useful for creating and manipulating environment maps of different types (including the ability to make irradiance maps); free for non-commercial use. The HDR Labs site provides free high-resolution sIBL-format environments, a new one each month. Michael Herf has Photoshop plugins for more artistic blurs and Fresnel effects. HDR is covered in the DirectX SDK, among other places, but here's one more old-but-fine article. 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. For volume rendering software, look at the ACM TOG software page for some leads. One programmer has gone so far as to represent entire scenes with opaque voxels, ray-casting with CUDA to render. If you want to know just a bit about volume rendering, Kyle Hayward's 101 and 102 tutorials are worth a look. ## Non-Photorealistic RenderingSee the Non-Photorealistic Animation and Rendering Proceedings for the latest on NPR research. The 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 TechniquesMeshLab 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. See our portal page for more sources. 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. Gavin Bell describes a bit more about how to get the normals to point outwards, along with sample code. GTS is an 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 SurfacesGabe Kruger's tutorial on Bézier spline surfaces is a practical introduction to these surfaces, as is Mark DeLoura's article on bicubic Bézier surfaces and on Hermites and Béziers. Using Google, you can find any number of course notes about the mathematics of curves, such as Ching-Kuang Shene's. Brian Sharp has two excellent introductory articles on subdivision surfaces: one on the theory, another on implementation. SIGGRAPH course notes for subdivision surfaces are available on the web. The NYU MRL site has a subdivision surfaces page with many resources and links. Paul Baker has a demonstration program with source that tessellates and renders metaballs. We do not cover NURBS in our book, but these are important in CAD. Dean Macri has an article on using NURBS in real-time applications at .
The source code for the book A short history discusses the most famous spline surface model, the Utah Teapot; that one of us made; a program to generate it is available for download. ## Acceleration AlgorithmsThe book Level of Detail for 3D Graphics covers many aspects of level of detail algorithms in depth. This book has a companion web site. Michael Abrash's ancient Graphics Programming Black Book is free on the web. If you want to know about practical polygon-plane based BSP splitting, this is where to start (chapter 59 on). Michael has additional quake notes available. Some excellent examples of LOD popping in games are available; move your mouse in and out of each image to see the effect. Vincent Scheib describes how to implement a display list system for DirectX 9 and 10, a technique that can provide large performance gains on multicore systems. Source code and a demo for the point rendering system QSplat is available for download. Potree is a great open-source point cloud rendering system with a number of worthwhile features. ## Pipeline OptimizationNVIDIA provides the Nsight performance toolset and other related tools. Intel's VTune is a well-known CPU-side inner loop optimization tool. For Linux, Valgrind is a popular suite of profiler and debugging tools. AQTime is one of the better general code profilers available. Boost provides optimized (in most cases) libraries for common data structures. Tom Forsyth gives his view on renderstate change costs (search "Renderstate change costs"). 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 article is a good start as to why this is now so. One tool for programming in parallel is . Michael Abrash has an old series of articles (first, second, third) on optimizing a pure-CPU rasterizer. Admittedly a rare beast nowadays, but these articles has worthwhile lessons to impart about the optimization process in general. ## Intersection TestingWe 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 ## Collision DetectionThe Physics Simulation Forum has many threads about collision detection and physical simulation. One related hardware product is (they purchased Ageia), a dedicated physics action accelerator. - Bullet Physics Library - library for performing rigid-body collision detection and response. Open source and free for commercial use, and is integrated with Blender and COLLADA. video
- SOLID - Software Library for Interference Detection. Now a commercial product, and GPL'ed with source available.
- V-clip - a low level object collision library.
- OPCODE - more memory-friendly and often faster than SOLID and RAPID, free for reuse in any application.
- ODE - a free rigid body dynamics package which includes collision detection.
- 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. As a simple introduction, Collision detection and response for spheres is discussed by van den Heuvel and Jackson. ## Graphics HardwareWikipedia has some excellent articles on hardware-related topics, such as this one on color depth. 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. 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. Ars Technica sometimes covers GPU architectures. Their Paedia area is a good place to start. 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. Of course, 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. Chris Hecker has written extensively on perspective correct texture mapping. Some reverse engineering has been done on the G80 to see what really happens with various processing units. Not surprisingly, if you do pathological rendering, parallelism is destroyed. An excellent resource on graphics hardware architectures is the course notes for the Beyond Programmable Shading course at SIGGRAPH. gives some information about each. One popular gaming benchmark (though not updated for awhile now) is - it also has some fun eye-candy. 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. FurMark is an OpenGL stress test. GPU Caps Viewer also provides hardware information, including CUDA capabilities. 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)Last mention: don't forget our portal for a list of some of the best resources. Steve Hollasch has distilled much of the combined worthwhile postings of the early USENET graphics community. Scene.org is all about the Demo Scene, where people make small programs chock-full of special effects; it's "under construction" but has some good links. Pouët lists demos worth seeing. Have you read our book cover to cover? You can test your knowledge with the five questions in Eric's talk. ## Linear AlgebraFlipcode has a 3D geometry primer online. Eric Weisstein's World of Mathematics is an incredible resource for (sometimes dense) mathematical definitions. You can find a collection of math-related definitions at Cut the Knot. Macsyma is free at last. It's now called Maxima. 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 is cheap. 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. ## TrigonometryTrig formulas, tables, and other mathematical reference material can be found at . ## BibliographyNo, really the last mention: our portal is where we list all the best ways to find more information. |
||||||||||||||||||||