• Stars
    star
    1,048
  • Rank 43,968 (Top 0.9 %)
  • Language
  • License
    Creative Commons ...
  • Created almost 9 years ago
  • Updated over 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Curated list of computer graphics tutorials and resources

Computer Graphics Resources

This is a curated list of computer graphics tutorials and resources.

  • Formative papers in the field
  • Introductory resources / tutorials
  • Groundbreaking research / state-of-art techniques
  • Software packages and tools

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

## New to Computer Graphics?

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:

  • Data Structures and Algorithms
  • Numerical Optimization
  • Hardware and Systems
  • Distributed and High-Performance Computing
  • Robotics
  • Finite Element Methods
  • Fluid Dynamics
  • Machine Learning
  • Differential Geometry
  • Topology
  • Statistics
  • Optics
  • Signal Processing
  • Nuclear Fusion (!!)
  • Trigonometry (!!)

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.

## 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!

## Course Notes ## Textbooks ## Physically-based (Photorealistic) Rendering
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 Surveys ### 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.

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

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

### Bidirectional Path Tracing

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

  • Bidirectional Estimators for Light Transport Veach & Guibas. Proceedings of EGRW 1994.
  • [Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering] Lafortune. PhD Thesis, Katholieke Universiteit Leuven, February 1996.
### Metropolis Light Transport

MCMC sampling for light paths.

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

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

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

### Volume Rendering & Participating Media ### Light Capture

Much camera. Very science. Wow.

### Microfacet Models

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

### GPU

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

### Hybrid Strategies & Miscellaneous

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

## 3D Games

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

## Non-photorealistic Rendering
Paperman Waking Life Pixar 2013
## Shader Art

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
## Fluids and Simulation ## Differential Geometry ## Three Dimensional Displays

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

Iron Man 2 Halo
## Meshes ## Image-based Editing and Reconstruction ## Virtual Reality
Microsoft Hololens Wow
## Computational Photography

More Repositories

1

tdb

Interactive, node-by-node debugging and visualization for TensorFlow
JavaScript
1,357
star
2

cryptocurrency_arbitrage

Automated Trading program that detects pairwise and triangular arbitrage opportunities on altcoin/bitcoin exchanges
Python
819
star
3

draw

TensorFlow Implementation of "DRAW: A Recurrent Neural Network For Image Generation"
Python
525
star
4

gumbel-softmax

categorical variational autoencoder using the Gumbel-Softmax estimator
Jupyter Notebook
425
star
5

normalizing-flows-tutorial

Tutorial on normalizing flows.
Jupyter Notebook
293
star
6

genadv_tutorial

TensorFlow tutorial on Generative Adversarial Models
Jupyter Notebook
255
star
7

maml-jax

Implementation of Model-Agnostic Meta-Learning (MAML) in Jax
Jupyter Notebook
188
star
8

svd3

Fast singular value decomposition, diagonalization, QR decomposition of 3x3 matrices.
Mathematica
148
star
9

nf-jax

Normalizing Flows in Jax
Jupyter Notebook
105
star
10

pt-jax

Path Tracing in JAX
Jupyter Notebook
69
star
11

e2c

TensorFlow impementation of: Embed to Control: A Locally Linear Latent Dynamics Model for Control from Raw Images
Python
65
star
12

RNN-dynamics

Code and report for APMA136 Final Project
MATLAB
19
star
13

pptx-export-notes

Exports plaintext speaker notes from Microsoft Powerpoint .pptx files
Python
19
star
14

variance_reduction

Implementation of Variance Reduction Techniques in Julia
Jupyter Notebook
11
star
15

graphjs

Mathematical Graph representation in JavaScript
CoffeeScript
6
star
16

pyN

Neuron(s)-based library in Python using numpy and Blender Game Engine.
Python
6
star
17

glsl-playground

Shadertoy-compatible fragment shader viewer.
C++
5
star
18

julia-NeuralNets

Spiking neural network simulator written in Julia.
Julia
5
star
19

NeuralNets

(Yet another) C++ Simulator for Neural Networks
C++
4
star
20

geneva

activation function inspired by the Geneva drive
Jupyter Notebook
4
star
21

Social-Docking

Metropolis Monte Carlo + General AMBER Force Field implemented in JavaScript
JavaScript
3
star
22

boxbot

C++ Framework for embodied cognition / robot simulation / reinforcement learning
C++
3
star
23

node-user-agents

Quick HTTP user agent headers for slightly-immoral-and-very-improper web scraping
JavaScript
3
star
24

chaos

Jupyter Notebook
3
star
25

Hanabi.jl

customizable game engine for Hanabi, written in Julia
Julia
3
star
26

adaptive-e2c

Capstone project (Brown University)
Python
2
star
27

discord_chatbot

text-based multiplayer discord game
Python
1
star
28

cpu-render

Dumb CPU renderer for debugging shadertoy shaders
C++
1
star
29

aibook

ALife book.
HTML
1
star
30

java-graph

A simple graph class + dijkstra's
Java
1
star
31

graphjs_viz

Adds support for drawing in the graphjs library
1
star
32

ericjang.github.io

HTML
1
star
33

google-scrubber

Command-Line Utility for Scraping Google Data
1
star
34

DockJS

Molecular Docking framework built on top of ChemJS
JavaScript
1
star