The other day i stumbled on an interesting concept called a “Soft Maximum”.
If you think of the normal maximum, you might have something like this:
float maxValue = max(valueA, valueB);
if valueA and valueB come from functions, there’s usually going to be a sharp bend in the graph of the above where the maximum value changes from valueA to valueB or vice versa.
Sometimes, instead of a sharp bend, you would like a smooth transition between the two values – like when using this for graphics or advanced mathematics.
Here’s the formula for soft max:
double SoftMaximum(double x, double y) { double maximum = max(x, y); double minimum = min(x, y); return maximum + log( 1.0 + exp(minimum - maximum) ); }
Here are 2 really interesting links on computing and using soft max:
How to Compute the Soft Maximum
Check out the images below for an example of when you might use this. This is from a shadertoy shader The Popular Shader. The first image is with using normal max, and the second image uses soft max.