63 lines
1.3 KiB
HLSL
63 lines
1.3 KiB
HLSL
#include "common.hlsli"
|
|
#include "sload.hlsli"
|
|
|
|
void main(p_shadow _I, out IXrayGbufferPack O)
|
|
{
|
|
IXrayGbuffer G;
|
|
p_bumped_new I;
|
|
|
|
GbufferUnpack(_I.tc0.xy, _I.hpos.xy, G);
|
|
|
|
clip(G.SnowMask - 0.00001f);
|
|
clip(0.9999f - G.Depth);
|
|
|
|
I.position = float4(G.Point.xyz, 1.0f);
|
|
I.snow_mask = G.SnowMask * smoothstep(0.2f, 0.3f, G.Hemi);
|
|
|
|
float3 P = mul(m_invV, I.position);
|
|
float3 N = normalize(mul((float3x3)m_invV, G.Normal.xyz));
|
|
|
|
float3 T, B;
|
|
I.tcdh.xy = P.xz * 0.2f;
|
|
|
|
build_contangent_frame(P, N, I.tcdh.xy, T, B);
|
|
|
|
float3x3 xform = mul((float3x3)m_V, float3x3(
|
|
T.x, B.x, N.x,
|
|
T.y, B.y, N.y,
|
|
T.z, B.z, N.z
|
|
)
|
|
);
|
|
I.tcdh.zw = 0.5f;
|
|
|
|
I.M1 = xform[0];
|
|
I.M2 = xform[1];
|
|
I.M3 = xform[2];
|
|
|
|
I.hpos_curr = I.hpos_old = I.hpos = _I.hpos;
|
|
IXrayMaterial M;
|
|
|
|
M.Sun = G.SSS;
|
|
M.Hemi = G.Hemi;
|
|
|
|
M.Depth = G.Point.z;
|
|
M.Point = G.Point.xyz;
|
|
|
|
SloadNew(I, M);
|
|
|
|
M.Normal = mul(xform, M.Normal);
|
|
|
|
M.Normal = lerp(G.Normal, M.Normal, I.snow_mask);
|
|
M.Roughness = lerp(G.Roughness, M.Roughness, I.snow_mask);
|
|
|
|
M.Normal = normalize(M.Normal);
|
|
|
|
O.Velocity = 0.0f;
|
|
GbufferPack(O, M);
|
|
|
|
O.Color.w = I.snow_mask;
|
|
O.Material.w = I.snow_mask;
|
|
|
|
O.Normal.w = 1.0f;
|
|
}
|
|
|