A Fun 2d Rotation Matrix Derivation
A few weeks ago I joined NVIDIA as part of the graphics dev tech team. The dev tech team’s scope is pretty wide, but it encompasses nearly all real time graphics programming needs that NVIDIA may have:...
View ArticleFIR Audio & Data Filters
There is an interactive demo that goes with this post where you can play with filter parameters, hear the resulting filter applied to audio samples, and copy/paste the simple formula to use the filter...
View ArticleBezier Triangles
There’s an interactive Bezier Triangles webGL demo I made that goes with this post, and what i used to make the 3d rendered images with. You can find here: http://demofox.org/BezierTriangle.html Above...
View ArticleCalculating Information Entropy
This post has an overview of information entropy then moves onto some technical details and experiments. If you have any comments, questions, important additions, etc, please hit me up by commenting on...
View ArticleBayes’ Theorem Intuition
Bayes’ theorem is a way to calculate the probability of something happening based on evidence that may affect that probability. It’s a formula for combining probabilities together when they might...
View ArticleDice, Distributions & Noise Colors
Thank you Uncle Chris and Aunt Lily for sending me this gigantic 120 sided dice! A while back I came across an interesting page that talks about some fundamental concepts relating to noise. It isn’t...
View ArticleGenerating Blue Noise Textures With Void And Cluster
Blue noise comes in two main flavors: sample points and masks. I’ll be calling blue noise masks “blue noise textures” in this post. The code that accompanies this post, implementing the void and...
View ArticleTaking the Max of Uniform Random Numbers
There is 80 lines of simple standalone C++ code that generated the data for this post at: https://github.com/Atrix256/RandomCode/blob/master/randmaxadd/Source.cpp Let’s say you generate 1,000,000...
View ArticleGenerating Random Numbers From a Specific Distribution With The Metropolis...
There is ~400 lines of standalone C++ code that implements the main ideas in this post. You can find it at: https://github.com/Atrix256/MetropolisMCMC In previous posts I showed how to generate random...
View ArticleMarkov Chain Text Generation
This post includes a standalone (only standard headers, no external libs) ~400 line C++ source file that can analyze text and use an order N Markov chain to randomly generate new text in the same...
View ArticleLinear Fit Search
Binary search looks in the middle of a list to make a guess about where a search value is. If that guess is wrong, it can eliminate half of the list (based on whether the search value is less than or...
View ArticleBlending an HDR color into a U8 Buffer
I stumbled on something that I found interesting, so wanted to share in case it was useful for other people too. The c++ code that generated this images can be found on github at...
View ArticleMonte 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...
View ArticleTaking a Stroll Between The Pixels
This post relates to a paper I wrote which talks about (ab)using linear texture interpolation to calculate points on Bezier curves. Extensions generalize it to Bezier surfaces and (multivariate)...
View ArticlePrefix 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...
View ArticleWhat the Heck is Blue Noise?
This is a gentle explanation of blue noise and how it can be useful. We’ll start with something simple that we can all get behind – not getting eaten by a cheetah! Let’s talk about our eyes for a...
View ArticleC++ Differentiable Programming: Searching For An Optimal Dither Pattern
The simple standalone C++ source code that implements this blog post and replicates the results shown is on github at: https://github.com/Atrix256/DitherFindGradientDescent Neural networks are a hot...
View ArticleDemystifying Floating Point Precision
Floating point numbers have limited precision. If you are a game programmer, you have likely encountered bugs where things start breaking after too much time has elapsed, or after something has moved...
View ArticleAnimating Noise For Integration Over Time 2: Uniform Over Time
After I put out the last post, Mikkel Gjoel (@pixelmager), made an interesting observation that you can see summarized in his image below. (tweet / thread here) BTW Mikkel has an amazing presentation...
View ArticleAnimating Noise For Integration Over Time
You can use noise textures (like the ones from the last post) to do dithering. For instance, you can do the process below to make a 1 bit (black and white) dithered image using a gray scale source...
View Article