summaryrefslogtreecommitdiffstats
path: root/Shaders/math.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'Shaders/math.cginc')
-rw-r--r--Shaders/math.cginc88
1 files changed, 0 insertions, 88 deletions
diff --git a/Shaders/math.cginc b/Shaders/math.cginc
deleted file mode 100644
index 061d4c0..0000000
--- a/Shaders/math.cginc
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef __MATH_INC
-#define __MATH_INC
-
-#include "pema99.cginc"
-
-#define PI 3.14159265
-
-// Differentiable approximation of the standard `max` function.
-float dmax(float a, float b, float k)
-{
- return log2(exp2(k * a) + exp2(k * b)) / k;
-}
-
-// Differentiable approximation of the standard `min` function.
-float dmin(float a, float b, float k)
-{
- return -1.0 * dmax(-1.0 * a, -1.0 * b, k);
-}
-
-// Generate a random number on [0, 1].
-float rand2(float3 p)
-{
- return glsl_mod(sin(dot(p, float2(561.0, 885.0))) * 776.2, 1.0);
-}
-
-// Generate a random number on [0, 1].
-float rand3(float3 p)
-{
- return glsl_mod(sin(dot(p, float3(897.0, 367.0, 197.0))) * 1073.6, 1.0);
-}
-
-// 3 dimensional value noise. `p` is assumed to be a point inside a unit cube.
-// Theory: https://en.wikipedia.org/wiki/Value_noise
-float vnoise3d(float3 p)
-{
- float3 pu = floor(p);
- float3 pv = glsl_mod(p, 1.0);
-
- // Assign random numbers to the corner of a cube.
- float n000 = rand3(pu + float3(0,0,0));
- float n001 = rand3(pu + float3(0,0,1));
- float n010 = rand3(pu + float3(0,1,0));
- float n011 = rand3(pu + float3(0,1,1));
- float n100 = rand3(pu + float3(1,0,0));
- float n101 = rand3(pu + float3(1,0,1));
- float n110 = rand3(pu + float3(1,1,0));
- float n111 = rand3(pu + float3(1,1,1));
-
- float n00 = lerp(n000, n001, pv.z);
- float n01 = lerp(n010, n011, pv.z);
- float n10 = lerp(n100, n101, pv.z);
- float n11 = lerp(n110, n111, pv.z);
-
- float n0 = lerp(n00, n01, pv.y);
- float n1 = lerp(n10, n11, pv.y);
-
- float n = lerp(n0, n1, pv.x);
-
- return n;
-}
-
-float fbm(float3 p, const int n_octaves, float w)
-{
- float g = exp2(-w);
- float a = 1.0;
- float p_scale = 1.0;
-
- float res = 0.0;
- for (int i = 0; i < n_octaves; i++) {
- res += a * vnoise3d(p * p_scale);
-
- p_scale /= w;
- a *= g;
- }
-
- // On average, vnoise3d returns 0.5.
- // Sum of any geometric series is, for growth parameter r and constant a,
- // a / (1 - r).
- // We want to map onto [0, 1], so divide by this expected sum.
- // Use a = 1, to account for the worst-case possibility that every call to
- // vnoise3d() returns 1.
- res /= (1 / (1 - g));
-
- return res;
-}
-
-#endif // __MATH_INC
-