add game&rawdata
This commit is contained in:
parent
0133cd976c
commit
49b34b5546
45731 changed files with 709831 additions and 0 deletions
172
gamedata/shaders/r3/rain_patch_normal_new.ps
Normal file
172
gamedata/shaders/r3/rain_patch_normal_new.ps
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
#include "common.h"
|
||||
#include "lmodel.h"
|
||||
#include "shadow.h"
|
||||
|
||||
|
||||
float3x4 m_sunmask; // ortho-projection
|
||||
//Texture2D s_water;
|
||||
Texture3D s_water;
|
||||
Texture3D s_waterFall;
|
||||
float4 RainDensity;
|
||||
float4 RainFallof;
|
||||
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( Texture3D s_texture, float2 tc, float time)
|
||||
{
|
||||
// Unpack normal map
|
||||
// float4 water = s_texture.SampleLevel( smp_base, float3(tc, time), 0 );
|
||||
float4 water = s_texture.Sample( smp_base, float3(tc, time));
|
||||
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 );
|
||||
|
||||
// floor ???? instead of step?
|
||||
//float delta = sin(WorldP.z*30);
|
||||
//float deltaX = step(0, sin(WorldP.z*30));
|
||||
//float deltaX = step(0, sin(WorldP.z*(2.0*3.14)/(1+frac(WorldP.x + WorldP.y)) ));
|
||||
|
||||
//float deltaY = step(0, sin(WorldP.z*10+3));
|
||||
//float deltaY = deltaX;
|
||||
|
||||
//deltaX *= 0.05;
|
||||
//deltaY *= 0.05;
|
||||
|
||||
//float s = shadow_rain( PS, WorldP.xz*2 + float2(deltaX, deltaY) );
|
||||
float s = shadow_rain( PS, WorldP.xz*2 );
|
||||
|
||||
// Apply distance falloff
|
||||
float fAtten = 1 - smoothstep( 10, 30, length( _P.xyz ));
|
||||
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), 0.5 );
|
||||
float3 waterFallZ = GetWaterNMap( s_waterFall, float2(tc1.x, tc1.y+timers.x*fAngleFactor), 0.5 );
|
||||
|
||||
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), 0.5 );
|
||||
|
||||
// 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 += 0.01 * 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue