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