add game&rawdata

This commit is contained in:
Vasily Petrov 2026-06-17 23:06:51 +03:00
parent 0133cd976c
commit 49b34b5546
45731 changed files with 709831 additions and 0 deletions

View file

@ -0,0 +1,163 @@
#include "common.h"
#include "lmodel.h"
#include "shadow.h"
float3x4 m_sunmask; // ortho-projection
//Texture2D s_water;
Texture3D s_water;
Texture2D s_waterFall;
float4 RainDensity; // float
float4 WorldX; // Float3
float4 WorldZ; // Float3
float3 GetNVNMap( Texture3D s_texture, float2 tc, float time)
{
// Unpack NVidia normal map
// float4 water = s_water.SampleLevel( smp_linear, float3(tc, time), 0 ) - 0.5;
// float4 water = s_water.Sample( smp_linear, float3(tc, time)) - 0.5;
float4 water = s_texture.SampleBias( smp_base, float3(tc, time), -3.) - 0.5;
// Swizzle
water.xyz = water.wyz;
// Renormalize (*2) and scale (*3)
water.xyz *= 6;
// water.y = sqrt(1-water.x*water.x-water.z*water.z);
water.y = 0;
return water.xyz;
}
float3 GetWaterNMap( Texture2D s_texture, float2 tc)
{
// Unpack normal map
// float4 water = s_texture.SampleLevel( smp_base, float3(tc, time), 0 );
float4 water = s_texture.Sample( smp_base, tc);
water.xyz = (water.xzy-0.5)*2;
// water.xyz *= 3;
water.xyz *= 0.3;
water.y = 0;
return water.xyz;
}
#ifndef ISAMPLE
#define ISAMPLE 0
#endif
#ifdef GBUFFER_OPTIMIZATION
#ifdef MSAA_OPTIMIZATION
float4 main ( float2 tc : TEXCOORD0, float2 tcJ : TEXCOORD1, float4 Color : COLOR, float4 pos2d : SV_Position, uint iSample : SV_SAMPLEINDEX ) : SV_Target
#else
float4 main ( float2 tc : TEXCOORD0, float2 tcJ : TEXCOORD1, float4 Color : COLOR, float4 pos2d : SV_Position ) : SV_Target
#endif
#else
#ifdef MSAA_OPTIMIZATION
float4 main ( float2 tc : TEXCOORD0, float2 tcJ : TEXCOORD1, uint iSample : SV_SAMPLEINDEX ) : SV_Target
#else
float4 main ( float2 tc : TEXCOORD0, float2 tcJ : TEXCOORD1 ) : SV_Target
#endif
#endif
{
#ifdef GBUFFER_OPTIMIZATION
#ifdef MSAA_OPTIMIZATION
gbuffer_data gbd = gbuffer_load_data( tc, pos2d, iSample );
#else
gbuffer_data gbd = gbuffer_load_data( tc, pos2d, ISAMPLE );
#endif
#else
#ifdef MSAA_OPTIMIZATION
gbuffer_data gbd = gbuffer_load_data( tc, iSample );
#else
gbuffer_data gbd = gbuffer_load_data( tc, ISAMPLE );
#endif
#endif
float4 _P = float4( gbd.P, 1.0 );
float3 _N = gbd.N;
float3 D = gbd.C; // rgb //.gloss
_N.xyz = normalize(_N.xyz);
float4 PS = mul( m_shadow, _P );
float3 WorldP = mul( m_sunmask, _P );
float3 WorldN = mul( m_sunmask, _N.xyz );
// Read rain projection with some jetter. Also adding pixel normal
// factor to jitter to make rain strips more realistic.
float s = shadow_rain( PS, WorldP.xz*1.1 - WorldN.xz*0.035 );
// Apply distance falloff
//float fAtten = 1 - smoothstep( 10, 30, length( _P.xyz ));
// Using fixed fallof factors according to float16 depth coordinate precision.
float fAtten = 1 - smoothstep( 5, 20, _P.z );
s *= fAtten*fAtten;
// Apply rain density
s *= RainDensity.x;
float fIsUp = -dot( Ldynamic_dir.xyz, _N.xyz );
s *= saturate(fIsUp*10+(10*0.5)+0.5);
fIsUp = max(0, fIsUp);
float fIsX = WorldN.x;
float fIsZ = WorldN.z;
float3 waterSplash = GetNVNMap( s_water, WorldP.xz, timers.x*3.0 );
// float3 waterFallX = GetWaterNMap( s_waterFall, float2(WorldP.x, WorldP.y-timers.x), 0.5 );
// float3 waterFallZ = GetWaterNMap( s_waterFall, float2(WorldP.z, WorldP.y-timers.x), 0.5 );
float3 tc1 = WorldP / 2;
float fAngleFactor = 1 - fIsUp;
fAngleFactor = 0.1*ceil(10*fAngleFactor);
// Just slow down effect.
// fAngleFactor *= 0.25;
fAngleFactor *= 0.5;
// fAngleFactor *= 1.3;
float3 waterFallX = GetWaterNMap( s_waterFall, float2(tc1.z, tc1.y+timers.x*fAngleFactor) );
float3 waterFallZ = GetWaterNMap( s_waterFall, float2(tc1.x, tc1.y+timers.x*fAngleFactor) );
float2 IsDir = (float2(fIsZ, fIsX));
// float2 IsDir = float2(0, 1);
IsDir = normalize(IsDir);
float3 waterFall = GetWaterNMap( s_waterFall, float2( dot(tc1.xz, IsDir), tc1.y+timers.x) );
// float WeaponAttenuation = smoothstep( 1.0, 1.1, length( _P.xyz ));
float WeaponAttenuation = smoothstep( 0.8, 0.9, length( _P.xyz ));
float ApplyNormalCoeff = s * WeaponAttenuation;
float3 water = waterSplash*(fIsUp*ApplyNormalCoeff);
water += waterFallX.yxz*(abs(fIsX)*ApplyNormalCoeff);
water += waterFallZ.zxy*(abs(fIsZ)*ApplyNormalCoeff);
// Translate NM to view space
water.xyz = mul( m_V, water.xyz );
//return float4(water.xyz,1); // holger
_N += water.xyz;
_N = normalize(_N);
s *= dot(D.xyz, float3(0.33, 0.33, 0.33));
// s *= 0.5*fIsUp+0.5;
return float4(_N,s);
}