This commit is contained in:
Vasily Petrov 2026-06-18 01:18:29 +03:00
commit 2fe6ca2f65
1473 changed files with 251771 additions and 0 deletions

View file

@ -0,0 +1,68 @@
#include "common.hlsli"
#include "shadow.hlsli"
struct v2p
{
float3 lightToPos : TEXCOORD0; // light center to plane vector
float3 vPos : TEXCOORD1; // position in camera space
float fDensity : TEXCOORD2; // plane density along Z axis
};
uniform float4 m_lmap[2];
Texture2D s_noise;
#define USE_LMAP
#define USE_LMAPXFORM
#define USE_SHADOW
// Pixel
float4 main(v2p I) : SV_Target
{
// ----- shadow
float4 P4 = float4(I.vPos, 1);
float4 PS = mul(m_shadow, P4);
float s = 1.0f;
#ifdef USE_SHADOW
s = shadow(PS);
#endif
// ----- lightmap
float4 lightmap = 1.0f;
#ifdef USE_LMAP
#ifdef USE_LMAPXFORM
PS.x = dot(P4, m_lmap[0]);
PS.y = dot(P4, m_lmap[1]);
#endif
lightmap = s_lmap.Sample(smp_rtlinear, PS.xy / PS.w);
#endif
// ----- attenuate
float rsqr = dot(I.lightToPos, I.lightToPos); // distance 2 light (squared)
float att = saturate(1 - rsqr * Ldynamic_pos.w); // q-linear attenuate
// ----- noise
PS.xy /= PS.w;
PS.xy *= 0.3333;
float time = timers.z * 0.1;
PS.x += time;
float4 t_noise = s_noise.SampleLevel(smp_linear, PS.xy, 0);
PS.x -= time;
PS.y -= time * 0.70091;
t_noise *= s_noise.SampleLevel(smp_linear, PS.xy, 0);
t_noise = t_noise * 0.5 + 0.5;
// out
float maxIntens = I.fDensity;
float3 result = maxIntens * s * att;
result *= lightmap.xyz;
result *= Ldynamic_color.xyz * t_noise.xyz;
return float4(PushGamma(result), 0);
}