Files
bluflame/ruins64k/tools/shader_code.h
2026-04-18 22:31:51 +02:00

1048 lines
28 KiB
C

/* File generated with Shader Minifier 1.1.3
* http://www.ctrl-alt-test.fr
*/
#ifndef SHADER_CODE_H_
# define SHADER_CODE_H_
# define VAR_DUMMY0 "f"
# define VAR_DUMMY1 "n"
# define VAR_DUMMY2 "s"
# define VAR_DUMMY3 "a"
# define VAR_DUMMY4 "S"
# define VAR_DUMMY5 "U"
# define VAR_FAKLEMANVECTORS "g"
# define VAR_FAKLEMANVECTORS_ "A"
# define VAR_LIGHTCOLOR "ad"
# define VAR_LIGHTPOSITION "ab"
# define VAR_LIGHTSIZE "ac"
# define VAR_MATERIAL "X"
# define VAR_OUT0 "K"
# define VAR_RNDSEED "r"
# define VAR_SAMPLER0 "J"
# define VAR_TEX0 "j"
# define VAR_TIME "y"
# define VAR_VIEWDIRECTION "d"
# define VAR_VIEWPOSITION "l"
# define VAR_VIEWUP "z"
char tmpE89D_tmp[] =
"cbuffer cb0:register(b0){"
"float y,f,n,s;"
"float3 l;"
"float a;"
"float3 d;"
"float S;"
"float3 z;"
"float U;"
"}\n"
"#ifndef UTILS\n"
"#define UTILS\n"
"#define USE_ATAN2_APPROXIMATION\n"
"#define PI 3.14159265\n"
"#define INFINITY 1000.0\n"
"#define PHI (sqrt(5)*0.5+0.5)\n"
"float3x3 t(float f)"
"{"
"return float3x3(1,0,0,0,cos(f),-sin(f),0,sin(f),cos(f));"
"}"
"float3x3 e(float f)"
"{"
"return float3x3(cos(f),0,sin(f),0,1,0,-sin(f),0,cos(f));"
"}"
"float3x3 x(float f)"
"{"
"return float3x3(cos(f),-sin(f),0,sin(f),cos(f),0,0,0,1);"
"}"
"static uint r=0;"
"void h(uint f)"
"{"
"r=f;"
"}"
"uint p(uint f)"
"{"
"return f+=f<<10,f^=f>>6,f+=f<<3,f^=f>>11,f+=f<<15,f;"
"}"
"float e()"
"{"
"return asfloat((r=p(r)&8388607)|1065353216)-1;"
"}"
"float h()"
"{"
"return asfloat((r=p(r)&8388607)|1073741824)-3;"
"}"
"float N(uint f)"
"{"
"return asfloat(f&8388607|1065353216)-1;"
"}"
"float w(uint f)"
"{"
"return asfloat(f&8388607|1073741824)-3;"
"}"
"float T(float f)"
"{"
"return asfloat(int(12102203*f+1064866805));"
"}\n"
"#ifdef USE_ATAN2_APPROXIMATION\n"
"float N(float f,float y)"
"{"
"float z=PI*.25,n=PI*.75,x=abs(f),s=y<0?-1:1,b=(-x*s+y)/(y*s+x),a=(.1963*b*b-.9817)*b+(y<0?n:z);"
"return a*(f<0?-1:1);"
"}\n"
"#else\n"
"#define atan2f atan2\n"
"#endif\n"
"float3x3 c(float3x3 f)"
"{"
"float3x3 a={f[1][1]*f[2][2]-f[1][2]*f[2][1],f[0][2]*f[2][1]-f[0][1]*f[2][2],f[0][1]*f[1][2]-f[0][2]*f[1][1],f[1][2]*f[2][0]-f[1][0]*f[2][2],f[0][0]*f[2][2]-f[0][2]*f[2][0],f[0][2]*f[1][0]-f[0][0]*f[1][2],f[1][0]*f[2][1]-f[1][1]*f[2][0],f[0][1]*f[2][0]-f[0][0]*f[2][1],f[0][0]*f[1][1]-f[0][1]*f[1][0]};"
"return a;"
"}"
"float3x3 m(float3x3 f)"
"{"
"return c(f)/determinant(f);"
"}"
"float T(float f,float y)"
"{"
"return f-y*floor(f/y);"
"}"
"float2 c(float2 f,float2 y)"
"{"
"return f-y*floor(f/y);"
"}"
"float3 e(float3 f,float3 y)"
"{"
"return f-y*floor(f/y);"
"}"
"float2 h(float2 f,float y)"
"{"
"return f-y*floor(f/y);"
"}"
"float3 m(float3 f,float y)"
"{"
"return f-y*floor(f/y);"
"}"
"float N(float f,float y,float z)"
"{"
"if(f>y)"
"return f;"
"float x=f/y;"
"return((2*z-y)*x+2*y-3*z)*x*x+z;"
"}"
"float T(float f,float a,float y)"
"{"
"return y=saturate((y-f)/(a-f)),y*y*y*(y*(y*6-15)+10);"
"}"
"float3 c(float3 f,float3 a,float3 y)"
"{"
"return y=saturate((y-f)/(a-f)),y*y*y*(y*(y*6-15)+10);"
"}"
"float e(float f,float y,float z)"
"{"
"float r=abs(z-f);"
"if(r>y)"
"return 0;"
"r/=y;"
"return 1-r*r*(3-2*r);"
"}"
"float3 h(float f,float y,float z)"
"{"
"return lerp(1,saturate(abs(frac(f+float3(3,2,1)/3)*6-3)-1),y)*z;"
"}"
"float3 m(float f,float y,float z)"
"{"
"return lerp(1,smoothstep(0,1,saturate(abs(frac(f+float3(3,2,1)/3)*6-3)-1)),y)*z;"
"}"
"float3 M(float f)"
"{"
"float y=saturate(f);"
"return saturate(float3(sqrt(y),y*y*y,max(sin(5.49763*y),pow(y,12.))));"
"}"
"float3 P(float3 f)"
"{"
"float y=.15,z=.5,x=.1,n=.2,s=.02,b=.3,a=11.2;"
"f=(f*(y*f+x*z)+n*s)/(f*(y*f+z)+n*b)-s/b;"
"float l=(a*(y*a+x*z)+n*s)/(a*(y*a+z)+n*b)-s/b;"
"return f/l;"
"}"
"float3 G(float3 f)"
"{"
"return f*(f*1.28713+.153229)/(f*(f+3.33333)+.4);"
"}"
"float4 L(float2 f)"
"{"
"float4 a=float4(1,.111,0,1);"
"uint y[]={-2122219265,-1887334513,-1886417777,-8352628};"
"int2 c=floor(f*16);"
"if(c.x<0||c.x>15||c.y<0||c.y>15)"
"return float4(0,0,0,0);"
"if(y[c.y/4u]>>c.y%4u*8u+uint(abs(c.x-7.5))%8u&1u)"
"return float4(1,1,1,1);"
"return a;"
"}"
"float i(float3 f)"
"{"
"float4 y=dot(floor(f),float3(1,57,21))+float4(0,57,21,78);"
"f=smoothstep(0,1,frac(f));"
"y=lerp(sin(cos(y*y)),sin(cos(y*y+2*y+1)),f.x);"
"y.xy=lerp(y.xz,y.yw,f.y);"
"return lerp(y.x,y.y,f.z);"
"}"
"float I(float3 f)"
"{"
"float3 a=floor(f);"
"float4 y=a.x+a.y*57+a.z*21;"
"y.yzw+=float3(57,21,78);"
"float3 r=frac(f);"
"r=r*r*(-2*r+3);"
"y=lerp(sin(cos(y)*y),sin(cos(1+y)*(1+y)),r.x);"
"y.xy=lerp(y.xz,y.yw,r.y);"
"return lerp(y.x,y.y,r.z);"
"}"
"float b(float3 f)"
"{"
"float y=I(f*.06125)*.5;"
"f.xy=cos(1)*f.xy+float2(-sin(1),sin(1))*f.yx;"
"y+=I(f*.125)*.25;"
"f.zy=cos(1)*f.zy+float2(-sin(1),sin(1))*f.yz;"
"y+=I(f*.25)*.125;"
"return y*(1/.875);"
"}\n"
"#endif\n"
"#ifndef LIGHTING\n"
"#define LIGHTING\n"
"float G(float f,float y)"
"{"
"float a=y*y,s=a*a,x=f*f,n=abs(x*s-x+1);"
"return s/(PI*n*n+1e-08);"
"}"
"float G(float f,float y,float z)"
"{"
"float a=z+1,n=a*a/8,s=1-n;"
"return 1/(4*(f*s+n)*(y*s+n));"
"}"
"float I(float f,float y)"
"{"
"float a=(-5.55473*f-6.98316)*f;"
"return y+(1-y)*exp2(a);"
"}"
"float G(float3 f,float3 y,float a,float z)"
"{"
"float x=a/z,s=-dot(y,f),n=x*x*(1.-s*s);"
"if(n>1.)"
"return 1.;"
"float r=sqrt(1.-n),b=(a*s-z*r)/(a*s+z*r),P=(z*s-a*r)/(z*s+a*r);"
"return 1.-(b*b+P*P)/2.;"
"}"
"float G(float f,float y,float a,float z,float n,float s)"
"{"
"return G(a,n)*I(f,s)*G(f,y,n);"
"}"
"float G()"
"{"
"return 1/PI;"
"}"
"float3 G(float3 f,float3 y,float3 z,float3 a,float3 x,float r,float n)"
"{"
"r=clamp(r,.05,1.);"
"float3 s=normalize(y+z);"
"float c=max(0,dot(f,y)),m=max(0,dot(f,z)),b=max(0,dot(f,s)),d=max(0,dot(y,s));"
"float3 i=a*G()+x*G(c,m,b,d,r,n);"
"i*=m;"
"return i;"
"}"
"float3 G(float3 f,float3 y,float3 a,float3 z,float3 l,float c,float3 n,float3 s,float d,float b)"
"{"
"float3 m=l-f,x=m-dot(m,z)*z,i=m-x*saturate(c/length(x)),r=normalize(i);"
"return G(y,a,r,n,s,d,b);"
"}\n"
"#endif\n"
"#ifndef MATERIAL\n"
"#define MATERIAL\nstruct Material{float3 color;float roughness;float4 attenuation;float eta;float3 emissive;float metallic;};"
"static Material X;"
"void u(Material f)"
"{"
"X=f;"
"}"
"void L(bool f,Material y)"
"{"
"if(f)"
"L(y);"
"}"
"void I(inout float f,float y,bool z,Material a)"
"{"
"if(y<f)"
"{"
"f=y;"
"if(z)"
"L(a);"
"}"
"}"
"void L(inout float f,float y,bool z,Material a)"
"{"
"if(y>f)"
"{"
"f=y;"
"if(z)"
"L(a);"
"}"
"}"
"void M(inout float f,float y,bool a,Material z)"
"{"
"I(f,abs(y),a,z),f*=y<0?-1:1;"
"}"
"bool F(Material f)"
"{"
"return f.attenuation.w>=.5;"
"}"
"bool o(Material f)"
"{"
"return f.attenuation.w==1;"
"}"
"Material O(float3 f)"
"{"
"Material r;"
"r.color=f;"
"r.metallic=0.;"
"r.roughness=0.;"
"r.emissive=0.;"
"r.attenuation=0.;"
"return r;"
"}"
"Material v(float3 f)"
"{"
"Material r;"
"r.color=f;"
"r.metallic=0.;"
"r.roughness=1.;"
"r.emissive=0.;"
"r.attenuation=0.;"
"return r;"
"}"
"Material R(float3 f)"
"{"
"Material r;"
"r.color=0;"
"r.metallic=0;"
"r.roughness=0;"
"r.emissive=f;"
"r.attenuation=0.;"
"return r;"
"}"
"Material F(float3 f,float a=1.1,float y=.3)"
"{"
"Material r;"
"r.color=.3;"
"r.emissive=0;"
"r.metallic=1;"
"r.roughness=y;"
"r.attenuation=float4(f,1);"
"r.eta=a;"
"return r;"
"}"
"Material F(float3 f,int y)"
"{"
"float3 a=f+.01*b(f*1114.95),z=a+.05*b(a*228.999),x=z+13.845*b(z*12.5);"
"float r=b(x*16.5)*.5+.5;"
"const float3 s[3]={float3(1,.2,0.),float3(.5,.8,.1),float3(1.,1.,1.)};"
"float3 l=lerp(s[(2+y)%3],lerp(s[(0+y)%3],s[(1+y)%3],b((x+z)*15)*.5+.5),b(x*10)*.5+.5);"
"Material i;"
"i.emissive=0;"
"i.color=l*r;"
"i.metallic=1.;"
"i.roughness=saturate(r*-.55+.5);"
"i.attenuation=float4(3*saturate(1-l),1);"
"i.eta=1.2;"
"return i;"
"}"
"Material M(float3 f,int y)"
"{"
"float3 a=f+.01*b(f*1114.95),z=a+.05*b(a*228.999),x=z+13.845*b(z*12.5);"
"float r=b(x*16.5)*.5+.5;"
"const float3 s[3]={float3(1,.2,0.),float3(.5,.8,.1),float3(1.,1.,1.)};"
"float3 l=lerp(s[(2+y)%3],lerp(s[(0+y)%3],s[(1+y)%3],b((x+z)*15)*.5+.5),b(x*10)*.5+.5);"
"Material e;"
"e.emissive=0;"
"e.color=l*r;"
"e.metallic=0;"
"e.roughness=saturate(r*-.55+.5);"
"e.attenuation=0;"
"return e;"
"}"
"Material E(float3 f)"
"{"
"int y=0;"
"float3 a=f+.01*b(f*1114.95),z=a+.05*b(a*228.999),x=z+13.845*b(z*12.5);"
"float r=b(x*16.5)*.5+.5;"
"const float3 s[3]={float3(1,.2,0.),float3(.5,.8,.1),float3(1.,1.,1.)};"
"float3 l=lerp(s[(2+y)%3],lerp(s[(0+y)%3],s[(1+y)%3],b((x+z)*15)*.5+.5),b(x*10)*.5+.5);"
"Material i;"
"i.emissive=0;"
"i.color=sin(f.z)*.5+.5;"
"i.metallic=0;"
"i.roughness=.3;"
"i.attenuation=0;"
"return i;"
"}\n"
"#endif\n"
"#ifndef SDF\n"
"#define SDF\n"
"static const float3 A[19]={{1.,0.,0.},{0.,1.,0.},{0.,0.,1.},{.577,.577,.577},{-.577,.577,.577},{.577,-.577,.577},{.577,.577,-.577},{0.,.357,.934},{0.,-.357,.934},{.934,0.,.357},{-.934,0.,.357},{.357,.934,0.},{-.357,.934,0.},{0.,.851,.526},{0.,-.851,.526},{.526,0.,.851},{-.526,0.,.851},{.851,.526,0.},{-.851,.526,0.}},g[19]={normalize(float3(1,0,0)),normalize(float3(0,1,0)),normalize(float3(0,0,1)),normalize(float3(1,1,1)),normalize(float3(-1,1,1)),normalize(float3(1,-1,1)),normalize(float3(1,1,-1)),normalize(float3(0,1,PHI+1)),normalize(float3(0,-1,PHI+1)),normalize(float3(PHI+1,0,1)),normalize(float3(-PHI-1,0,1)),normalize(float3(1,PHI+1,0)),normalize(float3(-1,PHI+1,0)),normalize(float3(0,PHI,1)),normalize(float3(0,-PHI,1)),normalize(float3(1,0,PHI)),normalize(float3(-1,0,PHI)),normalize(float3(PHI,1,0)),normalize(float3(-PHI,1,0))};"
"float3 H(float3 f)"
"{"
"if(f.y>0)"
"f.xy=float2(length(f.xy),N(f.y,f.x));"
"else"
" if(f.x<0)"
"f.xy*=-1,f.y+=2*asin(1);"
"return f;"
"}"
"float3 E(float3 f,float y,float z)"
"{"
"if(abs(y)<.01)"
"return f;"
"float a=sign(y),s=1/y;"
"float2 r=a*float2(f.x-z,s-f.y);"
"float x=N(r.x,r.y);"
"return float3(x*s+z,-length(r)*a+s,f.z);"
"}"
"float3 E(float3 f,float y,float z,float a,float s)"
"{"
"float r=y/(s-a);"
"if(abs(r)<.0001)"
"return f;"
"float x=sign(r),n=abs(r),b=1/r;"
"float2 i=x*float2(f.x-z,b-f.y);"
"float c=N(i.x,i.y);"
"float2 d=(float2(a,s)-z)*r;"
"float l=clamp(c,min(d.x,d.y),max(d.x,d.y)),m=l*b+z;"
"if(abs(c-l)>0)"
"{"
"float2 X=float2(cos(l),sin(l));"
"return float3(-x*(X*i.x*float2(-1,1)+X.yx*i.y)+float2(m,b),f.z);"
"}"
"return float3(m,-length(i)*x+b,f.z);"
"}\n"
"#define fOpR45(p)p=0.7071*p+0.7071*float2(p.y,-p.x)\n"
"float H(float f,float y,float z)"
"{"
"return-f<z&&-y<z?(f+z+y)*sqrt(.5):max(f,y);"
"}"
"float I(float f,float y,float z)"
"{"
"return H(f,-y,z);"
"}"
"float L(float f,float y,float z)"
"{"
"return f<z&&y<z?(f-z+y)*sqrt(.5):min(f,y);"
"}"
"float3 E(float3 f,float y)"
"{"
"return floor(f/y+.5)*y;"
"}"
"float D(float3 f)"
"{"
"float y=dot(pow(f,4),1)-dot(pow(f,2),1);"
"float3 a=4*f*f*f-2*f;"
"return y/length(a);"
"}"
"float Y(float3 f)"
"{"
"float y=f.y*f.y*f.y*f.y+f.y*f.y*f.y+f.x*f.x+f.z*f.z;"
"float3 a=float3(2*f.x,-4*f.y*f.y*f.y-3*f.y*f.y,2*f.z);"
"return y/length(a);"
"}"
"float C(float3 f)"
"{"
"float y=(f.x*f.x+3)*(f.y*f.y+3)*(f.z*f.z+3)-32*(f.x*f.y*f.z+1);"
"float3 a=2*f.xyz*(f.yxx*f.yxx+3)*(f.zzy*f.zzy+3)-32*f.yxx*f.zzy;"
"return y/length(a);"
"}"
"float q(float3 f)"
"{"
"float y=(f.x*f.x+f.y*f.y+f.z*f.z-1)*(f.x*f.x+f.y*f.y+f.z*f.z-1)-((f.z-1)*(f.z-1)-2*f.x*f.x)*((f.z+1)*(f.z+1)-2*f.y*f.y);"
"float3 a=4*float3(f.x,f.y,1)*float3(f.x*f.x-f.y*f.y+2*f.z*(f.z+1),-f.x*f.x+f.y*f.y+2*f.z*(f.z-1),f.x*f.x*(2*f.z+1)+f.y*f.y*(2*f.z-1));"
"return y/length(a);"
"}"
"float V(float3 f)"
"{"
"float y=(f.x*f.x+f.y*f.y+f.z*f.z)*(f.x*f.x+f.y*f.y+f.z*f.z)+8*f.x*f.y*f.z-10*(f.x*f.x+f.y*f.y+f.z*f.z)+25;"
"float3 a=4*float3(f.x*f.x*f.x+f.x*(f.y*f.y+f.z*f.z-5)+2*f.y*f.z,f.y*(f.x*f.x+f.z*f.z-5)+2*f.x*f.z+f.y*f.y*f.y,f.x*f.x*f.z+2*f.x*f.y+f.z*(f.y*f.y+f.z*f.z-5));"
"return y/max(16,length(a));"
"}"
"float k(float3 f)"
"{"
"float3 y=pow(f*f,1./3.);"
"float a=y.x+y.y+y.z-1;"
"float3 z=2*f/(3*y*y);"
"return a/max(3,length(z));"
"}"
"float B(float3 f)"
"{"
"float y=(f.x*f.x+1)*(f.y*f.y+1)*(f.z*f.z+1)+8*f.x*f.y*f.z-2;"
"float3 a=2*f*(f.yxx*f.yxx+1)*(f.zzy*f.zzy+1)+8*f.yxx*f.zzy;"
"return y/max(1,length(a));"
"}"
"float B(float3 f,float y,float z,int a,int l)"
"{"
"float x=0;"
"[unroll]"
"for(int r=a;r<=l;++r)"
"x+=pow(abs(dot(f,g[r])),z);"
"return pow(x,1/z)-y;"
"}"
"float B(float3 f,float y,int a,int z)"
"{"
"float r=0;"
"[unroll]"
"for(int i=a;i<=z;++i)"
"r=max(r,abs(dot(f,g[i])));"
"return r-y;"
"}"
"float C(float3 f,float y,int a,int z)"
"{"
"float r=0;"
"[unroll]"
"for(int i=a;i<=z;++i)"
"r+=pow(abs(dot(f,g[i])),y);"
"return r;"
"}"
"float B(float3 f,float y,float z)"
"{"
"float r=0;"
"[unroll]"
"for(int a=3;a<=6;++a)"
"r+=pow(abs(dot(f,g[a])),z);"
"r+=pow(max(0,-dot(f-float3(0,.95,0),float3(0,1,0))),z);"
"return pow(r,1/z)-y;"
"}"
"float C(float3 f,float y,float z)"
"{"
"float r=0;"
"[unroll]"
"for(int a=0;a<6;++a)"
"{"
"float s=PI/3*a,n=s+PI/6;"
"r+=pow(max(0,-dot(f,normalize(float3(cos(s),.75,sin(s))))),z);"
"r+=pow(max(0,dot(f,normalize(float3(cos(n),1.5,sin(n))))),z);"
"}"
"r+=pow(max(0,dot(f+float3(0,.5,0),float3(0,1,0))),z);"
"return pow(r,1/z)-y;"
"}"
"float B(float3 f,float y)"
"{"
"float r=0;"
"[unroll]"
"for(int z=0;z<6;++z)"
"{"
"float a=PI/3*z,s=a+PI/6;"
"r=max(r,-dot(f,normalize(float3(cos(a),.75,sin(a)))));"
"r=max(r,dot(f,normalize(float3(cos(s),1.5,sin(s)))));"
"}"
"r=max(r,dot(f+float3(0,.5,0),float3(0,1,0)));"
"return r-y;"
"}"
"float D(float3 f,float y,float z)"
"{"
"float a=2*PI/5,r=0;"
"[unroll]"
"for(int i=0;i<5;++i)"
"r+=pow(abs(dot(f,v[i])),z);"
"return pow(r,1/z)-y;"
"}"
"float C(float3 f,float y)"
"{"
"float a=2*PI/5,r=0;"
"[unroll]"
"for(int z=0;z<5;++z)"
"r=max(r,abs(dot(f,v[z])));"
"return r-y;"
"}"
"float M(float3 f,float y,float z)"
"{"
"return B(f,y,z,13,18);"
"}"
"float O(float3 f,float y,float z)"
"{"
"return B(f,y,z,3,6);"
"}"
"float P(float3 f,float y,float z)"
"{"
"return B(f,y,z,3,12);"
"}"
"float R(float3 f,float y,float z)"
"{"
"return B(f,y,z,0,6);"
"}"
"float V(float3 f,float y,float z)"
"{"
"return B(f,y,z,3,18);"
"}"
"float D(float3 f,float y)"
"{"
"return B(f,y,3,6);"
"}"
"float H(float3 f,float y)"
"{"
"return B(f,y,13,18);"
"}"
"float O(float3 f,float y)"
"{"
"return B(f,y,3,12);"
"}"
"float P(float3 f,float y)"
"{"
"return B(f,y,0,6);"
"}"
"float R(float3 f,float y)"
"{"
"return B(f,y,3,18);"
"}"
"float V(float3 f,float3 y)"
"{"
"float3 a=abs(f)-y;"
"return length(max(a,0))+min(max(max(a.x,a.y),a.z),0);"
"}"
"float Y(float3 f,float3 y)"
"{"
"float3 a=abs(f)-y;"
"return max(max(a.x,a.y),a.z);"
"}"
"float b(float3 f,float y)"
"{"
"return length(f.xz)-y;"
"}"
"float Y(float3 f,float3 y,float3 z)"
"{"
"float3 a=z-y;"
"float r=saturate(dot(f-y,a)/dot(a,a));"
"return length(a*r+y-f);"
"}"
"float b(float3 f,float y,float z)"
"{"
"return length(float2(length(f.xz)-y,f.y))-z;"
"}"
"float i(float3 f,float y)"
"{"
"float z=length(f.xz)-y;"
"return length(float2(f.y,z));"
"}"
"float k(float3 f,float y)"
"{"
"float z=length(f.xz)-y;"
"return z<0?abs(f.y):length(float2(f.y,z));"
"}"
"float o(float3 f,float2 y)"
"{"
"return dot(y,float2(length(f.xz),f.y));"
"}"
"float p(float3 f,float2 y)"
"{"
"float3 a=abs(f);"
"return max(a.y-y.y,max(a.z*.866025+a.x*.5,a.x)-y.x);"
"}"
"float i(float3 f,float y,float z)"
"{"
"float a=.5*y/PI,s=PI*a,r=N(f.z,f.y)*a,n=m(f.x,2*s);"
"r=abs(r-n);"
"r=r>s?2*s-r:r;"
"return length(float2(length(f.yz)-z,r));"
"}"
"float q(float3 f,float y)"
"{"
"return max(length(f.xz)-y,abs(f.y));"
"}"
"float t(float3 f,float y)"
"{"
"return length(f)-y;"
"}"
"float u(float3 f,float y)"
"{"
"float3 z=normalize(float3(-PHI,PHI-1,1)),a=normalize(float3(1,-PHI,PHI+1));"
"f=abs(f);"
"f-=2*max(0,dot(f,z))*z;"
"f-=2*max(0,dot(f,a))*a;"
"f=abs(f);"
"f-=2*max(0,dot(f,z))*z;"
"f-=2*max(0,dot(f,a))*a;"
"return f.y-y;"
"}"
"float W(float3 f)"
"{"
"f=abs(f);"
"if(f.x<max(f.y,f.z))"
"f=f.yzx;"
"if(f.x<max(f.y,f.z))"
"f=f.yzx;"
"float y=max(max(max(dot(f,normalize(float3(1,1,1))),dot(f.xz,normalize(float2(PHI+1,1)))),dot(f.yx,normalize(float2(1,PHI)))),dot(f.xz,normalize(float2(1,PHI)))),a=length(f);"
"return a-1.6125+.25*c(0.,.343,sin(acos(y/a-.0075)));"
"}"
"float W(float3 f,float y=.5)"
"{"
"float a=.125,z=a*y,r=INFINITY;"
"r=min(r,V(f-float3(0,0,0),float3(a*4,a,z)));"
"r=min(r,V(f-float3(0,-a*2.5,0),float3(a,a*3.5,z)));"
"f.x=abs(f.x);"
"r=min(r,V(f-float3(a*7.5,0,0),float3(a*.5,a*8,z)));"
"r=min(r,V(f-float3(a*3,a*2.5,0),float3(a,a*3.5,z)));"
"f.y=abs(f.y);"
"r=min(r,V(f-float3(0,a*7.5,0),float3(a*8,a*.5,z)));"
"r=min(r,V(f-float3(0,a*3,0),float3(a*4,a,z)));"
"return r;"
"}"
"float Z(float3 f)"
"{"
"float y=length(f.xz);"
"float3 r=float3(y,f.y,0);"
"r=E(r.yxz,PI/3,-.25,-.25,0.).yxz;"
"r=E(r.yxz,-PI/2,0.,0.,1.5).yxz;"
"r=E(r.yxz,-PI/2,-.75,-.75,-1.5).yxz;"
"return V(r,float3(.05-abs(r.y)*.02,1.5,.1))*.8;"
"}"
"float Q(float3 f)"
"{"
"if(length(f)>1.41)"
"return length(f)-1.4;"
"const float4 y[]={float4(1.,0.,0.,2.5),float4(-1.,0.,0.,2.5),float4(1.,2.,0.,2.5),float4(-1.,2.,0.,2.5),float4(1.,4.,0.,1.),float4(-1.,4.,0.,1.),float4(1.5,0.,1.5,1.2),float4(-1.5,0.,1.5,1.2),float4(1.55,2.,1.5,0.),float4(-1.5,2.,1.5,0.),float4(1.3,4.8,-.2,.3),float4(-1.3,4.8,-.2,.3),float4(0.,4.,1.,0.)};"
"float a=.1;"
"f/=a;"
"f.y+=4.8/2;"
"float r=0;"
"for(int z=0;z<13;++z)"
"r+=.5-atan(length(f-3*y[z].xyz)-y[z].w)/PI;"
"return(tan((-clamp(r,.0001,.78)-.5)*PI)+1)*a;"
"}\n"
"#endif\n"
"RWTexture2D<float4> K:register(u0);"
"SamplerState J:register(s0);"
"Texture2D j:register(t0);\n"
"#define NUM_ST_ITERATIONS 80\n"
"#define NUM_ST_ITERATIONS_REFLECTIONS 80\n"
"#define NUM_ST_ITERATIONS_REFRACTIONS 80\n"
"#define USE_SOR\n"
"#define SOR_OMEGA 1.3\n"
"#define USE_ERROR_SMOOTHING\n"
"#define NUM_ERROR_SMOOTHING_ITERATIONS 3\n"
"#define _USE_ERROR_SMOOTHING_ALONG_NORMAL\n"
"#define NUM_REFRACTIONS 8\n"
"#define NUM_REFLECTIONS 2\n"
"#define FOV 45\n"
"static const float3 ab=float3(-.5,5.5,5);"
"static const float ac=.75;"
"static const float3 ad=10*float3(1,.8,.7);\n"
"#define GRADIENT_EPSILON_THRESHOLD 0.00045\n"
"#define GRADIENT_EPSILON_MINIMUM 0.0004\n"
"#define POSITION_EPSILON_THRESHOLD 0.0045\n"
"#define POSITION_EPSILON_MINIMUM 0.004\n"
"float Q(float3 f,bool a,bool z)"
"{"
"float r=f.y+1.65,n=-t(f,10),x=2*PI/3,s=0*y*.3;"
"float3 i=f-1.85*float3(sin(x*2+s),0,cos(x*2+s)),d=f-1.85*float3(sin(x*1+s),.1,cos(x*1+s)),c=mul(t(.65),mul(t(-PI/5),(f-2*float3(sin(x*3+s),0,cos(x*3+s))).xzy).zyx);"
"float b=W(i),P=O(d,1.4,30);"
"P*=z?1.025:1;"
"float l=B(c,1),e=B(c,1,40);"
"e*=z?1.025:1;"
"l=lerp(l,e,.4);"
"float o=INFINITY;"
"I(o,r,a,v(float3(.5,.5,.5)));"
"I(o,n,a,v(float3(.5,.5,.5)));"
"I(o,e,a,F(float3(.1,1.9,.5),1.5,0.));"
"I(o,b,a,F(float3(.1,.5,1.9),1.1,.2));"
"I(o,P,a,F(float3(1.9,.5,.1),1.3));"
"return o;"
"}"
"float W(float3 f,float y,bool z)"
"{"
"float a=length(f.xz),r=a-1.5;"
"r=max(r,f.y);"
"if(r>.1)"
"return r;"
"float s=a-1;"
"s=max(s,.8-a);"
"s=I(s,-f.y,.05);"
"float x=2*3.14159/12,n=2*3.14159/48,b=N(f.z,f.x),i=b+x*.5,c=b+n*.5;"
"i=m(i,x)-x*.5;"
"c=m(c,n)-n*.5;"
"f.xz=float2(cos(i),sin(i))*a;"
"float3 l=float3(cos(c)*a,f.y,sin(c)*a),d=f;"
"f+=float3(-.9,.3,0.);"
"f.z=abs(f.z);"
"f.x-=.2;"
"f.z-=.3;"
"s=max(s,.2-length(f.xz));"
"d+=float3(-1,12,0);"
"float e=V(d,float3(.35,10+.2,.4));"
"e=L(e,V(d,float3(.5,10+.3,.2)),.05);"
"d.x-=.1;"
"l.x-=.8;"
"s=max(s,.03-length(l.xz));"
"s=min(s,e);"
"f+=float3(-.2,.6,.25);"
"f=E(f.yxz,-PI/4,0,0,.25).yxz;"
"float P=length(f.xz)-.047;"
"P=max(P,-.2-d.x);"
"I(y,s,z,v(float3(.8,.9,1)));"
"M(s,P,z,F(8*float3(.1,.5,1.9),1.3,.25));"
"return s;"
"}"
"float Z(float3 f,bool y,bool z)"
"{"
"float a=f.y+2.05,r=-t(f,20),s=W(f)*(z?1:.67),n=V(f-float3(0,0,0),float3(1,1,1)),x=max(max(t(f-float3(0,1,0),2),-t(f-float3(0,1.1,0),1.95)),f.y-1.7)*(z?1:.9),b=O(f,1.4,30)*(z?1:.9),d=u(f,1),e=INFINITY;"
"I(e,a,y,v(3*float3(.5,.5,.5)));"
"I(e,r,y,v(3*float3(.5,.5,.5)));"
"I(e,x,y,E(f*float3(.25,.25,200)));"
"return e;"
"}"
"float k(float3 f,bool y,bool z)"
"{"
"float a=f.y+2.05,r=-t(f,10),s=W(f),e=INFINITY;"
"I(e,a,y,v(float3(.5,.5,.5)));"
"I(e,r,y,v(float3(.5,.5,.5)));"
"I(e,s,y,F(float3(.1,1.9,.5),1.1));"
"return e;"
"}"
"float o(float3 f,bool y,bool z)"
"{"
"float a=INFINITY,r=-Y(f,float3(10,10,10));"
"I(a,r,y,v(float3(.5,.5,.5)));"
"float s=W(f);"
"M(a,s,y,F(1*float3(0.,.3333,1.),1.1));"
"return a;"
"}"
"float ae(float3 f)"
"{"
"return o(f,true,false);"
"}"
"float af(float3 f)"
"{"
"return o(f,false,true);"
"}"
"float ag(float3 f)"
"{"
"return o(f,false,false);"
"}"
"float3 Q(float3 f,float y)"
"{"
"const float3 a[]={{y,0,0},{-y,0,0},{0,y,0},{0,-y,0},{0,0,y},{0,0,-y}};"
"float r[6];"
"for(int z=0;z<6;++z)"
"r[z]=af(f+a[z]);"
"return float3(r[0]-r[1],r[2]-r[3],r[4]-r[5]);"
"}"
"float ae(float3 f,float3 y,float a)"
"{"
"return(ag(f+a*y)-2*ag(f)+ag(f-a*y))/(a*a);"
"}"
"float D(float3 f,float3 y,float3 z,float a)"
"{"
"return(ag(f+a*y+a*z)-ag(f+a*y-a*z)+ag(f-a*y-a*z)-ag(f-a*y+a*z))/(4*a*a);"
"}"
"float3x3 Z(float3 f,float y)"
"{"
"float3 a=float3(1,0,0),r=float3(0,1,0),z=float3(0,0,1),s=float3(D(f,a,y),D(f,r,y),D(f,z,y)),n=float3(D(f,a,r,y),D(f,r,z,y),D(f,z,a,y));"
"return float3x3(s.x,n.x,n.z,n.x,s.y,n.y,n.z,n.y,s.z);"
"}"
"float af(float3 f,float3 y,float z)"
"{"
"float3x3 a=Z(f,z);"
"return dot(mul(c(a),y),y);"
"}"
"float ag(float3 f,float3 y,float z)"
"{"
"float3x3 a=Z(f,z);"
"float r=a[0][0]+a[1][1]+a[2][2];"
"return-dot(mul(a,y),y)+r;"
"}"
"float C(float3 f,float3 y,float a,float z,float r)"
"{"
"float s=1,x=1;"
"for(float i=1;i<=r;++i)"
"s-=(i*a*z-abs(ag(f+y*i*z)))/(x*=2);"
"return saturate(s);"
"}"
"float E(float3 f,float3 y,float z,float a)"
"{"
"float r=1,x=1;"
"for(float s=1;s<=a;++s)"
"r-=(s*z-abs(ag(f+y*s*z)))/(x*=2);"
"return saturate(r);"
"}"
"float3 F(float3 f,float3 y,float3 z,float a)"
"{"
"float r=E(f,z,.3,4);"
"float3 s=reflect(y,z);"
"float n=saturate(-dot(z,y)),x=C(f,s,n,.1,4);"
"x*=x;"
"float i=saturate(max(X.roughness,a)),b=X.metallic,d=lerp(.04,1.,b);"
"float3 c=lerp(1,X.color,b)*lerp(1,r,i)*x,e=lerp(X.color,0,b)*r,l=G(f,z,-y,s,ab,ac,e,c,i,d)*ad;"
"l+=X.emissive;"
"return l;"
"}"
"float3 p(float3 f,float y,out float r)"
"{"
"float z=max(abs(y),GRADIENT_EPSILON_MINIMUM);"
"float3 a=Q(f,z);"
"float s=length(a);"
"r=1-saturate(s/(2*z));"
"return a/s;"
"}"
"void B(float3 f,float3 y,float a,float z,inout float3 r,inout float s)"
"{"
"for(int i=0;i<NUM_ERROR_SMOOTHING_ITERATIONS;++i)"
"r-=a*y*(s-ag(r)),s=z*a*distance(f,r);"
"}"
"void C(float3 f,float3 y,float a,float z,inout float3 r,inout float s)"
"{"
"for(int i=0;i<NUM_ERROR_SMOOTHING_ITERATIONS;++i)"
"r+=y*(s-ag(r)),s=z*a*distance(f,r);"
"}\n"
"#define ST_T(X)(X).x\n"
"#define ST_SIGN(X)((X).y<0?-1:+1)\n"
"#define ST_ABS_RADIUS(X)abs((X).y)\n"
"#define ST_RADIUS(X)(X).y\n"
"#define ST_HIT(X)((X).x!=INFINITY)\n"
"float2 D(float3 f,float3 y,float z,float a,int r,bool s)"
"{"
"float l=.0001,x=SOR_OMEGA,n=l,b=0,m=0,d=ag(f)<0?-1:1;"
"float2 i={0,INFINITY};"
"for(int e=0;e<r;++e)"
"{"
"float c=d*ag(y*n+f),I=abs(c);"
"\n#ifdef USE_SOR\n"
"bool X=x>1&&I+b<m;"
"if(X)"
"m=m-x*m,x=1;"
"else"
" m=c*x;"
"\n#else\n"
"m=c;"
"\n#endif\n"
"b=I;"
"float P=I/n;"
"\n#ifdef USE_SOR\n"
"if(!X&&P<i.y)"
"i=float2(n,P);"
"if(!X&&P<a||n>z)"
"break;"
"\n#else\n"
"if(P<i.y)"
"i=float2(n,P);"
"if(P<a||n>z)"
"break;"
"\n#endif\n"
"n+=m;"
"}"
"return float2((n>z||i.y>a)&&!s?INFINITY:i.x,d*max(i.x*i.y,POSITION_EPSILON_MINIMUM));"
"}"
"float3 D(float3 f,float3 y,float3 a,float2 r,float z)"
"{"
"bool i=true;"
"float3 x=1,s=0;"
"[fastopt]"
"for(int n=0;n<NUM_REFLECTIONS&&i;++n)"
"{"
"x*=saturate(1-G(y,a,1,X.eta));"
"y=reflect(y,a);"
"f+=a*ST_ABS_RADIUS(r);"
"r=D(f,y,30,z,NUM_ST_ITERATIONS_REFLECTIONS,true);"
"if(!ST_HIT(r))"
"break;"
"float3 l=y*ST_T(r)+f;"
"float b=z*ST_SIGN(r)*ST_T(r);"
"\n#if defined(USE_ERROR_SMOOTHING)&&!defined(USE_ERROR_SMOOTHING_ALONG_NORMAL)\n"
"B(f,y,ST_SIGN(r),z,l,b);"
"\n#endif\n"
"float d;"
"a=p(l,b,d);"
"\n#if defined(USE_ERROR_SMOOTHING)&&defined(USE_ERROR_SMOOTHING_ALONG_NORMAL)\n"
"C(f,a,ST_SIGN(r),z,l,b);"
"\n#endif\n"
"ST_RADIUS(r)=ST_SIGN(r)*max(abs(ae(l)),POSITION_EPSILON_MINIMUM);"
"i=F(X);"
"a*=ST_SIGN(r);"
"if(!i)"
"s=x*F(l,y,a,d);"
"f=l;"
"}"
"return s;"
"}"
"float3 F(float3 f,float3 y,float3 a,float2 r,float z)"
"{"
"bool i=true;"
"float3 x=1,s=0;"
"[fastopt]"
"for(int n=0;n<NUM_REFRACTIONS&&i;++n)"
"{"
"float b=1.,d=X.eta;"
"if(ST_SIGN(r)<0)"
"b=X.eta,d=1.;"
"x*=saturate(G(y,a,b,d));"
"float3 l=refract(y,a,b/d);"
"bool c=abs(dot(l,l))==0;"
"y=c?reflect(y,a):l;"
"f-=2*a*(c?-1:1)*ST_ABS_RADIUS(r);"
"r=D(f,y,30,z,NUM_ST_ITERATIONS_REFRACTIONS,true);"
"if(!ST_HIT(r))"
"break;"
"float3 m=y*ST_T(r)+f;"
"float P=z*ST_SIGN(r)*ST_T(r);"
"\n#if defined(USE_ERROR_SMOOTHING)&&!defined(USE_ERROR_SMOOTHING_ALONG_NORMAL)\n"
"B(f,y,ST_SIGN(r),z,m,P);"
"\n#endif\n"
"float e;"
"a=p(m,abs(P),e);"
"if(ST_SIGN(r)<0)"
"x*=exp(-ST_T(r)*X.attenuation.xyz);"
"\n#if defined(USE_ERROR_SMOOTHING)&&defined(USE_ERROR_SMOOTHING_ALONG_NORMAL)\n"
"C(f,a,ST_SIGN(r),z,m,P);"
"\n#endif\n"
"ST_RADIUS(r)=ST_SIGN(r)*max(abs(ae(m)),POSITION_EPSILON_MINIMUM);"
"i=o(X);"
"a=dot(y,a)>0?-a:a;"
"if(!i||i&&n<=1)"
"s+=F(m,y,a,e)*x;"
"f=m;"
"}"
"return s;"
"}"
"float3 q(float3 f,float3 y,float z)"
"{"
"float2 a=D(f,y,30,z,NUM_ST_ITERATIONS,true);"
"float3 r=y*ST_T(a)+f;"
"float s=z*ST_SIGN(a)*ST_T(a);"
"\n#if defined(USE_ERROR_SMOOTHING)&&!defined(USE_ERROR_SMOOTHING_ALONG_NORMAL)\n"
"B(f,y,ST_SIGN(a),z,r,s);"
"\n#endif\n"
"float n;"
"float3 x=p(r,s,n)*ST_SIGN(a);"
"\n#if defined(USE_ERROR_SMOOTHING)&&defined(USE_ERROR_SMOOTHING_ALONG_NORMAL)\n"
"C(f,x,ST_SIGN(a),z,r,s);"
"\n#endif\n"
"ST_RADIUS(a)=ST_SIGN(a)*max(abs(ae(r)),POSITION_EPSILON_MINIMUM);"
"float3 i=F(r,y,x,n);"
"Material c=X;"
"if(o(c))"
"i+=F(r,y,dot(y,x)>0?-x:x,a,z);"
"if(F(c))"
"i+=D(r,y,x,a,z);"
"if(ST_SIGN(a)<0)"
"i*=exp(-ST_T(a)*c.attenuation.xyz);"
"return i;"
"}"
"[numthreads(16,16,1)]"
"void ah(int3 f:SV_DispatchThreadID)"
"{"
"float2 y;"
"K.GetDimensions(y.x,y.y);"
"float2 a=(f.xy+.5)/y,r=(a*2-1)*float2(y.x/y.y,-1.);"
"float3 s=cross(d,z),n=z,b=-d,x=l,i=normalize(mul(transpose(float3x3(s,n,b)),float3(r/2,-.5/tan(1.57075*FOV/180.))));"
"float c=tan(1.57075*FOV/180.)/y.y;"
"float3 m=q(x,i,c);"
"float4 e=float4(m,1);"
"if(isnan(dot(e,e))||isinf(dot(e,e)))"
"{"
"K[f.xy]=float4(0,1,0,1);"
"return;"
"}"
"K[f.xy]=e;"
"}";
#endif // SHADER_CODE_H_