DragonNest/Tools/Shaders/RainDropSplash.fx
Cussrro 243fadee1d 1
2024-12-26 14:04:28 +08:00

92 lines
2.6 KiB
HLSL

//////////////////////////////////////////////////////////////////////////////////////////////
// World Mat Param
//////////////////////////////////////////////////////////////////////////////////////////////
float4x4 g_WorldMat : WORLD;
float4x4 g_ViewProjMat : VIEWPROJ;
//////////////////////////////////////////////////////////////////////////////////////////////
// Shared Param
//////////////////////////////////////////////////////////////////////////////////////////////
shared float g_fElapsedTime : TIME;
//////////////////////////////////////////////////////////////////////////////////////////////
// Custom Param
//////////////////////////////////////////////////////////////////////////////////////////////
texture3D g_RainDropSplashTex : RAINDROPSPLASHTEX;
sampler3D g_RainDropSplashSampler = sampler_state
{
texture = < g_RainDropSplashTex >;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
};
float g_fInvLifeTime : INVSPLASHLIFETIME;
float4 g_RainDropSplashPos[ 200 ] : SPLASHPOSITION;
//------------------------------------
struct VertexInput
{
float3 Position : POSITION;
float2 TexCoord0 : TEXCOORD0;
int4 nVertexIndex : BLENDINDICES0;
};
struct VertexOutput
{
float4 Position : POSITION;
float3 TexCoord0 : TEXCOORD0;
#ifdef BAKE_DEPTHMAP
float DepthValue : TEXCOORD1;
#endif
};
struct PixelOutput
{
float4 Color : COLOR0;
#ifdef BAKE_DEPTHMAP
float4 Depth : COLOR1;
#endif
};
//////////////////////////////////////////////////////////////////////////////////////////////
// Start Vertex Shader
//////////////////////////////////////////////////////////////////////////////////////////////
VertexOutput RainDropSplashVS( VertexInput Input )
{
VertexOutput Output;
float4 OutPos = mul( float4( Input.Position, 1.0f ), g_WorldMat );
OutPos.xyz += g_RainDropSplashPos[ Input.nVertexIndex.x ].xyz;
Output.Position = mul( float4( OutPos.xyz, 1.0f ), g_ViewProjMat );
Output.TexCoord0 = float3( Input.TexCoord0.xy, ( g_fElapsedTime - g_RainDropSplashPos[ Input.nVertexIndex.x ].w ) * g_fInvLifeTime );
#ifdef BAKE_DEPTHMAP
Output.DepthValue = Output.Position.z;
#endif
return Output;
}
//-----------------------------------
PixelOutput RainDropSplashPS( VertexOutput Input) : COLOR
{
PixelOutput Output;
Output.Color = tex3D( g_RainDropSplashSampler, Input.TexCoord0 );
#ifdef BAKE_DEPTHMAP
Output.Depth = float4( Input.DepthValue.x, 0.0f, 0.0f, 1.0f );
#endif
return Output;
}
//-----------------------------------
technique RainDropSplashTech
{
pass p0
{
VertexShader = compile vs_2_0 RainDropSplashVS();
PixelShader = compile ps_2_0 RainDropSplashPS();
}
}