A collection of references written by course instructors.
Luther Tychonievich began creating these in 2006 when a teaching
assistant for a computer graphics course at BYU based on observations of
content that was missing or poorly explained in that course’s textbook,
and updated and added to that many times over the years. Because of that
history, they vary widely in writing style and level of detail.
The pages are listed below in no particular order.
- Aliasing, two interpretations of rasters
and the problems with both.
- Types of Graphics APIs, common API
designs and names for them, some common and some invented for the
purpose of this text.
- Bézier curves, a brief introduction to how
to evaluate them using de Casteljau’s algorithm.
- Bones, how to create points-at matrices and
quaternions.
- Using video memory, achieving faster
drawing through buffers of bytes.
- Bounding Volume Hierarchies,.
- The CFL Conditions, why large time-steps can
make simulations blow up.
- Clipping, removing off-screen geometry,
avoiding divide-by-zero, and using depth buffer bits well via frustum
clipping.
- Color, as seen by eyes, projected on
screens, and stored in sRGB and YCbCr.
- Conjugate Gradient for
Differential Equations, an overview of the approach and pseudocode
for the solver.
- Handling CORS errors, a practical guide to
running webgl locally.
- DDA (and Bresenham), implementing the
rasterization of lines and triangles.
- Deferred Shading, using more memory to
reduce time needed for fancy lighting effects.
- Our Dialect of WebGL2, some choices
CS 418 makes for you, and why they are not always the right ones.
- Burley’s Principled BRDF, an
empirically-backed artist-focussed material model with wide-spread
adoption.
- Dithering, fooling the eye into thinking
we have more colors displayed than we do.
- Hydraulic Erosion, two methods for making
weathered terrain.
- Example WebGL2 traces explained,
sequences of gl calls created by real programs, with commentary.
- Terrain via the faulting method, fault
computation for simple fractals.
- Finite Differences, an
efficient technique for evaluating polynomials on a grid.
- The Student, the Fish, and Agassiz, an essay
from 1879 with several points, including the value and process of
careful observation.
- Things your GPU doesn’t let you
program, WebGL 2’s fixed functionality, including the DDA algorithm
and common blending functions.
- Fractals, a class of
mathematically-defined geometries that look more
natural
than
most others.
- commonly-used
gl.
functions, with an informal description of what each
one does.
- Fluids on a Grid, the core ideas
behind Eulerian fluid simulation.
- Half-edge data structure, with notes on
implementation and how to implement triangle subdivision using it.
- Rasterizing Polynomial Curves,
how circles, parabolas, and so on can be drawn almost as easily as
lines.
- Integrating incident light, including
physically-based rendering, secondary ray generation as numerical
integration, and importance sampling.
Interactive
Graphics
,
contrasting rasterization and raytracing, with a nod to other
approaches.
- Three solvers, numerical
approaches to solving constraints, including linear equations.
- Parts of JavaScript We’ll Use,
assuming you know Java or C++ and are comfortable learning a language
from examples on your own.
- Keyframes, Bones, and Skinning, an
overview of how we animate articulated characters.
- Euler, RK, and PBD, common approaches to
simulating kinetic motion of particles.
- Linear interpolation, a common tool
throughout graphics.
- Lighting models, common BRDFs from
trivial heuristics to intricate physically-based model.
- Procedural creating geometry, grids,
subdivision, and deduplication.
- Math Review, vectors and matrices.
- Homogeneous Vectors and Transformations,
including definitions, terminology, and common operations.
- Minimal WebGL, what WebGL 2
accepts, what it requires, and how to get started.
- Streaming, Level of Detail, and Occlusion,
the quest for complexity-independent render times with constant visual
quality.
- Parsing OBJ Files, how to parse one of the
most common simple 3D model formats.
- Perpetually Obsolete, an observation
about every introductory graphics course everywhere.
- Other parts of the rasterization
process, viewprts, blending, culling, and multisampling.
- The Real-time Graphics Pipeline, an
outline of how data flows from 3D model to rendered frame.
- Particle Effects, simple
heuristic-based visual effects.
- WebGL’s Graphics Pipeline, a collapsible
top-down view of how 3D graphics with WebGL2 works.
- Projection, simulating depth and
perspective using w and z.
- Quaternions, their definition and use
in defining rotations in graphics.
- Raytracing, basic theory and algorithms of
ray intersections and discussion of generating secondary rays.
- Raytracers vs Rasterizers, an
analysis of speed and fitness to a purpose.
- Shadow maps, implementation guides for
the most common approach to adding shadows to interactive graphics.
- Visual Simulation, an overview
good-enough simulation techniques, including Eulerian and Lagrangian
methods.
- Smoothed Particle Hydrodynamics, simplified
to have as little math as I can get it.
- Using Textures, classes of texture use
common in rasterized 3D graphics.
- Textures in WebGL, the mechanics of
getting them set up and rendering.
- Two Paths to Pretty, heuristics put
computability first, simulations put emulating science first.
- Simplified PBR, an efficiently-computable
approximation of physically-based rendering from Unreal Engine 4 and
Disney.
- WebGL Geometry, several ways to
tell WebGL what shapes we want to display.