e4s-sdk/gamedata/shaders/r2/deffer_impl.ps.hlsl
2026-06-17 23:06:51 +03:00

52 lines
1.5 KiB
HLSL

#include "common.hlsli"
#include "sload.hlsli"
void main(p_bumped_new I, out f_deffer O)
{
XrayMaterial M;
M.Sun = I.tcdh.w;
M.Hemi = I.tcdh.z;
M.Point = I.position.xyz;
M.Color = tex2D(s_base, I.tcdh.xy);
float4 Lmap = tex2D(s_lmap, I.tcdh.xy);
float4 Mask = tex2D(s_mask, I.tcdh.xy);
Mask /= dot(Mask, 1.0f);
float2 tcdbump = I.tcdh.xy * dt_params.xy;
float3 Detail_R = tex2D(s_dt_r, tcdbump).xyz * Mask.x;
float3 Detail_G = tex2D(s_dt_g, tcdbump).xyz * Mask.y;
float3 Detail_B = tex2D(s_dt_b, tcdbump).xyz * Mask.z;
float3 Detail_A = tex2D(s_dt_a, tcdbump).xyz * Mask.w;
float3 Detail = Detail_R + Detail_G + Detail_B + Detail_A;
float4 Normal_R = tex2D(s_dn_r, tcdbump) * Mask.x;
float4 Normal_G = tex2D(s_dn_g, tcdbump) * Mask.y;
float4 Normal_B = tex2D(s_dn_b, tcdbump) * Mask.z;
float4 Normal_A = tex2D(s_dn_a, tcdbump) * Mask.w;
float3 Normal = Normal_R.wzy + Normal_G.wzy + Normal_B.wzy + Normal_A.wzy - 0.5;
Normal.z *= 0.5f;
M.Roughness = saturate(1.0f - Normal_R.x + Normal_G.x + Normal_B.x + Normal_A.x);
M.Color.xyz *= Detail * 2.0f;
M.Metalness = 0.0f;
M.SSS = 0.0f;
M.AO = 1.0f;
M.Normal = mul(float3x3(I.M1, I.M2, I.M3), Normal);
M.Normal = normalize(M.Normal);
M.Sun = Lmap.w;
M.Hemi = M.Color.w;
#ifndef USE_R2_STATIC_SUN
M.Sun = xmaterial;
#endif
O = pack_gbuffer(float4(M.Normal, M.Hemi), float4(M.Point, M.Sun), float4(M.Color.xyz, 1.0f - M.Roughness));
}