Theme Catppuccin
Make yourself at homeCatppuccin

A softer light for long learning sessions.

Appearance

Loading your preference…

Dark palette

Choose a dark palette to try it.

Light uses Latte. Your choices stay in this browser.

← All six courses

Volume 01 · 24 flexible weeks

First Light

A pixel becomes a world.

Bring your existing C++ knowledge into modern practice through ownership, value semantics, memory budgets, geometry, light, triangles, and shaders. Small experiments become one finished rendering study.

Open my weekly workbench ↗
THE PROJECT / The Light Cabinet
Where you’ll work

CPU · macOS & Linux

Hardware & toolchain notes ↗
Bring with you

Your earlier C++ experience. We teach modern ownership, values, errors, and lifetimes; no remembered CMake knowledge is assumed.

Your finish line

Explain one pixel from allocation to geometry to encoded color, and defend a tested personal extension.

Before week one: Build your studio — a complete CMake, Ninja & Clang primer ↗

Your sketchbook / 12 chapters

Two weeks per chapter: understand and build, then investigate and finish. Repeat any week.

01
First light ↗

Produce a tiny image and explain how coordinates become a sequence of color values.

This chapter’s project

Your own gradient or color-grid program, its PPM, and a note tracing one pixel from loop index to file values.

Weeks 1–2
02
Own the frame ↗

Distinguish owned image storage from borrowed views and explain cleanup without manual delete calls.

This chapter’s project

An owned image or color buffer with one borrowed-view operation, a mutation/copy test, and your ownership diagram.

Weeks 3–4
03
Vectors, then rays ↗

Use vector operations to explain a camera ray and the surface normal at an intersection.

This chapter’s project

Your own small vector tests and a ray/sphere sketch with one independently calculated hit or miss.

Weeks 5–6
04
A scene by design ↗

Construct an owned scene in C++ and separate representation, validation, and rendering effects.

This chapter’s project

Your own typed scene variation, one accepted boundary test, one rejected boundary test, and a written validation contract.

Weeks 7–8
05
Trace your first world ↗

Trace the native CPU renderer from validated scene through ray, hit, shading, and PPM output.

This chapter’s project

A scene image with one deliberate visual change, a pixel trace, and a new geometric regression test.

Weeks 9–10
06
Memory with a budget ↗

Use std::pmr to connect allocation policy, bounded scratch storage, failure, and container lifetime.

This chapter’s project

Your own PMR experiment variation, a failure test, and a diagram of storage, resource, borrowers, and promoted output.

Weeks 11–12
07
Shadows and second rays ↗

Explain visibility toward a light and design a bounded one-bounce reflection extension.

This chapter’s project

A controlled shadow comparison and your own one-bounce reflection extension, with an explicit work/depth limit and tests.

Weeks 13–14
08
Triangles on a grid ↗

Use edge functions and barycentric weights to explain the screen-space raster reference.

This chapter’s project

A changed two-triangle image, coverage tests for your edge convention, and a sketch explaining one sample’s barycentric weights.

Weeks 15–16
09
Camera, clipping, depth ↗

Explain the transformation pipeline, near-plane clipping, and per-sample visibility without conflating their roles.

This chapter’s project

Your own overlap/depth test plus a near-plane clipping sketch or implementation with documented input and output spaces.

Weeks 17–18
10
Attributes that stay attached ↗

Distinguish affine interpolation, perspective-correct attributes, sampling rules, and normal/color handling.

This chapter’s project

Your own textured-triangle extension or executable interpolation test with an affine/perspective comparison and defined sampler boundaries.

Weeks 19–20
11
Your first shader ↗

Modify a real WebGL2 fragment shader and connect its interface to the CPU rendering concepts.

This chapter’s project

Your own shader variation, the source diff, one screenshot, and a note connecting its inputs to the CPU triangle experiments.

Weeks 21–22
12
A renderer you can defend ↗

Produce an original, bounded rendering study with reproducible evidence and interview-ready reasoning.

This chapter’s project

Your own bounded renderer study with source, one reproducible scene, a short demo, tests, a debugging story, and a measured result.

Weeks 23–24

Keep your hands on the work

Read the source.
Change one decision.

The companion explains its build steps, tested behavior, and remaining learner work. Keep your own contribution clear as the project grows.