summaryrefslogtreecommitdiffstats
path: root/Shaders/aa_sample_algorithm.py
diff options
context:
space:
mode:
Diffstat (limited to 'Shaders/aa_sample_algorithm.py')
-rw-r--r--Shaders/aa_sample_algorithm.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/Shaders/aa_sample_algorithm.py b/Shaders/aa_sample_algorithm.py
new file mode 100644
index 0000000..779e159
--- /dev/null
+++ b/Shaders/aa_sample_algorithm.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+
+# This is the algorithm that the anti-aliasing logic inside
+# TaSTT_lighting_template.cginc uses.
+
+from math import fmod
+
+x = .5
+y = .1
+aa = 10
+
+# This lets us handle values smaller than 1. We're creating an m*n rectangle
+# and walking a path left-to-right, top-to-bottom through it.
+x_cap = max(x, 1.0 / x)
+y_cap = max(y, 1.0 / y)
+
+print(f"{x_cap} {y_cap}")
+
+def lerp(lo, hi, fract):
+ return lo + (hi - lo) * fract
+
+for i in range(0, aa):
+ # We want to subdivide an x*y area into `aa` evenly spaced pieces.
+ region = x_cap * y_cap
+
+ stride = region / aa
+
+ region_i = i * stride + stride/2
+ region_x = region_i / y_cap
+ region_y = fmod(region_i, y_cap)
+
+ print(f"{region_x} {region_y}")
+
+ region_x = lerp(0, x, region_x / x_cap)
+ region_y = lerp(0, y, region_y / y_cap)
+
+ print(f"{region_x} {region_y}")
+
+ assert(region_x >= 0)
+ assert(region_x <= x)
+ assert(region_y >= 0)
+ assert(region_y <= y)
+