All Posts

Most Recent Posts:
2018-07-13 Blending an HDR color into a U8 Buffer
2018-07-04 Pathtraced Depth of Field & Bokeh
2018-06-12 Monte Carlo Integration Explanation in 1D

178 posts grouped by the following categories:


2018-07-13 Blending an HDR color into a U8 Buffer
2018-07-04 Pathtraced Depth of Field & Bokeh
2018-04-16 Prefix Sums and Summed Area Tables
2018-03-24 An Idea: Raytracing Lookup Tables
2018-03-19 A Very Quick DirectX Raytracing API Primer
2018-03-10 Don’t Convert sRGB U8 to Linear U8!
2018-01-30 What the Heck is Blue Noise?
2017-11-26 Dissecting “Tiny Clouds”
2017-11-03 Animating Noise For Integration Over Time 2: Uniform Over Time
2017-10-31 Animating Noise For Integration Over Time
2017-10-25 Transmuting White Noise To Blue, Red, Green, Purple
2017-10-20 Generating Blue Noise Sample Points With Mitchell’s Best Candidate Algorithm
2017-10-01 Calculating the Distance Between Points in “Wrap Around” (Toroidal) Space
2017-07-10 WebGL PBR Implementation
2017-07-01 Why Are Some Shadows Soft And Other Shadows Hard?
2017-01-09 Raytracing Reflection, Refraction, Fresnel, Total Internal Reflection, and Beer’s Law
2016-09-21 Path Tracing – Getting Started With Diffuse and Emissive
2016-07-28 Fourier Transform (And Inverse) Of Images
2016-03-14 Using Wang Tiles to Simulate Turing Machines
2016-03-05 Matrix Form of Bezier Curves
2016-03-02 Actually Making Signed Distance Field Textures With JFA
2016-02-29 Fast Voronoi Diagrams and Distance Field Textures on the GPU With the Jump Flooding Algorithm
2016-02-21 G-Buffer Upsizing
2016-02-03 Failed Shadertoy “Dust” Game – Browsers Need To Compile Shaders Off the Main Thread!
2016-01-16 Making a Ray Traced Snake Game in Shadertoy
2015-08-19 Gaussian Blur
2015-08-18 Box Blur
2015-08-15 Resizing Images With Bicubic Interpolation
2015-08-09 Cubic Hermite Rectangles
2015-06-19 What is Pre-multiplied Alpha and Why Does it Matter?
2015-04-30 Bilinear Filtering & Bilinear Interpolation
2015-04-23 FlipQuad & FlipTri Antialiasing
2015-04-23 4-Rook Antialiasing (RGSS)
2015-04-22 Quincunx Antialiasing
2015-01-17 Bresenham’s Drawing Algorithms
2014-08-13 Wang Tiling
2014-08-11 Temporal supersampling, flipquads and real time raytracing
2014-06-30 Distance Field Textures
2014-06-22 Analytic Fog Density
2014-02-07 Lots of Skyboxes!
2014-02-03 Converting RGB to Grayscale
2014-01-27 A trip through the Graphics Pipeline
2014-01-22 Shadertoy – WebGLSL pixel shaders
2012-09-25 How to Render the Mandelbrot Set
2012-05-03 MoriRT: Pixel and Geometry Caching to Aid Real Time Raytracing

Original Research / Inventions

2018-04-23 Taking a Stroll Between The Pixels
2017-05-07 Improved Storage Space Efficiency of GPU Texture Sampler Bezier Curve Evaluation
2016-12-16 Evaluating Points on Analytical Surfaces and in Analytical Volumes Using the GPU Texture Sampler
2016-12-10 Failed Experiment: The GPU Texture Sampler is Turing Complete But That Fact is Pretty Useless
2016-12-08 Evaluating Polynomials with the GPU Texture Sampler
2016-02-22 GPU Texture Sampler Bezier Curve Evaluation
2015-01-24 DAPSE Preview


