|
|
|
|
@@ -0,0 +1,810 @@
|
|
|
|
|
struct VS_OUTPUT
|
|
|
|
|
{
|
|
|
|
|
float4 v_Position : SV_POSITION;
|
|
|
|
|
float2 v_TexCoord : TEXCOORD0;
|
|
|
|
|
#if FADEEFFECT == 23
|
|
|
|
|
float2 v_TexCoordBase : TEXCOORD1;
|
|
|
|
|
float3 v_WorldPos : TEXCOORD2;
|
|
|
|
|
float3 v_WorldNormal : TEXCOORD3;
|
|
|
|
|
#endif
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct PS_OUTPUT
|
|
|
|
|
{
|
|
|
|
|
float4 p_FragColor : SV_TARGET;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Texture2D g_Texture0:register(t0);
|
|
|
|
|
Texture2D g_Texture0MipMapped:register(t0);
|
|
|
|
|
Texture2D g_Texture1Noise:register(t1);
|
|
|
|
|
Texture2D g_Texture2Clouds:register(t2);
|
|
|
|
|
|
|
|
|
|
SamplerState g_Texture0SamplerState:register(s0);
|
|
|
|
|
SamplerState g_Texture0SamplerStateWrap:register(s1);
|
|
|
|
|
|
|
|
|
|
cbuffer g_bufDynamic:register(b0)
|
|
|
|
|
{
|
|
|
|
|
const float g_Progress;
|
|
|
|
|
const float g_Hash;
|
|
|
|
|
const float g_Hash2;
|
|
|
|
|
const float g_Random;
|
|
|
|
|
|
|
|
|
|
const float g_AspectRatio;
|
|
|
|
|
const float g_Width;
|
|
|
|
|
const float g_Height;
|
|
|
|
|
|
|
|
|
|
const float4x4 g_ViewProjection;
|
|
|
|
|
const float4x4 g_ViewProjectionInv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float2 rotateFloat2(float2 v, float r)
|
|
|
|
|
{
|
|
|
|
|
float2 cs = float2(cos(r), sin(r));
|
|
|
|
|
return float2(v.x * cs.x - v.y * cs.y, v.x * cs.y + v.y * cs.x);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float3 mod289(float3 x) {
|
|
|
|
|
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float2 mod289(float2 x) {
|
|
|
|
|
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float3 permute(float3 x) {
|
|
|
|
|
return mod289(((x*34.0)+10.0)*x);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float snoise(float2 v)
|
|
|
|
|
{
|
|
|
|
|
const float4 C = float4(0.211324865405187,
|
|
|
|
|
0.366025403784439,
|
|
|
|
|
-0.577350269189626,
|
|
|
|
|
0.024390243902439);
|
|
|
|
|
float2 i = floor(v + dot(v, C.yy) );
|
|
|
|
|
float2 x0 = v - i + dot(i, C.xx);
|
|
|
|
|
|
|
|
|
|
float2 i1;
|
|
|
|
|
i1 = (x0.x > x0.y) ? float2(1.0, 0.0) : float2(0.0, 1.0);
|
|
|
|
|
float4 x12 = x0.xyxy + C.xxzz;
|
|
|
|
|
x12.xy -= i1;
|
|
|
|
|
|
|
|
|
|
i = mod289(i);
|
|
|
|
|
float3 p = permute( permute( i.y + float3(0.0, i1.y, 1.0 ))
|
|
|
|
|
+ i.x + float3(0.0, i1.x, 1.0 ));
|
|
|
|
|
|
|
|
|
|
float3 m = max(0.5 - float3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);
|
|
|
|
|
m = m*m ;
|
|
|
|
|
m = m*m ;
|
|
|
|
|
|
|
|
|
|
float3 x = 2.0 * frac(p * C.www) - 1.0;
|
|
|
|
|
float3 h = abs(x) - 0.5;
|
|
|
|
|
float3 ox = floor(x + 0.5);
|
|
|
|
|
float3 a0 = x - ox;
|
|
|
|
|
|
|
|
|
|
m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
|
|
|
|
|
|
|
|
|
|
float3 g;
|
|
|
|
|
g.x = a0.x * x0.x + h.x * x0.y;
|
|
|
|
|
g.yz = a0.yz * x12.xz + h.yz * x12.yw;
|
|
|
|
|
return 127.0 * dot(m, g);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float4 mod289(float4 x) {
|
|
|
|
|
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float4 permute(float4 x) {
|
|
|
|
|
return mod289(((x*34.0)+10.0)*x);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float4 taylorInvSqrt(float4 r)
|
|
|
|
|
{
|
|
|
|
|
return 1.79284291400159 - 0.85373472095314 * r;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float snoise(float3 v)
|
|
|
|
|
{
|
|
|
|
|
const float2 C = float2(1.0/6.0, 1.0/3.0) ;
|
|
|
|
|
const float4 D = float4(0.0, 0.5, 1.0, 2.0);
|
|
|
|
|
|
|
|
|
|
float3 i = floor(v + dot(v, C.yyy) );
|
|
|
|
|
float3 x0 = v - i + dot(i, C.xxx) ;
|
|
|
|
|
|
|
|
|
|
float3 g = step(x0.yzx, x0.xyz);
|
|
|
|
|
float3 l = 1.0 - g;
|
|
|
|
|
float3 i1 = min( g.xyz, l.zxy );
|
|
|
|
|
float3 i2 = max( g.xyz, l.zxy );
|
|
|
|
|
float3 x1 = x0 - i1 + C.xxx;
|
|
|
|
|
float3 x2 = x0 - i2 + C.yyy;
|
|
|
|
|
float3 x3 = x0 - D.yyy;
|
|
|
|
|
|
|
|
|
|
i = mod289(i);
|
|
|
|
|
float4 p = permute(permute(permute(
|
|
|
|
|
i.z + float4(0.0, i1.z, i2.z, 1.0 ))
|
|
|
|
|
+ i.y + float4(0.0, i1.y, i2.y, 1.0 ))
|
|
|
|
|
+ i.x + float4(0.0, i1.x, i2.x, 1.0 ));
|
|
|
|
|
|
|
|
|
|
float n_ = 0.142857142857;
|
|
|
|
|
float3 ns = n_ * D.wyz - D.xzx;
|
|
|
|
|
|
|
|
|
|
float4 j = p - 49.0 * floor(p * ns.z * ns.z);
|
|
|
|
|
|
|
|
|
|
float4 x_ = floor(j * ns.z);
|
|
|
|
|
float4 y_ = floor(j - 7.0 * x_ );
|
|
|
|
|
|
|
|
|
|
float4 x = x_ *ns.x + ns.yyyy;
|
|
|
|
|
float4 y = y_ *ns.x + ns.yyyy;
|
|
|
|
|
float4 h = 1.0 - abs(x) - abs(y);
|
|
|
|
|
|
|
|
|
|
float4 b0 = float4( x.xy, y.xy );
|
|
|
|
|
float4 b1 = float4( x.zw, y.zw );
|
|
|
|
|
|
|
|
|
|
float4 s0 = floor(b0)*2.0 + 1.0;
|
|
|
|
|
float4 s1 = floor(b1)*2.0 + 1.0;
|
|
|
|
|
float4 sh = -step(h, (float4)0.0);
|
|
|
|
|
|
|
|
|
|
float4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
|
|
|
|
|
float4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
|
|
|
|
|
|
|
|
|
|
float3 p0 = float3(a0.xy,h.x);
|
|
|
|
|
float3 p1 = float3(a0.zw,h.y);
|
|
|
|
|
float3 p2 = float3(a1.xy,h.z);
|
|
|
|
|
float3 p3 = float3(a1.zw,h.w);
|
|
|
|
|
|
|
|
|
|
float4 norm = taylorInvSqrt(float4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
|
|
|
|
|
p0 *= norm.x;
|
|
|
|
|
p1 *= norm.y;
|
|
|
|
|
p2 *= norm.z;
|
|
|
|
|
p3 *= norm.w;
|
|
|
|
|
|
|
|
|
|
float4 m = max(0.5 - float4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
|
|
|
|
|
m = m * m;
|
|
|
|
|
return 105.0 * dot( m*m, float4( dot(p0,x0), dot(p1,x1),
|
|
|
|
|
dot(p2,x2), dot(p3,x3)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float fbm(in float2 st, const in int octaves)
|
|
|
|
|
{
|
|
|
|
|
float value = 0.0;
|
|
|
|
|
float amplitude = .5;
|
|
|
|
|
float frequency = 0.;
|
|
|
|
|
for (int i = 0; i < octaves; i++)
|
|
|
|
|
{
|
|
|
|
|
value += amplitude * snoise(st);
|
|
|
|
|
st *= 2.;
|
|
|
|
|
amplitude *= .5;
|
|
|
|
|
}
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float nrand(float2 uv)
|
|
|
|
|
{
|
|
|
|
|
return frac(sin(dot(uv, float2(12.9898, 78.233))) * 43758.5453);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float nrandFloorAspect(float2 uv, float scale)
|
|
|
|
|
{
|
|
|
|
|
float2 aspectScale = scale * float2(g_AspectRatio, 1.0);
|
|
|
|
|
return nrand(floor(frac(uv + g_Hash) * aspectScale) / aspectScale);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float3 blur13(float2 u, float2 d)
|
|
|
|
|
{
|
|
|
|
|
float2 o1 = (float2)(1.4091998770852122) * d;
|
|
|
|
|
float2 o2 = (float2)(3.2979348079914822) * d;
|
|
|
|
|
float2 o3 = (float2)(5.2062900776825969) * d;
|
|
|
|
|
return g_Texture0.SampleLevel(g_Texture0SamplerState, u, 0.0).rgb * 0.1976406528809576
|
|
|
|
|
+ g_Texture0.SampleLevel(g_Texture0SamplerState, u + o1, 0.0).rgb * 0.2959855056006557
|
|
|
|
|
+ g_Texture0.SampleLevel(g_Texture0SamplerState, u - o1, 0.0).rgb * 0.2959855056006557
|
|
|
|
|
+ g_Texture0.SampleLevel(g_Texture0SamplerState, u + o2, 0.0).rgb * 0.0935333619980593
|
|
|
|
|
+ g_Texture0.SampleLevel(g_Texture0SamplerState, u - o2, 0.0).rgb * 0.0935333619980593
|
|
|
|
|
+ g_Texture0.SampleLevel(g_Texture0SamplerState, u + o3, 0.0).rgb * 0.0116608059608062
|
|
|
|
|
+ g_Texture0.SampleLevel(g_Texture0SamplerState, u - o3, 0.0).rgb * 0.0116608059608062;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float drawGradient(float2 uvs, float2 start, float2 end, inout float distFromRay)
|
|
|
|
|
{
|
|
|
|
|
float2 dir = end - start;
|
|
|
|
|
float2 delta = uvs - start;
|
|
|
|
|
float len = length(dir);
|
|
|
|
|
dir /= len;
|
|
|
|
|
|
|
|
|
|
float distAlongRay = dot(dir, delta) / len;
|
|
|
|
|
distFromRay = abs(dot(float2(dir.y, -dir.x), delta));
|
|
|
|
|
return distAlongRay;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
float4 PerformEffect(VS_OUTPUT IN, float2 texCoord, float progress)
|
|
|
|
|
{
|
|
|
|
|
float4 color = float4(g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0).rgb, 1.0);
|
|
|
|
|
|
|
|
|
|
#if FADEEFFECT == 0
|
|
|
|
|
// Fade
|
|
|
|
|
color.a = 1.0 - progress;
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 1
|
|
|
|
|
// Mosaic
|
|
|
|
|
float r = nrandFloorAspect(texCoord, 50.0);
|
|
|
|
|
float smooth = 0.5;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - r));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 2
|
|
|
|
|
// Diffuse
|
|
|
|
|
float r = nrandFloorAspect(texCoord, 1000.0);
|
|
|
|
|
float smooth = 0.5;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - r));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 3
|
|
|
|
|
// Horizontal slide
|
|
|
|
|
texCoord.x -= progress;
|
|
|
|
|
color = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0);
|
|
|
|
|
color.a = step(0.0, texCoord.x);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 4
|
|
|
|
|
// Vertical slide
|
|
|
|
|
texCoord.y -= progress;
|
|
|
|
|
color = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0);
|
|
|
|
|
color.a = step(0.0, texCoord.y);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 5
|
|
|
|
|
// Horizontal fade
|
|
|
|
|
float smooth = 0.5;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - texCoord.x));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 6
|
|
|
|
|
// Vertical fade
|
|
|
|
|
float smooth = 0.5;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - texCoord.y));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 7
|
|
|
|
|
// Cloud blend
|
|
|
|
|
float2 noiseUV = texCoord * float2(g_AspectRatio, 1.0);
|
|
|
|
|
float r = fbm(noiseUV + g_Hash, 6);
|
|
|
|
|
r = smoothstep(-0.5, 0.5, r);
|
|
|
|
|
float smooth = 0.333;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - r));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 8
|
|
|
|
|
// Burnt paper
|
|
|
|
|
float2 noiseUV = texCoord * float2(g_AspectRatio, 1.0);
|
|
|
|
|
float r = fbm(noiseUV + g_Hash, 6);
|
|
|
|
|
r = smoothstep(-0.8, 1.0, r);
|
|
|
|
|
float rNoise = snoise(noiseUV * 55.333 * (0.5 + g_Progress) + g_Hash + g_Progress * 50.0);
|
|
|
|
|
rNoise = smoothstep(-1.5, 1.0, rNoise);
|
|
|
|
|
|
|
|
|
|
float smooth = 0.00001;
|
|
|
|
|
float smoothDistort = 0.666;
|
|
|
|
|
float smoothDistortColor = 0.05;
|
|
|
|
|
float smoothDistortBurn = 0.5;
|
|
|
|
|
float smoothShadow = 0.1;
|
|
|
|
|
float rp = smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - r));
|
|
|
|
|
float rpOffset = smoothstep(0.0, smoothDistort * progress, progress * (1.0 + smoothDistort) - r);
|
|
|
|
|
|
|
|
|
|
float2 offset = float2(ddx(r), ddy(r)) * pow(rpOffset, 2.0) * -30.0;
|
|
|
|
|
color = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord + offset, 0.0);
|
|
|
|
|
|
|
|
|
|
color.a = 1.0 - rp;
|
|
|
|
|
float shadow = (1.0 - step(0.01, color.a)) * smoothstep(smoothShadow * 2, smoothShadow, progress * (1.0 + smoothShadow) - r);
|
|
|
|
|
float colorOrangeAmt = smoothstep(0.0, smoothDistortColor * progress, progress * (1.0 + smoothDistortColor) - r) * step(shadow, 0.0);
|
|
|
|
|
float darkenSrc = smoothstep(smoothDistortBurn * (progress * 0.5), smoothDistortBurn * (progress * 0.8), progress * (1.0 + smoothDistortBurn) - r);
|
|
|
|
|
|
|
|
|
|
color.rgb = lerp(color.rgb, color.rgb * 0.1 * float3(0.4, 0.03, 0.01), darkenSrc);
|
|
|
|
|
color.rgb = lerp(color.rgb, float3(1, 0.333, 0) * rNoise * 1.5, colorOrangeAmt);
|
|
|
|
|
color.a *= pow(1.0 - smoothstep(0.9, 1.0, progress), 0.5);
|
|
|
|
|
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.0, step(0.001, shadow));
|
|
|
|
|
color.a = max(color.a, pow(shadow, 2.0) * 0.5);
|
|
|
|
|
|
|
|
|
|
float smoothDistortGlow = 0.05;
|
|
|
|
|
float glowAmt = smoothstep(0.0, smoothDistortGlow * progress, progress * (1.0 + smoothDistortGlow) - r) *
|
|
|
|
|
smoothstep(smoothDistortGlow * progress, 0.0, progress * (1.0 - smoothDistortGlow) - r);
|
|
|
|
|
glowAmt *= 1.0 - progress;
|
|
|
|
|
|
|
|
|
|
glowAmt = max(0.0, glowAmt - colorOrangeAmt);
|
|
|
|
|
glowAmt = pow(glowAmt, 2.0);
|
|
|
|
|
color.a = max(glowAmt, color.a);
|
|
|
|
|
color.rgb += 2.0 * glowAmt * float3(1, 0.333, 0);
|
|
|
|
|
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 9
|
|
|
|
|
// Circular blend
|
|
|
|
|
float2 delta = texCoord - float2(0.5, 0.5);
|
|
|
|
|
delta.x *= g_AspectRatio;
|
|
|
|
|
float dist = length(delta);
|
|
|
|
|
float smooth = 0.1;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - dist));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 10
|
|
|
|
|
// Zipper
|
|
|
|
|
float delta = texCoord.x - 0.5;
|
|
|
|
|
float offset = step(delta, 0.0) * 2.0 - 1.0;
|
|
|
|
|
float smoothY = 0.5;
|
|
|
|
|
float smooth = 0.333;
|
|
|
|
|
float side = step(0.5, texCoord.x);
|
|
|
|
|
float progressZipper = max(0.0, progress * (1.0 + smoothY) - texCoord.y * smoothY);
|
|
|
|
|
progressZipper = smoothstep(0.0, 1.0, pow(progressZipper, 2.0));
|
|
|
|
|
|
|
|
|
|
float2 uvs = texCoord;
|
|
|
|
|
uvs.x += offset * progressZipper * (0.5 + smooth);
|
|
|
|
|
|
|
|
|
|
color = g_Texture0.SampleLevel(g_Texture0SamplerState, uvs, 0.0);
|
|
|
|
|
color.a = lerp(step(uvs.x, 0.5), step(0.5, uvs.x), side);
|
|
|
|
|
|
|
|
|
|
float shadow = 1.0 - lerp(smoothstep(0.5, 0.5 + smooth, uvs.x), smoothstep(0.5, 0.5 - smooth, uvs.x), side);
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.0, step(shadow, 0.9999));
|
|
|
|
|
color.a = max(color.a, shadow * 0.5);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 11
|
|
|
|
|
// Door
|
|
|
|
|
float delta = texCoord.x - 0.5;
|
|
|
|
|
float offset = step(delta, 0.0) * 2.0 - 1.0;
|
|
|
|
|
float smooth = 0.333;
|
|
|
|
|
float side = step(0.5, texCoord.x);
|
|
|
|
|
|
|
|
|
|
float2 uvs = texCoord;
|
|
|
|
|
uvs.x += offset * progress * (0.5 + smooth);
|
|
|
|
|
|
|
|
|
|
color = g_Texture0.SampleLevel(g_Texture0SamplerState, uvs, 0.0);
|
|
|
|
|
color.a = lerp(step(uvs.x, 0.5), step(0.5, uvs.x), side);
|
|
|
|
|
|
|
|
|
|
float shadow = 1.0 - lerp(smoothstep(0.5, 0.5 + smooth, uvs.x), smoothstep(0.5, 0.5 - smooth, uvs.x), side);
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.0, step(shadow, 0.9999));
|
|
|
|
|
color.a = max(color.a, shadow * 0.5);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 12
|
|
|
|
|
// Lines
|
|
|
|
|
float r = nrandFloorAspect(float2(0.0, texCoord.y), 100.0);
|
|
|
|
|
float smooth = 0.2;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - r));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 13
|
|
|
|
|
// Zoom
|
|
|
|
|
float2 deltaC = texCoord - float2(0.5, 0.5);
|
|
|
|
|
deltaC.x *= g_AspectRatio;
|
|
|
|
|
float dist = length(deltaC);
|
|
|
|
|
float smooth = 1.0;
|
|
|
|
|
float distortUVAmt = smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - dist));
|
|
|
|
|
|
|
|
|
|
float2 delta = texCoord - float2(0.5, 0.5);
|
|
|
|
|
delta.x *= g_AspectRatio;
|
|
|
|
|
texCoord -= (float2)0.5;
|
|
|
|
|
//texCoord *= 1.0 - distortUVAmt;
|
|
|
|
|
texCoord *= 1.0 - progress * 0.5 * distortUVAmt * 2.0;
|
|
|
|
|
texCoord += (float2)0.5;
|
|
|
|
|
color.rgb = (blur13(texCoord, progress * 50.0 * delta / g_Height) + blur13(texCoord, progress * 33.0 * delta / g_Height)) * 0.5;
|
|
|
|
|
color.a = 1.0 - progress;
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 14
|
|
|
|
|
// Drip vertical
|
|
|
|
|
float r = smoothstep(-0.5, 0.5, fbm(float2(texCoord.x * 10.0 + g_Hash, 0.0), 2));
|
|
|
|
|
float2 uvs = texCoord;
|
|
|
|
|
|
|
|
|
|
float smooth = 0.2;
|
|
|
|
|
uvs.y -= max(0.0, progress * (1.0 + smooth) - r * smooth);
|
|
|
|
|
uvs.y -= texCoord.y * progress;
|
|
|
|
|
color = g_Texture0.SampleLevel(g_Texture0SamplerState, uvs, 0.0);
|
|
|
|
|
//float r = nrandFloorAspect(float2(0.0, texCoord.y), 100.0);
|
|
|
|
|
color.a = step(0.0, uvs.y); // - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - r));
|
|
|
|
|
|
|
|
|
|
float shadow = smoothstep(-0.1333, 0.0, uvs.y);
|
|
|
|
|
color.rgb = lerp(color.rgb, (float)0.0, step(uvs.y, 0.0));
|
|
|
|
|
color.a = max(color.a, shadow * (1.0 - progress));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 15
|
|
|
|
|
// Pixelate
|
|
|
|
|
float2 scale = floor((10.0 + g_Height * (1.0 - pow(abs(progress), 0.1))) * float2(g_AspectRatio, 1.0));
|
|
|
|
|
color.a = 1.0 - smoothstep(0.7, 1.0, progress);
|
|
|
|
|
texCoord -= (float2)0.5;
|
|
|
|
|
texCoord *= scale;
|
|
|
|
|
texCoord = floor(texCoord);
|
|
|
|
|
texCoord /= scale;
|
|
|
|
|
texCoord += (float2)0.5;
|
|
|
|
|
color.rgb = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0).rgb;
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 16
|
|
|
|
|
// Bricks
|
|
|
|
|
color.a = 1.0;
|
|
|
|
|
#elif FADEEFFECT == 17
|
|
|
|
|
// Paint
|
|
|
|
|
float2 noiseUV = texCoord * float2(g_AspectRatio, 1.0);
|
|
|
|
|
float h = (g_Hash - 0.5) * 0.1;
|
|
|
|
|
|
|
|
|
|
float rayDist0;
|
|
|
|
|
float grad0 = drawGradient(texCoord, float2(-1, -0.2 + h), float2(1, 0.15 + h), rayDist0);
|
|
|
|
|
grad0 *= step(rayDist0, 0.4);
|
|
|
|
|
|
|
|
|
|
float rayDist1;
|
|
|
|
|
float grad1 = drawGradient(texCoord, float2(1.5, 0.1 + h), float2(0, 0.53 + h), rayDist1);
|
|
|
|
|
grad1 *= step(rayDist1, 0.4);
|
|
|
|
|
|
|
|
|
|
float rayDist2;
|
|
|
|
|
float grad2 = drawGradient(texCoord, float2(-0.5, 0.6 + h), float2(1.2, 0.8 + h), rayDist2);
|
|
|
|
|
grad2 *= step(rayDist2, 0.4);
|
|
|
|
|
|
|
|
|
|
grad0 = saturate(grad0);
|
|
|
|
|
grad1 = saturate(grad1);
|
|
|
|
|
grad2 = saturate(grad2);
|
|
|
|
|
|
|
|
|
|
float v0 = grad0 * 0.25;
|
|
|
|
|
v0 = step(0.001, v0);
|
|
|
|
|
float v1 = grad1 * 0.25;
|
|
|
|
|
v1 = step(0.001, v1);
|
|
|
|
|
float v2 = grad2 * 0.25;
|
|
|
|
|
v2 = step(0.001, v2);
|
|
|
|
|
|
|
|
|
|
float l0 = grad0 * 0.25;
|
|
|
|
|
float l1 = (0.333 + grad1 * 0.25);
|
|
|
|
|
float l2 = (0.666 + grad2 * 0.333);
|
|
|
|
|
|
|
|
|
|
float r = fbm(noiseUV * 10.0 + g_Hash, 8);
|
|
|
|
|
r = smoothstep(-1.0, 1.0, r);
|
|
|
|
|
float rs = fbm(noiseUV * 10.0 + g_Hash, 3);
|
|
|
|
|
rs = smoothstep(-1.0, 1.0, rs);
|
|
|
|
|
progress += r * 0.02;
|
|
|
|
|
|
|
|
|
|
float mask0 = step(rayDist0, 0.4 - r * 0.1);
|
|
|
|
|
float mask1 = step(rayDist1, 0.4 - r * 0.1);
|
|
|
|
|
float mask2 = step(rayDist2, 0.4 - r * 0.1);
|
|
|
|
|
|
|
|
|
|
float shadowMask0 = max(0.0, smoothstep(0.03, 0.0, max(0.0, rayDist0 - (0.4 - rs * 0.1))) - mask0);
|
|
|
|
|
float shadowMask1 = max(0.0, smoothstep(0.03, 0.0, max(0.0, rayDist1 - (0.4 - rs * 0.1))) - mask1);
|
|
|
|
|
float shadowMask2 = max(0.0, smoothstep(0.03, 0.0, max(0.0, rayDist2 - (0.4 - rs * 0.1))) - mask2);
|
|
|
|
|
|
|
|
|
|
float f0 = v0 * step(l0, progress) * mask0;
|
|
|
|
|
float f0S = v0 * step(l0, progress) * shadowMask0;
|
|
|
|
|
float f1 = v1 * step(l1, progress) * mask1;
|
|
|
|
|
float f1S = v1 * step(l1, progress) * shadowMask1;
|
|
|
|
|
float f2 = v2 * step(l2, progress) * mask2;
|
|
|
|
|
float f2S = v2 * step(l2, progress) * shadowMask2;
|
|
|
|
|
|
|
|
|
|
float v = max(f0, max(f1, f2));
|
|
|
|
|
float vS = max(f0S, max(f1S, f2S));
|
|
|
|
|
vS = lerp(vS, 0.0, f1);
|
|
|
|
|
vS = lerp(vS, 0.0, f2);
|
|
|
|
|
|
|
|
|
|
color.rgb = lerp(color.rgb, color.rgb * 0.333, vS);
|
|
|
|
|
color.a = 1.0 - v;
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 18
|
|
|
|
|
// Fade to black
|
|
|
|
|
color.rgb *= smoothstep(0.5, 0.0, progress);
|
|
|
|
|
color.a = smoothstep(1.0, 0.5, progress);
|
|
|
|
|
#elif FADEEFFECT == 19
|
|
|
|
|
// Twister
|
|
|
|
|
float2 delta = texCoord - float2(0.5, 0.5);
|
|
|
|
|
delta.x *= g_AspectRatio;
|
|
|
|
|
float dist = length(delta);
|
|
|
|
|
float smooth = 0.1;
|
|
|
|
|
color.a = 1.0 - smoothstep(0.0, smooth, max(0.0, progress * (1.0 + smooth) - dist));
|
|
|
|
|
|
|
|
|
|
delta.x /= g_AspectRatio;
|
|
|
|
|
float smoothTwist = 0.5;
|
|
|
|
|
float twistAmt = smoothstep(0.0, smoothTwist, max(0.0, progress * (1.0 + smoothTwist) - dist));
|
|
|
|
|
delta /= 1.0 + twistAmt;
|
|
|
|
|
texCoord = float2(0.5, 0.5) + rotateFloat2(delta, progress * 20.0 * twistAmt);
|
|
|
|
|
color.rgb = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0).rgb;
|
|
|
|
|
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 20
|
|
|
|
|
// Black hole
|
|
|
|
|
float holeSize = smoothstep(0, 0.8, progress) * smoothstep(1.0, 0.8, progress);
|
|
|
|
|
float noiseAmt = 0.01 * smoothstep(0.95, 0.8, progress);
|
|
|
|
|
float2 noiseOffset = float2(snoise((float2)progress * 100), g_AspectRatio * snoise((float2)(progress * 100 + g_Hash)));
|
|
|
|
|
float2 center = float2(0.5, 0.5) + holeSize * noiseAmt * noiseOffset;
|
|
|
|
|
float2 delta = texCoord - center;
|
|
|
|
|
|
|
|
|
|
float dist = length(delta * float2(g_AspectRatio, 1.0));
|
|
|
|
|
float holeAmt = smoothstep(holeSize * 0.05, holeSize * 0.04, dist);
|
|
|
|
|
|
|
|
|
|
// Sample distorted frame
|
|
|
|
|
texCoord -= float2(0.5, 0.5);
|
|
|
|
|
float smoothDistort = 1.0;
|
|
|
|
|
float distortAmt = pow(smoothstep(0.0, smoothDistort, max(0.0, (progress * 0.97) * (smoothDistort))), 2.0);
|
|
|
|
|
texCoord *= (1.0 + (1.0 / length(delta)) * distortAmt);
|
|
|
|
|
|
|
|
|
|
float angle = progress * 4 * pow(smoothstep(holeSize * 0.2, 0.0, dist), 2.0);
|
|
|
|
|
angle = lerp(angle, -angle, step(0.5, g_Hash));
|
|
|
|
|
texCoord = rotateFloat2(texCoord, angle);
|
|
|
|
|
|
|
|
|
|
texCoord += float2(0.5, 0.5);
|
|
|
|
|
color.r = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0).r;
|
|
|
|
|
color.g = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord - angle * 0.04, 0.0).g;
|
|
|
|
|
color.b = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord + angle * 0.04, 0.0).b;
|
|
|
|
|
|
|
|
|
|
float2 shadowDelta = texCoord - float2(0.5, 0.5);
|
|
|
|
|
float shadowAngle = atan2(shadowDelta.y, -shadowDelta.x);
|
|
|
|
|
float shadowAmt = abs(dot(float2(1.0, 0.0), shadowDelta)) * sin(shadowAngle * 6.0);
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.0, pow(shadowAmt, 2.0) * distortAmt * 4.0);
|
|
|
|
|
|
|
|
|
|
color.a = step(0.0, texCoord.x) * step(texCoord.x, 1.0) *
|
|
|
|
|
step(0.0, texCoord.y) * step(texCoord.y, 1.0);
|
|
|
|
|
delta = texCoord - center;
|
|
|
|
|
color.a *= step(dot(delta, delta), 0.5);
|
|
|
|
|
color.a *= step(progress, 0.9);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
|
|
|
|
|
// Apply hole color
|
|
|
|
|
float holeCornea = smoothstep(holeSize * 0.03, holeSize * 0.05, dist);
|
|
|
|
|
float3 colorOuter = color.rgb;
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.0, holeAmt);
|
|
|
|
|
color.rgb = lerp(color.rgb, pow(colorOuter, (float3)2.0), holeAmt * holeCornea);
|
|
|
|
|
color.a = max(color.a, holeAmt);
|
|
|
|
|
#elif FADEEFFECT == 21
|
|
|
|
|
// CRT
|
|
|
|
|
float2 texCoordOrig = texCoord;
|
|
|
|
|
texCoord -= (float2)0.5;
|
|
|
|
|
texCoord.y *= (1.0 + pow(smoothstep(0.2, 0.6, progress), 2.0) * g_Height * 0.5);
|
|
|
|
|
texCoord.x *= (1.0 - pow(smoothstep(0.05, 0.25, progress), 2.0) * 0.8);
|
|
|
|
|
texCoord.x *= (1.0 + pow(smoothstep(0.4, 0.8, progress), 2.0) * g_Width * 0.25);
|
|
|
|
|
texCoord += (float2)0.5;
|
|
|
|
|
|
|
|
|
|
float scroll = smoothstep(0.0, 0.1, progress) * smoothstep(0.2, 0.1, progress) * 0.2;
|
|
|
|
|
scroll -= pow(smoothstep(0.1, 0.4, progress), 1.4) * 5.0;
|
|
|
|
|
float amtGlowWhite = smoothstep(0.1, 0.4, progress);
|
|
|
|
|
float fadeBlack = smoothstep(0.7, 0.81, progress);
|
|
|
|
|
float amtOutsideBounds = saturate(step(texCoord.y, 0.0) + step(1.0, texCoord.y) +
|
|
|
|
|
step(texCoord.x, 0.0) + step(1.0, texCoord.x) +
|
|
|
|
|
fadeBlack);
|
|
|
|
|
|
|
|
|
|
float2 texCoordPreScroll = texCoord;
|
|
|
|
|
texCoord.y = frac(texCoord.y + scroll);
|
|
|
|
|
float chroma = pow(smoothstep(0.07, 0.2, progress), 2.0);
|
|
|
|
|
float chromaMax = 0.04; //0.02;
|
|
|
|
|
float mip = smoothstep(0.1, 0.3, progress) * 4.0;
|
|
|
|
|
color.rgb = float3(g_Texture0MipMapped.SampleLevel(g_Texture0SamplerState, texCoord, mip).r,
|
|
|
|
|
g_Texture0MipMapped.SampleLevel(g_Texture0SamplerState, texCoord + float2(0, chromaMax * chroma), mip).g,
|
|
|
|
|
g_Texture0MipMapped.SampleLevel(g_Texture0SamplerState, texCoord + float2(0, -chromaMax * chroma), mip).b);
|
|
|
|
|
color.a = smoothstep(1.0, 0.7, progress);
|
|
|
|
|
|
|
|
|
|
float smoothFade = 15.0;
|
|
|
|
|
float amtOutsideGlow = amtOutsideBounds * (smoothstep(smoothFade, 1.0, texCoordPreScroll.y) * smoothstep(-smoothFade, 0.0, texCoordPreScroll.y));
|
|
|
|
|
amtOutsideGlow *= smoothstep(smoothFade, 1.0, texCoordPreScroll.x) * smoothstep(-smoothFade, 0.0, texCoordPreScroll.x);
|
|
|
|
|
amtOutsideGlow = pow(amtOutsideGlow, 4.0);
|
|
|
|
|
|
|
|
|
|
float3 outsideColor = snoise(float3(texCoordOrig * float2(g_AspectRatio, 1.0) * 100.0, progress * 10.0));
|
|
|
|
|
outsideColor = smoothstep((float3)-1.0, (float3)1.0, outsideColor) * smoothstep(0.5, 0.4, progress) * 0.1 *
|
|
|
|
|
smoothstep(0.5, 0.0, abs(texCoordOrig.y - 0.5));
|
|
|
|
|
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.666, amtGlowWhite);
|
|
|
|
|
color.rgb = lerp(color.rgb, outsideColor, amtOutsideBounds);
|
|
|
|
|
color.rgb = lerp(color.rgb, float3(0.25, 0.27, 0.33), amtOutsideGlow * (1.0 - fadeBlack));
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
|
|
|
|
|
//color = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoordOrig, 4.0);
|
|
|
|
|
#elif FADEEFFECT == 22
|
|
|
|
|
// Radial wipe
|
|
|
|
|
float2 delta = texCoord - float2(0.5, 0.5);
|
|
|
|
|
float angle = (atan2(-delta.x, delta.y) + 3.141) / 6.283;
|
|
|
|
|
float smooth = 0.02;
|
|
|
|
|
float shadowSmooth = 0.1;
|
|
|
|
|
|
|
|
|
|
progress *= 1.0 + smooth;
|
|
|
|
|
color.a = smoothstep(progress - smooth, progress, angle);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 23
|
|
|
|
|
// Glass shatter
|
|
|
|
|
color.r = g_Texture0.SampleLevel(g_Texture0SamplerState, frac(texCoord), 0.0).r;
|
|
|
|
|
color.g = g_Texture0.SampleLevel(g_Texture0SamplerState, frac(IN.v_TexCoordBase), 0.0).g;
|
|
|
|
|
color.b = g_Texture0.SampleLevel(g_Texture0SamplerState, frac(texCoord - (IN.v_TexCoordBase - texCoord)), 0.0).b;
|
|
|
|
|
|
|
|
|
|
float3 lightDir = float3(0.707, -0.707, 0.0);
|
|
|
|
|
float3 worldNormal = normalize(IN.v_WorldNormal);
|
|
|
|
|
float3 eyeVector = float3(0, 0, 0) - IN.v_WorldPos;
|
|
|
|
|
float specular = max(0.0, dot(normalize(eyeVector + lightDir), worldNormal));
|
|
|
|
|
specular = pow(specular, 4.0);
|
|
|
|
|
|
|
|
|
|
float light = dot(lightDir, worldNormal) + 1.0;
|
|
|
|
|
light = pow(light, 1.0);
|
|
|
|
|
color.rgb *= light;
|
|
|
|
|
color.rgb += (float3)specular * 2.0;
|
|
|
|
|
|
|
|
|
|
color.a = smoothstep(1.0, 0.9, g_Progress);
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 24
|
|
|
|
|
// Bullets
|
|
|
|
|
float2 center = float2(0.25 + 0.5 * g_Hash, 0.25 + 0.5 * g_Hash2);
|
|
|
|
|
|
|
|
|
|
float shakeTimer = smoothstep(0.05, 0.2, progress);
|
|
|
|
|
float shakeTimerOct = smoothstep(0.05, 0.5, progress);
|
|
|
|
|
float motionTimer = smoothstep(0.4, 1.0, progress);
|
|
|
|
|
float impactTimer = smoothstep(0.0, 0.1, progress);
|
|
|
|
|
float blackBlendTimer = smoothstep(0.8, 0.7, progress);
|
|
|
|
|
float alphaTimer = smoothstep(1.0, 0.9, progress);
|
|
|
|
|
float shakeTranslationBlend = smoothstep(0.05, 0.1, progress) * smoothstep(0.4, 0.05, progress) + smoothstep(0.6, 0.8, progress) * smoothstep(0.9, 0.8, progress);
|
|
|
|
|
|
|
|
|
|
shakeTimerOct = pow(shakeTimerOct, 0.2);
|
|
|
|
|
|
|
|
|
|
float2 zoomDelta = texCoord - center;
|
|
|
|
|
float2 zoomDeltaReference = zoomDelta;
|
|
|
|
|
zoomDelta.x *= g_AspectRatio;
|
|
|
|
|
zoomDelta = rotateFloat2(zoomDelta, shakeTimerOct * 0.4 * g_Hash2 * lerp(1,-1,step(0.5, g_Hash)) + shakeTimer * (1.0 - shakeTimer) * 0.3 * sin(shakeTimer * 4));
|
|
|
|
|
zoomDelta.x /= g_AspectRatio;
|
|
|
|
|
|
|
|
|
|
float2 shakeNoise = float2(snoise(float2(progress * 10.0, 0.0)), snoise(float2(progress * 10.0, 10.0))) * 0.02 * shakeTranslationBlend;
|
|
|
|
|
zoomDelta *= 1.0 - motionTimer;
|
|
|
|
|
zoomDelta *= 1.0 - shakeTimerOct * 0.05;
|
|
|
|
|
zoomDelta += shakeNoise;
|
|
|
|
|
|
|
|
|
|
zoomDeltaReference *= 1.0 - motionTimer;
|
|
|
|
|
zoomDeltaReference *= 1.0 - shakeTimerOct * 0.05;
|
|
|
|
|
zoomDeltaReference += shakeNoise;
|
|
|
|
|
float2 centerMotion = (center - float2(0.5, 0.5)) * (motionTimer) * (1.0 - motionTimer);
|
|
|
|
|
texCoord = center + zoomDelta + centerMotion;
|
|
|
|
|
float2 texCoordUnrotated = center + zoomDeltaReference + centerMotion;
|
|
|
|
|
|
|
|
|
|
float2 texCoordSkewed = texCoord;
|
|
|
|
|
texCoordSkewed = texCoordSkewed * (fbm(texCoord * float2(g_AspectRatio, 1.0) * 7.0 + g_Hash, 4) * 0.02 + 1.0);
|
|
|
|
|
|
|
|
|
|
float2 delta = texCoordSkewed - center;
|
|
|
|
|
delta.x *= g_AspectRatio;
|
|
|
|
|
|
|
|
|
|
float distance = length(delta);
|
|
|
|
|
float distanceOriginal = distance;
|
|
|
|
|
distance = pow(distance, 0.3);
|
|
|
|
|
float angle = atan2(delta.x, -delta.y) + g_Hash * 99;
|
|
|
|
|
|
|
|
|
|
float y = distance * 10.0;
|
|
|
|
|
|
|
|
|
|
angle = angle * 10.0;
|
|
|
|
|
float testOffset1 = snoise(float2(floor(angle), y * 0.4));
|
|
|
|
|
float testOffset2 = snoise(float2(floor(angle) + 1.0, y * 0.4));
|
|
|
|
|
float testOffset = lerp(testOffset1, testOffset2, frac(angle));
|
|
|
|
|
|
|
|
|
|
float blend1 = snoise(float2(floor(angle), 0.0));
|
|
|
|
|
float blend2 = snoise(float2(floor(angle) + 1.0, 0.0));
|
|
|
|
|
float blend = lerp(blend1, blend2, frac(angle));
|
|
|
|
|
blend = smoothstep(0.5, 0.2, blend);
|
|
|
|
|
|
|
|
|
|
float patternDistance = pow(max(0.0, distance - 0.25), 0.1) * 3.0;
|
|
|
|
|
float test = sin(patternDistance * 40.0 + testOffset * distance * 2.0);
|
|
|
|
|
float origFlow = test;
|
|
|
|
|
test = abs(test);
|
|
|
|
|
test = pow(test, 8.0 + 10.0 * testOffset);
|
|
|
|
|
test = smoothstep(0.0, 0.2 + 0.8 * testOffset, test);
|
|
|
|
|
|
|
|
|
|
float baseOpacity = smoothstep(0.01, 0.017, distanceOriginal) *
|
|
|
|
|
smoothstep(0.2, 0.01, distanceOriginal);
|
|
|
|
|
baseOpacity = pow(baseOpacity, 4.0) * impactTimer;
|
|
|
|
|
|
|
|
|
|
// Fade out
|
|
|
|
|
blend *= smoothstep(0.6 * impactTimer, 0.3 * impactTimer, distance - saturate(1.0 - testOffset) * 0.2);
|
|
|
|
|
|
|
|
|
|
// Fade in
|
|
|
|
|
blend *= smoothstep(0.25, 0.3, distance);
|
|
|
|
|
|
|
|
|
|
baseOpacity *= 1.0 - snoise(texCoordSkewed * 10.0 + g_Hash) * (1.0 - abs(origFlow * 2.0 - 1.0)) * 2;
|
|
|
|
|
|
|
|
|
|
float gradx = ddx(test + testOffset);
|
|
|
|
|
float grady = ddy(test + testOffset);
|
|
|
|
|
|
|
|
|
|
float r = fbm(float2(angle * 0.3, y * 0.4), 3);
|
|
|
|
|
r = smoothstep(-0.5, 0.5, r);
|
|
|
|
|
|
|
|
|
|
float blackCenter = smoothstep(0.017, 0.01, distanceOriginal) * impactTimer;
|
|
|
|
|
color.a = alphaTimer * lerp(1.0, blackBlendTimer, blackCenter);
|
|
|
|
|
|
|
|
|
|
color.rgb = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord + float2(gradx, -grady) * blend, 0.0).rgb;
|
|
|
|
|
color.rgb = lerp(color.rgb, (0.7 + r) * float3(0.8, 0.85, 1.0), (pow(test * blend * r, 2.0) + baseOpacity - blend * (abs(gradx) - abs(grady))));
|
|
|
|
|
color.rgb = lerp(color.rgb, (float3)0.0, blackCenter);
|
|
|
|
|
|
|
|
|
|
float2 flareDelta = texCoordUnrotated - center;
|
|
|
|
|
flareDelta.x *= g_AspectRatio;
|
|
|
|
|
float flareTimerFade = smoothstep(0.0, 0.1, progress);
|
|
|
|
|
flareDelta.x *= pow(flareTimerFade, 0.1);
|
|
|
|
|
flareTimerFade = flareTimerFade * (1.0 - flareTimerFade);
|
|
|
|
|
flareDelta.y /= pow(flareTimerFade, 0.5) + 0.00001;
|
|
|
|
|
float flare = 1.0 - length(flareDelta);
|
|
|
|
|
flare *= flareTimerFade;
|
|
|
|
|
flare = saturate(flare);
|
|
|
|
|
flare = pow(flare * 4.0, 2.0);
|
|
|
|
|
color.rgb *= (float3)(1.0) + flare * float3(1.0, 0.7, 0.2);
|
|
|
|
|
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 25
|
|
|
|
|
// Ice
|
|
|
|
|
float freezeOutTimer = pow(smoothstep(1.0, 0.5, progress), 2);
|
|
|
|
|
float freezeTimer = (smoothstep(0.0, 0.2, progress) * 0.333 + smoothstep(0.25, 0.5, progress) * 0.667) * freezeOutTimer;
|
|
|
|
|
float fadeTimer = smoothstep(1.0, 0.95, progress);
|
|
|
|
|
|
|
|
|
|
float2 center = (float2)0.5;
|
|
|
|
|
float2 delta = texCoord - center;
|
|
|
|
|
delta.x *= g_AspectRatio;
|
|
|
|
|
float distance = length(delta) / max(g_AspectRatio, 1.0);
|
|
|
|
|
|
|
|
|
|
float noise = fbm(texCoord * float2(g_AspectRatio, 1.0) * 2.0 + g_Hash, 8) * 0.5 + 0.5;
|
|
|
|
|
float rift = fbm(texCoord * float2(g_AspectRatio, 1.0) * 3.0 + g_Hash2, 8) * 0.5 + 0.5;
|
|
|
|
|
rift = smoothstep(0.4, 0.5, rift) * smoothstep(0.55, 0.5, rift);
|
|
|
|
|
|
|
|
|
|
float blendTransition = 0.3;
|
|
|
|
|
float blendDistance = 0.9 - distance;
|
|
|
|
|
noise *= blendTransition + progress * 0.2 + smoothstep(0.3, 0.4, progress) * 0.1 + smoothstep(0.5, 0.6, progress) * 0.1;
|
|
|
|
|
noise *= 1.0 + rift * (0.5 + 0.5 * progress) * 0.05;
|
|
|
|
|
|
|
|
|
|
float blendNoise = noise + rift * 0.1;
|
|
|
|
|
float blend = smoothstep(blendDistance - blendNoise * 0.51, blendDistance - blendNoise * 0.5, freezeTimer * (1.0 + blendTransition));
|
|
|
|
|
|
|
|
|
|
float mip = blend * 3.0 + blend * rift * 3.0;
|
|
|
|
|
float2 texCoordOffset = float2(ddx(noise), ddy(noise)) * 100.0;
|
|
|
|
|
texCoordOffset = pow(abs(texCoordOffset), 2.0) * sign(texCoordOffset);
|
|
|
|
|
texCoord += texCoordOffset * blend;
|
|
|
|
|
color.rgb = g_Texture0MipMapped.SampleLevel(g_Texture0SamplerState, texCoord, mip).rgb;
|
|
|
|
|
color.rgb *= 1.0 + length(texCoordOffset) * 3.0 * blend;
|
|
|
|
|
color.rgb += float3(0.6, 0.65, 1.0) * blend * noise * 4.0 * pow(distance + rift * 0.1, 2.0);
|
|
|
|
|
|
|
|
|
|
texCoord += texCoordOffset * blend * 2.0;
|
|
|
|
|
float flashLine = smoothstep(progress - 0.4, progress - 0.27, texCoord.x * 0.1 + 0.2 - texCoord.y * 0.005);
|
|
|
|
|
flashLine = flashLine * (1.0 - flashLine) * 2.0;
|
|
|
|
|
float flashVert = abs(texCoord.y * 2.0 - 1.0);
|
|
|
|
|
flashLine *= flashVert;
|
|
|
|
|
float flashBlend = flashLine;
|
|
|
|
|
color.rgb += color.rgb * flashBlend * blend;
|
|
|
|
|
|
|
|
|
|
color.a = max(blend, step(0.99, freezeOutTimer)) * fadeTimer;
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#elif FADEEFFECT == 26
|
|
|
|
|
// Boilover
|
|
|
|
|
//color = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0);
|
|
|
|
|
color.a = 1.0;
|
|
|
|
|
float blendRipple = smoothstep(0.0, 0.1, progress);
|
|
|
|
|
float blendUpscale = pow(smoothstep(0.8, 1.0, progress), 2.0);
|
|
|
|
|
float light = 1.0;
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 25; ++i)
|
|
|
|
|
{
|
|
|
|
|
//float2 centerOffset = float2(snoise(float2(i + g_Hash * 99, i * 99 + g_Hash2 * 33)),
|
|
|
|
|
// snoise(float2(i * 17 + g_Hash * 71, i * 22 + g_Hash2 * 17)));
|
|
|
|
|
float3 sharedNoise = g_Texture1Noise.SampleLevel(g_Texture0SamplerStateWrap, float2(i / 25.0 + g_Hash, i / 25.0 + g_Hash2), 0.0).rgb;
|
|
|
|
|
float2 centerOffset = sharedNoise.rg * 2.0 - 1.0;
|
|
|
|
|
float2 center = float2(0.5, 0.5) + centerOffset * 0.55;
|
|
|
|
|
|
|
|
|
|
//float maxDist = 0.1 + (fbm(center * 99, 2) * 0.5 + 0.5) * 0.33 * progress + 0.5 * blendUpscale;
|
|
|
|
|
float maxDist = 0.1 + (g_Texture2Clouds.SampleLevel(g_Texture0SamplerStateWrap, center * 99, 0.0).r) * 0.33 * progress + 0.5 * blendUpscale;
|
|
|
|
|
//float timerOffset = (snoise(float2(i + g_Hash * 54, i * 41 + g_Hash2 * 87)) * 0.5 + 0.5) * 0.9;
|
|
|
|
|
float timerOffset = sharedNoise.b * 0.9;
|
|
|
|
|
float animTimer = smoothstep(timerOffset, timerOffset + 0.0001 + 0.5 * smoothstep(1.0, 0.9, progress), progress);
|
|
|
|
|
animTimer = pow(animTimer, 2.0);
|
|
|
|
|
|
|
|
|
|
float2 delta = texCoord - center;
|
|
|
|
|
float2 deltaRef = delta;
|
|
|
|
|
delta.x *= g_AspectRatio;
|
|
|
|
|
float distance = length(delta);
|
|
|
|
|
|
|
|
|
|
float rippleTimer = smoothstep(timerOffset - 0.5, timerOffset + 0.5, progress);
|
|
|
|
|
float ripplePos = distance;
|
|
|
|
|
ripplePos = smoothstep(ripplePos, ripplePos + 0.1, rippleTimer) *
|
|
|
|
|
smoothstep(ripplePos + 0.2, ripplePos + 0.1, rippleTimer);
|
|
|
|
|
|
|
|
|
|
float2 rippleOffset = normalize(deltaRef) * -0.01 * ripplePos * blendRipple;
|
|
|
|
|
|
|
|
|
|
float test = smoothstep(maxDist, 0.0, distance);
|
|
|
|
|
float anim = test * animTimer * 20.0;
|
|
|
|
|
|
|
|
|
|
float angle = atan2(deltaRef.x, -deltaRef.y);
|
|
|
|
|
float mask = g_Texture2Clouds.SampleLevel(g_Texture0SamplerStateWrap, float2(angle * 0.25, (anim + progress) * 0.1), 0.0).r;
|
|
|
|
|
//float mask = fbm(float2(angle, anim + progress * 5.0), 3) * 0.5 + 0.5;
|
|
|
|
|
color.a *= step(anim, mask * 2.0);
|
|
|
|
|
|
|
|
|
|
delta *= saturate(1.0 - anim);
|
|
|
|
|
delta.x /= g_AspectRatio;
|
|
|
|
|
float2 uvOffset = delta - deltaRef + rippleOffset;
|
|
|
|
|
texCoord += uvOffset;
|
|
|
|
|
|
|
|
|
|
light += dot(normalize(float3(uvOffset, 1.0)), float3(-0.707, 0.707, 0.0)) * 10;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
color.a *= smoothstep(1.0, 0.9, progress);
|
|
|
|
|
|
|
|
|
|
color.rgb = g_Texture0.SampleLevel(g_Texture0SamplerState, texCoord, 0.0).rgb * light;
|
|
|
|
|
//color.rgb = g_Texture2Clouds.SampleLevel(g_Texture0SamplerState, texCoord, 0.0).rgb;
|
|
|
|
|
color.rgb *= color.a;
|
|
|
|
|
#endif
|
|
|
|
|
return color;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PS_OUTPUT main(VS_OUTPUT IN)
|
|
|
|
|
{
|
|
|
|
|
PS_OUTPUT OUT;
|
|
|
|
|
OUT.p_FragColor = PerformEffect(IN, IN.v_TexCoord, g_Progress);
|
|
|
|
|
return OUT;
|
|
|
|
|
}
|