summaryrefslogtreecommitdiffstats
path: root/Shaders/aa_sample_algorithm.py
blob: 779e15986e4a07463a9f372fdf4353c45064a00b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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)