Something went wrong. Try again.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
cbuffer Screen : register(b0, space3) { float x; float y; float c; float d;};
float srgb( float color ){ return (color<0.0031308) ? color*12.92:1.055*pow(color,(1.0/2.4))-0.055;}
float3 oklab_srgb(float3 c) { float l_ = c.x + 0.3963377774f * c.y + 0.2158037573f * c.z; float m_ = c.x - 0.1055613458f * c.y - 0.0638541728f * c.z; float s_ = c.x - 0.0894841775f * c.y - 1.2914855480f * c.z;
float l = l_*l_*l_; float m = m_*m_*m_; float s = s_*s_*s_;
float3 lin = float3( +4.0767416621f * l - 3.3077115913f * m + 0.2309699292f * s, -1.2684380046f * l + 2.6097574011f * m - 0.3413193965f * s, -0.0041960863f * l - 0.7034186147f * m + 1.7076147010f * s ); return float3(srgb(lin.x), srgb(lin.y), srgb(lin.z)); }
float3 oklch_oklab(float3 lch) { float a = lch.y * cos(lch.z); float b = lch.y * sin(lch.z); return float3(lch.x, a, b);}
float3 please(float3 col) { return oklab_srgb(oklch_oklab(col));}
float sdCircle(float2 p, float r) { return length(p)-r;}
float2 smin( float a, float b, float k ){ float h = 1.0 - min( abs(a-b)/(4.0*k), 1.0 ); float w = h*h; float m = w*0.5; float s = w*k; return (a<b) ? float2(a-s,m) : float2(b-s, 1-m);}
float3 dcol(float3 col, float d) { float blend = min(pow(2, d/100), 1.0); col.x = lerp(1.0, col.x, blend); return col;}
float3 lcol(float3 col, float3 col2, float b) { float d = abs(col.z - col2.z); if (d>radians(180)) { col.z = ( col.z + radians(180)) % radians(360); col2.z = ( col2.z + radians(180)) % radians(360); float3 l = lerp(col, col2, b); l.z = (l.z + radians(180)) % radians(360); return l; } return lerp(col, col2, b);}
float4 main(float4 pos : SV_Position) : SV_Target { float2 p = float2(pos.x - ( x/2 ), pos.y - ( y / 2));
float d = sdCircle(p, 100.0); float3 scol = dcol(float3(0.75, 0.14, radians(360.0)), d);
float d2 = sdCircle(p-float2(100.0, 120.0), 80.0); float3 scol2 = dcol(float3(0.75, 0.14, radians(173.0)), d2);
float d3 = sdCircle(p-float2(-100.0, 120.0), 70.0); float3 scol3 = dcol(float3(0.75, 0.14, radians(250.0)), d3);
float2 d_d2 = smin(d, d2, 20); float3 c_c2 = lcol(scol, scol2, d_d2.y); float cl = max(-d_d2.x, 0.0);
float2 d_d3 = smin(d, d3, 20); float3 c_c3 = lcol(scol, scol3, d_d3.y); float cl2 = max(-d_d3.x, 0.0);
float2 d2_d3 = smin(d2, d3, 20); float3 c2_c3 = lcol(scol2, scol3, d2_d3.y); float cl3 = max(-d2_d3.x, 0.0);
float dist = min(min(d_d2.x, d_d3.x), d2_d3.x);
float sum = cl + cl2 + cl3; float3 col = lcol(lcol(c_c2, c_c3, cl2/(cl+cl2)), c2_c3, cl3/sum);
if (any(isnan(col))){ col = float3(0, 0, 0); }
float aaf = fwidth(dist); float alpha = smoothstep(0, -aaf, dist); col = please(col) * alpha;
float3 bg = float3(pos.x / x, pos.y / y, 1.0) * (1-alpha);
return float4(col + bg, 1.0);}