72 lines
1.6 KiB
HLSL
72 lines
1.6 KiB
HLSL
#include "common.hlsli"
|
|
#include "sload.hlsli"
|
|
|
|
void main(p_bumped_new I, out IXrayGbufferPack O)
|
|
{
|
|
IXrayMaterial M;
|
|
M.Depth = I.position.z;
|
|
|
|
#ifdef USE_CLIP_NEAR_PLANE
|
|
clip(I.hpos_curr.z - I.hpos_curr.w * 0.02f);
|
|
#endif
|
|
|
|
M.Sun = I.tcdh.w;
|
|
M.Hemi = I.tcdh.z;
|
|
M.Point = I.position.xyz;
|
|
|
|
SloadNew(I, M);
|
|
|
|
#ifdef USE_AREF
|
|
#if defined(USE_HASHED_AREF) && !defined(DETAIL_SHADOW_PASS)
|
|
clip(M.Color.w - hashed_alpha_test(M.Point));
|
|
#else
|
|
clip(M.Color.w - def_aref);
|
|
#endif
|
|
#ifdef USE_DXT1_HACK
|
|
M.Color.xyz *= rcp(max(0.0001f, M.Color.w));
|
|
#endif
|
|
#endif
|
|
|
|
#if defined(USE_BUMP) || defined(USE_TDETAIL_BUMP)
|
|
M.Normal = mul(float3x3(I.M1, I.M2, I.M3), M.Normal);
|
|
#else
|
|
M.Normal = float3(I.M1.z, I.M2.z, I.M3.z);
|
|
#endif
|
|
|
|
M.Normal = normalize(M.Normal);
|
|
|
|
#ifdef USE_LM_HEMI
|
|
float4 lm = s_hemi.Sample(smp_rtlinear, I.tcdh.zw);
|
|
|
|
M.Sun = get_sun(lm);
|
|
M.Hemi = get_hemi(lm);
|
|
#endif
|
|
|
|
#ifdef USE_LEGACY_LIGHT
|
|
#ifndef USE_PBR
|
|
M.Metalness = L_material.w;
|
|
#else
|
|
M.Color.xyz *= M.AO;
|
|
M.AO = 1.0f;
|
|
float Specular = M.Metalness * dot(M.Color.xyz, LUMINANCE_VECTOR);
|
|
M.Color.xyz = lerp(M.Color.xyz, 0.04f, M.Metalness);
|
|
M.Metalness = 0.5f - M.Roughness * M.Roughness * 0.5f;
|
|
M.Roughness = Specular;
|
|
#endif
|
|
#endif
|
|
|
|
#ifdef IGNORE_SNOW_MASK
|
|
M.SnowMask = 0.0f;
|
|
#endif
|
|
|
|
#ifdef USE_AREF
|
|
#ifdef USE_TREEWAVE
|
|
M.SSS = 1.0f;
|
|
#endif
|
|
M.SnowMask = 0.0f;
|
|
#endif
|
|
|
|
O.Velocity = I.hpos_curr.xy / I.hpos_curr.w - I.hpos_old.xy / I.hpos_old.w;
|
|
GbufferPack(O, M);
|
|
}
|
|
|