A semi-curated blog of computer graphics and rendering.
Of Shaders & Triangles


Of Shaders & Triangles is Now One Year Old!
Rasterizing Gaussian Splats (The CUDA-less Way)
Rendering a Perfect Sphere in OpenGL, then an Ellipsoid
An Online Image Compression Tool in Sokol + ImGui + WASM
Of Shaders & Triangles: Blog Update
Installing PyTorch Geometric w.r.t. CUDA Version
Worley and His Noise (Worley Noise/Voronoi Noise)
LuaPT Showcase: Week 6
Writing a Pathtracer in Lua, Week 5: LuaJIT and BVH
Writing a Pathtracer in Lua, Week 4: True Multithreaded Lua
Writing a Pathtracer in Lua, Week 3: Rudimentary UI and Parallel Computing
Writing a Pathtracer in Lua, Week 2: Model Loading & Intersection
Writing a Pathtracer in Lua, Week 1
A Two-Person Method to Simulate Die Rolls
Radiant Flux, Intensity, Irradiance, Radiance, and the Rendering Equation
Micro-Mesh Overview (Part 1)
Marching Cubes, Explained Using Marching Squares
Furball: A JavaScript Minigame
Finishing Zelda: Tears of the Kingdom
OpenGL Billboards
In Memory Of John Conway: Implementing Game Of Life
The Mandelbrot Set
A Quickstart Guide to CUDA
Render to Image in OpenGL, using Framebuffer
Playing Zelda: Tears of the Kingdom
A Rough Idea of How Photon Mapping Works
Introducing PENEfiles
The Consensus Algorithm: Raft (I) - Leader Election
All Sorts of Sorts
The Magic of Colors: Basic Color Science
Model Loading Using TinyOBJLoader
The Ubiquitous K-means Clustering
Raymarching Grass
Linear Transformations, Scene Graph, and Animations
Understanding the Basics of ReSTIR DI
A Brief Introduction Into Normal Integration
Depth of Field in Raymarching Scene
Ordered Dithering
Raymarching Clouds
Wave Function Collapse
The LookAt Matrix
Writing a Comment System For My Blog
Dissecting the Fruxis Shader, Part 1
Spherical Harmonics & Precomputed Radiance Transfer
Perlin Noise: What Is That?
Hash & Noise
Of Shaders & Triangles (OSAT): Trailer


Copyleft 2023 42yeah.