Curated list of computer graphics tutorials and resources
1,120
9 commits
updated Feb 29, 2020
This is a curated list of computer graphics tutorials and resources.
This document is a work in progress - some sections have received a lot less love than others and I intend to correct that.
Please suggest papers/articles/resources through Github pull requests. If you believe this list is missing something or has factually inaccurate info, you can also file an issue in the issue tracker.
Computer Graphics (CG) is a subfield of Computer Science pertaining to "making images with computers".
Fruits of computer graphics:
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Virtual Reality | Diffusion Tensor Imaging | Automotive Design | Star Wars |
CG is ubiquitous and highly interdisciplinary; producing just 5 seconds of a Pixar film will utilize techniques from these areas of computer science and mathematics:
Exciting stuff. But if you're just getting started, this list can be overwhelming! Where to begin?
Make sure you have an introductory background in basic programming, algorithms, and data structures (such as a semester-long introductory CS course). Brush up on your trigonometry (sines, cosines, triangles, projection of vectors and planes).
You can play with computer graphics in whatever language you are most comfortable with. Processing or Three.js (JavaScript) are the most painless languages to get your hands dirty with graphics. If you come from an artistic background, many familiar tools (Maya, Photoshop, Houdini) have scripting interfaces that let you build things procedurally.
Spend some time learning tools for CG artists (e.g. Maya, Houdini, Photoshop, Blender, ZBrush). Play some Halo 5 and admire how much geometry is in the scene. These will give you a strong intuition of the capabilities and limitations of CG today.
Textbooks and notes from university-level graphics courses are a good resource for learning more math-heavy concepts like physically-based rendering and geometry processing.
Remember to have fun! There are no rules.
Many items in the list shown here were consolidated from other reading lists, maintained by people who know a lot more graphics than I do. Please check them out!
![]() | ![]() | ![]() |
|---|---|---|
| Takua Renderer by Karl Li | The Pianist, by Leticia Reinaldo | Classroom Scene by Meny Hilsenrad |
Since Jim Kajiya's 1986 paper on "The Rendering Equation", the vast majority of renderers compute images by simulating the physics of light transport in the scene. Within Physically-based Rendering (PBR), there are 2 open challenges: (1) Render as accurately as possible, and (2) Render as fast as possible
PBR is sometimes used interchangeably with "Global Illumination" in literature, since light scattering is coupled to the shading model. In the end, pictures are made by photons moving into a camera, and nothing more.
### Overview and SurveysBefore physically-based rendering theory was developed, 3D rendering was mostly a big bag of tricks that was raytracing. However, raytracing is still widely used today in production films and games, so it's still important to understand.
### Vanilla Path TracingWe want to estimate the path integral of irradiance arriving at the sensor (eye) in the scene. In a (basic) path tracer, we sample paths by tracing them from the eye into the scene. A sampled path has nonzero radiance if it eventually touches an emitter.
Path tracers converge slowly if the light source is small. Instead, we trace paths from the light source into the scene, and store where photons land. Then, we can use a naive raytracer to simply "gather" these photons at render time. At the expense of extra storage, it's easy to do realtime dynamic viewpoints.
Basic idea: combine eye->light tracing and light->eye tracing to increase convergence speed and reduce noise.
MCMC sampling for light paths.
Similar to photon mapping. Light paths from the light sources are constructed, and hits are converted into point lights (VPLs). Then do multiple passes of raytracing and accumulate contributions from these point lights.
When doing Monte Carlo integration, samples with value 0 are wasted computation. Instead, we want to use what we know about the scene to only sample nonzero path integral samples. There are lots of options - we can importance sample in image-gradient-domain, the BSDF, and even the light field g=L(x) itself.
Different materials (metal, wood, skin, leggings) interact with light in different ways due to material properties and geometric differences at a microscopic level. Shading models attempt to capture these behaviors across different materials.
Much camera. Very science. Wow.
Typically used to render high-frequency spatial information, like the knitting of cloth or the imperfections of skin.
Microfacet Models for Refraction through Rough Surfaces. Walter et al. Eurographics Symposium on Rendering 2007.
Building Volumetric Appearance Models of Fabric using Micro CT Imaging. Zhao et al. ACM Transactions on Graphics (SIGGRAPH 2011).
Structure-aware Synthesis for Predictive Woven Fabric Appearance. Zhao eet al. SIGGRAPH 2012.
Efficient Rendering of Human Skin. d'Eon et al. Eurographics Symposium on Rendering 2007.
TLDR: GPUs make everything better. But they are hard to program.
Modern and proprietary commercial renderers probably implement a combination of techniques (like MLT + BPT + PT or MLT + Photon Mapping + Radiosity).
See Ke-Sen Huang's paper collection of i3d papers (Symposium on Interactive 3D Graphics and Games).
![]() | ![]() | ![]() |
|---|---|---|
| Paperman | Waking Life | Pixar 2013 |
Turns out you can do quite a lot of graphics using only a quad and an OpenGL fragment shader.
![]() | ![]() |
|---|---|
| Path tracing fractals by Mikael Hvidtfeldt Christensen | Arlo ... in a fragment shader by Inigo Quilez |
Another dream of computer graphics:Iron-Man -styled Holograms.
![]() | ![]() |
|---|---|
| Iron Man 2 | Halo |
![]() | ![]() |
|---|---|
| Microsoft Hololens | Wow |
123 followers · starred Aug 2017
309 followers · starred Apr 2017
26 followers · starred Oct 2018
78 followers · starred May 2017
Curated list of computer graphics tutorials and resources
1,120
9 commits
updated Feb 29, 2020
This is a curated list of computer graphics tutorials and resources.
This document is a work in progress - some sections have received a lot less love than others and I intend to correct that.
Please suggest papers/articles/resources through Github pull requests. If you believe this list is missing something or has factually inaccurate info, you can also file an issue in the issue tracker.
Computer Graphics (CG) is a subfield of Computer Science pertaining to "making images with computers".
Fruits of computer graphics:
![]() | ![]() | ![]() | ![]() |
|---|---|---|---|
| Virtual Reality | Diffusion Tensor Imaging | Automotive Design | Star Wars |
CG is ubiquitous and highly interdisciplinary; producing just 5 seconds of a Pixar film will utilize techniques from these areas of computer science and mathematics:
Exciting stuff. But if you're just getting started, this list can be overwhelming! Where to begin?
Make sure you have an introductory background in basic programming, algorithms, and data structures (such as a semester-long introductory CS course). Brush up on your trigonometry (sines, cosines, triangles, projection of vectors and planes).
You can play with computer graphics in whatever language you are most comfortable with. Processing or Three.js (JavaScript) are the most painless languages to get your hands dirty with graphics. If you come from an artistic background, many familiar tools (Maya, Photoshop, Houdini) have scripting interfaces that let you build things procedurally.
Spend some time learning tools for CG artists (e.g. Maya, Houdini, Photoshop, Blender, ZBrush). Play some Halo 5 and admire how much geometry is in the scene. These will give you a strong intuition of the capabilities and limitations of CG today.
Textbooks and notes from university-level graphics courses are a good resource for learning more math-heavy concepts like physically-based rendering and geometry processing.
Remember to have fun! There are no rules.
Many items in the list shown here were consolidated from other reading lists, maintained by people who know a lot more graphics than I do. Please check them out!
![]() | ![]() | ![]() |
|---|---|---|
| Takua Renderer by Karl Li | The Pianist, by Leticia Reinaldo | Classroom Scene by Meny Hilsenrad |
Since Jim Kajiya's 1986 paper on "The Rendering Equation", the vast majority of renderers compute images by simulating the physics of light transport in the scene. Within Physically-based Rendering (PBR), there are 2 open challenges: (1) Render as accurately as possible, and (2) Render as fast as possible
PBR is sometimes used interchangeably with "Global Illumination" in literature, since light scattering is coupled to the shading model. In the end, pictures are made by photons moving into a camera, and nothing more.
### Overview and SurveysBefore physically-based rendering theory was developed, 3D rendering was mostly a big bag of tricks that was raytracing. However, raytracing is still widely used today in production films and games, so it's still important to understand.
### Vanilla Path TracingWe want to estimate the path integral of irradiance arriving at the sensor (eye) in the scene. In a (basic) path tracer, we sample paths by tracing them from the eye into the scene. A sampled path has nonzero radiance if it eventually touches an emitter.
Path tracers converge slowly if the light source is small. Instead, we trace paths from the light source into the scene, and store where photons land. Then, we can use a naive raytracer to simply "gather" these photons at render time. At the expense of extra storage, it's easy to do realtime dynamic viewpoints.
Basic idea: combine eye->light tracing and light->eye tracing to increase convergence speed and reduce noise.
MCMC sampling for light paths.
Similar to photon mapping. Light paths from the light sources are constructed, and hits are converted into point lights (VPLs). Then do multiple passes of raytracing and accumulate contributions from these point lights.
When doing Monte Carlo integration, samples with value 0 are wasted computation. Instead, we want to use what we know about the scene to only sample nonzero path integral samples. There are lots of options - we can importance sample in image-gradient-domain, the BSDF, and even the light field g=L(x) itself.
Different materials (metal, wood, skin, leggings) interact with light in different ways due to material properties and geometric differences at a microscopic level. Shading models attempt to capture these behaviors across different materials.
Much camera. Very science. Wow.
Typically used to render high-frequency spatial information, like the knitting of cloth or the imperfections of skin.
Microfacet Models for Refraction through Rough Surfaces. Walter et al. Eurographics Symposium on Rendering 2007.
Building Volumetric Appearance Models of Fabric using Micro CT Imaging. Zhao et al. ACM Transactions on Graphics (SIGGRAPH 2011).
Structure-aware Synthesis for Predictive Woven Fabric Appearance. Zhao eet al. SIGGRAPH 2012.
Efficient Rendering of Human Skin. d'Eon et al. Eurographics Symposium on Rendering 2007.
TLDR: GPUs make everything better. But they are hard to program.
Modern and proprietary commercial renderers probably implement a combination of techniques (like MLT + BPT + PT or MLT + Photon Mapping + Radiosity).
See Ke-Sen Huang's paper collection of i3d papers (Symposium on Interactive 3D Graphics and Games).
![]() | ![]() | ![]() |
|---|---|---|
| Paperman | Waking Life | Pixar 2013 |
Turns out you can do quite a lot of graphics using only a quad and an OpenGL fragment shader.
![]() | ![]() |
|---|---|
| Path tracing fractals by Mikael Hvidtfeldt Christensen | Arlo ... in a fragment shader by Inigo Quilez |
Another dream of computer graphics:Iron-Man -styled Holograms.
![]() | ![]() |
|---|---|
| Iron Man 2 | Halo |
![]() | ![]() |
|---|---|
| Microsoft Hololens | Wow |
123 followers · starred Aug 2017
309 followers · starred Apr 2017
26 followers · starred Oct 2018
78 followers · starred May 2017