56 lines
1.2 KiB
HLSL
56 lines
1.2 KiB
HLSL
#include "common.hlsli"
|
|
#include "sload.hlsli"
|
|
|
|
void sample_Textures(inout float4 D, inout float4 H, float2 tc1, float2 tc0, float4 af)
|
|
{
|
|
float4 D1 = s_base.SampleLevel(smp_base, tc1, 0.0f);
|
|
float4 D0 = s_base.SampleLevel(smp_base, tc0, 0.0f);
|
|
float4 H0 = s_hemi.SampleLevel(smp_base, tc0, 0.0f);
|
|
float4 H1 = s_hemi.SampleLevel(smp_base, tc1, 0.0f);
|
|
|
|
H0.xyz = H0.rgb * 2.0f - 1.0f;
|
|
H1.xyz = H1.rgb * 2.0f - 1.0f;
|
|
|
|
D = lerp(D0, D1, af.w);
|
|
D.w *= af.z;
|
|
H = lerp(H0, H1, af.w);
|
|
H.w *= af.x;
|
|
}
|
|
|
|
void main(in p_bilbord I, out IXrayGbufferPack O)
|
|
{
|
|
float4 D, H;
|
|
sample_Textures(D, H, I.tc1, I.tc0, I.af);
|
|
float3 N = normalize(H.xyz);
|
|
|
|
clip(D.w - def_aref);
|
|
|
|
float Sun = saturate(H.w * 2.0f);
|
|
|
|
IXrayMaterial M;
|
|
M.Depth = I.position.z;
|
|
|
|
M.Point = I.position.xyz;
|
|
M.Color = D;
|
|
|
|
M.Sun = Sun;
|
|
|
|
M.AO = 1.0f;
|
|
M.SSS = 0.0f;
|
|
M.Hemi = H.w;
|
|
|
|
M.Normal = N.xyz;
|
|
|
|
M.Roughness = 0.95f;
|
|
M.Metalness = 0.0f;
|
|
|
|
#ifdef USE_LEGACY_LIGHT
|
|
M.Metalness = L_material.w;
|
|
M.Roughness = def_gloss;
|
|
#endif
|
|
|
|
M.SnowMask = 0.95f;
|
|
O.Velocity = I.hpos_curr.xy / I.hpos_curr.w - I.hpos_old.xy / I.hpos_old.w;
|
|
|
|
GbufferPack(O, M);
|
|
}
|