feat: New Theatre volumetric rays
This commit is contained in:
@@ -25,7 +25,7 @@ float3 GetBillboardPositionWS(float3 PositionOS, float3 PivotWS, float3 ViewDirW
|
||||
|
||||
float3 ApplayerTaperAndScale(float3 PositionOS, float3 Scale)
|
||||
{
|
||||
float taper = lerp(Scale.z, 1, saturate(PositionOS.y));
|
||||
float taper = lerp(1, Scale.z, saturate(PositionOS.y));
|
||||
|
||||
float3 p = PositionOS;
|
||||
p.xy *= Scale.xy;
|
||||
@@ -36,10 +36,14 @@ float3 ApplayerTaperAndScale(float3 PositionOS, float3 Scale)
|
||||
|
||||
void Ray_float
|
||||
(
|
||||
float3 Color,
|
||||
float Size,
|
||||
float Speed,
|
||||
float Intensity,
|
||||
float4 Color,
|
||||
float3 PositionOS,
|
||||
float4 ScreenPos,
|
||||
uint Orthographic,
|
||||
float UvDebug,
|
||||
out float3 OutPosition,
|
||||
out float3 OutColor
|
||||
)
|
||||
@@ -69,6 +73,24 @@ void Ray_float
|
||||
|
||||
float2 uv = float2(distance(pSC_0.x, pSC_2.x) / distance(pSC_1.x, pSC_2.x), pOS_0.y / scale.y);
|
||||
|
||||
float mask = smoothstep(1, .2, abs(uv.x * 2 - 1));
|
||||
mask *= smoothstep(0, .1, uv.y);
|
||||
mask *= pow(smoothstep(1, .3, uv.y * .95), 2);
|
||||
mask *= smoothstep(1, .98, dot(-viewDir, normalize(TransformObjectToWorldDir(float3(0, 1, 0)))));
|
||||
|
||||
float noise = 1;
|
||||
if (Intensity > 0)
|
||||
{
|
||||
float3 noisePos = pivot;
|
||||
noisePos += float3(uv.x - .5, 0 /*uv.y * .05 / scale.x*/, _Time.y / scale.x / scale.z / Size * Speed * .2);
|
||||
|
||||
noise = SimplexNoise3D(noisePos, scale.x * scale.z * Size);
|
||||
noise = lerp(1, noise, Intensity);
|
||||
}
|
||||
|
||||
OutPosition = TransformWorldToObject(pWS_0);
|
||||
OutColor = float3(uv, 0);
|
||||
OutColor = saturate(noise * mask) * Color.rgb * Color.a;
|
||||
|
||||
if (UvDebug > 0)
|
||||
OutColor = lerp(OutColor, float3(uv, 0), UvDebug);
|
||||
}
|
||||
Reference in New Issue
Block a user