# ==Notes==
<p class="doc-sub">// a digital garden — expect seedlings</p>
This is the lower-friction companion to my [[Experiments/Index|experiment write-ups]]. It collects learning logs, reference pages, and half-formed thoughts about rendering, geometry, and typed languages. Some will grow into proper articles; most will stay small. That is the point.
## Start here
- [[Marching Cubes]] — the algorithm behind [[Raym - Interactive Terrain Generation with Marching Cubes|Raym]]
- [[From Brush Stroke to Mesh - Real-Time Voxel Terrain Editing in C|From brush stroke to mesh]] — how Raym turns an edit into a local mesh update
- [[Ray marching and SDFs]] — signed-distance geometry and sphere tracing
- [[Voxel rendering techniques]] — a map of the main ways to render voxel data
- [[OCaml - learning log]] — notes from exploring another strongly typed functional language
- [[How this site works]] — Obsidian Publish, the dithered distance field, and publishing guardrails
## Conventions
Each note carries a `status` in its frontmatter:
- `seedling` — a raw thought or fresh note. May be wrong, will change.
- `budding` — has some shape, still evolving.
- `evergreen` — stable reference I'd point someone to.
Cross-linking is encouraged. If you spot something broken, that's the garden being a garden.
## Index
### Languages
- [[OCaml - learning log]] — _seedling_ · notes and gotchas from picking up OCaml
- [[OCaml Modules vs Rust Traits vs Haskell Typeclasses]] — _seedling_ · three approaches to abstraction, compared without pretending they are equivalent
- [[Algebraic Effects in OCaml 5, From a Haskell and Rust Perspective]] — _seedling_ · effect handlers through two familiar points of reference
- [[GADTs Through a Small Typed Expression Evaluator]] — _seedling_ · making impossible evaluator states unrepresentable
- [[What Building an Interpreter Teaches About Type Design]] — _seedling_ · lessons from tokens, ASTs, values, and errors
- [[Functional Reactive Programming, Ten Years After Flappy Bird]] — _seedling_ · revisiting signals, events, and Yampa with a decade of hindsight
### Colophon
- [[How this site works]] — _evergreen_ · the Markdown, design, and publishing system behind this site
### 3D rendering — fundamentals
- [[Ray marching and SDFs]] — _budding_ · sphere tracing, signed distance functions, and the tricks that make them sing
- [[Physically Based Rendering]] — _seedling_ · microfacet BRDF, metal/dielectric split, IBL, linear colour
- [[Shadow mapping]] — _seedling_ · depth-texture shadows, biasing, CSM, PCF, PCSS
- [[Deferred vs forward rendering]] — _seedling_ · where shading happens and what it costs
- [[Spatial acceleration structures]] — _seedling_ · BVH, k-d tree, octree, uniform grid
- [[Normals for Implicit Surfaces]] — _seedling_ · triangle normals, field gradients, and what shading reveals
- [[Ray Picking Through the Rendering Pipeline]] — _seedling_ · unprojecting a cursor into a useful world-space ray
- [[Real-Time Anti-Aliasing - MSAA, FXAA, SMAA, and TAA]] — _seedling_ · four families of trade-offs for stable edges
### Voxels
- [[Voxel rendering techniques]] — _budding_ · survey of how voxel data gets to pixels
- [[Marching Cubes]] — _budding_ · the 1987 iso-surface classic
- [[Dual Contouring]] — _seedling_ · iso-surface extraction that keeps sharp features
- [[Sparse Voxel Octrees]] — _budding_ · compressing and ray-casting through octree worlds
- [[Designing Scalar Fields for Procedural Terrain]] — _seedling_ · composing terrain, caves, and edits as fields
- [[Seamless Chunked Voxel Terrain]] — _seedling_ · ownership, ghost samples, normals, and crack-free remeshing
- [[Transvoxel in Practice]] — _seedling_ · transition cells for mixed-resolution terrain
### Building Raym
- [[From Brush Stroke to Mesh - Real-Time Voxel Terrain Editing in C|From brush stroke to mesh]] — _seedling_ · ray hit, density edit, dirty chunks, remesh, upload
- [[Designing Scalar Fields for Procedural Terrain]] — _seedling_ · the data that exists before Marching Cubes sees a cell
- [[Seamless Chunked Voxel Terrain]] — _seedling_ · keeping independently rebuilt chunks continuous
- [[Marching Cubes on the GPU - Count, Scan, Emit]] — _seedling_ · variable-length mesh generation as a compute pipeline
- [[Normals for Implicit Surfaces]] — _seedling_ · choosing a normal that survives sculpting and lighting
- [[Transvoxel in Practice]] — _seedling_ · joining terrain chunks across LOD boundaries
### Graphics APIs
- [[OpenGL - learning log]] — _seedling_ · modern core-profile OpenGL, DSA, state-machine pitfalls
- [[Vulkan - learning log]] — _seedling_ · explicit pipelines, memory, synchronisation
- [[Compute shaders]] — _seedling_ · workgroups, shared memory, subgroup ops, where compute shines
- [[Raylib 3D rendering]] — _budding_ · raylib's 3D side — cameras, meshes, shaders, rlgl
- [[Marching Cubes on the GPU - Count, Scan, Emit]] — _seedling_ · count, prefix-scan, and compact triangle emission
- [[GPU-Driven Visibility for Large Worlds]] — _seedling_ · frustum, occlusion, compaction, and indirect draws
- [[Debugging Graphics Without Guessing]] — _seedling_ · validation, captures, debug views, and tiny reproducible scenes
### Rendering practice
- [[Ray Picking Through the Rendering Pipeline]] — turn a screen position into a world-space query
- [[GPU-Driven Visibility for Large Worlds]] — decide what is worth submitting before drawing it
- [[Real-Time Anti-Aliasing - MSAA, FXAA, SMAA, and TAA]] — understand where spatial and temporal approaches trade quality for cost
- [[Debugging Graphics Without Guessing]] — replace visual guesswork with captures and purpose-built views
## Guided paths
### Graphics lab
1. Start with [[Raym - Interactive Terrain Generation with Marching Cubes|Raym]].
2. Follow an edit through [[From Brush Stroke to Mesh - Real-Time Voxel Terrain Editing in C|the terrain editing loop]].
3. Build the field with [[Designing Scalar Fields for Procedural Terrain]], then extract it with [[Marching Cubes]], [[Dual Contouring]], or [[Ray marching and SDFs]].
4. Make chunks agree with [[Seamless Chunked Voxel Terrain]], [[Normals for Implicit Surfaces]], and [[Transvoxel in Practice]].
5. Add light with [[Physically Based Rendering]], [[Shadow mapping]], and [[Deferred vs forward rendering]], then tame edges with [[Real-Time Anti-Aliasing - MSAA, FXAA, SMAA, and TAA|real-time anti-aliasing]].
6. Move the work to the GPU with [[Compute shaders]], [[Marching Cubes on the GPU - Count, Scan, Emit|GPU Marching Cubes]], [[OpenGL - learning log|OpenGL]], and [[Vulkan - learning log|Vulkan]].
7. Scale the world with [[Spatial acceleration structures]], [[Sparse Voxel Octrees]], and [[GPU-Driven Visibility for Large Worlds|GPU-driven visibility]].
8. When the picture lies, reach for [[Debugging Graphics Without Guessing]].
### Typed languages lab
Start with the [[Monkey language interpreter made in Rust|Monkey interpreter]] and [[What Building an Interpreter Teaches About Type Design|its type-design lessons]]. Continue through the Haskell projects and the [[Functional Reactive Programming, Ten Years After Flappy Bird|FRP retrospective]], then follow the [[OCaml - learning log]], compare [[OCaml Modules vs Rust Traits vs Haskell Typeclasses|abstraction across three languages]], and finish with [[GADTs Through a Small Typed Expression Evaluator|GADTs]] and [[Algebraic Effects in OCaml 5, From a Haskell and Rust Perspective|effect handlers]].
---
Back to [[Home]] · explore [[Experiments/Index|Experiments]] · browse [[Reading]].