2017-11-21 Demystifying Floating Point Precision
2017-06-20 SIMD / GPU Friendly Branchless Binary Search
2016-12-06 The Secret to Writing Fast Code / How Fast Code Gets Slow
2016-11-13 Minimizing Code Complexity by Programming Declaratively
2016-10-14 A Data Point for MSVC vs Clang Code Generation
2016-10-03 Is Code Faster Than Data? Examining Hash Tables
2016-09-26 Is Code Faster Than Data? Switch Statements vs. Arrays
2016-09-23 Exploring Compile Time Hashing
2016-05-18 Who Cares About Dynamic Array Growth Strategies?
2016-04-09 Turning a Truth Table Into A digital Circuit (ANF)
2016-02-09 How and Why Cleaning Up Code or Processes Gives Multiplicative Benefits
2015-12-20 Simplifying Boolean Expressions With Karnaugh Maps
2015-12-18 What Happens When you Mix Hash Tables and Binary Searching?
2015-12-14 O(1) Data Lookups With Minimal Perfect Hashing
2015-03-09 HyperLogLog: Estimate Unique Value Counts Like The Pros
2015-02-25 Avoiding The Performance Hazzards of std::function
2015-02-22 Count Min Sketch: A Probabilistic Histogram
2015-02-13 Writing a Basic Search Engine AKA Calculating Similarity of Histograms with Dot Product
2015-02-08 Estimating Set Membership With a Bloom Filter
2015-02-05 Getting Strongly Typed Typedefs Using Phantom Types
2015-02-03 Estimating Counts of Distinct Values with KMV
2013-09-13 External C++ Header Guards
2013-09-09 Alloca and Realloc – Useful Tools, Not Ancient Relics
2013-07-08 Is pre-increment really faster than post increment? Part 2
2013-07-07 A Super Tiny Random Number Generator
2013-07-06 Fast & Lightweight Random “Shuffle” Functionality – FIXED!
2013-07-06 The Incredible Time Traveling Random Number Generator
2013-06-18 Why do you hate me rand()?!
2013-06-08 Fast & Lightweight Random “Shuffle” Functionality
2013-06-08 Efficiently Generate Random Numbers Without Repeats
2013-06-05 Is pre-increment really faster than post increment? Part 1
2013-05-21 The Black Art of sizeof() aka Compile Time Type Deduction
2013-05-11 Lists of Macro Lists
2013-05-07 Macro Lists For The Win – Side B
2013-05-03 Macro Lists For The Win
2013-05-01 Permutation Programming Without Maintenance Nightmares
2012-11-28 Mechanical Computer Quest Part I

Game Dev

2017-09-30 Half Tile Offset Streaming World Grids
2016-04-01 Game Development Needs Data Pipeline Middleware
2014-01-11 Getting Ideal Disk Reads on the Cheap
2012-09-24 Bias And Gain Are Your Friend
2012-09-21 Anatomy of a Skeletal Animation System Part 3
2012-09-21 Anatomy of a Skeletal Animation System Part 2
2012-09-21 Anatomy of a Skeletal Animation System Part 1
2012-09-09 Recording lagless demo videos of a laggy game


2018-06-12 Monte Carlo Integration Explanation in 1D
2017-08-08 Generating Random Numbers From a Specific Distribution With Rejection Sampling
2017-08-05 Generating Random Numbers From a Specific Distribution By Inverting the CDF
2017-07-25 Counting Bits & The Normal Distribution
2017-05-29 When Random Numbers Are Too Random: Low Discrepancy Sequences
2017-04-10 Solving N equations and N unknowns: The Fine Print (Gauss Jordan Elimination)
2017-03-31 Orthogonal Projection Matrix Plainly Explained
2017-03-13 Neural Network Gradients: Backpropagation, Dual Numbers, Finite Differences
2017-02-20 Multivariable Dual Numbers & Automatic Differentiation
2017-02-07 A Geometric Interpretation of Neural Networks
2017-01-02 Incremental Least Squares Surface and Hyper-Volume Fitting
2016-12-22 Incremental Least Squares Curve Fitting
2016-08-23 Incremental Averaging
2016-08-11 Understanding The Discrete Fourier Transform
2016-03-11 A Sixth Way To Calculate Sine Without Trig
2016-02-19 Normalized Vector Interpolation TL;DR
2015-11-13 Hiding a Lookup Table in a Modulus Operation
2015-09-15 Solving Nested Modulus Equations
2015-09-12 Solving Simultaneous Congruences (Chinese Remainder Theorem)
2015-09-10 Modular Multiplicative Inverse
2015-08-08 Cubic Hermite Interpolation
2015-08-05 Lagrange Rectangles
2015-08-02 Finite Differences
2015-07-28 Rectangular Bezier Patches
2015-07-08 Lagrange Interpolation
2015-07-05 The De Casteljau Algorithm for Evaluating Bezier Curves
2015-06-14 A Fifth Way to Calculate Sine Without Trig
2015-05-25 Easy Binomial Expansion & Bezier Curve Formulas
2015-01-24 Programmatically Calculating GCD and LCM
2014-12-30 Dual Numbers & Automatic Differentiation
2014-12-27 Using Imaginary Numbers To Rotate 2D Vectors
2014-11-04 Four Ways to Calculate Sine Without Trig
2014-08-28 One Dimensional Bezier Curves
2014-08-14 Counting in Binary is a Fractal
2014-08-10 What if My Equation DOESN’T Equal Zero??
2014-03-22 Bezier Curves Part 2 (and Bezier Surfaces)
2014-03-09 Implicit vs Parametric vs Explicit Surfaces
2014-03-04 Bezier Curves
2014-02-20 Soft Maximum vs Hard Maximum
2013-11-13 Transformation Matrix Basics
2013-10-12 Converting To and From Polar / Spherical Coordinates Made Easy
2013-09-17 How to Test Randomness of Numbers

