Home

Awesome

Computer Graphics Resources

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.

Contents

<a name="start" /> ## New to Computer Graphics?

Computer Graphics (CG) is a subfield of Computer Science pertaining to "making images with computers".

Fruits of computer graphics:

<img src="http://compass.xboxlive.com/assets/0f/eb/0feb7a56-f8c1-45e1-a412-a7edf8141f4e.jpg?n=Microsoft_Hololens_1200x630.jpg" /><img src="http://www.grg.org/images/BrainWhiteMatter.jpg"/><img src="http://www.deskeng.com/de/wp-content/uploads/2014/06/Fig3_Dassault_driving_620.jpg"/><img src="http://cdn1.sciencefiction.com/wp-content/uploads/2015/05/Star-Wars-Jar-Jar-Binks-banner.png" />
Virtual RealityDiffusion Tensor ImagingAutomotive DesignStar 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?

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

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

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

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

  5. Remember to have fun! There are no rules.

<a name="collections" /> ## Other Collections

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!

<a name="courses" /> ## Course Notes <a name="textbooks" /> ## Textbooks <a name="pbr" /> ## Physically-based (Photorealistic) Rendering
<img src="http://www.yiningkarlli.com/projects/takuarender/images/room.jpg" height="200px" /><img src="http://cgimg.s3.amazonaws.com/t/g01/554901/1191193_orig.jpg" height="200px" /><img src="http://www.studio-aiko.com/temp/classroom/daylight/classroom_daylight_cam05.jpg" height="200px" />
Takua Renderer by Karl LiThe Pianist, by Leticia ReinaldoClassroom 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.

<a name="pbr-survey" /> ### Overview and Surveys <a name="rt" /> ### Raytracing

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

<a name="pt" /> ### Vanilla Path Tracing

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

<a name="pm" /> ### Photon Mapping

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.

<a name="bpt" /> ### Bidirectional Path Tracing

Basic idea: combine eye->light tracing and light->eye tracing to increase convergence speed and reduce noise.

<a name="mlt" /> ### Metropolis Light Transport

MCMC sampling for light paths.

<a name="radiosity" /> ### Radiosity

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.

<a name="is" /> ### Importance Sampling

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.

<a name="bsdf" /> ### BRDF/BSDF/BSSRDF

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.

<a name="vol" /> ### Volume Rendering & Participating Media <a name="lf" /> ### Light Capture

Much camera. Very science. Wow.

<a name="mf" /> ### Microfacet Models

Typically used to render high-frequency spatial information, like the knitting of cloth or the imperfections of skin.

<a name="gpu" /> ### GPU

TLDR: GPUs make everything better. But they are hard to program.

<a name="misc" /> ### Hybrid Strategies & Miscellaneous

Modern and proprietary commercial renderers probably implement a combination of techniques (like MLT + BPT + PT or MLT + Photon Mapping + Radiosity).

<a name="games" /> ## 3D Games

See Ke-Sen Huang's paper collection of i3d papers (Symposium on Interactive 3D Graphics and Games).

<a name="npr" /> ## Non-photorealistic Rendering
<img src="http://chrisoatley.com/wp-content/uploads/2013/02/PapermanFeature.jpg" height="120px" /><img src="https://cynicritics.files.wordpress.com/2013/09/waking-life-800-75.jpg" height="120px" /><img src="http://i.imgur.com/sC50qNf.png" height="120px"/>
PapermanWaking LifePixar 2013
<a name="shaders" /> ## Shader Art

Turns out you can do quite a lot of graphics using only a quad and an OpenGL fragment shader.

<img src="http://blog.hvidtfeldts.net/media/pt2.jpg" height="200px" /><img src="https://pbs.twimg.com/media/CWLz8htUsAAxQ-u.png:large" height="200px"/>
Path tracing fractals by Mikael Hvidtfeldt ChristensenArlo ... in a fragment shader by Inigo Quilez
<a name="sim" /> ## Fluids and Simulation <a name="geo" /> ## Differential Geometry <img src="http://brickisland.net/cs177fa12/wp-content/uploads/2012/10/ddg_differential.svg" height="200px" /> <a name="3d-display" /> ## Three Dimensional Displays

Another dream of computer graphics:Iron-Man -styled Holograms.

<img src="http://images.bwbx.io/cms/2012-08-07/0807_apple_630x420.jpg" height="200px" /><img src="http://cdn2.gamefront.com/wp-content/uploads/2012/11/h4-17.jpg" height="200px" />
Iron Man 2Halo
<a name="mesh" /> ## Meshes <a name="image" /> ## Image-based Editing and Reconstruction <a name="vr" /> ## Virtual Reality
<img src="http://o.aolcdn.com/hss/storage/midas/c0f52e59f1fee11b8834dc761b599598/202256278/microsoft-hololens-medical-studies.jpg" height="200px"/><img src="https://i.ytimg.com/vi/asduqdRizqs/maxresdefault.jpg" height="200px"/>
Microsoft HololensWow
<a name="photo" /> ## Computational Photography