539 lines
17 KiB
C
539 lines
17 KiB
C
/* File generated with Shader Minifier 1.1.3
|
|
* http://www.ctrl-alt-test.fr
|
|
*/
|
|
#ifndef SHADER_H_
|
|
# define SHADER_H_
|
|
# define VAR_PI "x"
|
|
# define VAR_BACKBUFFER "i"
|
|
# define VAR_CLAMPSAMPLETYPE "s"
|
|
# define VAR_CMPSAMPLER "l"
|
|
# define VAR_SAMPLETYPE "t"
|
|
# define VAR_SHADERTEXTURE "f"
|
|
# define VAR_SHADOWTEXTURE "o"
|
|
# define VAR_TERRAINDIFFUSETEXTURE "c"
|
|
|
|
const char *Shader_hlsl =
|
|
"cbuffer _0:register(b0){float _t:TIME;uint _sh:SHADER;uint _sy:HEIGHT;float _a:ASPET;};struct _2{float3 o:POSITION;float2 tc:TEXCOORD0;};struct _3{float4 o:SV_POSITION;float4 c:COLOR;sample float2 tc:TEXCOORD0;float3 n:TEXCOORD1;};struct _4{float e[4]:SV_TessFactor;float i[2]:SV_InsideTessFactor;};struct _5{float3 o:POSITION;float2 tc:TEXCOORD0;float4 c:COLOR;float4 _t:TRANSLATION;float4 _r:ROTATION;float4 _s:SCALE;};struct _6{float4 _t:TRANSLATION;float4 _r:ROTATION;float4 _s:SCALE;float4 tc:TEXCOORD0;};struct __1{float4 _d:_dS;float4 _c:_cS;float4x4 _v:_vS;float4x4 _p:_pS;float4x4 _lvp:_lvpS;float4 _f:_fS;float4 _r1:_lS;float4 _r2:_gS;float4 _r3:_nS;float4 _l:lS;};cbuffer _1:register(b1){__1 _c;};Texture2D f:register(t0),c:register(t1),o:register(t2);"
|
|
"Texture2DMS<float4,4> i:register(t3);"
|
|
"SamplerState t:register(s0),s:register(s2);"
|
|
"SamplerComparisonState l:register(s1);"
|
|
"static const float x=3.14159;"
|
|
"float4 p(float4 f)"
|
|
"{"
|
|
"return f/sqrt(dot(f,f));"
|
|
"}"
|
|
"float4 p(float4 f,float4 c)"
|
|
"{"
|
|
"return float4(cross(f.xyz,c.xyz)+f.w*c.xyz+c.w*f.xyz,f.w*c.w-dot(f.xyz,c.xyz));"
|
|
"}"
|
|
"float4 n(float4 c)"
|
|
"{"
|
|
"return float4(-c.xyz,c.w);"
|
|
"}"
|
|
"float4 n(float3 f,float x)"
|
|
"{"
|
|
"return float4(f*sin(x/2),cos(x/2));"
|
|
"}"
|
|
"float d(float2 f)"
|
|
"{"
|
|
"return frac(sin(dot(f,float2(12.9898,78.233)))*43758.5);"
|
|
"}"
|
|
"float3 m(float2 f)"
|
|
"{"
|
|
"float2 c=floor(f),o=f-c,s=30*o*o*(o*(o-2)+1);"
|
|
"o=o*o*o*(o*(o*6-15)+10);"
|
|
"float l=d(c+float2(0,0)),m=d(c+float2(1,0)),n=d(c+float2(0,1)),r=d(c+float2(1,1)),t=m-l,y=n-l,i=l-m-n+r;"
|
|
"return float3(l+t*o.x+y*o.y+i*o.x*o.y,s*float2(t+i*o.y,y+i*o.x));"
|
|
"}"
|
|
"float3 d(float2 f,int c,float x,float l)"
|
|
"{"
|
|
"float o=0.,i=.5;"
|
|
"float2 y=float2(0,0);"
|
|
"for(int r=0;r<c;r++)"
|
|
"{"
|
|
"float3 s=m(f);"
|
|
"y+=s.yz;"
|
|
"o+=i*s.x/(1.+dot(y,y));"
|
|
"i*=l;"
|
|
"f*=x;"
|
|
"}"
|
|
"return float3(o,y);"
|
|
"}"
|
|
"float4x4 d(float3 f,float3 x,float3 c)"
|
|
"{"
|
|
"float3 o=normalize(cross(c,x)),s=cross(x,o);"
|
|
"float4x4 l={o,-dot(o,f),s,-dot(s,f),x,-dot(x,f),0,0,0,1};"
|
|
"return transpose(l);"
|
|
"}"
|
|
"float e(float2 f)"
|
|
"{"
|
|
"return 20.*max(0.,1.5-8.*pow(length(f-.5),1.));"
|
|
"}"
|
|
"float4 w(float2 x)"
|
|
"{"
|
|
"return f.SampleLevel(t,x,0)*float4(e(x),1.,1.,1.);"
|
|
"}"
|
|
"void e(float f,float o,out float3 c)"
|
|
"{"
|
|
"c=(float3(d(float2(f,o++)),d(float2(f,o++)),d(float2(f,o++)))*2-1)*float3(64,3,64),c.y+=4+e(c.xz/512.+.5),c.y=smoothstep(3.,13.,c.y)*10.+3.;"
|
|
"}"
|
|
"void e(int f,out float3 c,out float3 x,out float3 o)"
|
|
"{"
|
|
"float t=f;"
|
|
"float3 l,y,s,z,r;"
|
|
"e(t,f++,l);"
|
|
"e(t,f++,y);"
|
|
"e(t,f++,s);"
|
|
"e(t,f++,z);"
|
|
"c=lerp(l,y,frac(_t));"
|
|
"x=normalize(lerp(s,z,frac(_t))-c);"
|
|
"r=cross(float3(0,1,0),x);"
|
|
"o=cross(x,r);"
|
|
"}"
|
|
"__1 VSCB()"
|
|
"{"
|
|
"__1 f;"
|
|
"float c=-cos(x*2*_t/19)*.5+.5;"
|
|
"f._l=float4(lerp(float3(-1.,.2,0.),float3(.1,-.7,0.),c),0.);"
|
|
"f._f=float4(lerp(float3(.3,.2,0.),float3(.1,.5,.7),c),c);"
|
|
"f._r1=float4(lerp(float3(0.,0.,.1),float3(0.,.1,.1),c),1.);"
|
|
"f._r2=float4(lerp(float3(.2,0.,.3),float3(.6,.5,.6),c),1.);"
|
|
"f._r3=float4(lerp(float3(.8,.6,0.),float3(.7,.6,.5),c),1.);"
|
|
"int l[19]={55,58,2,7,111,11,90,0,17,39,83,29,91,69,55,59,51,61,55};"
|
|
"float3 o,y,z;"
|
|
"e(l[floor(_t)],o,y,z);"
|
|
"f._v=d(o,y,z);"
|
|
"float3 t=o+y*25;"
|
|
"t.y=o.y;"
|
|
"float3 m=normalize(f._l);"
|
|
"t-=m*25;"
|
|
"f._d=float4(y,0);"
|
|
"f._c=float4(o,0);"
|
|
"f._p=float4x4(.04,0,0,0,0,.04,0,0,0,0,.0005,0,0,0,-.0005,1);"
|
|
"f._lvp=mul(d(t,m,y),f._p);"
|
|
"f._p=float4x4(1,0,0,0,0,1,0,0,0,0,1,1,0,0,-1,0);"
|
|
"return f;"
|
|
"}"
|
|
"void VSC(uint f:SV_VertexID,out _2 c)"
|
|
"{"
|
|
"float o=f%512,x=f/512;"
|
|
"c.o=float3(-256+o,0,-256+x);"
|
|
"c.tc=(float2(o,x)+.5)/512;"
|
|
"}"
|
|
"void VSV(uint f:SV_VertexID,out _2 c)"
|
|
"{"
|
|
"uint o=f%2048;"
|
|
"float x=f/2048;"
|
|
"uint l=o%4;"
|
|
"float t=o/4;"
|
|
"c.o=float3(-256+t,0,-256+x);"
|
|
"if(l==0)"
|
|
"c.o+=float3(-.5f,0,-.5f),c.tc=float2(t,x)/512;"
|
|
"else"
|
|
" if(l==1)"
|
|
"c.o+=float3(-.5f,0,.5f),c.tc=float2(t,x+1)/512;"
|
|
"else"
|
|
" if(l==2)"
|
|
"c.o+=float3(.5f,0,.5f),c.tc=float2(t+1,x+1)/512;"
|
|
"else"
|
|
" c.o+=float3(.5f,0,-.5f),c.tc=float2(t+1,x)/512;"
|
|
"}"
|
|
"void VS(_2 f,out _5 c)"
|
|
"{"
|
|
"c.o=f.o,c.tc=f.tc,c.c=c._r=c._s=0,c._t=float4(0,w(f.tc).x,0,0);"
|
|
"}"
|
|
"float d(float3 f,float3 x)"
|
|
"{"
|
|
"float4 c=mul(float4((f+x)/2,1),_c._v),o=c;"
|
|
"o.x++;"
|
|
"float4 t=mul(c,_c._p),s=mul(o,_c._p);"
|
|
"float l=distance(t/t.w,s/s.w)/8;"
|
|
"return clamp(l,0,64);"
|
|
"}"
|
|
"bool P(const float3 f)"
|
|
"{"
|
|
"float3 c=f-_c._c.xyz,x=_c._d.xyz*dot(c,_c._d.xyz)-c;"
|
|
"float4 o=mul(mul(float4(f+normalize(x)*min(1.4,length(x)),1.),_c._v),_c._p);"
|
|
"o/=o.w;"
|
|
"return abs(o.x)<=1.&&abs(o.y)<=1.&&o.w>=0||length(c)<=1.4;"
|
|
"}"
|
|
"_4 CPCFT(InputPatch<_5, 4> f)"
|
|
"{"
|
|
"_4 c;"
|
|
"float3 x=f[0].o+f[0]._t,o=f[1].o+f[1]._t,y=f[2].o+f[2]._t,t=f[3].o+f[3]._t;"
|
|
"if(distance(x,_c._c.xyz)>200||!P(x)&&!P(o)&&!P(y)&&!P(t))"
|
|
"c.i[0]=c.i[1]=c.e[0]=c.e[1]=c.e[2]=c.e[3]=-1;"
|
|
"else"
|
|
" c.e[0]=d(x,o),c.e[1]=d(o,y),c.e[2]=d(y,t),c.e[3]=d(t,x),c.i[1]=(c.e[0]+c.e[2])/2,c.i[0]=(c.e[1]+c.e[3])/2;"
|
|
"return c;"
|
|
"}"
|
|
"_4 CPCFP(InputPatch<_5, 4> f)"
|
|
"{"
|
|
"_4 c;"
|
|
"float3 x=f[0].o+f[0]._t,o=f[1].o+f[1]._t,l=f[2].o+f[2]._t,y=f[3].o+f[3]._t;"
|
|
"if(distance(x,_c._c.xyz)>200||!P(x)&&!P(o)&&!P(l)&&!P(y))"
|
|
"c.i[0]=c.i[1]=c.e[0]=c.e[1]=c.e[2]=c.e[3]=-1;"
|
|
"else"
|
|
" c.e[0]=c.e[2]=1,c.e[1]=c.e[3]=8,c.i[0]=8,c.i[1]=1;"
|
|
"return c;"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"[partitioning(\"fractional_even\")]"
|
|
"[outputtopology(\"triangle_cw\")]"
|
|
"[outputcontrolpoints(4)]"
|
|
"[patchconstantfunc(\"CPCFT\")]"
|
|
"_5 HS(InputPatch<_5, 4> f,uint c:SV_OutputControlPointID)"
|
|
"{"
|
|
"return f[c];"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"[partitioning(\"fractional_even\")]"
|
|
"[outputtopology(\"triangle_cw\")]"
|
|
"[outputcontrolpoints(4)]"
|
|
"[patchconstantfunc(\"CPCFP\")]"
|
|
"_5 HSP(InputPatch<_5, 4> f,uint c:SV_OutputControlPointID)"
|
|
"{"
|
|
"return f[c];"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"void DS(_4 f,float2 c:SV_DomainLocation,const OutputPatch<_5, 4> o,out _2 x)"
|
|
"{"
|
|
"x.tc=lerp(lerp(o[0].tc,o[1].tc,c.x),lerp(o[3].tc,o[2].tc,c.x),c.y);"
|
|
"x.o=lerp(lerp(o[0].o,o[1].o,c.x),lerp(o[3].o,o[2].o,c.x),c.y);"
|
|
"x.o.y+=w(x.tc).x;"
|
|
"if(_sh==2)"
|
|
"x.o.y=5-x.o.y;"
|
|
"}"
|
|
"void VST(uint f:SV_VertexID,out _3 c)"
|
|
"{"
|
|
"if(f==0)"
|
|
"c.o=float4(-1.,-1.,0.,1.);"
|
|
"else"
|
|
" if(f==1)"
|
|
"c.o=float4(-1.,1.,0.,1.);"
|
|
"else"
|
|
" if(f==2)"
|
|
"c.o=float4(1.,-1.,0.,1.);"
|
|
"else"
|
|
" c.o=float4(1.,1.,0.,1.);"
|
|
"c.tc=c.o.xy*.5+.5;"
|
|
"c.c=0;"
|
|
"c.n=_c._c;"
|
|
"}"
|
|
"void VSTP(_2 f,out _3 c)"
|
|
"{"
|
|
"c.o=mul(mul(float4(f.o,1),_c._v),_c._p),c.c=mul(float4(f.o,1),_c._lvp),c.tc=f.tc,c.n=f.o;"
|
|
"}"
|
|
"float r(float4 c)"
|
|
"{"
|
|
"return max(0,min(1,smoothstep(.4,.7,c.w)*smoothstep(3.,3.5,c.x)));"
|
|
"}"
|
|
"float V(float4 c)"
|
|
"{"
|
|
"return max(smoothstep(-.4,-.2,-c.w),smoothstep(-3.5,-3.,-c.x));"
|
|
"}"
|
|
"float3 a(float2 f)"
|
|
"{"
|
|
"float2 c=2*f-1;"
|
|
"float3 x=normalize(cross(float3(0,1,0),_c._d));"
|
|
"return normalize(_c._d+x*c.x*_a+normalize(cross(_c._d,x))*c.y);"
|
|
"}"
|
|
"float3 S(float3 c)"
|
|
"{"
|
|
"return pow(saturate(1-c.y),4)*.2+_c._f;"
|
|
"}"
|
|
"float4 PS(_3 f):SV_TARGET"
|
|
"{"
|
|
"float x=1.,y=1.f;"
|
|
"float2 s=f.tc;"
|
|
"float4 i=w(s);"
|
|
"float3 m=S(a(f.tc));"
|
|
"if(i.x<2.5)"
|
|
"{"
|
|
"if(_sh==2)"
|
|
"discard;"
|
|
"else"
|
|
" x=(.5-normalize(f.n-_c._c).y)*saturate(i.x/2.5);"
|
|
"m*=.8;"
|
|
"}"
|
|
"float p=distance(f.n,_c._c);"
|
|
"float3 z=normalize(float3(i.y,-1,i.z)),n=d(s*2000,4,1.5,.95);"
|
|
"z=normalize(float3(n.y,-1,n.z))*(1-r(i))+z;"
|
|
"float P=saturate(p/50.);"
|
|
"if(P<1)"
|
|
"{"
|
|
"float3 V=f.c/f.c.w;"
|
|
"float2 e=V.xy*.5+.5;"
|
|
"e=float2(e.x,1-e.y);"
|
|
"float O=0.;"
|
|
"for(float h=-1.5;h<=1.5;h++)"
|
|
"for(float D=-1.5;D<=1.5;D++)"
|
|
"O+=o.SampleCmpLevelZero(l,e+float2(D,h)/4096,V.z);"
|
|
"y=lerp(O/16.,1,P);"
|
|
"}"
|
|
"float D=.2+.8*(.2+.8*_c._f.w)*(i.x/10.),u=max(0,dot(z,normalize(_c._l)));"
|
|
"float3 e=c.Sample(t,float2(s.x,1.-s.y)).xyz;"
|
|
"e*=lerp(1.,2*d(s*float2(10000,20000),4,1.5,.95).x,r(i));"
|
|
"float3 V=m*D,O=_c._f.w*float3(2.,2.,1.)*u*(.2+.8*y);"
|
|
"return float4(lerp((O+V)*e,m,max(0,min(1,p/200.))),x);"
|
|
"}"
|
|
"float4 PSTD(_3 c):SV_TARGET"
|
|
"{"
|
|
"float2 f=c.tc;"
|
|
"float4 o=w(f);"
|
|
"float3 x=d(f*2000,4,2.,.5),s=m(f*1000),y=d(f*1000,8,1.5,.95),t=lerp(lerp(float3(.57,.51,0.),float3(.16,.37,.1),s.x),float3(.03,.21,.24),x.x),l=float3(.56,.62,.67),z=lerp(lerp(float3(.41,.37,.12),float3(.57,.51,.32),s.x),l,x.x),i=lerp(l,float3(.27,.22,.11),s.x);"
|
|
"i*=.5*y.x;"
|
|
"float3 P=lerp(i,.5*z,V(o)),e=lerp(P*(.5+.5*m(f*900).x),.5*t,r(o));"
|
|
"e*=.25+(o.x/10-.25)*step(o.x,2.5)+.75*sqrt(smoothstep(2.5,3.,o.x));"
|
|
"return float4(e,1);"
|
|
"}"
|
|
"float4 PSH(_3 c):SV_TARGET"
|
|
"{"
|
|
"float2 f=d(c.tc*20,3,2.,.5).yz;"
|
|
"return float4(d(c.tc*20,10,2.,.5).x,f,normalize(float3(f.x,.5,f.y)).y);"
|
|
"}"
|
|
"bool P(float3 f,float3 c,float3 x,float3 o,out float y)"
|
|
"{"
|
|
"float t=dot(f,o);"
|
|
"if(t>0)"
|
|
"return y=dot(c-x,f)/t,y>=0;"
|
|
"return false;"
|
|
"}"
|
|
"float4 PSC(_3 c):SV_TARGET"
|
|
"{"
|
|
"float f=0;"
|
|
"float3 o=_c._c,x=a(c.tc);"
|
|
"float y=0,t=2.;"
|
|
"if(P(float3(0,-1,0),float3(0,0,0),o,x,f))"
|
|
"o+=x*f,x.y*=-1,y=-.4,t=1.2;"
|
|
"if(P(float3(0,1,0),float3(0,200,0),o,x,f))"
|
|
"o+=x*f,y+=pow(abs(d(_t*.1-o.xz/80,6,2.,.5)),.1)*smoothstep(.1,.9,pow(abs(d(-_t*.1-o.zx/400,6,1.7,.49)),.6))*(1-pow(min(1,max(0,abs(f)/100000.)),.1));"
|
|
"float3 l=S(x);"
|
|
"return float4(lerp(l,lerp((1-x.y*.5)*l,t,y),pow(x.y,.4))+smoothstep(.995,.998,dot(x,-normalize(_c._l)))*float3(2.,2.,1.),1);"
|
|
"}"
|
|
"float4 PSDD(_3 c,uint f:SV_SAMPLEINDEX):SV_TARGET"
|
|
"{"
|
|
"uint o,y,z;"
|
|
"i.GetDimensions(o,y,z);"
|
|
"float2 t=float2(c.tc.x,1-c.tc.y);"
|
|
"float3 l=i.Load(t*float2(o-1,y-1),f).xyz;"
|
|
"l+=pow(1e-05+_c._f.w,.1)*smoothstep(0.,1.,pow(saturate(dot(a(c.tc),-normalize(_c._l))),1./(.1+1-_c._f.w)))*float3(2.,2.,1.)*.2;"
|
|
"l=pow(abs(l*(_c._r3-_c._r1)+_c._r1),2*(1-_c._r2));"
|
|
"l*=1.4-pow(1.2*distance(t,float2(.5,.5)),2);"
|
|
"l*=1+.07*m((t+sin(_t*333))*333).x;"
|
|
"l*=1+.05*pow(m(float2(1,_t*222)).x,8);"
|
|
"l*=min(1,_c._f.w*33)*min(1,abs(sin(_t*x)*9));"
|
|
"return float4(l,1);"
|
|
"}"
|
|
"float4 P(_3 f,float3 c,float3 o,float2 x)"
|
|
"{"
|
|
"float y=distance(f.n,_c._c);"
|
|
"float3 t=lerp(c,o,x.x);"
|
|
"t=lerp(t.xyz,t.yxz,f.c.x*.5)*pow(abs(x.y),f.c.y);"
|
|
"float2 s=f.n.xz/256*.5+.5;"
|
|
"float4 l=w(float2(s.x,s.y));"
|
|
"float3 i=normalize(float3(l.y,-1,l.z));"
|
|
"float P=max(0,dot(i,normalize(_c._l))),m=S(a(f.tc)),z=.2+.8*(.2+.8*_c._f.w)*(l.x/10.);"
|
|
"float3 p=m*z,n=_c._f.w*float3(1.5,1.5,.6)*P;"
|
|
"return float4(lerp(t*(n+p),_c._f.xyz,max(0,min(1,y/200.))),1.-min(1,y/100.));"
|
|
"}"
|
|
"float4 PSTN(_3 f):SV_TARGET"
|
|
"{"
|
|
"return P(f,float3(.67,.71,.14),float3(.06,.37,.17),c.Sample(t,f.tc).xy);"
|
|
"}"
|
|
"float4 PSTS(_3 c):SV_TARGET"
|
|
"{"
|
|
"return float4(c.c.z/c.c.w,0,0,0);"
|
|
"}"
|
|
"float4 FSTN(_3 f):SV_TARGET"
|
|
"{"
|
|
"return P(f,float3(1,0,1),1,c.Sample(t,f.tc).zw);"
|
|
"}"
|
|
"float4 PSP(_3 c):SV_TARGET"
|
|
"{"
|
|
"float o=c.tc.y,y=c.tc.x;"
|
|
"float2 l=c.tc*float2(.5,.25)+float2(.4,0);"
|
|
"float3 s=f.Sample(t,l).xyz;"
|
|
"float z=(1+max(0,sin(pow(2-2*o,2)))*max(0,sin(y*5*x))*max(step(.75,y),step(y,.25)))*(1-.2*min(1,1.25*cos((-y+.5)*5*x)*min(step(.4,y),step(y,.6))))*max(sin((1-o)*x),step(.5,1-o))*pow(abs(s.x),.25),i=o+.3*sin(y*8+4)-.2;"
|
|
"return float4(o,z,smoothstep(i-.1,i+.1,.7+.1*s.x),(s.x*.4+.6)*(1-min(1,pow(abs(o),4))));"
|
|
"}"
|
|
"void VSP(_6 f,uint c:SV_VertexID,out _5 x)"
|
|
"{"
|
|
"uint o=c%4;"
|
|
"if(o==0)"
|
|
"x.o=float3(0,-1.,1.);"
|
|
"else"
|
|
" if(o==1)"
|
|
"x.o=float3(0,1.,1.);"
|
|
"else"
|
|
" if(o==2)"
|
|
"x.o=float3(0,1.,-1.);"
|
|
"else"
|
|
" x.o=float3(0,-1.,-1.);"
|
|
"x.tc=x.o.yz*.5+.5;"
|
|
"x.c=float4(f.tc.zw,0,0);"
|
|
"x._t=f._t;"
|
|
"x._r=f._r;"
|
|
"x._s=f._s;"
|
|
"}"
|
|
"void S(inout _3 f,int c,const OutputPatch<_5, 4> o,float2 y)"
|
|
"{"
|
|
"float2 l=lerp(lerp(o[0].tc,o[1].tc,y.x),lerp(o[3].tc,o[2].tc,y.x),y.y);"
|
|
"float t=l.x,s=l.y,i=_t*8,z=(2*sin(pow(1-t+.825,3)*.15*x)-.5)*.1;"
|
|
"float3 r=float3(t,-pow(t,4)+.07*((max(sin(s*2*x),sin(s*2*x+x))+sin(s*x))/1.765),(2*s-1)*z);"
|
|
"r=p(p(o[0]._r,float4(r,0)),n(o[0]._r));"
|
|
"r*=(.5+o[0]._s.x)*.7*(.7+.3*o[0].c.x);"
|
|
"r+=m(o[0]._t.xz+r.xz*.2+i)*pow(abs(t),8)*(.2+.1*sin(i));"
|
|
"r.xyz+=o[0]._t.xyz;"
|
|
"f.n=r;"
|
|
"f.tc=l.yx;"
|
|
"float4 P=mul(float4(r,1.f),_c._lvp);"
|
|
"if(c==0)"
|
|
"f.o=mul(mul(float4(r,1.f),_c._v),_c._p),f.c=o[0].c;"
|
|
"else"
|
|
" f.o=P,f.c=f.o;"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"void DSPN(_4 f,float2 c:SV_DomainLocation,const OutputPatch<_5, 4> o,out _3 x)"
|
|
"{"
|
|
"S(x,0,o,c);"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"void DSPS(_4 f,float2 c:SV_DomainLocation,const OutputPatch<_5, 4> o,out _3 x)"
|
|
"{"
|
|
"S(x,1,o,c);"
|
|
"}"
|
|
"void V(inout _3 f,int c,const OutputPatch<_5, 4> o,float2 x)"
|
|
"{"
|
|
"float2 l=lerp(lerp(o[0].tc,o[1].tc,x.x),lerp(o[3].tc,o[2].tc,x.x),x.y);"
|
|
"float y=l.x,s=l.y,z=.2*lerp(lerp(8*y,0,pow(y,2)),0,y);"
|
|
"float3 t=float3(y,-log(pow(y,.85)+1),(2*s-1)*z);"
|
|
"t=p(p(o[0]._r,float4(t,0)),n(o[0]._r));"
|
|
"t*=(.5+o[0]._s.x)*.3*(.7+.3*o[0].c.x);"
|
|
"t.xyz+=o[0]._t.xyz;"
|
|
"t+=m(t.xz+_t)*pow(abs(y),2)*(.05+.02*sin(_t));"
|
|
"f.n=t;"
|
|
"f.tc=l.yx;"
|
|
"float4 P=mul(float4(t,1.f),_c._lvp);"
|
|
"if(c==0)"
|
|
"f.o=mul(mul(float4(t,1.f),_c._v),_c._p),f.c=o[0].c;"
|
|
"else"
|
|
" f.o=P,f.c=f.o;"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"void DSFN(_4 f,float2 c:SV_DomainLocation,const OutputPatch<_5, 4> o,out _3 x)"
|
|
"{"
|
|
"V(x,0,o,c);"
|
|
"}"
|
|
"[domain(\"quad\")]"
|
|
"void DSFS(_4 f,float2 c:SV_DomainLocation,const OutputPatch<_5, 4> o,out _3 x)"
|
|
"{"
|
|
"V(x,1,o,c);"
|
|
"}"
|
|
"_2 O(_2 c)"
|
|
"{"
|
|
"return c.o.y=5-c.o.y,c;"
|
|
"}"
|
|
"[maxvertexcount(6)]"
|
|
"void GST(triangle _2 f[3],inout PointStream<_2> c,inout PointStream<_2> x)"
|
|
"{"
|
|
"x.Append(f[0]);"
|
|
"x.Append(f[1]);"
|
|
"x.Append(f[2]);"
|
|
"x.RestartStrip();"
|
|
"if(f[0].o.y>=2.5||f[1].o.y>=2.5||f[2].o.y>=2.5)"
|
|
"c.Append(O(f[0])),c.Append(O(f[1])),c.Append(O(f[2])),c.RestartStrip();"
|
|
"}"
|
|
"[maxvertexcount(1)]"
|
|
"void GSP(point _2 f[1],inout PointStream<_6> c)"
|
|
"{"
|
|
"float2 x=f[0].tc,o=float2(m((x-0)*999).x,m((x.yx-0)*999).x);"
|
|
"x+=o/512;"
|
|
"float4 y=w(x);"
|
|
"if(r(y)<.5)"
|
|
"return;"
|
|
"float3 t=f[0].o;"
|
|
"t.xzy+=float3(o,y.x);"
|
|
"_6 l;"
|
|
"l._t=float4(t,1);"
|
|
"l._r=l._s=0;"
|
|
"l.tc=float4(x,0,0);"
|
|
"c.Append(l);"
|
|
"c.RestartStrip();"
|
|
"}"
|
|
"_6 VSM(_6 c)"
|
|
"{"
|
|
"return c;"
|
|
"}"
|
|
"[maxvertexcount(28)]"
|
|
"void GSR(point _6 f[1],inout PointStream<_6> c,inout PointStream<_6> o)"
|
|
"{"
|
|
"_6 y=f[0];"
|
|
"float3 t=f[0]._t,l=t+float3(.5,0,.5),s=t+float3(-.5,0,.5),i=t+float3(.5,0,-.5),z=t+float3(-.5,0,-.5);"
|
|
"if(distance(t,_c._c)>100||!P(l)&&!P(s)&&!P(i)&&!P(z))"
|
|
"return;"
|
|
"float3 r=m(y._t.xz);"
|
|
"float2 V=r.yz*.5,e=f[0].tc.xy;"
|
|
"float4 d=w(e);"
|
|
"float3 O=normalize(float3(d.y,3.,d.z)),a=float3(0,0,1),D=float3(0,1,0);"
|
|
"float h,u=7.,v=5.,S=4.;"
|
|
"float4 N;"
|
|
"float3 G;"
|
|
"y._s=float4(r,1);"
|
|
"for(h=0;h<1;h+=1/u)"
|
|
"G=m(y._t.xz*h*u),N=n(a,1+.5*G.x),N=p(p(n(D,V.x+h*(1+.2*G.x)*2*x),N)),N=p(p(float4(cross(O,D),dot(O,D)),N)),y._r=N,y.tc.z=G.y,y.tc.w=1,c.Append(y),c.RestartStrip();"
|
|
"for(h=0;h<1;h+=1/v)"
|
|
"G=m(y._t.xz*h*v+1),N=n(a,.5+.5*G.x),N=p(p(n(D,V.y+h*(1+.2*G.x)*2*x),N)),N=p(p(float4(float3(-1,1,1)*cross(O,D),dot(O,D)),N)),y._r=N,y.tc.z=G.z,y.tc.w=2,c.Append(y),c.RestartStrip();"
|
|
"if(r.x<.25)"
|
|
"{"
|
|
"float C=1+floor(r.x*4*7);"
|
|
"for(h=0;h<1;h+=1/C)"
|
|
"{"
|
|
"float2 I=float2(m((e+h)*283).x,m((e.yx+h)*185).x)*.5;"
|
|
"e+=I/512;"
|
|
"float4 H=w(e);"
|
|
"y._t.y=H.x+.1;"
|
|
"y._t.xz+=I;"
|
|
"y._s=float4(m(y._t.xz),1);"
|
|
"for(int T=0;T<4;++T)"
|
|
"N=n(a,1+.5*G.x),N=p(p(n(D,(I.y+T/4.)*2*x),N)),N=p(p(float4(cross(O,D),dot(O,D)),N)),y._r=N,y.tc.z=I.x,y.tc.w=1,o.Append(y),o.RestartStrip();"
|
|
"}"
|
|
"}"
|
|
"}"
|
|
"[maxvertexcount(4)]"
|
|
"void GSM(point _6 f[1],inout PointStream<_6> c)"
|
|
"{"
|
|
"c.Append(f[0]),c.RestartStrip(),c.Append(f[0]),c.RestartStrip(),c.Append(f[0]),c.RestartStrip(),c.Append(f[0]),c.RestartStrip();"
|
|
"}"
|
|
"[maxvertexcount(6)]"
|
|
"void GSQ(point _6 f[1],inout TriangleStream<_3> c)"
|
|
"{"
|
|
"_3 x;"
|
|
"float o=1/1024.;"
|
|
"float4 l=float4(f[0]._t.xz/256+2*o,1,1);"
|
|
"x.c=0;"
|
|
"x.n=0;"
|
|
"x.o=l+float4(-o,o,0,0);"
|
|
"x.tc=float2(-1,1);"
|
|
"c.Append(x);"
|
|
"x.o=l+float4(o,-o,0,0);"
|
|
"x.tc=float2(1,-1);"
|
|
"c.Append(x);"
|
|
"x.o=l+float4(-o,-o,0,0);"
|
|
"x.tc=float2(-1,-1);"
|
|
"c.Append(x);"
|
|
"c.RestartStrip();"
|
|
"x.o=l+float4(-o,o,0,0);"
|
|
"x.tc=float2(-1,1);"
|
|
"c.Append(x);"
|
|
"x.o=l+float4(o,o,0,0);"
|
|
"x.tc=float2(1,1);"
|
|
"c.Append(x);"
|
|
"x.o=l+float4(o,-o,0,0);"
|
|
"x.tc=float2(1,-1);"
|
|
"c.Append(x);"
|
|
"c.RestartStrip();"
|
|
"}";
|
|
|
|
#endif // SHADER_H_
|