diff options
Diffstat (limited to 'materialsystem/stdshaders/pyro_vision_ps2x.fxc')
| -rw-r--r-- | materialsystem/stdshaders/pyro_vision_ps2x.fxc | 460 |
1 files changed, 460 insertions, 0 deletions
diff --git a/materialsystem/stdshaders/pyro_vision_ps2x.fxc b/materialsystem/stdshaders/pyro_vision_ps2x.fxc new file mode 100644 index 0000000..ba1718c --- /dev/null +++ b/materialsystem/stdshaders/pyro_vision_ps2x.fxc @@ -0,0 +1,460 @@ +// STATIC: "EFFECT" "0..3" +// STATIC: "VERTEX_LIT" "0..1" +// STATIC: "BASETEXTURE2" "0..1" +// STATIC: "FANCY_BLENDING" "0..1" +// STATIC: "SELFILLUM" "0..1" +// STATIC: "COLOR_BAR" "0..1" +// STATIC: "STRIPES" "0..1" +// STATIC: "STRIPES_USE_NORMAL2" "0..1" + +// DYNAMIC: "PIXELFOGTYPE" "0..1" +// DYNAMIC: "VISUALIZE_DOF" "0..1" +// DYNAMIC: "HEATHAZE" "0..1" + +// SKIP: ( STRIPES == 0 ) && ( STRIPES_USE_NORMAL2 == 1 ) +// SKIP: ( EFFECT != 1 ) && ( COLOR_BAR == 1 ) +// SKIP: ( EFFECT != 2 ) && ( VISUALIZE_DOF == 1 ) +// SKIP: ( EFFECT == 2 || EFFECT == 3 ) && ( STRIPES == 1 || STRIPES_USE_NORMAL2 == 1 || COLOR_BAR == 1 || BASETEXTURE2 == 1 || FANCY_BLENDING == 1 || VERTEX_LIT == 1 || PIXELFOGTYPE == 1 || SELFILLUM == 1 ) +// SKIP: ( EFFECT != 3 ) && ( HEATHAZE == 1 ) + +#include "shader_constant_register_map.h" +#include "common_ps_fxc.h" + +sampler BaseTextureSampler : register( s0 ); + +#if BASETEXTURE2 == 1 + +sampler BaseTexture2Sampler : register( s4 ); + +#if FANCY_BLENDING == 1 + +sampler BlendModulationSampler : register( s3 ); + +#endif + +#endif + +#if STRIPES + +sampler StripeSampler : register( s5 ); + +const float4 g_vPyroParms6 : register( c5 ); + #define g_vStripeColor g_vPyroParms6.rgb + #define g_flStripeLMScale g_vPyroParms6.a + +const float4 g_vPyroParms7 : register( c6 ); + #define g_vStripeNormal1 g_vPyroParms6.xyz + #define g_flUnused6 g_vPyroParms6.w + +#if ( STRIPES_USE_NORMAL2 == 1 ) + +const float4 g_vPyroParms8 : register( c7 ); + #define g_vStripeNormal2 g_vPyroParms7.xyz + #define g_flUnused7 g_vPyroParms7.w + +#endif + +#endif + + + +#if EFFECT == 0 + +sampler LightmapSampler : register( s1 ); +sampler CanvasSampler : register( s2 ); + +const float4 g_vPyroParms1 : register( c0 ); + #define g_vBaseStepRange g_vPyroParms1.xy + #define g_vLightmapStepRange g_vPyroParms1.zw + +const float4 g_vPyroParms2 : register( c1 ); + #define g_vColorModulation g_vPyroParms2.rgb + #define g_flUnused1 g_vPyroParms2.w + +const float4 g_vPyroParms3 : register( c2 ); + #define g_vCanvasStepRange g_vPyroParms3.xy + #define g_vUnused2 g_vPyroParms3.zw + +const float4 g_vPyroParms4 : register( c3 ); + #define g_vCanvasColorStart g_vPyroParms4.rgb + #define g_flUnused3 g_vPyroParms4.w + +const float4 g_vPyroParms5 : register( c4 ); + #define g_vCanvasColorEnd g_vPyroParms5.rgb + #define g_flUnused4 g_vPyroParms5.w + +#elif EFFECT == 1 + +sampler LightmapSampler : register( s1 ); +sampler ColorBarSampler : register( s2 ); + +const float4 g_vPyroParms1 : register( c0 ); + #define g_flGrayPower g_vPyroParms1.x + #define g_flGrayStep g_vPyroParms1.yz + #define g_flLightMapGradients g_vPyroParms1.w + +const float4 g_vPyroParms2 : register( c1 ); + #define g_vColorModulation g_vPyroParms2.rgb + #define g_flDiffuseLighting g_vPyroParms2.w + +const float4 g_vPyroParms3 : register( c2 ); + #define g_flDiffuseBase g_vPyroParms3.x + #define g_vSelfIllumTint g_vPyroParms3.yzw + +#elif EFFECT == 2 + +sampler BlurredFrameSampler : register( s4 ); + +const float4 g_vPyroParms1 : register( c0 ); + #define g_flDoFStartDistance g_vPyroParms1.x + #define g_flDoFPower g_vPyroParms1.y + #define g_flDoFMax g_vPyroParms1.z + #define g_flUnused1 g_vPyroParms1.w + +#elif EFFECT == 3 + +sampler NoiseSampler : register( s3 ); +sampler WarpFrameSampler : register( s4 ); +sampler VignetteSampler : register( s5 ); +sampler VignetteTileSampler : register( s6 ); + +const float4 g_vPyroParms1 : register( c0 ); + #define g_flNoiseScale g_vPyroParms1.x // 0.2 + #define g_flTimeScale g_vPyroParms1.y // 0.020 + #define g_flHeatHazeScale g_vPyroParms1.z // 0.2 + #define g_flUnused1 g_vPyroParms1.w + +#endif + +const HALF3 g_EyePos : register( c10 ); +const HALF4 g_FogParams : register( c11 ); +const float4 g_vGeneralPyroParms1 : register( c12 ); + #define g_fWriteDepthToAlpha g_vGeneralPyroParms1.x + #define g_flTime g_vGeneralPyroParms1.y + #define g_flGeneralUnused2 g_vGeneralPyroParms1.z + #define g_flGeneralUnused3 g_vGeneralPyroParms1.w + + + +struct PS_INPUT +{ +#if EFFECT == 0 || EFFECT == 1 + + float4 vBaseAndSeamlessTexCoord : TEXCOORD0; +#if ( STRIPES == 1 ) + float2 vStripeSeamlessTexCoord : TEXCOORD1; +#endif +#if ( VERTEX_LIT == 0 ) + float2 vLightmapBlendTexCoord : TEXCOORD2; +#endif +#if BASETEXTURE2 == 1 + float3 vBlendFactor : TEXCOORD3; +#endif + float4 worldPos_projPosZ : TEXCOORD4; + float3 vWorldNormal : TEXCOORD5; + float4 vVertexColor : COLOR; + +#else + + float2 vBaseTexCoord : TEXCOORD0; + +#endif + +}; + + +float ToGray( const float3 vColor ) +{ + return dot( vColor, float3( 0.30f, 0.59f, 0.11f ) ); +} + + +void HandleBlending( const float2 vBaseTextureCoord, const float3 vBlendFactor, inout float4 vBaseColor ) +{ +#if BASETEXTURE2 == 1 + + float4 vBaseColor2 = tex2D( BaseTexture2Sampler, vBaseTextureCoord ); + float flBlendFactor = vBlendFactor.z; + +#if FANCY_BLENDING == 1 + + float4 modt = tex2D( BlendModulationSampler, vBlendFactor.xy ); + float minb = saturate( modt.g - modt.r ); + float maxb = saturate( modt.g + modt.r ); + flBlendFactor = smoothstep( minb, maxb, flBlendFactor ); + +#endif + + vBaseColor = lerp( vBaseColor, vBaseColor2, flBlendFactor ); + +#endif +} + + +#if STRIPES + +void CalculateStripe( const float2 vStripeSeamlessTexCoord, const float3 vWorldNormal, const float flLMScale, inout float3 vResult ) +{ + float4 vStripeColor = tex2D( StripeSampler, vStripeSeamlessTexCoord ); + + vStripeColor.rgb *= g_vStripeColor; + vStripeColor.rgb *= lerp( float3( 1.0, 1.0, 1.0 ), flLMScale, g_flStripeLMScale ); + +#if VERTEX_LIT == 1 && 0 + + float flAngle = saturate( dot( vWorldNormal, g_vStripeNormal1 ) ); + vResult.rgb = ( vWorldNormal * 0.5 ) + 0.5; + return; + + flAngle = 1 - flAngle; + vStripeColor.a *= flAngle; + +#endif + + vResult = lerp( vResult, vStripeColor.rgb, vStripeColor.a ); +} + +#endif + + +#if EFFECT == -1 + +float4 main( PS_INPUT i ) : COLOR +{ + float4 vBaseColor = tex2D( BaseTextureSampler, i.vBaseAndSeamlessTexCoord.xy ); + +#if BASETEXTURE2 == 1 + HandleBlending( i.vBaseAndSeamlessTexCoord.xy, i.vBlendFactor, vBaseColor ); +#endif + +// return vBaseColor; + + vBaseColor *= i.vVertexColor; + +#if VERTEX_LIT == 0 + float4 vLightmapSample = tex2D( LightmapSampler, i.vLightmapBlendTexCoord.xy ) * float4( g_vColorModulation, 1.0 ); +#endif + float4 vCanvas = tex2D( CanvasSampler, i.vBaseAndSeamlessTexCoord.zw ); + + float flFogFactor = CalcPixelFogFactor( 0, g_FogParams, g_EyePos.z, i.worldPos_projPosZ.z, i.worldPos_projPosZ.w ); + +// return saturate( min( g_FogParams.z, (i.worldPos_projPosZ.w * g_FogParams.w) - g_FogParams.x ) ); + +// return float4( g_FogParams.x, g_FogParams.z, g_FogParams.w, 1 ); + +// return g_LinearFogColor; +// flFogFactor = 1; + + float4 vResult; + +#if 0 + vResult = vBaseColor * vLightmapSample; +#else + float flBaseGray = dot( vBaseColor.rgb, float3( 0.30f, 0.59f, 0.11f ) ); +#if VERTEX_LIT == 0 + float flLightmapGray = dot( vLightmapSample.rgb, float3( 0.30f, 0.59f, 0.11f ) ); +#endif + + flBaseGray = smoothstep( g_vBaseStepRange.x, g_vBaseStepRange.y, flBaseGray ); + vResult = float4( flBaseGray.rrr, vBaseColor.a ); + +#if VERTEX_LIT == 0 +// flLightmapGray = pow( flLightmapGray, 0.01 ); + flLightmapGray = smoothstep( g_vLightmapStepRange.x, g_vLightmapStepRange.y, flLightmapGray ); + vResult *= flLightmapGray; +#endif + + float flCanvasGray = dot( vCanvas.rgb, float3( 0.30f, 0.59f, 0.11f ) ); + flCanvasGray = smoothstep( g_vCanvasStepRange.x, g_vCanvasStepRange.y, flCanvasGray ); + + vCanvas.rgb = lerp( g_vCanvasColorStart, g_vCanvasColorEnd, flCanvasGray ); + + vResult *= vCanvas; + +#endif + + return FinalOutput( vResult, flFogFactor, 0, TONEMAP_SCALE_LINEAR, true, i.worldPos_projPosZ.w ); +} + +#elif EFFECT == 0 + +float4 main( PS_INPUT i ) : COLOR +{ + float4 vBaseColor = tex2D( BaseTextureSampler, i.vBaseAndSeamlessTexCoord.xy ); + +#if BASETEXTURE2 == 1 + HandleBlending( i.vBaseAndSeamlessTexCoord.xy, i.vBlendFactor, vBaseColor ); +#endif + + vBaseColor.rgb *= i.vVertexColor.rgb; + vBaseColor.rgb = ceil( vBaseColor.rgb * 16.0 ) / 16.0; + +#if VERTEX_LIT == 0 + float4 vLightmapSample = tex2D( LightmapSampler, i.vLightmapBlendTexCoord.xy ) * float4( g_vColorModulation, 1.0 ); +#endif + float4 vCanvas = tex2D( CanvasSampler, i.vBaseAndSeamlessTexCoord.zw ); + + float flFogFactor = CalcPixelFogFactor( 0, g_FogParams, g_EyePos.z, i.worldPos_projPosZ.z, i.worldPos_projPosZ.w ); + + float4 vResult; + + float flBaseGray = dot( vBaseColor.rgb, float3( 0.30f, 0.59f, 0.11f ) ); +#if VERTEX_LIT == 0 + float flLightmapGray = dot( vLightmapSample.rgb, float3( 0.30f, 0.59f, 0.11f ) ); +#endif + +#ifdef GRAY_DIFFUSE + flBaseGray = smoothstep( g_vBaseStepRange.x, g_vBaseStepRange.y, flBaseGray ); + vResult = float4( flBaseGray.rrr, vBaseColor.a ); +#else + vResult.rgb = smoothstep( g_vBaseStepRange.xxx, g_vBaseStepRange.yyy, vBaseColor.rgb ); + vResult.a = vBaseColor.a; +#endif + + +#if VERTEX_LIT == 0 + +#ifdef GRAY_LM + + flLightmapGray = pow( flLightmapGray, 0.01 ); + flLightmapGray = smoothstep( g_vLightmapStepRange.x, g_vLightmapStepRange.y, flLightmapGray ); + vResult.rgb *= flLightmapGray; + +#else + + vLightmapSample.rgb = smoothstep( g_vLightmapStepRange.xxx, g_vLightmapStepRange.yyy, vLightmapSample.rgb ); +// vLightmapSample.rgb = lerp( float3( 0.0, 0.0, 0.0 ), float3( 3.1, 1.1, 5.1 ), vLightmapSample.rgb ); + vResult.rgb *= vLightmapSample.rgb; + +#endif + +#endif + + float flCanvasGray = dot( vCanvas.rgb, float3( 0.30f, 0.59f, 0.11f ) ); + flCanvasGray = smoothstep( g_vCanvasStepRange.x, g_vCanvasStepRange.y, flCanvasGray ); + + vCanvas.rgb = lerp( g_vCanvasColorStart, g_vCanvasColorEnd, flCanvasGray ); +// vCanvas.rgb = pow( vCanvas.rgb, 0.6 ); + + vResult *= vCanvas; + + return FinalOutput( vResult, flFogFactor, 0, TONEMAP_SCALE_LINEAR, true, i.worldPos_projPosZ.w ); +} + +#elif EFFECT == 1 + +#define GRAY_DIFFUSE 1 +#define GRAY_LM 1 + + +float4 main( PS_INPUT i ) : COLOR +{ + float4 vResult; + + float4 vBaseColor = tex2D( BaseTextureSampler, i.vBaseAndSeamlessTexCoord.xy ); + +#if BASETEXTURE2 == 1 + HandleBlending( i.vBaseAndSeamlessTexCoord.xy, i.vBlendFactor, vBaseColor ); +#endif + + float flFogFactor = CalcPixelFogFactor( 0, g_FogParams, g_EyePos.z, i.worldPos_projPosZ.z, i.worldPos_projPosZ.w ); + + vBaseColor.rgb = lerp( vBaseColor.rgb, 1.0, g_flDiffuseBase ); + vResult = vBaseColor * i.vVertexColor; + +#if VERTEX_LIT == 0 + float4 vLightmapSample = tex2D( LightmapSampler, i.vLightmapBlendTexCoord.xy ) * float4( g_vColorModulation, 1.0 ); + vResult.rgb = lerp( vResult.rgb, 0.5, g_flDiffuseLighting ); + vResult.rgb *= vLightmapSample.rgb; +#endif + +#if SELFILLUM + + float3 vSelfIllumComponent = g_vSelfIllumTint * vBaseColor.rgb; + vResult.rgb = lerp( vResult.rgb, vSelfIllumComponent, vBaseColor.a ); + +#endif + + float flGray = dot( vResult.rgb, float3( 0.30f, 0.59f, 0.11f ) ); + + flGray = pow( flGray, g_flGrayPower ); + flGray = smoothstep( g_flGrayStep.x, g_flGrayStep.y, flGray ); + + flGray = ceil( flGray * g_flLightMapGradients ) / g_flLightMapGradients; + +#if COLOR_BAR == 1 + + float4 vCanvas = tex1D( ColorBarSampler, flGray ); + vResult.rgb = vCanvas.rgb * flGray; + +#endif + +#if STRIPES + + CalculateStripe( i.vStripeSeamlessTexCoord, i.vWorldNormal, flGray, vResult.rgb ); + +#endif + + return FinalOutput( vResult, flFogFactor, 0, TONEMAP_SCALE_LINEAR, false, i.worldPos_projPosZ.w ); +} + +#elif EFFECT == 2 + +float4 main( PS_INPUT i ) : COLOR +{ + float flDepth = tex2D( BaseTextureSampler, i.vBaseTexCoord.xy ).r; + float4 vBaseColor = tex2D( BlurredFrameSampler, i.vBaseTexCoord.xy ); + + + float flAmount; + flAmount = flDepth; + + flAmount = saturate( flDepth - g_flDoFStartDistance ); + flAmount = pow( flAmount, g_flDoFPower ); + flAmount *= g_flDoFMax; + +#if VISUALIZE_DOF == 1 + + return float4( flAmount.rrr, 1 ); + +#else + + return float4( vBaseColor.rgb, flAmount ); + +#endif +} + +#elif EFFECT == 3 + +float4 main( PS_INPUT i ) : COLOR +{ + float flVignetteAmount = tex2D( VignetteSampler, i.vBaseTexCoord.xy ); + float4 vVignetteTile = tex2D( VignetteTileSampler, i.vBaseTexCoord.xy * 50.0f ); + +#if HEATHAZE == 1 + float2 vOffset = tex2D( WarpFrameSampler, i.vBaseTexCoord.xy ).aa; + float flDynamicOffset = tex2D( NoiseSampler, float2( i.vBaseTexCoord.x, ( i.vBaseTexCoord.y * g_flNoiseScale ) + ( g_flTime * g_flTimeScale ) ) ).r; + +// return float4( vOffset.yyy, 1 ); +// return float4( flDynamicOffset.xxx, 1.0 ); + +// vOffset = ( vOffset - 0.5 ); + vOffset = smoothstep( 0.1, 1.0, vOffset ); + vOffset *= flDynamicOffset * g_flHeatHazeScale; + float4 vOriginal = tex2D( BaseTextureSampler, i.vBaseTexCoord.xy + float2( 0, vOffset.y ) ); + +#else + + float4 vOriginal = tex2D( BaseTextureSampler, i.vBaseTexCoord.xy ); + +#endif + + float flDelta = flVignetteAmount.x - vVignetteTile.a; + + float flFinal = flDelta <= 0.0f ? 0.0f : lerp( flVignetteAmount.x, 1.0, flDelta / flVignetteAmount.x ); + vOriginal.rgb = lerp( vOriginal.rgb, vVignetteTile.rgb, flFinal * flVignetteAmount.x ); + + return float4( vOriginal ); +} + +#endif |