These are articles about the techniques I develop and lessons I learnt while toying or working with computer graphics. Most of it is self-taught and there's lots of reinventing the wheel (which I recommend) but also some innovative and new discoveries that often times are not documented anywhere else. In fact, if any of this content becames part of your paper or the entirety of your PhD thesis (!), it'd be fair to mention this website. Now, for video tutorials and other computer graphics work visit the landing page.
I write these articles in my spare time and they are sponsored by yourself through Patreon
and individual PayPal donations. I and all the other readers thank you for your contribution!
Newest articles: interior SDFs (03/2020), trisect (02/2020), fBM (09/2019), SDF Bounding Volumes (08/2019), Ellipsoid SDF (08/2019)
Indices of useful functions
3D SDF functions
2D SDF functions
Ray-Surface intersection functions
Sphere functions
Box functions
Remapping functions
Filterable procedurals
Procedural noises
FBM
Gradient noise derivatives
Value noise derivatives
Domain warping
Voronoise
Smooth voronoi
Voronoi edges
Raytracing
Path-tracing in one hour
Sphere soft shadow
Oldschhol raytracing
Simple gpu raytracing
Tracing in tiles
SSE for CPU tracers
My first raytracer
Volumes, voxels and pointclouds
Directional derivative
Voxel lines and occlusion
Volumetric sort
Simple voxel
Compression
Genetic algorithm
Mesh compression
Wavelet compression
3D models storage
Simple oldschool effects
2D dynamic clouds
Simple water
1999. plane deformations
Feedback effect
Voronoi effect
The Game of Life
Rendering a cube in QBasic
3D SDF functions
2D SDF functions
Ray-Surface intersection functions
Sphere functions
Box functions
Remapping functions
Filterable procedurals
Procedural noises
FBM
Gradient noise derivatives
Value noise derivatives
Domain warping
Voronoise
Smooth voronoi
Voronoi edges
Raytracing
Path-tracing in one hour
Sphere soft shadow
Oldschhol raytracing
Simple gpu raytracing
Tracing in tiles
SSE for CPU tracers
My first raytracer
Volumes, voxels and pointclouds
Directional derivative
Voxel lines and occlusion
Volumetric sort
Simple voxel
Compression
Genetic algorithm
Mesh compression
Wavelet compression
3D models storage
Simple oldschool effects
2D dynamic clouds
Simple water
1999. plane deformations
Feedback effect
Voronoi effect
The Game of Life
Rendering a cube in QBasic
Raymarching
Raymarching SDFs
Soft Shadows
Numerical normals for SDFs
Interior SDFs
SDF Bounding Volumes
Ellipsoid SDF
Smooth minimum for SDFs
Menger fractal
Depth buffer with raymarching
Rendering Worlds With Two Triangles
Approximating the distance to implicits
Raymarching terrains
Texturing and filtering
Filtering procedural textures
Ray differentials and textures
Analytic checkers pattern filtering
Improved analytic checkers pattern filtering
Improved bilinear filtering
Texture repetition
Improved hardware interpolation
Cylinder seams
Lighting
Outdoors lighting
Multires ambient occlusion
Better fog
Screen space ambient occlusion
Per vertex AO
Simple global ilumination
Renderer/Engine
Fixing frustum culling
Rational rendering and floating bar
Stereo rendering
Basic VR
Avoiding trigonometry I
Avoiding trigonometry II
Gamma correct blurring
Small demo tricks
Simple color palettes
Compact storage of floats
Minimal spline code
Minimal frustum culling
Compiling small
Textures inside gm.dls
Opening a file in 4kb
Techniques for 64k demos
Behind Elevated
Living Characters in 4 kilobytes
Raymarching SDFs
Soft Shadows
Numerical normals for SDFs
Interior SDFs
SDF Bounding Volumes
Ellipsoid SDF
Smooth minimum for SDFs
Menger fractal
Depth buffer with raymarching
Rendering Worlds With Two Triangles
Approximating the distance to implicits
Raymarching terrains
Texturing and filtering
Filtering procedural textures
Ray differentials and textures
Analytic checkers pattern filtering
Improved analytic checkers pattern filtering
Improved bilinear filtering
Texture repetition
Improved hardware interpolation
Cylinder seams
Lighting
Outdoors lighting
Multires ambient occlusion
Better fog
Screen space ambient occlusion
Per vertex AO
Simple global ilumination
Renderer/Engine
Fixing frustum culling
Rational rendering and floating bar
Stereo rendering
Basic VR
Avoiding trigonometry I
Avoiding trigonometry II
Gamma correct blurring
Small demo tricks
Simple color palettes
Compact storage of floats
Minimal spline code
Minimal frustum culling
Compiling small
Textures inside gm.dls
Opening a file in 4kb
Techniques for 64k demos
Behind Elevated
Living Characters in 4 kilobytes
Useful maths
Fast trisect() in GLSL
Inverse smoothstep
Box ambient occlusion
Sphere ambient occlusion
Sphere density
Distance to triangle
Sphere visibility
Sphere projection
Inverse bilinear interpolation
Bezier bounding box
Disk/cylinder bounding box
Distance to an ellipse
Working with ellipses
Normal/areas for polygons
Area of a triangle
Computing mesh normals
Patched sphere
Fourier series
FM synthesis
Thinking with quaternions
Float and random
Fractals & complex dynamics
Continuous iteration count
The M1 bulb of the Mandelbrot set
The M2 bulb in the Mandelbrot set
Area of M1 in the Mandelbrot set
The symmetry of the Mandelbrot set
Introduction to the Mandelbrot set
Rendering fractals
Computing the SDF of fractals
Mandelbulb fractal
3D Julia set fractals
3D orbit traps
Procedural orbit traps
Bitmaps orbit traps
Geometric orbit traps
Budhabrot fractals
Popcorn images
IFS fractals
Lyapunov fractals
Icon images
Fast trisect() in GLSL
Inverse smoothstep
Box ambient occlusion
Sphere ambient occlusion
Sphere density
Distance to triangle
Sphere visibility
Sphere projection
Inverse bilinear interpolation
Bezier bounding box
Disk/cylinder bounding box
Distance to an ellipse
Working with ellipses
Normal/areas for polygons
Area of a triangle
Computing mesh normals
Patched sphere
Fourier series
FM synthesis
Thinking with quaternions
Float and random
Fractals & complex dynamics
Continuous iteration count
The M1 bulb of the Mandelbrot set
The M2 bulb in the Mandelbrot set
Area of M1 in the Mandelbrot set
The symmetry of the Mandelbrot set
Introduction to the Mandelbrot set
Rendering fractals
Computing the SDF of fractals
Mandelbulb fractal
3D Julia set fractals
3D orbit traps
Procedural orbit traps
Bitmaps orbit traps
Geometric orbit traps
Budhabrot fractals
Popcorn images
IFS fractals
Lyapunov fractals
Icon images