Machine Learning

2017-12-23 C++ Differentiable Programming: Searching For An Optimal Dither Pattern
2017-03-15 Neural Network Recipe: Recognize Handwritten Digits With 95% Accuracy
2017-03-09 How to Train Neural Networks With Backpropagation
2012-10-23 B.A.M. Neural Networks


2016-10-19 Low Tech Homomorphic Encryption
2016-04-30 Shamir’s Quest: Collect Any 3 Keys To Unlock The Secret!
2015-09-05 Improving the Security of the Super Simple Symmetric Leveled Homomorphic Encryption Implementation
2015-09-05 Super Simple Symmetric Leveled Homomorphic Encryption Implementation
2014-05-18 Feistel Networks – Do They Have to use XOR?
2012-09-17 Encryption 101: Realistic Security
2012-09-16 Cryptography 101: Encryption – Asymmetric Keys
2012-09-15 Cryptography 101: Encryption – Symmetric Keys
2012-09-15 Cryptography 101: Encryption – One Time Pad
2012-09-12 Cryptography 101: Hashing

Audio Synth / Audio Programming

2018-03-05 Granular Audio Synthesis
2016-07-01 Intro To Audio Synthesis For Music Presentation
2016-06-23 The Beating Effect
2016-06-16 Synthesizing a Plucked String Sound With the Karplus-Strong Algorithm
2015-04-19 Frequency Domain Audio Synthesis – With IFFT and Oscillators
2015-04-14 Decibels (dB) and Amplitude
2015-03-23 DIY Synth: Convolution Reverb & 1D Discrete Convolution of Audio Samples
2015-03-17 DIY Synth: Multitap Reverb
2015-03-17 DIY Synth: Delay Effect (Echo)
2015-03-16 DIY Synth: Flange Effect
2015-03-14 DIY Synth: Basic Drum
2012-06-18 DIY Synth 3: Sampling, Mixing, and Band Limited Wave Forms
2012-05-19 DIY Synth 2: Common Wave Forms
2012-05-14 DIY Synth 1: Sound Output

Quantum Programming

2015-11-06 Quantum Computing For Programmers Part 2: Multiple Qubits
2015-10-17 Quantum Computing For Programmers Part Ib: Bloch Sphere
2015-10-17 Quantum Computing For Programmers Part I: One Qubit
2015-10-12 Quantum Computing References

Network Programming

2018-6-04 A Neat Trick For Compressing Networked State Data

Soft Skills / Not Directly About Tech

2017-11-16 My Old Master: On Optimism
2017-07-03 A Tool To Debug Teams (Knoster)
2017-03-17 Plastic Bag Ban – Semi Reusable Bag Kiosks a Better Solution?
2017-01-24 My Old Master: How to Correct as a Mentor or a Teacher
2015-06-18 Adventures in Learning How to Publish a Research Paper Part 1
2015-05-24 No Bad Code, Creeping Normality and Social Structure Code Organization
2014-07-21 Situational Leadership

Pathtraced Depth of Field & Bokeh

Let’s say you have a path tracer that can generate an image like this: Adding depth of field (and bokeh) can make an image that looks like this: The first image is rendered using an impossibly perfect pinhole camera (which is what we usually do in roughly real time graphics, in both rasterization and ray … Continue reading

Monte Carlo Integration Explanation in 1D

Let’s say that you have a function and you want to know what the area is under the curve between 0 and pi. We could solve this specific problem by doing some algebra and calculus to get the exact answer analytically (which is ), but let’s pretend like we can’t, or don’t want to solve … Continue reading


This is a test That was a test

A Neat Trick For Compressing Networked State Data

I’m not a network programmer, but I do like cool algorithms. Today at lunch a co-worker mentioned a really cool trick for when you need to continually send state across a network. For instance, if you had a large struct of data containing information about all the players in the world, projectiles, enemies, and other … Continue reading

Prefix Sums and Summed Area Tables

Prefix sums and summed area tables let you sum up regions of arrays or grids in constant time. If that sounds like it might not have many uses, that is another way of saying that it does discrete integration in constant time, and can also be made to do some kinds of convolution. These things … Continue reading