diff --git a/res/gamedata/shaders/r3/common_defines.h b/res/gamedata/shaders/r3/common_defines.h index a06d1901f0d..ac0fad0e5e8 100644 --- a/res/gamedata/shaders/r3/common_defines.h +++ b/res/gamedata/shaders/r3/common_defines.h @@ -11,19 +11,12 @@ #define def_hdr float(9.h) // hight luminance range float(3.h) #define def_hdr_clip float(0.75h) // +#define LUMINANCE_VECTOR float3(0.3f, 0.38f, 0.22f) + ////////////////////////////////////////////////////////////////////////////////////////// #ifndef SMAP_size -#define SMAP_size 2048 +#define SMAP_size 1024 #endif ////////////////////////////////////////////////////////////////////////////////////////// -#define SKY_DEPTH float(10000.0) -#define SKY_EPS float(0.001) -#define FARPLANE float(180.0) - -#define USABLE_BIT_13 uint(0x02000000) // This will be translated to a +/-MAX_FLOAT in the FP16 render target (0xFBFF/0x7BFF), overwriting the -#define USABLE_BIT_14 uint(0x04000000) // mantissa bits where other bit flags are stored. -#define USABLE_BIT_15 uint(0x80000000) -#define MUST_BE_SET uint(0x40000000) // This flag *must* be stored in the floating-point representation of the bit flag to store - #endif // common_defines_h_included \ No newline at end of file diff --git a/res/gamedata/shaders/r3/rain_patch_normal_new.ps b/res/gamedata/shaders/r3/rain_patch_normal_new.ps index 7f64a50be8a..ddac30ac51b 100644 Binary files a/res/gamedata/shaders/r3/rain_patch_normal_new.ps and b/res/gamedata/shaders/r3/rain_patch_normal_new.ps differ diff --git a/res/gamedata/shaders/r3/shared/common.h b/res/gamedata/shaders/r3/shared/common.h index 221f75f2aa0..cfaee013ddd 100644 --- a/res/gamedata/shaders/r3/shared/common.h +++ b/res/gamedata/shaders/r3/shared/common.h @@ -2,6 +2,7 @@ // All comments by Nivenhbro are preceded by ! ///////////////////////////////////////////////// + #ifndef SHARED_COMMON_H #define SHARED_COMMON_H @@ -26,7 +27,6 @@ cbuffer shader_params cbuffer static_globals { uniform float3x4 m_V; - uniform float3x4 m_inv_V; uniform float4x4 m_P; uniform float4x4 m_VP; @@ -40,9 +40,6 @@ cbuffer static_globals uniform float3 L_sun_color; uniform float3 L_sun_dir_w; uniform float4 L_hemi_color; - uniform float4 Ldynamic_dir; - uniform float4 Ldynamic_pos; - uniform float4 Ldynamic_color; uniform float3 eye_position; @@ -50,10 +47,7 @@ cbuffer static_globals uniform float4 pos_decompression_params2; uniform float4 parallax; - uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) - uniform float4 rain_params; //x = raindensity, y = wetness - uniform float4 pp_img_corrections; - uniform float4 pp_img_cg; +// uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) } /* @@ -87,4 +81,5 @@ float2 calc_xz_wave (float2 dir2D, float frac) return lerp (ctrl_A, ctrl_B, frac); //!This calculates tree wave. No changes made } + #endif diff --git a/res/gamedata/shaders/r3/ssao.ps b/res/gamedata/shaders/r3/ssao.ps index c1a1d58a456..5dbb26b4d5e 100644 Binary files a/res/gamedata/shaders/r3/ssao.ps and b/res/gamedata/shaders/r3/ssao.ps differ diff --git a/res/gamedata/shaders/r3/ACES.H b/res/gamedata/shaders/r5/ACES.H similarity index 100% rename from res/gamedata/shaders/r3/ACES.H rename to res/gamedata/shaders/r5/ACES.H diff --git a/res/gamedata/shaders/r3/ACES_Color_Grading.h b/res/gamedata/shaders/r5/ACES_Color_Grading.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_Color_Grading.h rename to res/gamedata/shaders/r5/ACES_Color_Grading.h diff --git a/res/gamedata/shaders/r3/ACES_LMT.h b/res/gamedata/shaders/r5/ACES_LMT.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_LMT.h rename to res/gamedata/shaders/r5/ACES_LMT.h diff --git a/res/gamedata/shaders/r3/ACES_LMTs/LMT_Bleach_Bypass.h b/res/gamedata/shaders/r5/ACES_LMTs/LMT_Bleach_Bypass.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_LMTs/LMT_Bleach_Bypass.h rename to res/gamedata/shaders/r5/ACES_LMTs/LMT_Bleach_Bypass.h diff --git a/res/gamedata/shaders/r3/ACES_LMTs/LMT_Blue_Fix.h b/res/gamedata/shaders/r5/ACES_LMTs/LMT_Blue_Fix.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_LMTs/LMT_Blue_Fix.h rename to res/gamedata/shaders/r5/ACES_LMTs/LMT_Blue_Fix.h diff --git a/res/gamedata/shaders/r3/ACES_LMTs/LMT_Contrast_Reduction.h b/res/gamedata/shaders/r5/ACES_LMTs/LMT_Contrast_Reduction.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_LMTs/LMT_Contrast_Reduction.h rename to res/gamedata/shaders/r5/ACES_LMTs/LMT_Contrast_Reduction.h diff --git a/res/gamedata/shaders/r3/ACES_LMTs/LMT_Technicolor.h b/res/gamedata/shaders/r5/ACES_LMTs/LMT_Technicolor.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_LMTs/LMT_Technicolor.h rename to res/gamedata/shaders/r5/ACES_LMTs/LMT_Technicolor.h diff --git a/res/gamedata/shaders/r3/ACES_settings.h b/res/gamedata/shaders/r5/ACES_settings.h similarity index 100% rename from res/gamedata/shaders/r3/ACES_settings.h rename to res/gamedata/shaders/r5/ACES_settings.h diff --git a/res/gamedata/shaders/r3/accum_base.ps b/res/gamedata/shaders/r5/accum_base.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_base.ps rename to res/gamedata/shaders/r5/accum_base.ps diff --git a/res/gamedata/shaders/r3/accum_emissive.ps b/res/gamedata/shaders/r5/accum_emissive.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_emissive.ps rename to res/gamedata/shaders/r5/accum_emissive.ps diff --git a/res/gamedata/shaders/r3/accum_emissivel.ps b/res/gamedata/shaders/r5/accum_emissivel.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_emissivel.ps rename to res/gamedata/shaders/r5/accum_emissivel.ps diff --git a/res/gamedata/shaders/r3/accum_indirect.ps b/res/gamedata/shaders/r5/accum_indirect.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_indirect.ps rename to res/gamedata/shaders/r5/accum_indirect.ps diff --git a/res/gamedata/shaders/r5/accum_indirect_msaa.ps b/res/gamedata/shaders/r5/accum_indirect_msaa.ps new file mode 100644 index 00000000000..3afa42ef50f Binary files /dev/null and b/res/gamedata/shaders/r5/accum_indirect_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_indirect_nomsaa.ps b/res/gamedata/shaders/r5/accum_indirect_nomsaa.ps new file mode 100644 index 00000000000..17a059c51b2 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_indirect_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_mask.vs b/res/gamedata/shaders/r5/accum_mask.vs new file mode 100644 index 00000000000..19cb13af4d5 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_mask.vs @@ -0,0 +1,7 @@ +#include "common.h" + +float4 main ( float4 P: POSITION ) : SV_Position +{ + return mul ( m_WVP, P ); +} +FXVS; diff --git a/res/gamedata/shaders/r5/accum_omni_normal.ps b/res/gamedata/shaders/r5/accum_omni_normal.ps new file mode 100644 index 00000000000..b0ec668bc58 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_normal.ps differ diff --git a/res/gamedata/shaders/r5/accum_omni_normal_msaa.ps b/res/gamedata/shaders/r5/accum_omni_normal_msaa.ps new file mode 100644 index 00000000000..4aa3c9113b8 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_normal_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_omni_normal_nomsaa.ps b/res/gamedata/shaders/r5/accum_omni_normal_nomsaa.ps new file mode 100644 index 00000000000..bea895423b5 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_normal_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_omni_transluent.ps b/res/gamedata/shaders/r5/accum_omni_transluent.ps new file mode 100644 index 00000000000..bf358c9db7c Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_transluent.ps differ diff --git a/res/gamedata/shaders/r5/accum_omni_transluent_msaa.ps b/res/gamedata/shaders/r5/accum_omni_transluent_msaa.ps new file mode 100644 index 00000000000..feae4aa4866 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_transluent_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_omni_transluent_nomsaa.ps b/res/gamedata/shaders/r5/accum_omni_transluent_nomsaa.ps new file mode 100644 index 00000000000..6eda5901363 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_transluent_nomsaa.ps differ diff --git a/res/gamedata/shaders/r3/accum_omni_unshadowed.ps b/res/gamedata/shaders/r5/accum_omni_unshadowed.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_omni_unshadowed.ps rename to res/gamedata/shaders/r5/accum_omni_unshadowed.ps diff --git a/res/gamedata/shaders/r5/accum_omni_unshadowed_msaa.ps b/res/gamedata/shaders/r5/accum_omni_unshadowed_msaa.ps new file mode 100644 index 00000000000..b97657885fb Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_unshadowed_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_omni_unshadowed_nomsaa.ps b/res/gamedata/shaders/r5/accum_omni_unshadowed_nomsaa.ps new file mode 100644 index 00000000000..0b008469ecb Binary files /dev/null and b/res/gamedata/shaders/r5/accum_omni_unshadowed_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_fullsize.ps b/res/gamedata/shaders/r5/accum_spot_fullsize.ps new file mode 100644 index 00000000000..bf358c9db7c Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_fullsize.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_fullsize_msaa.ps b/res/gamedata/shaders/r5/accum_spot_fullsize_msaa.ps new file mode 100644 index 00000000000..5b821c621ef Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_fullsize_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_fullsize_nomsaa.ps b/res/gamedata/shaders/r5/accum_spot_fullsize_nomsaa.ps new file mode 100644 index 00000000000..bdddb1ccdb9 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_fullsize_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_normal.ps b/res/gamedata/shaders/r5/accum_spot_normal.ps new file mode 100644 index 00000000000..f6fd046937b Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_normal.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_normal_msaa.ps b/res/gamedata/shaders/r5/accum_spot_normal_msaa.ps new file mode 100644 index 00000000000..473addf3eaa Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_normal_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_normal_nomsaa.ps b/res/gamedata/shaders/r5/accum_spot_normal_nomsaa.ps new file mode 100644 index 00000000000..9f11432ab15 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_normal_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_unshadowed.ps b/res/gamedata/shaders/r5/accum_spot_unshadowed.ps new file mode 100644 index 00000000000..dbabcc7a7d0 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_unshadowed.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_unshadowed_msaa.ps b/res/gamedata/shaders/r5/accum_spot_unshadowed_msaa.ps new file mode 100644 index 00000000000..acb2632bf49 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_unshadowed_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_spot_unshadowed_nomsaa.ps b/res/gamedata/shaders/r5/accum_spot_unshadowed_nomsaa.ps new file mode 100644 index 00000000000..641d55107a3 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_spot_unshadowed_nomsaa.ps differ diff --git a/res/gamedata/shaders/r3/accum_sun.ps b/res/gamedata/shaders/r5/accum_sun.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_sun.ps rename to res/gamedata/shaders/r5/accum_sun.ps diff --git a/res/gamedata/shaders/r5/accum_sun.vs b/res/gamedata/shaders/r5/accum_sun.vs new file mode 100644 index 00000000000..ae8692bd88a --- /dev/null +++ b/res/gamedata/shaders/r5/accum_sun.vs @@ -0,0 +1,21 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +uniform float4x4 m_texgen; +#ifdef USE_SJITTER +uniform float4x4 m_texgen_J; +#endif + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_volume main ( float4 P: POSITION ) +{ + v2p_volume O; + O.hpos = mul( m_WVP, P ); + O.tc = mul( m_texgen, P ); +#ifdef USE_SJITTER + O.tcJ = mul( m_texgen_J, P ); +#endif + return O; +} +FXVS; diff --git a/res/gamedata/shaders/r3/accum_sun_far.ps b/res/gamedata/shaders/r5/accum_sun_far.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_sun_far.ps rename to res/gamedata/shaders/r5/accum_sun_far.ps diff --git a/res/gamedata/shaders/r5/accum_sun_far_msaa.ps b/res/gamedata/shaders/r5/accum_sun_far_msaa.ps new file mode 100644 index 00000000000..a074523cf85 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_far_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_far_nomsaa.ps b/res/gamedata/shaders/r5/accum_sun_far_nomsaa.ps new file mode 100644 index 00000000000..a074523cf85 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_far_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_mask.ps b/res/gamedata/shaders/r5/accum_sun_mask.ps new file mode 100644 index 00000000000..f0765f9d9b7 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_mask.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_mask_msaa.ps b/res/gamedata/shaders/r5/accum_sun_mask_msaa.ps new file mode 100644 index 00000000000..ba20fed3944 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_mask_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_mask_nomsaa.ps b/res/gamedata/shaders/r5/accum_sun_mask_nomsaa.ps new file mode 100644 index 00000000000..553eb1aa205 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_mask_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_msaa.ps b/res/gamedata/shaders/r5/accum_sun_msaa.ps new file mode 100644 index 00000000000..3d6fe0840a2 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_msaa.ps differ diff --git a/res/gamedata/shaders/r3/accum_sun_near.ps b/res/gamedata/shaders/r5/accum_sun_near.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_sun_near.ps rename to res/gamedata/shaders/r5/accum_sun_near.ps diff --git a/res/gamedata/shaders/r5/accum_sun_near_msaa.ps b/res/gamedata/shaders/r5/accum_sun_near_msaa.ps new file mode 100644 index 00000000000..f2896ea3851 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_near_msaa_minmax.ps b/res/gamedata/shaders/r5/accum_sun_near_msaa_minmax.ps new file mode 100644 index 00000000000..b96feb73c41 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_msaa_minmax.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_near_msaa_nominmax.ps b/res/gamedata/shaders/r5/accum_sun_near_msaa_nominmax.ps new file mode 100644 index 00000000000..883bef6e289 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_msaa_nominmax.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_near_nomsaa.ps b/res/gamedata/shaders/r5/accum_sun_near_nomsaa.ps new file mode 100644 index 00000000000..18deb31d621 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_near_nomsaa_minmax.ps b/res/gamedata/shaders/r5/accum_sun_near_nomsaa_minmax.ps new file mode 100644 index 00000000000..be3fc8bf992 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_nomsaa_minmax.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_near_nomsaa_nominmax.ps b/res/gamedata/shaders/r5/accum_sun_near_nomsaa_nominmax.ps new file mode 100644 index 00000000000..2c03c75be3e Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_nomsaa_nominmax.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_near_old.ps b/res/gamedata/shaders/r5/accum_sun_near_old.ps new file mode 100644 index 00000000000..07bf1a1a510 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_near_old.ps differ diff --git a/res/gamedata/shaders/r5/accum_sun_nomsaa.ps b/res/gamedata/shaders/r5/accum_sun_nomsaa.ps new file mode 100644 index 00000000000..f6daf0fec2f Binary files /dev/null and b/res/gamedata/shaders/r5/accum_sun_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_volume.vs b/res/gamedata/shaders/r5/accum_volume.vs new file mode 100644 index 00000000000..ae8692bd88a --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volume.vs @@ -0,0 +1,21 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +uniform float4x4 m_texgen; +#ifdef USE_SJITTER +uniform float4x4 m_texgen_J; +#endif + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_volume main ( float4 P: POSITION ) +{ + v2p_volume O; + O.hpos = mul( m_WVP, P ); + O.tc = mul( m_texgen, P ); +#ifdef USE_SJITTER + O.tcJ = mul( m_texgen_J, P ); +#endif + return O; +} +FXVS; diff --git a/res/gamedata/shaders/r3/accum_volumetric.ps b/res/gamedata/shaders/r5/accum_volumetric.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_volumetric.ps rename to res/gamedata/shaders/r5/accum_volumetric.ps diff --git a/res/gamedata/shaders/r5/accum_volumetric.s b/res/gamedata/shaders/r5/accum_volumetric.s new file mode 100644 index 00000000000..c12a5ed64a1 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_volumetric", "accum_volumetric") + : fog (false) + : zb (true,false) + : blend (true,blend.one,blend.one) +-- : aref (true,0) + : sorting (2, false) +-- TODO: Implement sampler states +-- shader:sampler ("s_lmap") :texture (t_base): clamp() +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_noise") :texture("fx\\fx_noise") : f_linear () + + shader:dx10texture ("s_lmap", t_base) + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_noise", "fx\\fx_noise") + + shader:dx10sampler ("smp_rtlinear") + shader:dx10sampler ("smp_linear") +-- shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric.vs b/res/gamedata/shaders/r5/accum_volumetric.vs new file mode 100644 index 00000000000..88557d56ed5 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric.vs @@ -0,0 +1,44 @@ +#include "common.h" + +cbuffer VolumetricLights +{ + float3 vMinBounds; + float3 vMaxBounds; + float4 FrustumClipPlane[6]; +} + +struct v2p +{ + float3 lightToPos : TEXCOORD0; // light center to plane vector + float3 vPos : TEXCOORD1; // position in camera space + float fDensity : TEXCOORD2; // plane density alon Z axis +// float2 tNoise : TEXCOORD3; // projective noise + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; + float4 hpos : SV_Position; +}; + +v2p main ( float3 P : POSITION ) +{ + v2p o; + float4 vPos; + vPos.xyz = lerp( vMinBounds, vMaxBounds, P); // Position in camera space + vPos.w = 1; + o.hpos = mul (m_P, vPos); // xform, input in camera coordinates + + o.lightToPos = vPos.xyz - Ldynamic_pos.xyz; + o.vPos = vPos; + +// o.fDensity = (vMaxBounds.z-vMinBounds.z)/2000.0h; +// o.fDensity = (vMaxBounds.z-vMinBounds.z)/2000.0h*2; + o.fDensity = 1.0h/40.0h; +// o.fDensity = 1.0h/20.0h; + + for (int i=0; i<3; ++i) + { + o.clip0[i] = dot( o.hpos, FrustumClipPlane[i]); + o.clip1[i] = dot( o.hpos, FrustumClipPlane[i+3]); + } + + return o; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_msaa.ps b/res/gamedata/shaders/r5/accum_volumetric_msaa.ps new file mode 100644 index 00000000000..e9939eb4d83 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_nomsaa.ps b/res/gamedata/shaders/r5/accum_volumetric_nomsaa.ps new file mode 100644 index 00000000000..eb228e83ccd Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_nomsaa.s b/res/gamedata/shaders/r5/accum_volumetric_nomsaa.s new file mode 100644 index 00000000000..c12a5ed64a1 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_nomsaa.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_volumetric", "accum_volumetric") + : fog (false) + : zb (true,false) + : blend (true,blend.one,blend.one) +-- : aref (true,0) + : sorting (2, false) +-- TODO: Implement sampler states +-- shader:sampler ("s_lmap") :texture (t_base): clamp() +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_noise") :texture("fx\\fx_noise") : f_linear () + + shader:dx10texture ("s_lmap", t_base) + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_noise", "fx\\fx_noise") + + shader:dx10sampler ("smp_rtlinear") + shader:dx10sampler ("smp_linear") +-- shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_nomsaa.vs b/res/gamedata/shaders/r5/accum_volumetric_nomsaa.vs new file mode 100644 index 00000000000..b83c0d9c030 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_nomsaa.vs @@ -0,0 +1 @@ +#include "accum_volumetric.vs" diff --git a/res/gamedata/shaders/r3/accum_volumetric_sun.ps b/res/gamedata/shaders/r5/accum_volumetric_sun.ps similarity index 100% rename from res/gamedata/shaders/r3/accum_volumetric_sun.ps rename to res/gamedata/shaders/r5/accum_volumetric_sun.ps diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun.s b/res/gamedata/shaders/r5/accum_volumetric_sun.s new file mode 100644 index 00000000000..09d2ff01904 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_2uv", "accum_volumetric_sun_normal") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_smap_minmax", "$user$smap_depth_minmax"); + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_minmax.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_minmax.ps new file mode 100644 index 00000000000..b2623855ec6 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_minmax.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_minmax.s b/res/gamedata/shaders/r5/accum_volumetric_sun_minmax.s new file mode 100644 index 00000000000..296bba33983 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_minmax.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_minmax") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_smap_minmax", "$user$smap_depth_minmax"); + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa.ps new file mode 100644 index 00000000000..a4073408656 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa0.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa0.ps new file mode 100644 index 00000000000..4b733fd88e6 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa0.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa0.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa0.s new file mode 100644 index 00000000000..bef8fa59185 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa0.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa0") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa1.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa1.ps new file mode 100644 index 00000000000..140e48af200 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa1.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa1.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa1.s new file mode 100644 index 00000000000..d10cd0ff425 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa1.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa1") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa2.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa2.ps new file mode 100644 index 00000000000..2c49b8dc148 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa2.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa2.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa2.s new file mode 100644 index 00000000000..75c554e6dcf --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa2.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa2") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa3.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa3.ps new file mode 100644 index 00000000000..5516f272146 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa3.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa3.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa3.s new file mode 100644 index 00000000000..e4520be45c8 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa3.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa3") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa4.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa4.ps new file mode 100644 index 00000000000..9a39afcb967 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa4.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa4.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa4.s new file mode 100644 index 00000000000..bfc6b4ff477 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa4.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa4") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa5.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa5.ps new file mode 100644 index 00000000000..e639cb97dee Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa5.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa5.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa5.s new file mode 100644 index 00000000000..e8ddad97c7e --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa5.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa5") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa6.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa6.ps new file mode 100644 index 00000000000..58bcacb6869 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa6.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa6.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa6.s new file mode 100644 index 00000000000..aae76119296 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa6.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa6") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa7.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa7.ps new file mode 100644 index 00000000000..9b55dd9b93d Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa7.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_msaa7.s b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa7.s new file mode 100644 index 00000000000..0a4572ef53b --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_msaa7.s @@ -0,0 +1,20 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_msaa7") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa.ps b/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa.ps new file mode 100644 index 00000000000..680ff994432 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa.s b/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa.s new file mode 100644 index 00000000000..a44718fd331 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_nomsaa") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_smap_minmax", "$user$smap_depth_minmax"); + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa_minmax.s b/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa_minmax.s new file mode 100644 index 00000000000..296bba33983 --- /dev/null +++ b/res/gamedata/shaders/r5/accum_volumetric_sun_nomsaa_minmax.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("accum_sun", "accum_volumetric_sun_minmax") + : fog (false) + : zb (false,false) + : blend (true,blend.one,blend.one) + : sorting (2, false) +-- TODO: DX10: Implement for near and far phase. +-- TODO: DX10: Setup samplers. +-- shader:sampler ("s_smap") :texture ("null") +-- shader:sampler ("s_position") :texture ("$user$position") +-- shader:sampler ("jitter0") :texture ("$user$jitter_0") : f_none () + + shader:dx10texture ("s_smap", "null") + shader:dx10texture ("s_smap_minmax", "$user$smap_depth_minmax"); + shader:dx10texture ("s_position", "$user$position") + shader:dx10texture ("jitter0", "$user$jitter_0") + + shader:dx10sampler ("smp_nofilter") + shader:dx10sampler ("smp_jitter") + shader:dx10sampler ("smp_smap") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/accum_volumetric_sun_normal .ps b/res/gamedata/shaders/r5/accum_volumetric_sun_normal .ps new file mode 100644 index 00000000000..ac7726c74b9 Binary files /dev/null and b/res/gamedata/shaders/r5/accum_volumetric_sun_normal .ps differ diff --git a/res/gamedata/shaders/r3/anomaly_shaders.h b/res/gamedata/shaders/r5/anomaly_shaders.h similarity index 100% rename from res/gamedata/shaders/r3/anomaly_shaders.h rename to res/gamedata/shaders/r5/anomaly_shaders.h diff --git a/res/gamedata/shaders/r5/base_lplanes.ps b/res/gamedata/shaders/r5/base_lplanes.ps new file mode 100644 index 00000000000..b36596bd9d5 Binary files /dev/null and b/res/gamedata/shaders/r5/base_lplanes.ps differ diff --git a/res/gamedata/shaders/r5/base_lplanes.vs b/res/gamedata/shaders/r5/base_lplanes.vs new file mode 100644 index 00000000000..0d9f1b2c53f --- /dev/null +++ b/res/gamedata/shaders/r5/base_lplanes.vs @@ -0,0 +1,24 @@ +#include "common.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; // base + float4 c0 : COLOR0; // color + float4 hpos : SV_Position; +}; + +vf main (v_static v) +{ + vf o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.tc0 = unpack_tc_base(v.tc,v.T.w,v.B.w); // copy tc + + // calculate fade + float3 dir_v = normalize (mul(m_WV,v.P)); + float3 norm_v = normalize (mul(m_WV,unpack_normal(v.Nh).zyx)); + float fade = abs (dot(dir_v,norm_v)); + o.c0 = fade; + + return o; +} diff --git a/res/gamedata/shaders/r3/bloom_build.ps b/res/gamedata/shaders/r5/bloom_build.ps similarity index 100% rename from res/gamedata/shaders/r3/bloom_build.ps rename to res/gamedata/shaders/r5/bloom_build.ps diff --git a/res/gamedata/shaders/r3/bloom_filter.ps b/res/gamedata/shaders/r5/bloom_filter.ps similarity index 100% rename from res/gamedata/shaders/r3/bloom_filter.ps rename to res/gamedata/shaders/r5/bloom_filter.ps diff --git a/res/gamedata/shaders/r3/bloom_filter_f.ps b/res/gamedata/shaders/r5/bloom_filter_f.ps similarity index 100% rename from res/gamedata/shaders/r3/bloom_filter_f.ps rename to res/gamedata/shaders/r5/bloom_filter_f.ps diff --git a/res/gamedata/shaders/r3/bloom_luminance_1.ps b/res/gamedata/shaders/r5/bloom_luminance_1.ps similarity index 100% rename from res/gamedata/shaders/r3/bloom_luminance_1.ps rename to res/gamedata/shaders/r5/bloom_luminance_1.ps diff --git a/res/gamedata/shaders/r3/bloom_luminance_2.ps b/res/gamedata/shaders/r5/bloom_luminance_2.ps similarity index 100% rename from res/gamedata/shaders/r3/bloom_luminance_2.ps rename to res/gamedata/shaders/r5/bloom_luminance_2.ps diff --git a/res/gamedata/shaders/r3/bloom_luminance_3.ps b/res/gamedata/shaders/r5/bloom_luminance_3.ps similarity index 100% rename from res/gamedata/shaders/r3/bloom_luminance_3.ps rename to res/gamedata/shaders/r5/bloom_luminance_3.ps diff --git a/res/gamedata/shaders/r3/check_screenspace.h b/res/gamedata/shaders/r5/check_screenspace.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace.h rename to res/gamedata/shaders/r5/check_screenspace.h diff --git a/res/gamedata/shaders/r3/check_screenspace_AO.h b/res/gamedata/shaders/r5/check_screenspace_AO.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_AO.h rename to res/gamedata/shaders/r5/check_screenspace_AO.h diff --git a/res/gamedata/shaders/r3/check_screenspace_DEBAND.h b/res/gamedata/shaders/r5/check_screenspace_DEBAND.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_DEBAND.h rename to res/gamedata/shaders/r5/check_screenspace_DEBAND.h diff --git a/res/gamedata/shaders/r3/check_screenspace_ES.h b/res/gamedata/shaders/r5/check_screenspace_ES.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_ES.h rename to res/gamedata/shaders/r5/check_screenspace_ES.h diff --git a/res/gamedata/shaders/r3/check_screenspace_FLORA.h b/res/gamedata/shaders/r5/check_screenspace_FLORA.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_FLORA.h rename to res/gamedata/shaders/r5/check_screenspace_FLORA.h diff --git a/res/gamedata/shaders/r3/check_screenspace_FOG.h b/res/gamedata/shaders/r5/check_screenspace_FOG.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_FOG.h rename to res/gamedata/shaders/r5/check_screenspace_FOG.h diff --git a/res/gamedata/shaders/r3/check_screenspace_IL.h b/res/gamedata/shaders/r5/check_screenspace_IL.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_IL.h rename to res/gamedata/shaders/r5/check_screenspace_IL.h diff --git a/res/gamedata/shaders/r3/check_screenspace_INTER_GRASS.h b/res/gamedata/shaders/r5/check_screenspace_INTER_GRASS.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_INTER_GRASS.h rename to res/gamedata/shaders/r5/check_screenspace_INTER_GRASS.h diff --git a/res/gamedata/shaders/r3/check_screenspace_NEWGLOSS.h b/res/gamedata/shaders/r5/check_screenspace_NEWGLOSS.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_NEWGLOSS.h rename to res/gamedata/shaders/r5/check_screenspace_NEWGLOSS.h diff --git a/res/gamedata/shaders/r3/check_screenspace_NVG.h b/res/gamedata/shaders/r5/check_screenspace_NVG.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_NVG.h rename to res/gamedata/shaders/r5/check_screenspace_NVG.h diff --git a/res/gamedata/shaders/r3/check_screenspace_SSR.h b/res/gamedata/shaders/r5/check_screenspace_SSR.h similarity index 100% rename from res/gamedata/shaders/r3/check_screenspace_SSR.h rename to res/gamedata/shaders/r5/check_screenspace_SSR.h diff --git a/res/gamedata/shaders/r3/clouds.ps b/res/gamedata/shaders/r5/clouds.ps similarity index 100% rename from res/gamedata/shaders/r3/clouds.ps rename to res/gamedata/shaders/r5/clouds.ps diff --git a/res/gamedata/shaders/r5/clouds.s b/res/gamedata/shaders/r5/clouds.s new file mode 100644 index 00000000000..d406bf36fb9 --- /dev/null +++ b/res/gamedata/shaders/r5/clouds.s @@ -0,0 +1,21 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("clouds","clouds") + : fog (false) +-- TODO: DX10: Check if this is ok. +-- : zb (true,false) + : zb (false,false) + : sorting (3, true) + : blend (true, blend.srcalpha,blend.invsrcalpha) + +-- TODO: DX10: implement sampler setup +-- shader:sampler ("s_clouds0") :texture ("null") : wrap() : f_anisotropic() +-- shader:sampler ("s_clouds1") :texture ("null") : wrap() : f_anisotropic() +-- shader:sampler ("s_tonemap") :texture ("$user$tonemap") + + shader:dx10texture ("s_clouds0", "null") + shader:dx10texture ("s_clouds1", "null") + shader:dx10texture ("s_tonemap", "$user$tonemap") + + shader:dx10sampler ("smp_base") +-- shader:dx10sampler ("smp_linear") +end diff --git a/res/gamedata/shaders/r5/clouds.vs b/res/gamedata/shaders/r5/clouds.vs new file mode 100644 index 00000000000..64e88d010aa --- /dev/null +++ b/res/gamedata/shaders/r5/clouds.vs @@ -0,0 +1,44 @@ +#include "common.h" +#include "shared\cloudconfig.h" + +struct vi +{ + float4 p : POSITION; + float4 dir : COLOR0; // dir0,dir1(w<->z) + float4 color : COLOR1; // rgb. intensity +}; + +struct vf +{ + float4 color : COLOR0; // rgb. intensity, for SM3 - tonemap-prescaled, HI-res + float2 tc0 : TEXCOORD0; + float2 tc1 : TEXCOORD1; + float4 hpos : SV_Position; +}; + +vf main (vi v) +{ + vf o; + + o.hpos = mul (m_WVP, v.p); // xform, input in world coords + +// if (length(float3(v.p.x,0,v.p.z))>CLOUD_FADE) o.color.w = 0 ; + + // generate tcs + float2 d0 = v.dir.xy*2-1; + float2 d1 = v.dir.wz*2-1; + float2 _0 = v.p.xz * CLOUD_TILE0 + d0*timers.z*CLOUD_SPEED0; + float2 _1 = v.p.xz * CLOUD_TILE1 + d1*timers.z*CLOUD_SPEED1; + o.tc0 = _0; // copy tc + o.tc1 = _1; // copy tc + + o.color = v.color ; // copy color, low precision, cannot prescale even by 2 + o.color.w *= pow (v.p.y,25); + +// float scale = tex2Dlod (s_tonemap,float4(.5,.5,.5,.5)).x ; + float scale = s_tonemap.Load( int3(0,0,0) ).x; +// float scale = s_tonemap.Load( int3(1,1,0) ).x; + o.color.rgb *= scale ; // high precision + + return o; +} diff --git a/res/gamedata/shaders/r3/combine_1.ps b/res/gamedata/shaders/r5/combine_1.ps similarity index 100% rename from res/gamedata/shaders/r3/combine_1.ps rename to res/gamedata/shaders/r5/combine_1.ps diff --git a/res/gamedata/shaders/r5/combine_1.vs b/res/gamedata/shaders/r5/combine_1.vs new file mode 100644 index 00000000000..dc3b827804d --- /dev/null +++ b/res/gamedata/shaders/r5/combine_1.vs @@ -0,0 +1,27 @@ +#include "common.h" + +struct _in +{ + float4 P : POSITIONT; // xy=pos, zw=tc0 + float2 tcJ : TEXCOORD0; // jitter coords +}; + +struct v2p +{ + float4 tc0 : TEXCOORD0; // tc.xy, tc.w = tonemap scale + float2 tcJ : TEXCOORD1; // jitter coords + float4 hpos: SV_Position; +}; +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p main ( _in I ) +{ + v2p O; + O.hpos = float4 (I.P.x, -I.P.y, 0, 1); + float scale = s_tonemap.Load(int3(0,0,0)).x; + O.tc0 = float4 (I.P.zw, scale, scale); + O.tcJ = I.tcJ; + return O; +} + +FXVS; diff --git a/res/gamedata/shaders/r5/combine_1_msaa.ps b/res/gamedata/shaders/r5/combine_1_msaa.ps new file mode 100644 index 00000000000..a7a091f8b8b Binary files /dev/null and b/res/gamedata/shaders/r5/combine_1_msaa.ps differ diff --git a/res/gamedata/shaders/r5/combine_1_nomsaa.ps b/res/gamedata/shaders/r5/combine_1_nomsaa.ps new file mode 100644 index 00000000000..2192f51970b Binary files /dev/null and b/res/gamedata/shaders/r5/combine_1_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/combine_2_aa.ps b/res/gamedata/shaders/r5/combine_2_aa.ps new file mode 100644 index 00000000000..61ee89db5e6 Binary files /dev/null and b/res/gamedata/shaders/r5/combine_2_aa.ps differ diff --git a/res/gamedata/shaders/r5/combine_2_aa_d.ps b/res/gamedata/shaders/r5/combine_2_aa_d.ps new file mode 100644 index 00000000000..a922334cc9c Binary files /dev/null and b/res/gamedata/shaders/r5/combine_2_aa_d.ps differ diff --git a/res/gamedata/shaders/r3/combine_2_naa.ps b/res/gamedata/shaders/r5/combine_2_naa.ps similarity index 100% rename from res/gamedata/shaders/r3/combine_2_naa.ps rename to res/gamedata/shaders/r5/combine_2_naa.ps diff --git a/res/gamedata/shaders/r5/combine_2_naa_d.ps b/res/gamedata/shaders/r5/combine_2_naa_d.ps new file mode 100644 index 00000000000..47e4ad3241c Binary files /dev/null and b/res/gamedata/shaders/r5/combine_2_naa_d.ps differ diff --git a/res/gamedata/shaders/r3/combine_volumetric.ps b/res/gamedata/shaders/r5/combine_volumetric.ps similarity index 100% rename from res/gamedata/shaders/r3/combine_volumetric.ps rename to res/gamedata/shaders/r5/combine_volumetric.ps diff --git a/res/gamedata/shaders/r3/combine_volumetric.s b/res/gamedata/shaders/r5/combine_volumetric.s similarity index 100% rename from res/gamedata/shaders/r3/combine_volumetric.s rename to res/gamedata/shaders/r5/combine_volumetric.s diff --git a/res/gamedata/shaders/r3/common.h b/res/gamedata/shaders/r5/common.h similarity index 100% rename from res/gamedata/shaders/r3/common.h rename to res/gamedata/shaders/r5/common.h diff --git a/res/gamedata/shaders/r3/common_brdf.h b/res/gamedata/shaders/r5/common_brdf.h similarity index 100% rename from res/gamedata/shaders/r3/common_brdf.h rename to res/gamedata/shaders/r5/common_brdf.h diff --git a/res/gamedata/shaders/r5/common_cbuffers.h b/res/gamedata/shaders/r5/common_cbuffers.h new file mode 100644 index 00000000000..27c3fb151b0 --- /dev/null +++ b/res/gamedata/shaders/r5/common_cbuffers.h @@ -0,0 +1,21 @@ +#ifndef common_cbuffers_h_included +#define common_cbuffers_h_included + +#ifndef MSAA_OPTIMIZATION +// Used by dynamic lights and volumetric effects +cbuffer dynamic_light +{ + float4 Ldynamic_color; // dynamic light color (rgb1) - spot/point/sun + float4 Ldynamic_pos; // dynamic light pos+1/range(w) - spot/point + float4 Ldynamic_dir; // dynamic light direction - sun +} +#else +cbuffer dynamic_light +{ + float4 Ldynamic_color; // dynamic light color (rgb1) - spot/point/sun + float4 Ldynamic_pos; // dynamic light pos+1/range(w) - spot/point + float4 Ldynamic_dir; // dynamic light direction - sun +} +#endif + +#endif // common_cbuffers_h_included \ No newline at end of file diff --git a/res/gamedata/shaders/r5/common_defines.h b/res/gamedata/shaders/r5/common_defines.h new file mode 100644 index 00000000000..a06d1901f0d --- /dev/null +++ b/res/gamedata/shaders/r5/common_defines.h @@ -0,0 +1,29 @@ +#ifndef common_defines_h_included +#define common_defines_h_included + +////////////////////////////////////////////////////////////////////////////////////////// +// Defines // +#define def_gloss float(2.f /255.f) +#define def_aref float(200.f/255.f) +#define def_dbumph float(0.333f) +#define def_virtualh float(0.05f) // 5cm +#define def_distort float(0.05f) // we get -0.5 .. 0.5 range, this is -512 .. 512 for 1024, so scale it +#define def_hdr float(9.h) // hight luminance range float(3.h) +#define def_hdr_clip float(0.75h) // + +////////////////////////////////////////////////////////////////////////////////////////// +#ifndef SMAP_size +#define SMAP_size 2048 +#endif +////////////////////////////////////////////////////////////////////////////////////////// + +#define SKY_DEPTH float(10000.0) +#define SKY_EPS float(0.001) +#define FARPLANE float(180.0) + +#define USABLE_BIT_13 uint(0x02000000) // This will be translated to a +/-MAX_FLOAT in the FP16 render target (0xFBFF/0x7BFF), overwriting the +#define USABLE_BIT_14 uint(0x04000000) // mantissa bits where other bit flags are stored. +#define USABLE_BIT_15 uint(0x80000000) +#define MUST_BE_SET uint(0x40000000) // This flag *must* be stored in the floating-point representation of the bit flag to store + +#endif // common_defines_h_included \ No newline at end of file diff --git a/res/gamedata/shaders/r3/common_functions.h b/res/gamedata/shaders/r5/common_functions.h similarity index 100% rename from res/gamedata/shaders/r3/common_functions.h rename to res/gamedata/shaders/r5/common_functions.h diff --git a/res/gamedata/shaders/r3/common_iostructs.h b/res/gamedata/shaders/r5/common_iostructs.h similarity index 100% rename from res/gamedata/shaders/r3/common_iostructs.h rename to res/gamedata/shaders/r5/common_iostructs.h diff --git a/res/gamedata/shaders/r3/common_policies.h b/res/gamedata/shaders/r5/common_policies.h similarity index 100% rename from res/gamedata/shaders/r3/common_policies.h rename to res/gamedata/shaders/r5/common_policies.h diff --git a/res/gamedata/shaders/r3/common_samplers.h b/res/gamedata/shaders/r5/common_samplers.h similarity index 100% rename from res/gamedata/shaders/r3/common_samplers.h rename to res/gamedata/shaders/r5/common_samplers.h diff --git a/res/gamedata/shaders/r5/copy.ps b/res/gamedata/shaders/r5/copy.ps new file mode 100644 index 00000000000..c35f247fbeb Binary files /dev/null and b/res/gamedata/shaders/r5/copy.ps differ diff --git a/res/gamedata/shaders/r5/copy_msaa.ps b/res/gamedata/shaders/r5/copy_msaa.ps new file mode 100644 index 00000000000..86d0e5c144a Binary files /dev/null and b/res/gamedata/shaders/r5/copy_msaa.ps differ diff --git a/res/gamedata/shaders/r5/copy_nomsaa.ps b/res/gamedata/shaders/r5/copy_nomsaa.ps new file mode 100644 index 00000000000..e81cd440c77 Binary files /dev/null and b/res/gamedata/shaders/r5/copy_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/copy_p.ps b/res/gamedata/shaders/r5/copy_p.ps new file mode 100644 index 00000000000..e896c65ed5c Binary files /dev/null and b/res/gamedata/shaders/r5/copy_p.ps differ diff --git a/res/gamedata/shaders/r5/copy_p_msaa.ps b/res/gamedata/shaders/r5/copy_p_msaa.ps new file mode 100644 index 00000000000..f23fd7cd1e3 Binary files /dev/null and b/res/gamedata/shaders/r5/copy_p_msaa.ps differ diff --git a/res/gamedata/shaders/r5/copy_p_nomsaa.ps b/res/gamedata/shaders/r5/copy_p_nomsaa.ps new file mode 100644 index 00000000000..6f01b270d76 Binary files /dev/null and b/res/gamedata/shaders/r5/copy_p_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/create_minmax_sm.ps b/res/gamedata/shaders/r5/create_minmax_sm.ps new file mode 100644 index 00000000000..1e9db09bc5a Binary files /dev/null and b/res/gamedata/shaders/r5/create_minmax_sm.ps differ diff --git a/res/gamedata/shaders/r3/deffer_base_aref_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_aref_bump-hq.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_aref_bump-hq.ps rename to res/gamedata/shaders/r5/deffer_base_aref_bump-hq.ps diff --git a/res/gamedata/shaders/r5/deffer_base_aref_bump.ps b/res/gamedata/shaders/r5/deffer_base_aref_bump.ps new file mode 100644 index 00000000000..fa7faf9bfcb Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_bump.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_aref_bump_d-hq.ps new file mode 100644 index 00000000000..aec14deb3ea Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_bump_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_aref_bump_d.ps new file mode 100644 index 00000000000..079e147dc47 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_bump_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_aref_bump_db-hq.ps new file mode 100644 index 00000000000..b71bcde51c7 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_bump_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_flat.ps b/res/gamedata/shaders/r5/deffer_base_aref_flat.ps new file mode 100644 index 00000000000..e0d1bd1ceab Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_flat.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_flat_d.ps b/res/gamedata/shaders/r5/deffer_base_aref_flat_d.ps new file mode 100644 index 00000000000..54afddef665 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_steep-hq.ps b/res/gamedata/shaders/r5/deffer_base_aref_steep-hq.ps new file mode 100644 index 00000000000..871f0837cfa Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_steep-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_steep_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_aref_steep_d-hq.ps new file mode 100644 index 00000000000..ed4556ceb19 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_steep_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_aref_steep_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_aref_steep_db-hq.ps new file mode 100644 index 00000000000..2a41495103a Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_aref_steep_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump-hq.ps new file mode 100644 index 00000000000..d1acb53bab2 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump.ps new file mode 100644 index 00000000000..5188315da34 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_d-hq.ps new file mode 100644 index 00000000000..ce53bb7d142 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_d.ps new file mode 100644 index 00000000000..031098e7c03 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_db-hq.ps new file mode 100644 index 00000000000..9f74ebfee51 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_bump_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_flat.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_flat.ps new file mode 100644 index 00000000000..0e9822c8601 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_flat.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_flat_d.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_flat_d.ps new file mode 100644 index 00000000000..e64f4ed8458 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep-hq.ps new file mode 100644 index 00000000000..077854125d5 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep_d-hq.ps new file mode 100644 index 00000000000..2ae4375ad05 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep_db-hq.ps new file mode 100644 index 00000000000..d35bfbeb333 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_aref_steep_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump-hq.ps new file mode 100644 index 00000000000..6a6253bcc23 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump.ps new file mode 100644 index 00000000000..ba922393281 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_d-hq.ps new file mode 100644 index 00000000000..f4bd3638f5f Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_d.ps new file mode 100644 index 00000000000..76ea9960d8a Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_db-hq.ps new file mode 100644 index 00000000000..62510eba21d Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_bump_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_flat.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_flat.ps new file mode 100644 index 00000000000..707a48a6ea6 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_flat.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_flat_d.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_flat_d.ps new file mode 100644 index 00000000000..b9dc24b5f40 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep-hq.ps new file mode 100644 index 00000000000..5b03212a0be Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep_d-hq.ps new file mode 100644 index 00000000000..150a1b17199 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep_db-hq.ps new file mode 100644 index 00000000000..b517e657d7f Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_atoc_lmh_aref_steep_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_bump-hq.ps new file mode 100644 index 00000000000..53d9422b499 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_bump-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_bump-hq.vs b/res/gamedata/shaders/r5/deffer_base_bump-hq.vs new file mode 100644 index 00000000000..4657d54d957 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_bump-hq.vs @@ -0,0 +1,2 @@ +#define USE_PARALLAX +#include "deffer_base_bump.vs" diff --git a/res/gamedata/shaders/r3/deffer_base_bump.ps b/res/gamedata/shaders/r5/deffer_base_bump.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_bump.ps rename to res/gamedata/shaders/r5/deffer_base_bump.ps diff --git a/res/gamedata/shaders/r5/deffer_base_bump.vs b/res/gamedata/shaders/r5/deffer_base_bump.vs new file mode 100644 index 00000000000..833b759bb27 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_bump.vs @@ -0,0 +1,67 @@ +#include "common.h" + +#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) +#define v_in v_static_color +#else +#define v_in v_static +#endif + + +v2p_bumped main( v_in I ) +{ +// I.color.rgb = I.color.bgr; // Swizzle to compensate DX9/DX10 format mismatch + float4 w_pos = I.P ; + float2 tc = unpack_tc_base (I.tc,I.T.w,I.B.w); // copy tc + float hemi = I.Nh.w ; + + // Eye-space pos/normal + v2p_bumped O; + float3 Pe = mul (m_WV, w_pos ); + O.hpos = mul (m_WVP, w_pos ); + O.tcdh = float4 (tc.xyyy ); + O.position = float4 (Pe, hemi ); +// O.position = float4 (O.hpos.xyz, hemi ); + +#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) + O.tcdh.w = I.color.w; // (r,g,b,dir-occlusion) +#endif + + // Calculate the 3x3 transform from tangent space to eye-space + // TangentToEyeSpace = object2eye * tangent2object + // = object2eye * transpose(object2tangent) (since the inverse of a rotation is its transpose) + I.Nh = unpack_D3DCOLOR(I.Nh); + I.T = unpack_D3DCOLOR(I.T); + I.B = unpack_D3DCOLOR(I.B); + float3 N = unpack_bx4(I.Nh); // just scale (assume normal in the -.5f, .5f) + float3 T = unpack_bx4(I.T); // + float3 B = unpack_bx4(I.B); // + float3x3 xform = mul ((float3x3)m_WV, float3x3( + T.x,B.x,N.x, + T.y,B.y,N.y, + T.z,B.z,N.z + )); + // The pixel shader operates on the bump-map in [0..1] range + // Remap this range in the matrix, anyway we are pixel-shader limited :) + // ...... [ 2 0 0 0] + // ...... [ 0 2 0 0] + // ...... [ 0 0 2 0] + // ...... [-1 -1 -1 1] + // issue: strange, but it's slower :( + // issue: interpolators? dp4? VS limited? black magic? + + // Feed this transform to pixel shader + O.M1 = xform[0]; + O.M2 = xform[1]; + O.M3 = xform[2]; + +#ifdef USE_TDETAIL + O.tcdbump = O.tcdh * dt_params; // dt tc +#endif + +#ifdef USE_LM_HEMI + O.lmh = unpack_tc_lmap (I.lmh); +#endif + return O; +} + +FXVS; diff --git a/res/gamedata/shaders/r5/deffer_base_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_bump_d-hq.ps new file mode 100644 index 00000000000..d0fd52390ab Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_bump_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_base_bump_d-hq.vs new file mode 100644 index 00000000000..711cf872205 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_bump_d-hq.vs @@ -0,0 +1,2 @@ +#define USE_PARALLAX +#include "deffer_base_bump_d.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_bump_d.ps new file mode 100644 index 00000000000..910f66e12d2 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_bump_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_bump_d.vs b/res/gamedata/shaders/r5/deffer_base_bump_d.vs new file mode 100644 index 00000000000..3775ca803e9 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_bump_d.vs @@ -0,0 +1,3 @@ +#define USE_TDETAIL +#include "deffer_base_bump.vs" + diff --git a/res/gamedata/shaders/r5/deffer_base_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_bump_db-hq.ps new file mode 100644 index 00000000000..9060e86b47b Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_bump_db-hq.ps differ diff --git a/res/gamedata/shaders/r3/deffer_base_flat.ps b/res/gamedata/shaders/r5/deffer_base_flat.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_flat.ps rename to res/gamedata/shaders/r5/deffer_base_flat.ps diff --git a/res/gamedata/shaders/r5/deffer_base_flat.vs b/res/gamedata/shaders/r5/deffer_base_flat.vs new file mode 100644 index 00000000000..a33291f955b --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_flat.vs @@ -0,0 +1,42 @@ +#include "common.h" + +#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) +#define v_in v_static_color +#else +#define v_in v_static +#endif + + +v2p_flat main ( v_in I ) +{ + I.Nh = unpack_D3DCOLOR(I.Nh); + I.T = unpack_D3DCOLOR(I.T); + I.B = unpack_D3DCOLOR(I.B); + + // Eye-space pos/normal + v2p_flat O; + float4 Pp = mul( m_WVP, I.P ); + O.hpos = Pp; + O.N = mul( (float3x3)m_WV, unpack_bx2(I.Nh) ); + float3 Pe = mul( m_WV, I.P ); + + float2 tc = unpack_tc_base( I.tc, I.T.w, I.B.w); // copy tc + O.tcdh = float4( tc.xyyy ); + O.position = float4( Pe, I.Nh.w ); + +#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) + float s = I.color.w ; // (r,g,b,dir-occlusion) + O.tcdh.w = s; +#endif + +#ifdef USE_TDETAIL + O.tcdbump = O.tcdh * dt_params; // dt tc +#endif + +#ifdef USE_LM_HEMI + O.lmh = unpack_tc_lmap( I.lmh ); +#endif + + return O; +} +FXVS; diff --git a/res/gamedata/shaders/r5/deffer_base_flat_d.ps b/res/gamedata/shaders/r5/deffer_base_flat_d.ps new file mode 100644 index 00000000000..b1c5d45872f Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_flat_d.vs b/res/gamedata/shaders/r5/deffer_base_flat_d.vs new file mode 100644 index 00000000000..e3b0f6bd2ac --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_flat_d.vs @@ -0,0 +1,3 @@ +#define USE_TDETAIL + +#include "deffer_base_flat.vs" diff --git a/res/gamedata/shaders/r3/deffer_base_hud_aref_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_hud_aref_bump-hq.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_aref_bump-hq.ps rename to res/gamedata/shaders/r5/deffer_base_hud_aref_bump-hq.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_aref_bump.ps b/res/gamedata/shaders/r5/deffer_base_hud_aref_bump.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_aref_bump.ps rename to res/gamedata/shaders/r5/deffer_base_hud_aref_bump.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_aref_flat.ps b/res/gamedata/shaders/r5/deffer_base_hud_aref_flat.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_aref_flat.ps rename to res/gamedata/shaders/r5/deffer_base_hud_aref_flat.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_hud_bump-hq.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_bump-hq.ps rename to res/gamedata/shaders/r5/deffer_base_hud_bump-hq.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_bump.ps b/res/gamedata/shaders/r5/deffer_base_hud_bump.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_bump.ps rename to res/gamedata/shaders/r5/deffer_base_hud_bump.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_hud_bump_d-hq.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_bump_d-hq.ps rename to res/gamedata/shaders/r5/deffer_base_hud_bump_d-hq.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_hud_bump_d.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_bump_d.ps rename to res/gamedata/shaders/r5/deffer_base_hud_bump_d.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_hud_bump_db-hq.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_bump_db-hq.ps rename to res/gamedata/shaders/r5/deffer_base_hud_bump_db-hq.ps diff --git a/res/gamedata/shaders/r3/deffer_base_hud_flat.ps b/res/gamedata/shaders/r5/deffer_base_hud_flat.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_base_hud_flat.ps rename to res/gamedata/shaders/r5/deffer_base_hud_flat.ps diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump-hq.ps new file mode 100644 index 00000000000..f4f66e2a813 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump.ps new file mode 100644 index 00000000000..e48b89c6b0f Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_d-hq.ps new file mode 100644 index 00000000000..c8ca0354d20 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_d.ps new file mode 100644 index 00000000000..8d8eb1eaa67 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_db-hq.ps new file mode 100644 index 00000000000..c0b8a095870 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_bump_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_flat.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_flat.ps new file mode 100644 index 00000000000..40b20b2498a Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_flat.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_flat_d.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_flat_d.ps new file mode 100644 index 00000000000..fc8b4232796 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep-hq.ps new file mode 100644 index 00000000000..872d4161795 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep_d-hq.ps new file mode 100644 index 00000000000..b54f00f4bd7 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep_db-hq.ps new file mode 100644 index 00000000000..d91c67f9324 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_aref_steep_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_bump-hq.ps new file mode 100644 index 00000000000..922bfb90c74 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_bump-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump-hq.vs b/res/gamedata/shaders/r5/deffer_base_lmh_bump-hq.vs new file mode 100644 index 00000000000..9d32779660f --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_lmh_bump-hq.vs @@ -0,0 +1,3 @@ +//#define USE_STEEPPARALLAX +#define USE_PARALLAX +#include "deffer_base_lmh_bump.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump.ps b/res/gamedata/shaders/r5/deffer_base_lmh_bump.ps new file mode 100644 index 00000000000..43b96473c68 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_bump.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump.vs b/res/gamedata/shaders/r5/deffer_base_lmh_bump.vs new file mode 100644 index 00000000000..703b86f5f5c --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_lmh_bump.vs @@ -0,0 +1,2 @@ +#define USE_LM_HEMI +#include "deffer_base_bump.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d-hq.ps new file mode 100644 index 00000000000..279fd88a701 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d-hq.vs new file mode 100644 index 00000000000..7c8aa034996 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d-hq.vs @@ -0,0 +1,3 @@ +//#define USE_STEEPPARALLAX +#define USE_PARALLAX +#include "deffer_base_lmh_bump_d.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump_d.ps b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d.ps new file mode 100644 index 00000000000..f896eb6ada4 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump_d.vs b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d.vs new file mode 100644 index 00000000000..e0602f39b79 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_lmh_bump_d.vs @@ -0,0 +1,2 @@ +#define USE_LM_HEMI +#include "deffer_base_bump_d.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_bump_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_bump_db-hq.ps new file mode 100644 index 00000000000..a5c37be10b7 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_bump_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_flat.ps b/res/gamedata/shaders/r5/deffer_base_lmh_flat.ps new file mode 100644 index 00000000000..16842dfd30c Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_flat.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_flat.vs b/res/gamedata/shaders/r5/deffer_base_lmh_flat.vs new file mode 100644 index 00000000000..375cbead918 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_lmh_flat.vs @@ -0,0 +1,2 @@ +#define USE_LM_HEMI +#include "deffer_base_flat.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_flat_d.ps b/res/gamedata/shaders/r5/deffer_base_lmh_flat_d.ps new file mode 100644 index 00000000000..ad468233abc Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_flat_d.vs b/res/gamedata/shaders/r5/deffer_base_lmh_flat_d.vs new file mode 100644 index 00000000000..85751079d83 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_base_lmh_flat_d.vs @@ -0,0 +1,2 @@ +#define USE_LM_HEMI +#include "deffer_base_flat_d.vs" diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_steep-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_steep-hq.ps new file mode 100644 index 00000000000..0206b115848 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_steep-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_steep_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_steep_d-hq.ps new file mode 100644 index 00000000000..7e19ff3d80a Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_steep_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_lmh_steep_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_lmh_steep_db-hq.ps new file mode 100644 index 00000000000..d5705dea2d0 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_lmh_steep_db-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_steep-hq.ps b/res/gamedata/shaders/r5/deffer_base_steep-hq.ps new file mode 100644 index 00000000000..91d9a9ab208 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_steep-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_steep_d-hq.ps b/res/gamedata/shaders/r5/deffer_base_steep_d-hq.ps new file mode 100644 index 00000000000..4f4d3635a5c Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_steep_d-hq.ps differ diff --git a/res/gamedata/shaders/r5/deffer_base_steep_db-hq.ps b/res/gamedata/shaders/r5/deffer_base_steep_db-hq.ps new file mode 100644 index 00000000000..6508756c050 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_base_steep_db-hq.ps differ diff --git a/res/gamedata/shaders/r3/deffer_detail_s_flat.vs b/res/gamedata/shaders/r5/deffer_detail_s_flat.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_detail_s_flat.vs rename to res/gamedata/shaders/r5/deffer_detail_s_flat.vs diff --git a/res/gamedata/shaders/r3/deffer_detail_w_flat.vs b/res/gamedata/shaders/r5/deffer_detail_w_flat.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_detail_w_flat.vs rename to res/gamedata/shaders/r5/deffer_detail_w_flat.vs diff --git a/res/gamedata/shaders/r3/deffer_grass.ps b/res/gamedata/shaders/r5/deffer_grass.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_grass.ps rename to res/gamedata/shaders/r5/deffer_grass.ps diff --git a/res/gamedata/shaders/r3/deffer_grass.vs b/res/gamedata/shaders/r5/deffer_grass.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_grass.vs rename to res/gamedata/shaders/r5/deffer_grass.vs diff --git a/res/gamedata/shaders/r3/deffer_impl_flat.ps b/res/gamedata/shaders/r5/deffer_impl_flat.ps similarity index 100% rename from res/gamedata/shaders/r3/deffer_impl_flat.ps rename to res/gamedata/shaders/r5/deffer_impl_flat.ps diff --git a/res/gamedata/shaders/r5/deffer_impl_flat_d.ps b/res/gamedata/shaders/r5/deffer_impl_flat_d.ps new file mode 100644 index 00000000000..9fd3b1a65c6 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_impl_flat_d.ps differ diff --git a/res/gamedata/shaders/r5/deffer_impl_flat_d.vs b/res/gamedata/shaders/r5/deffer_impl_flat_d.vs new file mode 100644 index 00000000000..25165a42bb0 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_impl_flat_d.vs @@ -0,0 +1,4 @@ +// actually - bump-mapped, but only with detail-bump + +#define USE_TDETAIL +#include "deffer_base_bump.vs" diff --git a/res/gamedata/shaders/r5/deffer_model_bump-hq.vs b/res/gamedata/shaders/r5/deffer_model_bump-hq.vs new file mode 100644 index 00000000000..f911fd3daf2 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_model_bump-hq.vs @@ -0,0 +1,2 @@ +#define USE_PARALLAX +#include "deffer_model_bump.vs" diff --git a/res/gamedata/shaders/r5/deffer_model_bump.vs b/res/gamedata/shaders/r5/deffer_model_bump.vs new file mode 100644 index 00000000000..552012ee052 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_model_bump.vs @@ -0,0 +1,90 @@ +#include "common.h" +#include "skin.h" + +#if defined(USE_PARALLAX) || defined(USE_STEEPPARALLAX) + uniform float3x4 m_invW; +#endif // defined(USE_PARALLAX) || defined(USE_STEEPPARALLAX) + +v2p_bumped _main( v_model I ) +{ + float4 w_pos = I.P; + + // Eye-space pos/normal + v2p_bumped O; + O.hpos = mul( m_WVP, w_pos ); + float2 tc = I.tc; + float3 Pe = mul( m_WV, w_pos ); + O.tcdh = float4( tc.xyyy ); + + // Hemi cube lighting + float3 Nw = mul ((float3x3)m_W, (float3)I.N); + float3 hc_pos = (float3)hemi_cube_pos_faces; + float3 hc_neg = (float3)hemi_cube_neg_faces; + float3 hc_mixed= (Nw < 0) ? hc_neg : hc_pos; + float hemi_val= dot( hc_mixed, abs(Nw) ); + hemi_val = saturate(hemi_val); + + O.position = float4(Pe, hemi_val); //Use L_material.x for old behaviour; + +#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) + O.tcdh.w = L_material.y; // (,,,dir-occlusion) +#endif + + // Calculate the 3x3 transform from tangent space to eye-space + // TangentToEyeSpace = object2eye * tangent2object + // = object2eye * transpose(object2tangent) (since the inverse of a rotation is its transpose) + float3 N = I.N; // just scale (assume normal in the -.5f, .5f) + float3 T = I.T; // + float3 B = I.B; // + float3x3 xform = mul ((float3x3)m_WV, float3x3( + 2*T.x,2*B.x,2*N.x, + 2*T.y,2*B.y,2*N.y, + 2*T.z,2*B.z,2*N.z + )); + // The pixel shader operates on the bump-map in [0..1] range + // Remap this range in the matrix, anyway we are pixel-shader limited :) + // ...... [ 2 0 0 0] + // ...... [ 0 2 0 0] + // ...... [ 0 0 2 0] + // ...... [-1 -1 -1 1] + // issue: strange, but it's slower :( + // issue: interpolators? dp4? VS limited? black magic? + + // Feed this transform to pixel shader + O.M1 = xform [0]; + O.M2 = xform [1]; + O.M3 = xform [2]; + +#ifdef USE_TDETAIL + O.tcdbump = O.tcdh * dt_params; // dt tc +#endif + + return O; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +v2p_bumped main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +v2p_bumped main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +v2p_bumped main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +v2p_bumped main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +v2p_bumped main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +v2p_bumped main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif + +FXVS; diff --git a/res/gamedata/shaders/r5/deffer_model_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_model_bump_d-hq.vs new file mode 100644 index 00000000000..0070f972bf5 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_model_bump_d-hq.vs @@ -0,0 +1,2 @@ +#define USE_PARALLAX +#include "deffer_model_bump_d.vs" diff --git a/res/gamedata/shaders/r5/deffer_model_bump_d.vs b/res/gamedata/shaders/r5/deffer_model_bump_d.vs new file mode 100644 index 00000000000..d0bb5410554 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_model_bump_d.vs @@ -0,0 +1,2 @@ +#define USE_TDETAIL +#include "deffer_model_bump.vs" diff --git a/res/gamedata/shaders/r5/deffer_model_flat.vs b/res/gamedata/shaders/r5/deffer_model_flat.vs new file mode 100644 index 00000000000..546512286d3 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_model_flat.vs @@ -0,0 +1,63 @@ +#include "common.h" +#include "skin.h" + +v2p_flat _main( v_model I ) +{ + // world-space N + float3 N_w = mul( m_W, I.N ); + + // Eye-space pos/normal + v2p_flat O; + float3 Pe = mul( m_WV, I.P ); + O.hpos = mul( m_WVP, I.P ); + O.N = mul( (float3x3)m_WV, (float3)I.N ); + + O.tcdh = float4( I.tc.xyyy ); + + // Hemi cube lighting + float3 Nw = mul ((float3x3)m_W, (float3)I.N); + float3 hc_pos = (float3)hemi_cube_pos_faces; + float3 hc_neg = (float3)hemi_cube_neg_faces; + float3 hc_mixed= (Nw < 0) ? hc_neg : hc_pos; + float hemi_val= dot( hc_mixed, abs(Nw) ); + hemi_val = saturate(hemi_val); + + O.position = float4(Pe, hemi_val); //Use L_material.x for old behaviour; + +#if defined(USE_R2_STATIC_SUN) && !defined(USE_LM_HEMI) + O.tcdh.w = L_material.y; // (,,,dir-occlusion) +#endif + +#ifdef USE_TDETAIL + O.tcdbump = O.tcdh*dt_params; // dt tc +#endif + + return O; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +v2p_flat main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +v2p_flat main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +v2p_flat main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +v2p_flat main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +v2p_flat main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +v2p_flat main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif + +FXVS; diff --git a/res/gamedata/shaders/r5/deffer_model_flat_d.vs b/res/gamedata/shaders/r5/deffer_model_flat_d.vs new file mode 100644 index 00000000000..9e2d8b2303b --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_model_flat_d.vs @@ -0,0 +1,2 @@ +#define USE_TDETAIL +#include "deffer_model_flat.vs" diff --git a/res/gamedata/shaders/r3/deffer_model_hud_bump-hq.vs b/res/gamedata/shaders/r5/deffer_model_hud_bump-hq.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_model_hud_bump-hq.vs rename to res/gamedata/shaders/r5/deffer_model_hud_bump-hq.vs diff --git a/res/gamedata/shaders/r3/deffer_model_hud_bump.vs b/res/gamedata/shaders/r5/deffer_model_hud_bump.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_model_hud_bump.vs rename to res/gamedata/shaders/r5/deffer_model_hud_bump.vs diff --git a/res/gamedata/shaders/r3/deffer_model_hud_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_model_hud_bump_d-hq.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_model_hud_bump_d-hq.vs rename to res/gamedata/shaders/r5/deffer_model_hud_bump_d-hq.vs diff --git a/res/gamedata/shaders/r3/deffer_model_hud_bump_d.vs b/res/gamedata/shaders/r5/deffer_model_hud_bump_d.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_model_hud_bump_d.vs rename to res/gamedata/shaders/r5/deffer_model_hud_bump_d.vs diff --git a/res/gamedata/shaders/r3/deffer_model_hud_flat.vs b/res/gamedata/shaders/r5/deffer_model_hud_flat.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_model_hud_flat.vs rename to res/gamedata/shaders/r5/deffer_model_hud_flat.vs diff --git a/res/gamedata/shaders/r5/deffer_particle.ps b/res/gamedata/shaders/r5/deffer_particle.ps new file mode 100644 index 00000000000..57afd85d2b0 Binary files /dev/null and b/res/gamedata/shaders/r5/deffer_particle.ps differ diff --git a/res/gamedata/shaders/r5/deffer_particle.vs b/res/gamedata/shaders/r5/deffer_particle.vs new file mode 100644 index 00000000000..a14443c5ac4 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_particle.vs @@ -0,0 +1,38 @@ +#include "common.h" + +struct vv +{ + float4 P : POSITION; + float2 tc : TEXCOORD0; + float4 c : COLOR0; +}; + +struct v2p_particle +{ + float4 color : COLOR0; + v2p_flat base; +}; + +v2p_particle main( vv I ) +{ + float4 w_pos = I.P; + + // Eye-space pos/normal + v2p_flat O; + O.hpos = mul (m_WVP, w_pos ); + O.N = normalize (eye_position-w_pos ); + float3 Pe = mul (m_WV, I.P ); + O.tcdh = float4 (I.tc.xyyy ); + O.position = float4 (Pe, .2h ); + +#ifdef USE_TDETAIL + O.tcdbump = O.tcdh * dt_params; // dt tc +#endif + + v2p_particle pp; + pp.color = I.c; + pp.base = O; + + return pp; +} +FXVS; diff --git a/res/gamedata/shaders/r3/deffer_tree_branch_bump-hq.vs b/res/gamedata/shaders/r5/deffer_tree_branch_bump-hq.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_branch_bump-hq.vs rename to res/gamedata/shaders/r5/deffer_tree_branch_bump-hq.vs diff --git a/res/gamedata/shaders/r3/deffer_tree_branch_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_tree_branch_bump_d-hq.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_branch_bump_d-hq.vs rename to res/gamedata/shaders/r5/deffer_tree_branch_bump_d-hq.vs diff --git a/res/gamedata/shaders/r3/deffer_tree_branch_flat.vs b/res/gamedata/shaders/r5/deffer_tree_branch_flat.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_branch_flat.vs rename to res/gamedata/shaders/r5/deffer_tree_branch_flat.vs diff --git a/res/gamedata/shaders/r3/deffer_tree_bump-hq.vs b/res/gamedata/shaders/r5/deffer_tree_bump-hq.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_bump-hq.vs rename to res/gamedata/shaders/r5/deffer_tree_bump-hq.vs diff --git a/res/gamedata/shaders/r3/deffer_tree_bump.vs b/res/gamedata/shaders/r5/deffer_tree_bump.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_bump.vs rename to res/gamedata/shaders/r5/deffer_tree_bump.vs diff --git a/res/gamedata/shaders/r5/deffer_tree_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_tree_bump_d-hq.vs new file mode 100644 index 00000000000..66a944386d4 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_bump_d-hq.vs @@ -0,0 +1,3 @@ +#define USE_TDETAIL +#define USE_PARALLAX +#include "deffer_tree_bump.vs" diff --git a/res/gamedata/shaders/r5/deffer_tree_bump_d.vs b/res/gamedata/shaders/r5/deffer_tree_bump_d.vs new file mode 100644 index 00000000000..416bcfc7957 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_bump_d.vs @@ -0,0 +1,2 @@ +#define USE_TDETAIL +#include "deffer_tree_bump.vs" diff --git a/res/gamedata/shaders/r3/deffer_tree_flat.vs b/res/gamedata/shaders/r5/deffer_tree_flat.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_flat.vs rename to res/gamedata/shaders/r5/deffer_tree_flat.vs diff --git a/res/gamedata/shaders/r5/deffer_tree_flat_d.vs b/res/gamedata/shaders/r5/deffer_tree_flat_d.vs new file mode 100644 index 00000000000..58cd80acd03 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_flat_d.vs @@ -0,0 +1,2 @@ +#define USE_TDETAIL +#include "deffer_tree_flat.vs" diff --git a/res/gamedata/shaders/r5/deffer_tree_s_bump-hq.vs b/res/gamedata/shaders/r5/deffer_tree_s_bump-hq.vs new file mode 100644 index 00000000000..51f1b90b742 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_s_bump-hq.vs @@ -0,0 +1,2 @@ +#define USE_TREEWAVE +#include "deffer_tree_bump-hq.vs" diff --git a/res/gamedata/shaders/r3/deffer_tree_s_bump.vs b/res/gamedata/shaders/r5/deffer_tree_s_bump.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_s_bump.vs rename to res/gamedata/shaders/r5/deffer_tree_s_bump.vs diff --git a/res/gamedata/shaders/r5/deffer_tree_s_bump_d-hq.vs b/res/gamedata/shaders/r5/deffer_tree_s_bump_d-hq.vs new file mode 100644 index 00000000000..8a55871184c --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_s_bump_d-hq.vs @@ -0,0 +1,2 @@ +#define USE_TREEWAVE +#include "deffer_tree_bump_d-hq.vs" diff --git a/res/gamedata/shaders/r5/deffer_tree_s_bump_d.vs b/res/gamedata/shaders/r5/deffer_tree_s_bump_d.vs new file mode 100644 index 00000000000..0641c2967e7 --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_s_bump_d.vs @@ -0,0 +1,2 @@ +#define USE_TREEWAVE +#include "deffer_tree_bump_d.vs" diff --git a/res/gamedata/shaders/r3/deffer_tree_s_flat.vs b/res/gamedata/shaders/r5/deffer_tree_s_flat.vs similarity index 100% rename from res/gamedata/shaders/r3/deffer_tree_s_flat.vs rename to res/gamedata/shaders/r5/deffer_tree_s_flat.vs diff --git a/res/gamedata/shaders/r5/deffer_tree_s_flat_d.vs b/res/gamedata/shaders/r5/deffer_tree_s_flat_d.vs new file mode 100644 index 00000000000..216c429d93b --- /dev/null +++ b/res/gamedata/shaders/r5/deffer_tree_s_flat_d.vs @@ -0,0 +1,2 @@ +#define USE_TREEWAVE +#include "deffer_tree_flat_d.vs" diff --git a/res/gamedata/shaders/r5/depth_downs.ps b/res/gamedata/shaders/r5/depth_downs.ps new file mode 100644 index 00000000000..8ca28e15f17 Binary files /dev/null and b/res/gamedata/shaders/r5/depth_downs.ps differ diff --git a/res/gamedata/shaders/r3/depth_of_field.ps b/res/gamedata/shaders/r5/depth_of_field.ps similarity index 100% rename from res/gamedata/shaders/r3/depth_of_field.ps rename to res/gamedata/shaders/r5/depth_of_field.ps diff --git a/res/gamedata/shaders/r3/details_blend.s b/res/gamedata/shaders/r5/details_blend.s similarity index 100% rename from res/gamedata/shaders/r3/details_blend.s rename to res/gamedata/shaders/r5/details_blend.s diff --git a/res/gamedata/shaders/r5/details_lod.s b/res/gamedata/shaders/r5/details_lod.s new file mode 100644 index 00000000000..464a044c0b9 --- /dev/null +++ b/res/gamedata/shaders/r5/details_lod.s @@ -0,0 +1,59 @@ +function pass_setup_common (shader, t_base, t_second, t_detail) + shader : blend (false, blend.one, blend.zero) + : zb (true, true) + : fog (false) + + :dx10stencil ( true, cmp_func.always, + 255 , 127, + stencil_op.keep, stencil_op.replace, stencil_op.keep) + :dx10stencil_ref (1) + + shader:dx10texture ("s_base", t_base) + shader:dx10texture ("s_hemi", t_base .. "_nm") + + shader:dx10sampler ("smp_base"); + shader:dx10sampler ("smp_linear"); +end + +function l_special (shader, t_base, t_second, t_detail) + + local opt = shader:dx10Options() + +-- pre_pass -- + if ( opt:dx10_msaa_alphatest_atoc() ) then + shader :begin ("lod","lod_atoc") + details_lod.pass_setup_common(shader, t_base, t_second, t_detail) + shader :dx10color_write_enable( false, false, false, false) + shader :dx10atoc( true ) + end + +-- main pass -- + shader :begin ("lod","lod") + details_lod.pass_setup_common(shader, t_base, t_second, t_detail) + if ( opt:dx10_msaa_alphatest_atoc() ) then + shader :dx10zfunc(cmp_func.equal) + end + +end + +--[[ +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("lod","lod") + : blend (false, blend.one, blend.zero) + : zb (true, true) + : fog (false) + + shader:dx10stencil ( true, cmp_func.always, + 255 , 127, + stencil_op.keep, stencil_op.replace, stencil_op.keep) + + shader:dx10stencil_ref (1) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_hemi") :texture (t_base .. "_nm") + shader:dx10texture ("s_base", t_base) + shader:dx10texture ("s_hemi", t_base .. "_nm") + + shader:dx10sampler ("smp_base"); + shader:dx10sampler ("smp_linear"); +end +]]-- \ No newline at end of file diff --git a/res/gamedata/shaders/r5/distort.ps b/res/gamedata/shaders/r5/distort.ps new file mode 100644 index 00000000000..e6bacdbfd6d Binary files /dev/null and b/res/gamedata/shaders/r5/distort.ps differ diff --git a/res/gamedata/shaders/r5/distort.s b/res/gamedata/shaders/r5/distort.s new file mode 100644 index 00000000000..1416e567dd3 --- /dev/null +++ b/res/gamedata/shaders/r5/distort.s @@ -0,0 +1,13 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_t","distort") + : fog (false) + : zb (false,false) +-- TODO: DX10: Implement samplers +-- shader:sampler ("s_base") :texture("$user$generic0") : clamp() : f_linear () +-- shader:sampler ("s_distort") :texture("$user$generic1") : clamp() : f_linear () + + shader:dx10texture ("s_base", "$user$generic0") + shader:dx10texture ("s_distort", "$user$generic1") + + shader:dx10sampler ("smp_rtlinear"); +end diff --git a/res/gamedata/shaders/r5/dof.h b/res/gamedata/shaders/r5/dof.h new file mode 100644 index 00000000000..a5cc70fd89d --- /dev/null +++ b/res/gamedata/shaders/r5/dof.h @@ -0,0 +1,214 @@ +#ifndef DOF_H_INCLUDED +#define DOF_H_INCLUDED + +//#define USE_DOF + +#ifndef USE_DOF + +float3 dof(float2 center) +{ +// float3 img = tex2D (s_image, center); + float3 img = s_image.Sample( smp_rtlinear, center); + return img; +} + +#else // USE_DOF + +// x - near y - focus z - far w - sky distance +float4 dof_params; +float3 dof_kernel; // x,y - resolution pre-scaled z - just kernel size + +float DOFFactor( float depth) +{ + float dist_to_focus = depth-dof_params.y; + float blur_far = saturate( dist_to_focus + / (dof_params.z-dof_params.y) ); + float blur_near = saturate( dist_to_focus + / (dof_params.x-dof_params.y) ); + float blur = blur_near+blur_far; + blur*=blur; + return blur; +} + + +//#define MAXCOF 5.h +#define MAXCOF 7.h +#define EPSDEPTH 0.0001h +float3 dof(float2 center) +{ + // Scale tap offsets based on render target size +// float depth = tex2D(s_position,center).z; +#ifndef USE_MSAA + float depth = s_position.Sample( smp_nofilter, center).z; +#else + float depth = s_position.Load( int3( center * pos_decompression_params2.xy ,0),0 ).z; +#endif + if (depth <= EPSDEPTH) depth = dof_params.w; + float blur = DOFFactor(depth); + + //float blur = 1; + // const amount of blur: define controlled + //float2 scale = float2 (.5f / 1024.h, .5f / 768.h) * MAXCOF * blur; + // const amount of blur: engine controlled + float2 scale = float2 (.5f / 1024.h, .5f / 768.h) * (dof_kernel.z * blur); + // amount of blur varies according to resolution + // but kernel size in pixels is fixed. + // float2 scale = dof_kernel.xy * blur; + + // poisson + float2 o [12]; + o[0] = float2(-0.326212f , -0.405810f)*scale; + o[1] = float2(-0.840144f , -0.073580f)*scale; + o[2] = float2(-0.695914f , 0.457137f)*scale; + o[3] = float2(-0.203345f , 0.620716f)*scale; + o[4] = float2( 0.962340f , -0.194983f)*scale; + o[5] = float2( 0.473434f , -0.480026f)*scale; + o[6] = float2( 0.519456f , 0.767022f)*scale; + o[7] = float2( 0.185461f , -0.893124f)*scale; + o[8] = float2( 0.507431f , 0.064425f)*scale; + o[9] = float2( 0.896420f , 0.412458f)*scale; + o[10] = float2(-0.321940f , -0.932615f)*scale; + o[11] = float2(-0.791559f , -0.597710f)*scale; + + // sample +// float3 sum = tex2D(s_image,center); + float3 sum = s_image.Sample( smp_nofilter, center); + float contrib = 1.h; + + [unroll] for (int i=0; i<12; i++) + { + float2 tap = center + o[i]; +// float4 tap_color = tex2D (s_image,tap); +// float tap_depth = tex2D (s_position,tap).z; + // TODO: DX10: test linear sampler +// float4 tap_color = s_image.Sample( smp_rtlinear, tap ); + float4 tap_color = s_image.Sample( smp_nofilter, tap ); +#ifndef USE_MSAA + float tap_depth = s_position.Sample( smp_nofilter, tap).z; +#else + float tap_depth = s_position.Load( int3( tap* pos_decompression_params2.xy,0),0).z; +#endif + [flatten] if (tap_depth <= EPSDEPTH) tap_depth = dof_params.w; + float tap_contrib = DOFFactor(tap_depth); + sum += tap_color * tap_contrib; + contrib += tap_contrib; + } + + return float3 (sum/contrib); +} + +/* +// edge along sky line. More light-weight +float3 dof(float2 center) +{ + // Scale tap offsets based on render target size + float depth = tex2D(s_position,center).z; +// if (depth <= EPSDEPTH) depth = dof_params.w; + if (depth <= EPSDEPTH) depth = (dof_params.z-dof_params.y)*0.3; + float dist_to_focus = depth-dof_params.y; + float blur_far = saturate( dist_to_focus + / (dof_params.z-dof_params.y) ); + float blur_near = saturate( dist_to_focus + / (dof_params.x-dof_params.y) ); + float blur = (blur_near+blur_far); + blur*=blur; + + //float blur = 1; + // const amount of blur: define controlled + //float2 scale = float2 (.5f / 1024.h, .5f / 768.h) * MAXCOF * blur; + // const amount of blur: engine controlled + float2 scale = float2 (.5f / 1024.h, .5f / 768.h) * (dof_kernel.z * blur); + // amount of blur varies according to resolution + // but kernel size in pixels is fixed. + // float2 scale = dof_kernel.xy * blur; + + // poisson + float2 o [12]; + o[0] = float2(-0.326212f , -0.405810f)*scale; + o[1] = float2(-0.840144f , -0.073580f)*scale; + o[2] = float2(-0.695914f , 0.457137f)*scale; + o[3] = float2(-0.203345f , 0.620716f)*scale; + o[4] = float2( 0.962340f , -0.194983f)*scale; + o[5] = float2( 0.473434f , -0.480026f)*scale; + o[6] = float2( 0.519456f , 0.767022f)*scale; + o[7] = float2( 0.185461f , -0.893124f)*scale; + o[8] = float2( 0.507431f , 0.064425f)*scale; + o[9] = float2( 0.896420f , 0.412458f)*scale; + o[10] = float2(-0.321940f , -0.932615f)*scale; + o[11] = float2(-0.791559f , -0.597710f)*scale; + + // sample + float3 sum = tex2D(s_image,center); + float contrib = 1.h; + for (int i=0; i<12; i++) + { + float2 tap = center + o[i]; + float4 tap_color = tex2D (s_image,tap); + float tap_depth = tex2D (s_position,tap).z; +// if (tap_depth <= EPSDEPTH) tap_depth = dof_params.w; + if (tap_depth <= EPSDEPTH) tap_depth = (dof_params.z-dof_params.y)*0.3; +// float tap_contrib = 1.h; //(tap_depth>depth)?1.h:0.h; + float tap_contrib = 1-saturate(abs(tap_depth-depth)/dist_to_focus); + sum += tap_color * tap_contrib; + contrib += tap_contrib; + } + return float3 (sum/contrib); +} +*/ + +/* +#define NEAR 0.2h +//#define MINDIST 0.4h +#define MINDIST 1.4h +//#define MAXDIST 100.h +//#define MAXDIST 300.h +#define MAXDIST 2.0h +#define MAXCOF 5.h +#define MAXCOF_NEAR 100.h +#define EPSDEPTH 0.0001h +float3 dof(float2 center) +{ + // Scale tap offsets based on render target size + float depth = tex2D(s_position,center).z; + if (depth<=EPSDEPTH) depth = MAXDIST; + float blur = saturate( (depth-MINDIST)/(MAXDIST-MINDIST) ); + blur*=blur; + //float blur_near = pow(saturate( 1-(depth-NEAR)/MINDIST ), 2) * MAXCOF_NEAR; + //float blur = (blur_near+blur_far); + + //float blur = 1; + float2 scale = float2 (.5f / 1024.h, .5f / 768.h) * MAXCOF * blur; + + // poisson + float2 o [12]; + o[0] = float2(-0.326212f , -0.405810f)*scale; + o[1] = float2(-0.840144f , -0.073580f)*scale; + o[2] = float2(-0.695914f , 0.457137f)*scale; + o[3] = float2(-0.203345f , 0.620716f)*scale; + o[4] = float2( 0.962340f , -0.194983f)*scale; + o[5] = float2( 0.473434f , -0.480026f)*scale; + o[6] = float2( 0.519456f , 0.767022f)*scale; + o[7] = float2( 0.185461f , -0.893124f)*scale; + o[8] = float2( 0.507431f , 0.064425f)*scale; + o[9] = float2( 0.896420f , 0.412458f)*scale; + o[10] = float2(-0.321940f , -0.932615f)*scale; + o[11] = float2(-0.791559f , -0.597710f)*scale; + + // sample + float3 sum = tex2D(s_image,center); + float contrib = 1.h; + for (int i=0; i<12; i++) + { + float2 tap = center + o[i]; + float4 tap_color = tex2D (s_image,tap); + float tap_depth = tex2D (s_position,tap).z; + float tap_contrib = 1.h; //(tap_depth>depth)?1.h:0.h; + sum += tap_color * tap_contrib; + contrib += tap_contrib; + } + return float3 (sum/contrib); +} +/**/ +#endif // USE_DOF + +#endif // DOF_H_INCLUDED \ No newline at end of file diff --git a/res/gamedata/shaders/r5/dumb.ps b/res/gamedata/shaders/r5/dumb.ps new file mode 100644 index 00000000000..e30712bbcaa Binary files /dev/null and b/res/gamedata/shaders/r5/dumb.ps differ diff --git a/res/gamedata/shaders/r3/dumb.vs b/res/gamedata/shaders/r5/dumb.vs similarity index 100% rename from res/gamedata/shaders/r3/dumb.vs rename to res/gamedata/shaders/r5/dumb.vs diff --git a/res/gamedata/shaders/r5/dx11/tess.ds b/res/gamedata/shaders/r5/dx11/tess.ds new file mode 100644 index 00000000000..d3499ae9443 --- /dev/null +++ b/res/gamedata/shaders/r5/dx11/tess.ds @@ -0,0 +1,93 @@ +#include "common.h" +#include "DX11\tess.h" + +//if you use ccw then corresponding coefs are w, v, u +//if you use cw then corresponding coefs are u, v, w +[domain("tri")] +v2p_bumped main( HS_CONSTANT_DATA_OUTPUT input, + float3 uvw : SV_DomainLocation, + const OutputPatch bp ) +{ + v2p_bumped output; + + //interpolate in screen space + //uvw = uvw*input.www/dot(uvw,input.www); + + float minc = min( uvw.x, min( uvw.y, uvw.z ) ); + // if the vertex is not on an edge of the original triangle + [flatten]if (minc!=0.0f) + { + // if we are at not the centre of the triangle + [flatten]if( ((1.0f/3.0f)-minc)> 0.01f ) + { + // solving for making the smallest uvw component 0.0f as this means the bigger ones sum to 1.0f and + // are on the edge of the triangle + // if vertex gets too close to the edge move it on to the edge to replace to old edge vertex + // otherwise keep fK at 1.0f to restore the old uvw position + + float fK = (1.0f/3.0f)/((1.0f/3.0f)-minc); + fK = minc < 0.1 ? fK : 1.0f; + // update uvw + uvw = lerp((1.0f/3.0f).xxx, uvw, fK); + } + } + + float u = uvw.x; + float v = uvw.y; + float w = uvw.z; + + output.tcdh = bp[0].tcdh*w + bp[1].tcdh*v + bp[2].tcdh*u; + output.position = bp[0].position*w + bp[1].position*v + bp[2].position*u; + + float3 M1 = bp[0].M1*w + bp[1].M1*v + bp[2].M1*u; output.M1 = M1; + float3 M2 = bp[0].M2*w + bp[1].M2*v + bp[2].M2*u; output.M2 = M2; + float3 M3 = bp[0].M3*w + bp[1].M3*v + bp[2].M3*u; output.M3 = M3; + float3 Normal = normalize(float3(M1.z, M2.z, M3.z)); + + float3 triPos = output.position.xyz; + +#ifdef USE_TDETAIL + output.tcdbump = bp[0].tcdbump*w + bp[1].tcdbump*v + bp[2].tcdbump*u; +#endif +#ifdef USE_LM_HEMI + output.lmh = bp[0].lmh*w + bp[1].lmh*v + bp[2].lmh*u; +#endif + +#if TESS_PN + float3 N[3] = + { + float3(bp[0].M1.z, bp[0].M2.z, bp[0].M3.z), + float3(bp[1].M1.z, bp[1].M2.z, bp[1].M3.z), + float3(bp[2].M1.z, bp[2].M2.z, bp[2].M3.z) + }; + + float3 P[3] = + { + bp[0].position.xyz, + bp[1].position.xyz, + bp[2].position.xyz + }; + + ComputePatchVertex(P, N, uvw, input.patch, output.position.xyz, Normal); +#endif + +#if TESS_HM +# ifdef USE_TDETAIL + ComputeDisplacedVertex(output.position.xyz, Normal, output.tcdh, output.tcdbump); +# else + ComputeDisplacedVertex(output.position.xyz, Normal, output.tcdh, 0); +# endif +#endif + + + [flatten]if( minc==0 ) + output.position.xyz = triPos; + + + //output.M1.z = Normal.x; + //output.M2.z = Normal.y; + //output.M3.z = Normal.z; + output.hpos = mul(m_P, float4(output.position.xyz,1)); + + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/dx11/tess.h b/res/gamedata/shaders/r5/dx11/tess.h new file mode 100644 index 00000000000..310cdecb931 --- /dev/null +++ b/res/gamedata/shaders/r5/dx11/tess.h @@ -0,0 +1,117 @@ +#ifndef TESS_H_INCLUDED +# define TESS_H_INCLUDED + +// Output patch constant data. +struct PNPatch +{ + // Geometry cubic control points (excluding corners) + float3 f3B210 : POSITION3; + float3 f3B120 : POSITION4; + float3 f3B021 : POSITION5; + float3 f3B012 : POSITION6; + float3 f3B102 : POSITION7; + float3 f3B201 : POSITION8; + float3 f3B111 : CENTER; + + // Normal quadratic control points (excluding corners) + float3 f3N110 : NORMAL3; + float3 f3N011 : NORMAL4; + float3 f3N101 : NORMAL5; +}; + +struct HS_CONSTANT_DATA_OUTPUT +{ + float Edges[3] : SV_TessFactor; + float Inside : SV_InsideTessFactor; + //float3 www : DUBBIES; +#ifdef TESS_PN + PNPatch patch; +#endif +}; + +float triLOD; + +void ComputeTessFactor(out float Edges[3] : SV_TessFactor, out float Inside : SV_InsideTessFactor) +{ + //float factor = clamp(triLOD, 1, 1);//factor = (Output.N.z>0)?-1:10;//max(factor*10, 1); + + Edges[0] = Edges[1] = Edges[2] = /*63;//*/triLOD;//factor; + Inside = /*63;//*/triLOD;//factor; +} + +void ComputePNPatch(float3 P[3], float3 N[3], out PNPatch patch) +{ + // Compute the cubic geometry control points + // Edge control points + patch.f3B210 = (2.0f*P[0].xyz + P[1].xyz - dot(P[1].xyz-P[0].xyz, N[0])*N[0]) / 3.0f; + patch.f3B120 = (2.0f*P[1].xyz + P[0].xyz - dot(P[0].xyz-P[1].xyz, N[1])*N[1]) / 3.0f; + patch.f3B021 = (2.0f*P[1].xyz + P[2].xyz - dot(P[2].xyz-P[1].xyz, N[1])*N[1]) / 3.0f; + patch.f3B012 = (2.0f*P[2].xyz + P[1].xyz - dot(P[1].xyz-P[2].xyz, N[2])*N[2]) / 3.0f; + patch.f3B102 = (2.0f*P[2].xyz + P[0].xyz - dot(P[0].xyz-P[2].xyz, N[2])*N[2]) / 3.0f; + patch.f3B201 = (2.0f*P[0].xyz + P[2].xyz - dot(P[2].xyz-P[0].xyz, N[0])*N[0]) / 3.0f; + + // Center control point + float3 f3E = ( patch.f3B210 + patch.f3B120 + patch.f3B021 + patch.f3B012 + patch.f3B102 + patch.f3B201 ) / 6.0f; + float3 f3V = ( P[0].xyz + P[1].xyz + P[2].xyz ) / 3.0f; + patch.f3B111 = f3E + ( ( f3E - f3V ) / 2.0f ); + + // Compute the quadratic normal control points, and rotate into world space + float fV12 = 2.0f * dot( P[1].xyz - P[0].xyz, N[0] + N[1] ) / dot( P[1].xyz - P[0].xyz, P[1].xyz - P[0].xyz ); + patch.f3N110 = normalize( N[0] + N[1] - fV12 * ( P[1].xyz - P[0].xyz )); + float fV23 = 2.0f * dot( P[2].xyz - P[1].xyz, N[1] + N[2] ) / dot( P[2].xyz - P[1].xyz, P[2].xyz - P[1].xyz ); + patch.f3N011 = normalize( N[1] + N[2] - fV23 * ( P[2].xyz - P[1].xyz )); + float fV31 = 2.0f * dot( P[0].xyz - P[2].xyz, N[2] + N[0] ) / dot( P[0].xyz - P[2].xyz, P[0].xyz - P[2].xyz ); + patch.f3N101 = normalize( N[2] + N[0] - fV31 * ( P[0].xyz - P[2].xyz )); +} + +void ComputePatchVertex(float3 P[3], float3 N[3], float3 uvw, in PNPatch patch, out float3 Pos, out float3 Norm) +{ + float u = uvw.y; + float v = uvw.x; + float w = uvw.z; + + Pos = P[0] * w * w * w + + P[1] * u * u * u + + P[2] * v * v * v + + patch.f3B210 * 3.0f * w * w * u + + patch.f3B120 * 3.0f * w * u * u + + patch.f3B201 * 3.0f * w * w * v + + patch.f3B021 * 3.0f * u * u * v + + patch.f3B102 * 3.0f * w * v * v + + patch.f3B012 * 3.0f * u * v * v + + patch.f3B111 * 6.0f * w * u * v; + + + // Compute normal from quadratic control points and barycentric coords + Norm = N[0] * w * w + + N[1] * u * u + + N[2] * v * v + + patch.f3N110 * w * u + + patch.f3N011 * u * v + + patch.f3N101 * w * v; +} + +sampler smp_bump_ds; // Use D3DTADDRESS_WRAP, D3DTEXF_ANISOTROPIC, D3DTEXF_LINEAR, D3DTEXF_ANISOTROPIC +Texture2D s_tbump; // +Texture2D s_tbumpX; // +Texture2D s_tdetailBumpX; // Error for bump detail + +void ComputeDisplacedVertex(inout float3 P, float3 N, float2 tc, float2 tcd) +{ +#ifdef USE_TDETAIL + float4 Nu = s_tbump.SampleLevel (smp_bump_ds, tc, 0); // IN: normal.gloss + float4 NuE = s_tbumpX.SampleLevel(smp_bump_ds, tc, 0); // IN: normal_error.height + + float3 Ne = Nu.wzy + (NuE.xyz - 1.0h); //(Nu.wzyx - .5h) + (E-.5) + float height = NuE.w; + +# ifdef USE_TDETAIL_BUMP + float4 NDetailX = s_tdetailBumpX.SampleLevel(smp_bump_ds, tcd, 0); + height += (NDetailX.w-0.5)*0.2; +# endif + + P += N*height*0.07; +#endif +} + +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r5/dx11/tess.hs b/res/gamedata/shaders/r5/dx11/tess.hs new file mode 100644 index 00000000000..171d1e56125 --- /dev/null +++ b/res/gamedata/shaders/r5/dx11/tess.hs @@ -0,0 +1,77 @@ +#include "common.h" +#include "DX11\tess.h" + +HS_CONSTANT_DATA_OUTPUT PatchConstantsHS( + InputPatch ip, + uint PatchID : SV_PrimitiveID ) +{ + HS_CONSTANT_DATA_OUTPUT Output; + + ComputeTessFactor(Output.Edges, Output.Inside); + +#ifdef TESS_PN + float3 N[3] = + { + normalize(float3(ip[0].M1.z, ip[0].M2.z, ip[0].M3.z)), + normalize(float3(ip[1].M1.z, ip[1].M2.z, ip[1].M3.z)), + normalize(float3(ip[2].M1.z, ip[2].M2.z, ip[2].M3.z)) + }; + + float3 P[3] = + { + ip[0].position.xyz, + ip[1].position.xyz, + ip[2].position.xyz + }; + + ComputePNPatch(P, N, Output.patch); + +//Discard back facing patches +# ifndef TESS_HM + bool doDiscard = (N[0].z>0.1) && (N[1].z>0.1) && (N[2].z>0.1) + && (Output.patch.f3N110.z>0.1) && (Output.patch.f3N011.z>0.1) && (Output.patch.f3N101.z>0.1) + && (P[0].z>5) && (P[1].z>5) && (P[2].z>5); + + if (doDiscard) + Output.Edges[0]= Output.Edges[1]=Output.Edges[2]=Output.Inside=-1; +# endif + +#endif + +// Data for interpolation in screen space +// float w0 = mul(m_P, float4(ip[2].position.xyz, 1)).w; +// float w1 = mul(m_P, float4(ip[1].position.xyz, 1)).w; +// float w2 = mul(m_P, float4(ip[0].position.xyz, 1)).w; + +// Output.www = float3(w0, w1, w2); + + return Output; +} + +[domain("tri")] +[partitioning("pow2")] +[outputtopology("triangle_ccw")] +[outputcontrolpoints(3)] +[patchconstantfunc("PatchConstantsHS")] +p_bumped main( InputPatch ip, + uint i : SV_OutputControlPointID, + uint PatchID : SV_PrimitiveID ) +{ + p_bumped ouput; + + ouput.tcdh = ip[i].tcdh; + ouput.position = ip[i].position; + ouput.M1 = ip[i].M1; + ouput.M2 = ip[i].M2; + ouput.M3 = ip[i].M3; +#ifdef USE_TDETAIL + ouput.tcdbump = ip[i].tcdbump; +#endif +#ifdef USE_LM_HEMI + ouput.lmh = ip[i].lmh; +#endif + + return ouput; +} + + diff --git a/res/gamedata/shaders/r5/dx11/tess_shadow.ds b/res/gamedata/shaders/r5/dx11/tess_shadow.ds new file mode 100644 index 00000000000..36d904bcdfd --- /dev/null +++ b/res/gamedata/shaders/r5/dx11/tess_shadow.ds @@ -0,0 +1,55 @@ +#include "common.h" +#include "DX11\tess.h" + +//if you use ccw then corresponding coefs are w, v, u +//if you use cw then corresponding coefs are u, v, w +[domain("tri")] +v2p_shadow_direct main( HS_CONSTANT_DATA_OUTPUT input, + float3 uvw : SV_DomainLocation, + const OutputPatch bp ) +{ + v2p_shadow_direct output; + float u = uvw.x; + float v = uvw.y; + float w = uvw.z; + + float3 Pos = bp[0].position.xyz*w + bp[1].position.xyz*v + bp[2].position.xyz*u; + float3 M1 = bp[0].M1*w + bp[1].M1*v + bp[2].M1*u; + float3 M2 = bp[0].M2*w + bp[1].M2*v + bp[2].M2*u; + float3 M3 = bp[0].M3*w + bp[1].M3*v + bp[2].M3*u; + float3 Norm = normalize(float3(M1.z, M2.z, M3.z)); + float2 tc = bp[0].tcdh*w + bp[1].tcdh*v + bp[2].tcdh*u; +# ifdef USE_TDETAIL + float2 tcd = bp[0].tcdbump*w + bp[1].tcdbump*v + bp[2].tcdbump*u; +# else + float2 tcd = 0; +# endif + + +#if TESS_PN + float3 N[3] = + { + float3(bp[0].M1.z, bp[0].M2.z, bp[0].M3.z), + float3(bp[1].M1.z, bp[1].M2.z, bp[1].M3.z), + float3(bp[2].M1.z, bp[2].M2.z, bp[2].M3.z) + }; + + float3 P[3] = + { + bp[0].position.xyz, + bp[1].position.xyz, + bp[2].position.xyz + }; + + ComputePatchVertex(P, N, uvw, input.patch, Pos, Norm); +#endif + +#if TESS_HM + ComputeDisplacedVertex(Pos, Norm, tc, tcd); +#endif + + output.hpos = mul(m_P, float4(Pos,1)); + + return output; +} + diff --git a/res/gamedata/shaders/r5/editor.vs b/res/gamedata/shaders/r5/editor.vs new file mode 100644 index 00000000000..b621d7dbac8 --- /dev/null +++ b/res/gamedata/shaders/r5/editor.vs @@ -0,0 +1,24 @@ +#include "common.h" + +struct vf +{ + float4 C : COLOR0; + float4 P : POSITION; +}; + +struct v2p +{ + float4 C : COLOR0; + float4 P : SV_Position; +}; + +uniform float4 tfactor; +v2p main (vf i) +{ + v2p o; + + o.P = mul (m_WVP, i.P); // xform, input in world coords + o.C = tfactor*unpack_D3DCOLOR(i.C); + + return o; +} diff --git a/res/gamedata/shaders/r5/effects_bullet_tracer.s b/res/gamedata/shaders/r5/effects_bullet_tracer.s new file mode 100644 index 00000000000..c70935f3fcb --- /dev/null +++ b/res/gamedata/shaders/r5/effects_bullet_tracer.s @@ -0,0 +1,13 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin("stub_default","stub_default") + :zb(true, false) + :blend(true, blend.one, blend.one) +-- :blend(true, blend.srcalpha, blend.one) +-- :aref(true, 32) + +-- Decouple sampler and texture +-- shader:sampler ("s_base") : texture(t_base) : clamp() : f_linear () +-- TODO: DX10: move stub_default to smp_rtlinear + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/effects_flare.s b/res/gamedata/shaders/r5/effects_flare.s new file mode 100644 index 00000000000..90cd9abbe3f --- /dev/null +++ b/res/gamedata/shaders/r5/effects_flare.s @@ -0,0 +1,11 @@ +function normal(shader, t_base, t_second, t_detail) + shader:begin("effects_sun","stub_default") +-- : sorting (2, false) +-- : blend (true,blend.srcalpha,blend.invsrcalpha) +-- : blend (true,blend.one,blend.one) + : blend (true,blend.srcalpha,blend.one) + : zb (false,false) +-- shader:sampler ("s_base") :texture (t_base) + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/effects_lightning.s b/res/gamedata/shaders/r5/effects_lightning.s new file mode 100644 index 00000000000..3c8d0c53ce0 --- /dev/null +++ b/res/gamedata/shaders/r5/effects_lightning.s @@ -0,0 +1,11 @@ +function normal (shader, t_base, t_second, t_detail) + shader : begin ("stub_default","stub_default") + : zb (true,false) + : blend (true,blend.srcalpha,blend.one) +-- TODO: DX10: implement aref for this shader + : aref (true,2) + + shader : dx10texture ("s_base", t_base) +-- TODO: DX10: Clamp + shader : dx10sampler ("smp_base") -- Clamp +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/effects_lightplanes.s b/res/gamedata/shaders/r5/effects_lightplanes.s new file mode 100644 index 00000000000..cd8b1b453ba --- /dev/null +++ b/res/gamedata/shaders/r5/effects_lightplanes.s @@ -0,0 +1,12 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("base_lplanes","base_lplanes") + : fog (false) +-- : fog (true) + : zb (true,false) + : blend (true,blend.srcalpha,blend.one) + : aref (true,0) + : sorting (2, false) +-- shader:sampler ("s_base") :texture (t_base) + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end diff --git a/res/gamedata/shaders/r3/effects_rain.ps b/res/gamedata/shaders/r5/effects_rain.ps similarity index 100% rename from res/gamedata/shaders/r3/effects_rain.ps rename to res/gamedata/shaders/r5/effects_rain.ps diff --git a/res/gamedata/shaders/r3/effects_rain.s b/res/gamedata/shaders/r5/effects_rain.s similarity index 100% rename from res/gamedata/shaders/r3/effects_rain.s rename to res/gamedata/shaders/r5/effects_rain.s diff --git a/res/gamedata/shaders/r3/effects_rain.vs b/res/gamedata/shaders/r5/effects_rain.vs similarity index 100% rename from res/gamedata/shaders/r3/effects_rain.vs rename to res/gamedata/shaders/r5/effects_rain.vs diff --git a/res/gamedata/shaders/r3/effects_rain_splash.ps b/res/gamedata/shaders/r5/effects_rain_splash.ps similarity index 100% rename from res/gamedata/shaders/r3/effects_rain_splash.ps rename to res/gamedata/shaders/r5/effects_rain_splash.ps diff --git a/res/gamedata/shaders/r3/effects_rain_splash.s b/res/gamedata/shaders/r5/effects_rain_splash.s similarity index 100% rename from res/gamedata/shaders/r3/effects_rain_splash.s rename to res/gamedata/shaders/r5/effects_rain_splash.s diff --git a/res/gamedata/shaders/r5/effects_sun.s b/res/gamedata/shaders/r5/effects_sun.s new file mode 100644 index 00000000000..25ffb514348 --- /dev/null +++ b/res/gamedata/shaders/r5/effects_sun.s @@ -0,0 +1,11 @@ +function normal(shader, t_base, t_second, t_detail) + shader:begin("effects_sun","stub_default") +-- : sorting (2, false) +-- : blend (true,blend.srcalpha,blend.invsrcalpha) +-- : blend (true,blend.one,blend.one) + : blend (true,blend.srcalpha,blend.one) + : zb (true,false) +-- shader:sampler ("s_base") :texture (t_base) + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/effects_sun.vs b/res/gamedata/shaders/r5/effects_sun.vs new file mode 100644 index 00000000000..7a4ffc31b40 --- /dev/null +++ b/res/gamedata/shaders/r5/effects_sun.vs @@ -0,0 +1,16 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL I ) +{ + v2p_TL O; + +// O.HPos = I.P; + O.HPos = mul(m_VP, I.P); // xform, input in world coords + O.HPos.z = O.HPos.w; + O.Tex0 = I.Tex0; + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/effects_wallmark.s b/res/gamedata/shaders/r5/effects_wallmark.s new file mode 100644 index 00000000000..230af8b724d --- /dev/null +++ b/res/gamedata/shaders/r5/effects_wallmark.s @@ -0,0 +1,8 @@ +function normal(shader, t_base, t_second, t_detail) + shader:begin("effects_wallmark","stub_default_ma") + : blend (true,blend.destcolor,blend.srccolor) + : zb (true,false) + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_rtlinear") + shader: dx10color_write_enable( true, true, true, false) +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/effects_wallmark.vs b/res/gamedata/shaders/r5/effects_wallmark.vs new file mode 100644 index 00000000000..0846203c688 --- /dev/null +++ b/res/gamedata/shaders/r5/effects_wallmark.vs @@ -0,0 +1,14 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL I ) +{ + v2p_TL O; + + O.HPos = mul( m_VP, I.P ); + O.Tex0 = I.Tex0; + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r3/effects_wallmark_blood.ps b/res/gamedata/shaders/r5/effects_wallmark_blood.ps similarity index 100% rename from res/gamedata/shaders/r3/effects_wallmark_blood.ps rename to res/gamedata/shaders/r5/effects_wallmark_blood.ps diff --git a/res/gamedata/shaders/r3/effects_wallmark_blood.s b/res/gamedata/shaders/r5/effects_wallmark_blood.s similarity index 100% rename from res/gamedata/shaders/r3/effects_wallmark_blood.s rename to res/gamedata/shaders/r5/effects_wallmark_blood.s diff --git a/res/gamedata/shaders/r3/effects_wallmark_blood.vs b/res/gamedata/shaders/r5/effects_wallmark_blood.vs similarity index 100% rename from res/gamedata/shaders/r3/effects_wallmark_blood.vs rename to res/gamedata/shaders/r5/effects_wallmark_blood.vs diff --git a/res/gamedata/shaders/r5/effects_wallmarkblend.s b/res/gamedata/shaders/r5/effects_wallmarkblend.s new file mode 100644 index 00000000000..70320fd8e3a --- /dev/null +++ b/res/gamedata/shaders/r5/effects_wallmarkblend.s @@ -0,0 +1,13 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("wmark", "simple") + : sorting (1, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : wmark (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_rtlinear") + shader: dx10color_write_enable( true, true, true, false) +end diff --git a/res/gamedata/shaders/r5/effects_wallmarkmult.s b/res/gamedata/shaders/r5/effects_wallmarkmult.s new file mode 100644 index 00000000000..1af5baca2f3 --- /dev/null +++ b/res/gamedata/shaders/r5/effects_wallmarkmult.s @@ -0,0 +1,13 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("wmark", "simple") + : sorting (1, false) + : blend (true,blend.destcolor,blend.srccolor) + : aref (true,0) + : zb (true,false) + : fog (false) + : wmark (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_rtlinear") + shader: dx10color_write_enable( true, true, true, false) +end diff --git a/res/gamedata/shaders/r5/effects_wallmarkset.s b/res/gamedata/shaders/r5/effects_wallmarkset.s new file mode 100644 index 00000000000..e920205b81f --- /dev/null +++ b/res/gamedata/shaders/r5/effects_wallmarkset.s @@ -0,0 +1,12 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("wmark", "simple") + : sorting (1, false) + : aref (false,0) + : zb (true,true) + : fog (false) + : wmark (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_rtlinear") + shader: dx10color_write_enable( true, true, true, false) +end diff --git a/res/gamedata/shaders/r3/effects_water.s b/res/gamedata/shaders/r5/effects_water.s similarity index 100% rename from res/gamedata/shaders/r3/effects_water.s rename to res/gamedata/shaders/r5/effects_water.s diff --git a/res/gamedata/shaders/r3/effects_waterryaska.s b/res/gamedata/shaders/r5/effects_waterryaska.s similarity index 100% rename from res/gamedata/shaders/r3/effects_waterryaska.s rename to res/gamedata/shaders/r5/effects_waterryaska.s diff --git a/res/gamedata/shaders/r3/effects_waterstuden.s b/res/gamedata/shaders/r5/effects_waterstuden.s similarity index 100% rename from res/gamedata/shaders/r3/effects_waterstuden.s rename to res/gamedata/shaders/r5/effects_waterstuden.s diff --git a/res/gamedata/shaders/r3/effects_waterunderground.s b/res/gamedata/shaders/r5/effects_waterunderground.s similarity index 100% rename from res/gamedata/shaders/r3/effects_waterunderground.s rename to res/gamedata/shaders/r5/effects_waterunderground.s diff --git a/res/gamedata/shaders/r5/fluid3d_stub.s b/res/gamedata/shaders/r5/fluid3d_stub.s new file mode 100644 index 00000000000..8fc863eea6d --- /dev/null +++ b/res/gamedata/shaders/r5/fluid3d_stub.s @@ -0,0 +1,10 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_default","stub_default") +-- shader:begin ("stub_default","test","stub_default") + : zb (true,false) + : blend (true,blend.one,blend.one) + : sorting (2, true) + + shader:dx10texture ("s_base", "water\\water_ryaska1") + shader:dx10sampler ("smp_base") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_advect.ps b/res/gamedata/shaders/r5/fluid_advect.ps new file mode 100644 index 00000000000..55c9c70d2e4 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_advect.ps differ diff --git a/res/gamedata/shaders/r5/fluid_advect_bfecc.ps b/res/gamedata/shaders/r5/fluid_advect_bfecc.ps new file mode 100644 index 00000000000..eaaa26e9165 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_advect_bfecc.ps differ diff --git a/res/gamedata/shaders/r5/fluid_advect_bfecc_temp.ps b/res/gamedata/shaders/r5/fluid_advect_bfecc_temp.ps new file mode 100644 index 00000000000..f4e499699d1 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_advect_bfecc_temp.ps differ diff --git a/res/gamedata/shaders/r5/fluid_advect_temp.ps b/res/gamedata/shaders/r5/fluid_advect_temp.ps new file mode 100644 index 00000000000..6e354eb479d Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_advect_temp.ps differ diff --git a/res/gamedata/shaders/r5/fluid_advect_vel.ps b/res/gamedata/shaders/r5/fluid_advect_vel.ps new file mode 100644 index 00000000000..d182117afe8 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_advect_vel.ps differ diff --git a/res/gamedata/shaders/r5/fluid_advect_vel_g.ps b/res/gamedata/shaders/r5/fluid_advect_vel_g.ps new file mode 100644 index 00000000000..80e55dbfe18 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_advect_vel_g.ps differ diff --git a/res/gamedata/shaders/r5/fluid_array.gs b/res/gamedata/shaders/r5/fluid_array.gs new file mode 100644 index 00000000000..cf33e42fc98 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_array.gs @@ -0,0 +1,22 @@ +#include "fluid_common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Geometry +[maxvertexcount (3)] +void main(triangle v2g_fluidsim In[3], inout TriangleStream triStream) +{ + g2p_fluidsim Out; + // cell0.z of the first vertex in the triangle determines the destination slice index + Out.RTIndex = In[0].cell0.z; + for(int v=0; v<3; v++) + { + Out.pos = In[v].pos; + Out.cell0 = In[v].cell0; + Out.texcoords = In[v].texcoords; + Out.LR = In[v].LR; + Out.BT = In[v].BT; + Out.DU = In[v].DU; + triStream.Append( Out ); + } + triStream.RestartStrip( ); +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_array_dyn_oobb.gs b/res/gamedata/shaders/r5/fluid_array_dyn_oobb.gs new file mode 100644 index 00000000000..36b484d6c2a --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_array_dyn_oobb.gs @@ -0,0 +1,21 @@ +#include "fluid_common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Geometry +[maxvertexcount (3)] +void main(triangle v2g_fluidsim_dyn_aabb In[3], inout TriangleStream triStream) +{ + g2p_fluidsim_dyn_aabb Out; + // cell0.z of the first vertex in the triangle determines the destination slice index + Out.RTIndex = In[0].cell0.z; + for(int v=0; v<3; v++) + { + Out.pos = In[v].pos; + Out.cell0 = In[v].cell0; + Out.velocity = In[v].velocity; + Out.clip0 = In[v].clip0; + Out.clip1 = In[v].clip1; + triStream.Append( Out ); + } + triStream.RestartStrip( ); +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_array_oobb.gs b/res/gamedata/shaders/r5/fluid_array_oobb.gs new file mode 100644 index 00000000000..5566b821780 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_array_oobb.gs @@ -0,0 +1,24 @@ +#include "fluid_common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Geometry +[maxvertexcount (3)] +void main(triangle v2g_fluidsim_clip In[3], inout TriangleStream triStream) +{ + g2p_fluidsim_clip Out; + // cell0.z of the first vertex in the triangle determines the destination slice index + Out.RTIndex = In[0].cell0.z; + for(int v=0; v<3; v++) + { + Out.pos = In[v].pos; + Out.cell0 = In[v].cell0; + Out.texcoords = In[v].texcoords; + Out.LR = In[v].LR; + Out.BT = In[v].BT; + Out.DU = In[v].DU; + Out.clip0 = In[v].clip0; + Out.clip1 = In[v].clip1; + triStream.Append( Out ); + } + triStream.RestartStrip( ); +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_common.h b/res/gamedata/shaders/r5/fluid_common.h new file mode 100644 index 00000000000..93d2305d243 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_common.h @@ -0,0 +1,214 @@ +//-------------------------------------------------------------------------------------- +// Defines +//-------------------------------------------------------------------------------------- + +#define LEFTCELL float3 (input.LR.x, input.texcoords.y, input.texcoords.z) +#define RIGHTCELL float3 (input.LR.y, input.texcoords.y, input.texcoords.z) +#define BOTTOMCELL float3 (input.texcoords.x, input.BT.x, input.texcoords.z) +#define TOPCELL float3 (input.texcoords.x, input.BT.y, input.texcoords.z) +#define DOWNCELL float3 (input.texcoords.x, input.texcoords.y, input.DU.x) +#define UPCELL float3 (input.texcoords.x, input.texcoords.y, input.DU.y) + +// 1.73 - voxel diagonal length +#define BOX_EXPANSION 1.73 + +//-------------------------------------------------------------------------------------- +// Textures +//-------------------------------------------------------------------------------------- + +Texture3D Texture_velocity0; +Texture3D Texture_velocity1; +Texture3D Texture_color; +Texture3D Texture_obstacles; +Texture3D Texture_obstvelocity; +Texture3D Texture_pressure; +Texture3D Texture_tempscalar; +Texture3D Texture_tempvector; + +//-------------------------------------------------------------------------------------- +// Samplers +//-------------------------------------------------------------------------------------- + +sampler samPointClamp; +sampler samLinear; + +//-------------------------------------------------------------------------------------- +// Variables +//-------------------------------------------------------------------------------------- + +cbuffer FluidSimConfig +{ + float textureHeight; + float textureWidth; + float textureDepth; + +float modulate = 1.0; + float epsilon; + float timestep; +float forward = 1.0; + float4 floatVolumeDim; // Actually float3. We don't support float3 and float2 +} + +cbuffer AABBBounds +{ + float4 boxLBDcorner; // float3 + float4 boxRTUcorner; // float3 +} + +cbuffer EmitterParams +{ + float size; + float4 center; // Actually float3. We don't support float3 and float2 + float4 splatColor; +} + +cbuffer OOBBClipPlanes +{ + float4 OOBBClipPlane[6]; + // 0 - Top + // 1 - Bottom +} + +// For fire simulation. Fuel extinction speed. +static const float k = 0.006; + +///////////////////////////////////////////////////////////////// +// Structs + +///////////////////////////////////////////////////////////////// +// fluidsim +struct v_fluidsim +{ + float3 position : POSITION; // 2D slice vertex coordinates in clip space + float3 textureCoords0 : TEXCOORD; // 3D cell coordinates (x,y,z in 0-dimension range) +}; + +struct v2g_fluidsim +{ + float3 cell0 : TEXCOORD0; + float3 texcoords : TEXCOORD1; + float2 LR : TEXCOORD2; + float2 BT : TEXCOORD3; + float2 DU : TEXCOORD4; + float4 pos : SV_Position; +}; + +struct g2p_fluidsim +{ + float3 cell0 : TEXCOORD0; // 3D cell coordinates (x,y,z in 0-dimension range) + float3 texcoords : TEXCOORD1; // 3D cell texcoords (x,y,z in 0-1 range) + float2 LR : TEXCOORD2; // 3D cell texcoords for the Left and Right neighbors + float2 BT : TEXCOORD3; // 3D cell texcoords for the Bottom and Top neighbors + float2 DU : TEXCOORD4; // 3D cell texcoords for the Down and Up neighbors + float4 pos : SV_Position; // 2D slice vertex coordinates in homogenous clip space + uint RTIndex : SV_RenderTargetArrayIndex; // used to choose the destination slice +}; + +struct p_fluidsim +{ + float3 cell0 : TEXCOORD0; // 3D cell coordinates (x,y,z in 0-dimension range) + float3 texcoords : TEXCOORD1; // 3D cell texcoords (x,y,z in 0-1 range) + float2 LR : TEXCOORD2; // 3D cell texcoords for the Left and Right neighbors + float2 BT : TEXCOORD3; // 3D cell texcoords for the Bottom and Top neighbors + float2 DU : TEXCOORD4; // 3D cell texcoords for the Down and Up neighbors +}; + +///////////////////////////////////////////////////////////////// +// fluidsim_clip +// TODO: DX10: These structures are used for obstacle rendering. Remove unused fields. + +struct v2g_fluidsim_clip +{ + float3 cell0 : TEXCOORD0; + float3 texcoords : TEXCOORD1; + float2 LR : TEXCOORD2; + float2 BT : TEXCOORD3; + float2 DU : TEXCOORD4; + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; + float4 pos : SV_Position; +}; + +struct g2p_fluidsim_clip +{ + float3 cell0 : TEXCOORD0; // 3D cell coordinates (x,y,z in 0-dimension range) + float3 texcoords : TEXCOORD1; // 3D cell texcoords (x,y,z in 0-1 range) + float2 LR : TEXCOORD2; // 3D cell texcoords for the Left and Right neighbors + float2 BT : TEXCOORD3; // 3D cell texcoords for the Bottom and Top neighbors + float2 DU : TEXCOORD4; // 3D cell texcoords for the Down and Up neighbors + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; + float4 pos : SV_Position; // 2D slice vertex coordinates in homogenous clip space + uint RTIndex : SV_RenderTargetArrayIndex; // used to choose the destination slice +}; + +struct p_fluidsim_clip +{ + float3 cell0 : TEXCOORD0; // 3D cell coordinates (x,y,z in 0-dimension range) + float3 texcoords : TEXCOORD1; // 3D cell texcoords (x,y,z in 0-1 range) + float2 LR : TEXCOORD2; // 3D cell texcoords for the Left and Right neighbors + float2 BT : TEXCOORD3; // 3D cell texcoords for the Bottom and Top neighbors + float2 DU : TEXCOORD4; // 3D cell texcoords for the Down and Up neighbors + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; +}; + +///////////////////////////////////////////////////////////////// +// fluidsim_clip +// TODO: DX10: These structures are used for obstacle rendering. Remove unused fields. + +struct v2g_fluidsim_dyn_aabb +{ + float3 cell0 : TEXCOORD0; + float3 velocity : TEXCOORD1; + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; + float4 pos : SV_Position; +}; + +struct g2p_fluidsim_dyn_aabb +{ + float3 cell0 : TEXCOORD0; // 3D cell coordinates (x,y,z in 0-dimension range) + float3 velocity : TEXCOORD1; // speed of the point in local space + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; + float4 pos : SV_Position; // 2D slice vertex coordinates in homogenous clip space + uint RTIndex : SV_RenderTargetArrayIndex; // used to choose the destination slice +}; + +struct p_fluidsim_dyn_aabb +{ + float3 cell0 : TEXCOORD0; // 3D cell coordinates (x,y,z in 0-dimension range) + float3 velocity : TEXCOORD1; + float3 clip0 : SV_ClipDistance0; + float3 clip1 : SV_ClipDistance1; +}; + +//-------------------------------------------------------------------------------------- +// Helper functions +//-------------------------------------------------------------------------------------- + +float4 GetObstVelocity( float3 cellTexCoords ) +{ + return Texture_obstvelocity.SampleLevel(samPointClamp, cellTexCoords, 0); +} + +bool IsNonEmptyCell( float3 cellTexCoords ) +{ + return (Texture_obstacles.SampleLevel(samPointClamp, cellTexCoords, 0).r > 0.0); +} + +bool IsBoundaryCell( float3 cellTexCoords ) +{ + return (Texture_obstacles.SampleLevel(samPointClamp, cellTexCoords, 0).r > 0.9); +} + +float3 GetAdvectedPosTexCoords(p_fluidsim input) +{ + float3 pos = input.cell0; + + pos -= timestep * forward * + Texture_velocity0.SampleLevel( samPointClamp, input.texcoords, 0 ).xyz; + + return float3(pos.x/textureWidth, pos.y/textureHeight, (pos.z+0.5)/textureDepth); +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_common_render.h b/res/gamedata/shaders/r5/fluid_common_render.h new file mode 100644 index 00000000000..b997fb2f5d2 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_common_render.h @@ -0,0 +1,337 @@ +//-------------------------------------------------------------------------------------- +// Defines +//-------------------------------------------------------------------------------------- +//#define OCCLUDED_PIXEL_RAYVALUE float4(1, 0, 0, 0) +// Use very large value for aplha to help edge detection +#define OCCLUDED_PIXEL_RAYVALUE float4(1, 0, 0, 100000) +#define NEARCLIPPED_PIXEL_RAYPOS float3(0, -1, 0) + +// Z for skybox is zero, so patch this in shader +#define Z_EPSILON 0.00001 +// Value for skybox depth +#define Z_MAX 100000 + +//-------------------------------------------------------------------------------------- +// Textures +//-------------------------------------------------------------------------------------- +Texture2D sceneDepthTex; +Texture3D colorTex; + +Texture2D rayDataTex; +Texture2D rayDataTexSmall; +Texture2D rayCastTex; +Texture2D edgeTex; +Texture2D jitterTex; + +Texture2D fireTransferFunction; + +//-------------------------------------------------------------------------------------- +// Samplers +//-------------------------------------------------------------------------------------- + +sampler samPointClamp; +sampler samLinearClamp; +sampler samRepeat; + +//-------------------------------------------------------------------------------------- +// Variables +//-------------------------------------------------------------------------------------- +// Set once per volume +// Use for all rendering passes +cbuffer FluidRenderConfig +{ + float RTWidth; + float RTHeight; + + float4 DiffuseLight; + + float4x4 WorldViewProjection; + float4x4 InvWorldViewProjection; + + float ZNear; + float ZFar; + + float4 gridDim; // float3 + float4 recGridDim; // float3 + float maxGridDim; + float gridScaleFactor = 1.0; + float4 eyeOnGrid; // float3 +} + +//static float edgeThreshold = 0.2; +//static float edgeThreshold = 0.1; +static float edgeThreshold = 0.01; + +static const bool g_bRaycastFilterTricubic = false; // true: tricubic; false: trilinear +//static const bool g_bRaycastFilterTricubic = true; // true: tricubic; false: trilinear + +#include "fluid_common_tricubic.h" + +// Fire setup +static const float RednessFactor = 5.0f; +static const float fireAlphaMultiplier = 0.95f; +//static const float smokeAlphaMultiplier = 0.05f; +static const float smokeAlphaMultiplier = 0.5f; +//static const float smokeColorMultiplier = 2.00f; +static const float smokeColorMultiplier = 0.02f; + +//-------------------------------------------------------------------------------------- +// Structs +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float3 pos : POSITION; +}; + +struct PS_INPUT_RAYDATA_BACK +{ + float4 pos : SV_Position; + float depth : TEXCOORD0; +}; + +struct PS_INPUT_RAYDATA_FRONT +{ + float4 pos : SV_Position; + float3 posInGrid: POSITION; + float depth : TEXCOORD0; +}; + +struct PS_INPUT_RAYCAST +{ + float4 pos : SV_Position; + float3 posInGrid: POSITION; +}; + + +struct VS_OUTPUT_EDGE +{ + // There's no textureUV11 because its weight is zero. + float4 position : SV_Position; // vertex position + float2 textureUV00 : TEXCOORD0; // kernel tap texture coords + float2 textureUV01 : TEXCOORD1; // kernel tap texture coords + float2 textureUV02 : TEXCOORD2; // kernel tap texture coords + float2 textureUV10 : TEXCOORD3; // kernel tap texture coords + float2 textureUV12 : TEXCOORD4; // kernel tap texture coords + float2 textureUV20 : TEXCOORD5; // kernel tap texture coords + float2 textureUV21 : TEXCOORD6; // kernel tap texture coords + float2 textureUV22 : TEXCOORD7; // kernel tap texture coords +}; + +//-------------------------------------------------------------------------------------- +// Functions +//-------------------------------------------------------------------------------------- + +float EdgeDetectScalar(float sx, float sy, float threshold) +{ + float dist = (sx*sx+sy*sy); + float e = (dist > threshold*ZFar)? 1: 0; + return e; +} + +/* +// We can select either back=to-front or front-to-back raycasting and blending. +// front-to-back may be slightly more expensive, but if the smoke is dense it allows +// early-out when the opacity gets saturated (close to 1.0), making it a bit cheaper +// +// Define BACK_TO_FRONT to use back-to-front raycasting +//#define BACK_TO_FRONT 1 +void DoSample(float weight, float3 O, inout float4 color ) +{ + // This value can be tuned to produce denser or thinner looking smoke + // Alternatively a transfer function could be used + #define OPACITY_MODULATOR 0.1 + + float3 texcoords; + float4 sample; + float t; + + texcoords = float3( O.x, 1 - O.y, O.z) ; +// sample = weight * colorTex.SampleLevel(samLinearClamp, texcoords, 0); +// sample = weight * abs(SampleTricubic(colorTex, texcoords)); +// sample = weight * abs(SampleTrilinear(colorTex, texcoords)); + sample = weight * abs(Sample(colorTex, texcoords)); + sample.a = (sample.r) * OPACITY_MODULATOR; + +#ifdef BACK_TO_FRONT // back-to-front blending + color.rgb = (1 - sample.a) * color.r + sample.a * sample.r; + color.a = (1 - sample.a) * color.a + sample.a; +#else // front-to-back blending + t = sample.a * (1.0-color.a); + color.rgb += t * sample.r; + color.a += t; +#endif + +} + +float4 Raycast( PS_INPUT_RAYCAST input ) +{ + float4 color = 0; + float4 rayData = rayDataTex.Sample(samLinearClamp, float2(input.pos.x/RTWidth,input.pos.y/RTHeight)); + + // Don't raycast if the starting position is negative + // (see use of OCCLUDED_PIXEL_RAYVALUE in PS_RAYDATA_FRONT) + if(rayData.x < 0) + return color; + + // If the front face of the box was clipped here by the near plane of the camera + // (see use of NEARCLIPPED_PIXEL_RAYPOS in PS_RAYDATA_BACK) + if(rayData.y < 0) + { + // Initialize the position of the fragment and adjust the depth + rayData.xyz = input.posInGrid; + rayData.w = rayData.w - ZNear; +// return float4 (1,0,0,saturate(rayData.w/5)); + } + + float3 rayOrigin = rayData.xyz; + float Offset = jitterTex.Sample( samRepeat, input.pos.xy / 256.0 ).r; + float rayLength = rayData.w; + + // Sample twice per voxel + float fSamples = ( rayLength / gridScaleFactor * maxGridDim ) * 2.0; + int nSamples = floor(fSamples); + float3 stepVec = normalize( (rayOrigin - eyeOnGrid) * gridDim ) * recGridDim * 0.5; + + float3 O = rayOrigin + stepVec*Offset; + +#ifdef BACK_TO_FRONT + // In back-to-front blending we start raycasting from the surface point and step towards the eye + O += fSamples * stepVec; + stepVec = -stepVec; +#endif + + for( int i=0; i 0.99 ) + break; +#endif + } + + // The last sample is weighted by the fractional part of the ray length in voxel + // space (fSamples), thus avoiding banding artifacts when the smoke is blended against the scene + if( i == nSamples ) + { + DoSample(frac(fSamples), O, color); + } + + return color; +} +*/ + +//#define RENDER_FIRE +void DoSample(float weight, float3 O, inout float4 color ) +{ + // This value can be tuned to produce denser or thinner looking smoke + // Alternatively a transfer function could be used + #define OPACITY_MODULATOR 0.1 + + float3 texcoords; + texcoords = float3( O.x, 1 - O.y, O.z) ; + +#ifndef RENDER_FIRE + //render smoke with front to back blending + float t; + float4 sample = weight * abs(Sample(colorTex, texcoords)); + sample.a = (sample.r) * 0.1; + t = sample.a * (1.0-color.a); + color.rgb += t * sample.r; + color.a += t; +#else // RENDER_FIRE + //render fire and smoke with back to front blending + + //dont render the area below where the fire originates +// if(O.z < OBSTACLE_MAX_HEIGHT/gridDim.z) +// return; + + //this is the threshold at which we decide whether to render fire or smoke + float threshold = 1.4; + float maxValue = 3; + + float s = colorTex.SampleLevel(samLinearClamp, texcoords, 0).x; + s = clamp(s,0,maxValue); + + if(s>threshold) + { + //render fire + float lookUpVal = ( (s-threshold)/(maxValue-threshold) ); + lookUpVal = 1.0 - pow(lookUpVal,RednessFactor); + lookUpVal = clamp(lookUpVal,0,1); + float3 interpColor = fireTransferFunction.SampleLevel(samLinearClamp,float2(lookUpVal,0),0); + float mult = (s-threshold); + color += float4(weight*interpColor.rgb,weight*mult*mult*fireAlphaMultiplier); + } + else + { + //render smoke + float4 sample = weight*s; + sample.a = sample.r*0.1*smokeAlphaMultiplier; + float3 smokeColor = float3(0.9,0.35,0.055); + color.rgb = (1 - sample.a) * color.rgb + sample.a * sample.rrr * smokeColor * smokeColorMultiplier * 5.0; + color.a = (1 - sample.a) * color.a + sample.a; + } +#endif // RENDER_FIRE +} + +float4 Raycast( PS_INPUT_RAYCAST input ) +{ + float4 color = 0; + float4 rayData = rayDataTex.Sample(samLinearClamp, float2(input.pos.x/RTWidth,input.pos.y/RTHeight)); + + // Don't raycast if the starting position is negative + // (see use of OCCLUDED_PIXEL_RAYVALUE in PS_RAYDATA_FRONT) + if(rayData.x < 0) + return color; + + // If the front face of the box was clipped here by the near plane of the camera + // (see use of NEARCLIPPED_PIXEL_RAYPOS in PS_RAYDATA_BACK) + if(rayData.y < 0) + { + // Initialize the position of the fragment and adjust the depth + rayData.xyz = input.posInGrid; + rayData.w = rayData.w - ZNear; +// return float4 (1,0,0,saturate(rayData.w/5)); + } + + float3 rayOrigin = rayData.xyz; + float Offset = jitterTex.Sample( samRepeat, input.pos.xy / 256.0 ).r; + float rayLength = rayData.w; + + // Sample twice per voxel + float fSamples = ( rayLength / gridScaleFactor * maxGridDim ) * 2.0; + int nSamples = floor(fSamples); + float3 stepVec = normalize( (rayOrigin - eyeOnGrid) * gridDim ) * recGridDim * 0.5; + + float3 O = rayOrigin + stepVec*Offset; + +#ifdef RENDER_FIRE + // In back-to-front blending we start raycasting from the surface point and step towards the eye + O += fSamples * stepVec; + stepVec = -stepVec; +#endif // RENDER_FIRE + + for( int i=0; i 0.99 ) + break; +#endif // RENDER_FIRE + } + + // The last sample is weighted by the fractional part of the ray length in voxel + // space (fSamples), thus avoiding banding artifacts when the smoke is blended against the scene + if( i == nSamples ) + { + DoSample(frac(fSamples), O, color); + } + + return color; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_common_tricubic.h b/res/gamedata/shaders/r5/fluid_common_tricubic.h new file mode 100644 index 00000000000..526e4606081 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_common_tricubic.h @@ -0,0 +1,235 @@ +///////////////////////////////// +// BEGIN Custom Sampling Functions +Texture1D HHGGTex; + +// cubic b-spline +float bsW0(float a) +{ + return (1.0/6.0 * ( -(a*a*a) + (3.0 * a*a) - (3.0 * a) + 1.0)); +} + +float bsW1(float a) +{ + return (1.0/6.0 * ( (3.0 * a*a*a) - (6.0 * a*a) + 4.0 )); +} + +float bsW2(float a) +{ + return (1.0/6.0 * ( -(3.0 * a*a*a) + (3.0 * a*a) + (3.0*a) + 1.0)); +} + +float bsW3(float a) +{ + return (1.0/6.0 * a*a*a); +} + +float g0(float a) +{ + return (bsW0(a) + bsW1(a)); +} + +float g1(float a) +{ + return (bsW2(a) + bsW3(a)); +} + +float h0texels(float a) +{ + return (1.0 + a - (bsW1(a)/(bsW0(a)+bsW1(a)))); +} + +float h1texels(float a) +{ + return (1.0 - a + (bsW3(a)/(bsW2(a)+bsW3(a)))); +} +/// end cubic-bspline + +// first derivative of cubic b-spline +float bsfdW0(float a) +{ + return (1.0/6.0 * ( -(3.0 * a*a) + (6.0 * a) - 3.0)); +} + +float bsfdW1(float a) +{ + return (1.0/6.0 * ( (9.0 * a*a) - (12.0 * a) )); +} + +float bsfdW2(float a) +{ + return (1.0/6.0 * ( -(9.0 * a*a) + (6.0 * a) + 3.0)); +} + +float bsfdW3(float a) +{ + return (1.0/6.0 * 3.0 * a*a); +} + +float gfd0(float a) +{ + return (bsfdW0(a) + bsfdW1(a)); +} + +float gfd1(float a) +{ + return (bsfdW2(a) + bsfdW3(a)); +} + +float hfd0texels(float a) +{ + return (1.0 + a - (bsfdW1(a)/(bsfdW0(a)+bsfdW1(a)))); +} + +float hfd1texels(float a) +{ + return (1.0 - a + (bsfdW3(a)/(bsfdW2(a)+bsfdW3(a)))); +} +/// end first derivative of cubic b-spline + +float4 getHHGG( float xTexels) +{ +// float a = frac(xTexels); +// return float4( -h0texels(a), h1texels(a), 1.0-g0(a), g0(a) ); + + return HHGGTex.SampleLevel( samRepeat, xTexels, 0 ); +} + +float4 getfdHHGG( float xTexels) +{ + float a = frac(xTexels); + return float4( -hfd0texels(a), hfd1texels(a), gfd1(a), -gfd1(a) ); +} + + +float4 SampleTricubicGeneric(Texture3D tex, float3 tc, float4 hg_x, float4 hg_y, float4 hg_z) +{ + float3 tc100, tc000, tc110, tc010, + tc101, tc001, tc111, tc011; + + tc100 = tc; + tc000 = tc; + tc100.x += (hg_x.x * recGridDim.x); + tc000.x += (hg_x.y * recGridDim.x); + + tc110 = tc100; + tc010 = tc000; + tc110.y += (hg_y.x * recGridDim.y); + tc010.y += (hg_y.x * recGridDim.y); + tc100.y += (hg_y.y * recGridDim.y); + tc000.y += (hg_y.y * recGridDim.y); + + tc111 = tc110; + tc011 = tc010; + tc101 = tc100; + tc001 = tc000; + tc111.z += (hg_z.x * recGridDim.z); + tc011.z += (hg_z.x * recGridDim.z); + tc101.z += (hg_z.x * recGridDim.z); + tc001.z += (hg_z.x * recGridDim.z); + + float4 v001 = tex.SampleLevel(samLinearClamp, tc001, 0); + float4 v011 = tex.SampleLevel(samLinearClamp, tc011, 0); + float4 v101 = tex.SampleLevel(samLinearClamp, tc101, 0); + float4 v111 = tex.SampleLevel(samLinearClamp, tc111, 0); + + float4 v0Y1 = (v001 * hg_y.z) + (v011 * hg_y.w); + float4 v1Y1 = (v101 * hg_y.z) + (v111 * hg_y.w); + + float4 vXY1 = (v0Y1 * hg_x.z) + (v1Y1 * hg_x.w); + + tc110.z += (hg_z.y * recGridDim.z); + tc010.z += (hg_z.y * recGridDim.z); + tc100.z += (hg_z.y * recGridDim.z); + tc000.z += (hg_z.y * recGridDim.z); + + + float4 v000 = tex.SampleLevel(samLinearClamp, tc000, 0); + float4 v010 = tex.SampleLevel(samLinearClamp, tc010, 0); + float4 v100 = tex.SampleLevel(samLinearClamp, tc100, 0); + float4 v110 = tex.SampleLevel(samLinearClamp, tc110, 0); + + float4 v0Y0 = (v000 * hg_y.z) + (v010 * hg_y.w); + float4 v1Y0 = (v100 * hg_y.z) + (v110 * hg_y.w); + + float4 vXY0 = (v0Y0 * hg_x.z) + (v1Y0 * hg_x.w); + + + float4 vXYZ = (vXY0 * hg_z.z) + (vXY1 * hg_z.w); + + return vXYZ; +} + + +float4 SampleTricubic(Texture3D tex, float3 tc) +{ + float3 tcTexels = (tc * gridDim) - 0.49; + + float4 hg_x = getHHGG(tcTexels.x); + float4 hg_y = getHHGG(tcTexels.y); + float4 hg_z = getHHGG(tcTexels.z); + + return SampleTricubicGeneric(tex, tc, hg_x, hg_y, hg_z); +} + +float4 SampleGradientTricubic(Texture3D tex, float3 tc) +{ + float3 tcTexels = (tc * gridDim) - 0.49; + + float4 hg_x = getHHGG(tcTexels.x); + float4 hg_y = getHHGG(tcTexels.y); + float4 hg_z = getHHGG(tcTexels.z); + float4 hgfd_x = getfdHHGG(tcTexels.x); + float4 hgfd_y = getfdHHGG(tcTexels.y); + float4 hgfd_z = getfdHHGG(tcTexels.z); + + return float4( SampleTricubicGeneric(tex, tc, hgfd_x, hg_y, hg_z).r, + SampleTricubicGeneric(tex, tc, hg_x, hgfd_y, hg_z).r, + SampleTricubicGeneric(tex, tc, hg_x, hg_y, hgfd_z).r, 1.0 ); +} + + +float4 SampleTrilinear(Texture3D tex, float3 tc) +{ + return tex.SampleLevel(samLinearClamp, tc, 0); +} + +float4 SampleGradientTrilinear(Texture3D tex, float3 tc) +{ + #define LEFTCELL float3 (tc.x-(1.0/gridDim.x), tc.y, tc.z) + #define RIGHTCELL float3 (tc.x+(1.0/gridDim.x), tc.y, tc.z) + #define BOTTOMCELL float3 (tc.x, (tc.y-(1.0/gridDim.y)), tc.z) + #define TOPCELL float3 (tc.x, (tc.y+(1.0/gridDim.y)), tc.z) + #define DOWNCELL float3 (tc.x, tc.y, tc.z - (1.0/gridDim.z)) + #define UPCELL float3 (tc.x, tc.y, tc.z + (1.0/gridDim.z)) + + float4 texL = tex.SampleLevel( samLinearClamp, LEFTCELL, 0 ); + float4 texR = tex.SampleLevel( samLinearClamp, RIGHTCELL, 0 ); + float4 texB = tex.SampleLevel( samLinearClamp, BOTTOMCELL, 0 ); + float4 texT = tex.SampleLevel( samLinearClamp, TOPCELL, 0 ); + float4 texU = tex.SampleLevel( samLinearClamp, UPCELL, 0 ); + float4 texD = tex.SampleLevel( samLinearClamp, DOWNCELL, 0 ); + return float4( texR.r - texL.r, texT.r - texB.r, texU.r - texD.r, 1 ); +} + + +float4 Sample(Texture3D tex, float3 tc) +{ + if( g_bRaycastFilterTricubic ) + { + return SampleTricubic(tex, tc); + } + else + { + return SampleTrilinear(tex, tc); + } +} + +float4 SampleGradient(Texture3D tex, float3 tc) +{ + if( g_bRaycastFilterTricubic ) + return SampleGradientTricubic(tex, tc); + else + return SampleGradientTrilinear(tex, tc); +} +// END Custom Sampling Functions +///////////////////////////////// \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_confinement.ps b/res/gamedata/shaders/r5/fluid_confinement.ps new file mode 100644 index 00000000000..8f8e6964843 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_confinement.ps differ diff --git a/res/gamedata/shaders/r5/fluid_divergence.ps b/res/gamedata/shaders/r5/fluid_divergence.ps new file mode 100644 index 00000000000..2c018c88a4b Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_divergence.ps differ diff --git a/res/gamedata/shaders/r5/fluid_draw_texture.ps b/res/gamedata/shaders/r5/fluid_draw_texture.ps new file mode 100644 index 00000000000..4663f3f44f8 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_draw_texture.ps differ diff --git a/res/gamedata/shaders/r5/fluid_edge_detect.ps b/res/gamedata/shaders/r5/fluid_edge_detect.ps new file mode 100644 index 00000000000..588bc232250 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_edge_detect.ps differ diff --git a/res/gamedata/shaders/r5/fluid_edge_detect.vs b/res/gamedata/shaders/r5/fluid_edge_detect.vs new file mode 100644 index 00000000000..03983c5b3a9 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_edge_detect.vs @@ -0,0 +1,27 @@ +#include "fluid_common_render.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +// A full-screen edge detection pass to locate artifacts +VS_OUTPUT_EDGE main( VS_INPUT input ) +{ + VS_OUTPUT_EDGE output = (VS_OUTPUT_EDGE)0; + output.position = float4(input.pos,1); + + float2 texelSize = 1.0 / float2(RTWidth,RTHeight); + float2 center = float2( (input.pos.x+1)/2.0 , 1.0 - (input.pos.y+1)/2.0 ); + + // Eight nearest neighbours needed for Sobel. + output.textureUV00 = center + float2(-texelSize.x, -texelSize.y); + output.textureUV01 = center + float2(-texelSize.x, 0); + output.textureUV02 = center + float2(-texelSize.x, texelSize.y); + + output.textureUV10 = center + float2(0, -texelSize.y); + output.textureUV12 = center + float2(0, texelSize.y); + + output.textureUV20 = center + float2(texelSize.x, -texelSize.y); + output.textureUV21 = center + float2(texelSize.x, 0); + output.textureUV22 = center + float2(texelSize.x, texelSize.y); + + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_gaussian.ps b/res/gamedata/shaders/r5/fluid_gaussian.ps new file mode 100644 index 00000000000..c5ef6656b9e Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_gaussian.ps differ diff --git a/res/gamedata/shaders/r5/fluid_grid.vs b/res/gamedata/shaders/r5/fluid_grid.vs new file mode 100644 index 00000000000..3d4696dd043 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_grid.vs @@ -0,0 +1,29 @@ +#include "fluid_common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2g_fluidsim main( v_fluidsim input) +{ + v2g_fluidsim output = (v2g_fluidsim)0; + + output.pos = float4(input.position.x, input.position.y, input.position.z, 1.0); + output.cell0 = float3(input.textureCoords0.x, input.textureCoords0.y, input.textureCoords0.z); + output.texcoords = float3( (input.textureCoords0.x)/(textureWidth), + (input.textureCoords0.y)/(textureHeight), + (input.textureCoords0.z+0.5)/(textureDepth)); + + float x = output.texcoords.x; + float y = output.texcoords.y; + float z = output.texcoords.z; + + // compute single texel offsets in each dimension + float invW = 1.0/textureWidth; + float invH = 1.0/textureHeight; + float invD = 1.0/textureDepth; + + output.LR = float2(x - invW, x + invW); + output.BT = float2(y - invH, y + invH); + output.DU = float2(z - invD, z + invD); + + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_grid_dyn_oobb.vs b/res/gamedata/shaders/r5/fluid_grid_dyn_oobb.vs new file mode 100644 index 00000000000..48ba231a23c --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_grid_dyn_oobb.vs @@ -0,0 +1,46 @@ +#include "fluid_common.h" + +cbuffer DynOOBBData +{ + float3x4 WorldToLocal; // World to local of fog volume + float3x4 LocalToWorld; // Local of fog volume to world + float4 MassCenter; // Center for angular velocity + float4 OOBBWorldAngularVelocity; + float4 OOBBWorldTranslationVelocity; +} + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2g_fluidsim_dyn_aabb main( v_fluidsim input) +{ + v2g_fluidsim_dyn_aabb output = (v2g_fluidsim_dyn_aabb)0; + + output.pos = float4(input.position.x, input.position.y, input.position.z, 1.0); + output.cell0 = float3(input.textureCoords0.x, input.textureCoords0.y, input.textureCoords0.z); + + output.velocity = 0; + + { + output.velocity = OOBBWorldTranslationVelocity; + + float3 r = mul( LocalToWorld, float4(output.cell0,1) ) - MassCenter; + + float3 AngularVel = cross( OOBBWorldAngularVelocity.xyz, r ); + + output.velocity += AngularVel; + + output.velocity = mul( WorldToLocal, output.velocity ); + } + + for (int i=0; i<3; ++i) + { + output.clip0[i] = dot( float4(output.cell0,1), OOBBClipPlane[i]); + output.clip1[i] = dot( float4(output.cell0,1), OOBBClipPlane[i+3]); + // Make box a voxel bigger in each direction + // BOX_EXPANSION - voxel diagonal length + //output.clip0[i] += BOX_EXPANSION; + //output.clip1[i] += BOX_EXPANSION; + } + + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_grid_oobb.vs b/res/gamedata/shaders/r5/fluid_grid_oobb.vs new file mode 100644 index 00000000000..31513218a08 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_grid_oobb.vs @@ -0,0 +1,41 @@ +#include "fluid_common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2g_fluidsim_clip main( v_fluidsim input) +{ + v2g_fluidsim_clip output = (v2g_fluidsim_clip)0; + + output.pos = float4(input.position.x, input.position.y, input.position.z, 1.0); + output.cell0 = float3(input.textureCoords0.x, input.textureCoords0.y, input.textureCoords0.z); + output.texcoords = float3( (input.textureCoords0.x)/(textureWidth), + (input.textureCoords0.y)/(textureHeight), + (input.textureCoords0.z+0.5)/(textureDepth)); + + float x = output.texcoords.x; + float y = output.texcoords.y; + float z = output.texcoords.z; + + // compute single texel offsets in each dimension + float invW = 1.0/textureWidth; + float invH = 1.0/textureHeight; + float invD = 1.0/textureDepth; + + output.LR = float2(x - invW, x + invW); + output.BT = float2(y - invH, y + invH); + output.DU = float2(z - invD, z + invD); + +// float3 clip0 : SV_ClipDistance0; +// float3 clip1 : SV_ClipDistance1; + for (int i=0; i<3; ++i) + { + output.clip0[i] = dot( float4(output.cell0,1), OOBBClipPlane[i]); + output.clip1[i] = dot( float4(output.cell0,1), OOBBClipPlane[i+3]); + // Make box a voxel bigger in each direction + // BOX_EXPANSION - voxel diagonal length + //output.clip0[i] += BOX_EXPANSION; + //output.clip1[i] += BOX_EXPANSION; + } + + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_jacobi.ps b/res/gamedata/shaders/r5/fluid_jacobi.ps new file mode 100644 index 00000000000..228ed3ba31a Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_jacobi.ps differ diff --git a/res/gamedata/shaders/r5/fluid_obst_dynamic_oobb.ps b/res/gamedata/shaders/r5/fluid_obst_dynamic_oobb.ps new file mode 100644 index 00000000000..14ba6acb952 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_obst_dynamic_oobb.ps differ diff --git a/res/gamedata/shaders/r5/fluid_obst_static_oobb.ps b/res/gamedata/shaders/r5/fluid_obst_static_oobb.ps new file mode 100644 index 00000000000..1e07061ae28 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_obst_static_oobb.ps differ diff --git a/res/gamedata/shaders/r5/fluid_obststaticbox.ps b/res/gamedata/shaders/r5/fluid_obststaticbox.ps new file mode 100644 index 00000000000..39d60da718a Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_obststaticbox.ps differ diff --git a/res/gamedata/shaders/r5/fluid_project.ps b/res/gamedata/shaders/r5/fluid_project.ps new file mode 100644 index 00000000000..b4109d69bf5 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_project.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raycast_quad.ps b/res/gamedata/shaders/r5/fluid_raycast_quad.ps new file mode 100644 index 00000000000..f78fab0b42f Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raycast_quad.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raycast_quad.vs b/res/gamedata/shaders/r5/fluid_raycast_quad.vs new file mode 100644 index 00000000000..b043fdee0d1 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_raycast_quad.vs @@ -0,0 +1,13 @@ +#include "fluid_common_render.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +// TODO: DX10: replace WorldViewProjection with m_WVP +PS_INPUT_RAYCAST main (VS_INPUT input) +{ + PS_INPUT_RAYCAST output = (PS_INPUT_RAYCAST)0; + output.pos = float4(input.pos,1); +// output.posInGrid = mul( float4( input.pos.xy*ZNear, 0, ZNear ), InvWorldViewProjection ); + output.posInGrid = mul( InvWorldViewProjection, float4( input.pos.xy*ZNear, 0, ZNear )); + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_raycast_quad_fire.ps b/res/gamedata/shaders/r5/fluid_raycast_quad_fire.ps new file mode 100644 index 00000000000..079b20dddb8 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raycast_quad_fire.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raycastcopy_quad.ps b/res/gamedata/shaders/r5/fluid_raycastcopy_quad.ps new file mode 100644 index 00000000000..7e1b0c20fb5 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raycastcopy_quad.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raycastcopy_quad_fire.ps b/res/gamedata/shaders/r5/fluid_raycastcopy_quad_fire.ps new file mode 100644 index 00000000000..192ca7d4607 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raycastcopy_quad_fire.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raydata_back.ps b/res/gamedata/shaders/r5/fluid_raydata_back.ps new file mode 100644 index 00000000000..49cd592f0a6 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raydata_back.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raydata_back.vs b/res/gamedata/shaders/r5/fluid_raydata_back.vs new file mode 100644 index 00000000000..7262fb88c94 --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_raydata_back.vs @@ -0,0 +1,13 @@ +#include "fluid_common_render.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +// TODO: DX10: replace WorldViewProjection with m_WVP +PS_INPUT_RAYDATA_BACK main(VS_INPUT input) +{ + PS_INPUT_RAYDATA_BACK output = (PS_INPUT_RAYDATA_BACK)0; + //output.pos = mul(float4(input.pos,1), WorldViewProjection); + output.pos = mul(WorldViewProjection, float4(input.pos,1)); + output.depth = output.pos.w; + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_raydata_front.ps b/res/gamedata/shaders/r5/fluid_raydata_front.ps new file mode 100644 index 00000000000..b2620a32817 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raydata_front.ps differ diff --git a/res/gamedata/shaders/r5/fluid_raydata_front.vs b/res/gamedata/shaders/r5/fluid_raydata_front.vs new file mode 100644 index 00000000000..e26cc1b70dd --- /dev/null +++ b/res/gamedata/shaders/r5/fluid_raydata_front.vs @@ -0,0 +1,14 @@ +#include "fluid_common_render.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +// TODO: DX10: replace WorldViewProjection with m_WVP +PS_INPUT_RAYDATA_FRONT main(VS_INPUT input) +{ + PS_INPUT_RAYDATA_FRONT output = (PS_INPUT_RAYDATA_FRONT)0; +// output.pos = mul(float4(input.pos,1), WorldViewProjection); + output.pos = mul(WorldViewProjection, float4(input.pos,1)); + output.posInGrid = input.pos; + output.depth = output.pos.w; + return output; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/fluid_raydatacopy_quad.ps b/res/gamedata/shaders/r5/fluid_raydatacopy_quad.ps new file mode 100644 index 00000000000..49fb02c4d6a Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_raydatacopy_quad.ps differ diff --git a/res/gamedata/shaders/r5/fluid_vorticity.ps b/res/gamedata/shaders/r5/fluid_vorticity.ps new file mode 100644 index 00000000000..9d53e4ab8f5 Binary files /dev/null and b/res/gamedata/shaders/r5/fluid_vorticity.ps differ diff --git a/res/gamedata/shaders/r5/font2.ps b/res/gamedata/shaders/r5/font2.ps new file mode 100644 index 00000000000..588720e62ea Binary files /dev/null and b/res/gamedata/shaders/r5/font2.ps differ diff --git a/res/gamedata/shaders/r5/friendly_indicator.s b/res/gamedata/shaders/r5/friendly_indicator.s new file mode 100644 index 00000000000..aef9c116f8a --- /dev/null +++ b/res/gamedata/shaders/r5/friendly_indicator.s @@ -0,0 +1,12 @@ +function normal (shader, t_base, t_second, t_detail) + shader :begin ("stub_default","stub_default") + + :blend (true,blend.srcalpha,blend.invsrcalpha) + :zb (true,false) + +-- Decouple sampler and texture +-- shader:sampler ("s_base") : texture(t_base) : clamp() : f_linear () +-- TODO: DX10: move stub_default to smp_rtlinear + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r3/gasmask_common.h b/res/gamedata/shaders/r5/gasmask_common.h similarity index 100% rename from res/gamedata/shaders/r3/gasmask_common.h rename to res/gamedata/shaders/r5/gasmask_common.h diff --git a/res/gamedata/shaders/r3/gasmask_drops.ps b/res/gamedata/shaders/r5/gasmask_drops.ps similarity index 100% rename from res/gamedata/shaders/r3/gasmask_drops.ps rename to res/gamedata/shaders/r5/gasmask_drops.ps diff --git a/res/gamedata/shaders/r3/gasmask_dudv.ps b/res/gamedata/shaders/r5/gasmask_dudv.ps similarity index 100% rename from res/gamedata/shaders/r3/gasmask_dudv.ps rename to res/gamedata/shaders/r5/gasmask_dudv.ps diff --git a/res/gamedata/shaders/r5/gather.ps b/res/gamedata/shaders/r5/gather.ps new file mode 100644 index 00000000000..2df705d3cc4 Binary files /dev/null and b/res/gamedata/shaders/r5/gather.ps differ diff --git a/res/gamedata/shaders/r3/gbuffer_stage.h b/res/gamedata/shaders/r5/gbuffer_stage.h similarity index 100% rename from res/gamedata/shaders/r3/gbuffer_stage.h rename to res/gamedata/shaders/r5/gbuffer_stage.h diff --git a/res/gamedata/shaders/r3/hmodel.h b/res/gamedata/shaders/r5/hmodel.h similarity index 100% rename from res/gamedata/shaders/r3/hmodel.h rename to res/gamedata/shaders/r5/hmodel.h diff --git a/res/gamedata/shaders/r5/hud3d.ps b/res/gamedata/shaders/r5/hud3d.ps new file mode 100644 index 00000000000..8c93beea41d Binary files /dev/null and b/res/gamedata/shaders/r5/hud3d.ps differ diff --git a/res/gamedata/shaders/r5/hud3d.vs b/res/gamedata/shaders/r5/hud3d.vs new file mode 100644 index 00000000000..9833475b218 --- /dev/null +++ b/res/gamedata/shaders/r5/hud3d.vs @@ -0,0 +1,27 @@ +#include "common.h" + + +struct ui_vert_in +{ + float4 P : POSITION; + float4 color : COLOR0; + float2 uv : TEXCOORD0; +}; + +struct ui_vert_out +{ + float2 tc0 : TEXCOORD0; + float4 P : SV_Position; +}; + + +ui_vert_out main (ui_vert_in v) +{ + ui_vert_out O; + + O.tc0 = v.uv; + O.P = v.P; + O.P.w = 1; + O.P = mul( m_WVP, O.P ); + return O; +} diff --git a/res/gamedata/shaders/r5/hud_crosshair.s b/res/gamedata/shaders/r5/hud_crosshair.s new file mode 100644 index 00000000000..dbc1762db78 --- /dev/null +++ b/res/gamedata/shaders/r5/hud_crosshair.s @@ -0,0 +1,6 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("hud_crosshair","simple_color") + : fog (false) + : zb (false,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) +end diff --git a/res/gamedata/shaders/r5/hud_crosshair.vs b/res/gamedata/shaders/r5/hud_crosshair.vs new file mode 100644 index 00000000000..2beee30f90b --- /dev/null +++ b/res/gamedata/shaders/r5/hud_crosshair.vs @@ -0,0 +1,24 @@ +#include "common_iostructs.h" +//#include "common.h" + +uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL0uv main ( v_TL0uv_positiont I ) +{ + v2p_TL0uv O; + + { + I.P.xy += 0.5f; +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/hud_font.ps b/res/gamedata/shaders/r5/hud_font.ps new file mode 100644 index 00000000000..e240bbe734f Binary files /dev/null and b/res/gamedata/shaders/r5/hud_font.ps differ diff --git a/res/gamedata/shaders/r5/hud_font.s b/res/gamedata/shaders/r5/hud_font.s new file mode 100644 index 00000000000..30258b5587f --- /dev/null +++ b/res/gamedata/shaders/r5/hud_font.s @@ -0,0 +1,9 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_t","hud_font") + : fog (false) + : zb (false,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) +-- shader:sampler ("s_base") :texture (t_base) + shader:dx10texture("s_base", t_base) + shader:dx10sampler("smp_base") +end diff --git a/res/gamedata/shaders/r5/hud_font2.s b/res/gamedata/shaders/r5/hud_font2.s new file mode 100644 index 00000000000..39073db68b5 --- /dev/null +++ b/res/gamedata/shaders/r5/hud_font2.s @@ -0,0 +1,9 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_t","font2") + : fog (false) + : zb (false,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) +-- shader:sampler ("s_base") :texture (t_base) + shader:dx10texture("s_base", t_base) + shader:dx10sampler("smp_base") +end diff --git a/res/gamedata/shaders/r5/hud_movie.s b/res/gamedata/shaders/r5/hud_movie.s new file mode 100644 index 00000000000..6d3fe6d3bd8 --- /dev/null +++ b/res/gamedata/shaders/r5/hud_movie.s @@ -0,0 +1,11 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_t","yuv2rgb") + : fog (false) + : zb (false,false) +-- TODO: DX10: Setup samplers + : blend (true,blend.srcalpha,blend.invsrcalpha) +-- shader:sampler ("s_base") :texture (t_base) + + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end diff --git a/res/gamedata/shaders/r5/hud_p3d.s b/res/gamedata/shaders/r5/hud_p3d.s new file mode 100644 index 00000000000..33e8d03e6a5 --- /dev/null +++ b/res/gamedata/shaders/r5/hud_p3d.s @@ -0,0 +1,9 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("hud3d","hud3d") + : fog (false) + : zb (true,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : dx10color_write_enable( true, true, true, false) + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end diff --git a/res/gamedata/shaders/r3/img_corrections.h b/res/gamedata/shaders/r5/img_corrections.h similarity index 100% rename from res/gamedata/shaders/r3/img_corrections.h rename to res/gamedata/shaders/r5/img_corrections.h diff --git a/res/gamedata/shaders/r5/lmape.ps b/res/gamedata/shaders/r5/lmape.ps new file mode 100644 index 00000000000..676b36d24f9 Binary files /dev/null and b/res/gamedata/shaders/r5/lmape.ps differ diff --git a/res/gamedata/shaders/r5/lmape.vs b/res/gamedata/shaders/r5/lmape.vs new file mode 100644 index 00000000000..a7a06657c7c --- /dev/null +++ b/res/gamedata/shaders/r5/lmape.vs @@ -0,0 +1,41 @@ +// TODO: DX10: Check r2 path. If we always get hemi here +#define USE_LM_HEMI +#include "common.h" + +struct v_lmap +{ + float4 pos : POSITION; // (float,float,float,1) + float4 norm : NORMAL; // (nx,ny,nz,hemi occlusion) + float2 tc0 : TEXCOORD0; // (base) + float2 tc1 : TEXCOORD1; // (lmap/compressed) +}; +struct vf +{ + float2 tc0 : TEXCOORD0; + float2 tc1 : TEXCOORD1; + float2 tch : TEXCOORD2; + float3 tc2 : TEXCOORD3; + float3 c0 : COLOR0; // c0=hemi+v-lights, c0.a = dt* + float3 c1 : COLOR1; // c1=sun, c1.a = dt+ + float fog : FOG; + float4 hpos : SV_Position; +}; + +vf main(v_static v) +{ + vf o; + + float3 pos_w = v.P; + float3 norm_w = normalize(unpack_normal(v.Nh)); + + o.hpos = mul (m_VP, v.P); // xform, input in world coords + o.tc0 = unpack_tc_base (v.tc,v.T.w,v.B.w); // copy tc + o.tc1 = unpack_tc_lmap (v.lmh); // copy tc + o.tch = o.tc1; + o.tc2 = calc_reflection (pos_w, norm_w); + o.c0 = v_hemi(norm_w); // just hemisphere + o.c1 = v_sun (norm_w); // sun + o.fog.x = saturate(calc_fogging (v.P)); // fog, input in world coords + + return o; +} diff --git a/res/gamedata/shaders/r3/lmodel.h b/res/gamedata/shaders/r5/lmodel.h similarity index 100% rename from res/gamedata/shaders/r3/lmodel.h rename to res/gamedata/shaders/r5/lmodel.h diff --git a/res/gamedata/shaders/r5/lod.ps b/res/gamedata/shaders/r5/lod.ps new file mode 100644 index 00000000000..643bc0777d3 Binary files /dev/null and b/res/gamedata/shaders/r5/lod.ps differ diff --git a/res/gamedata/shaders/r5/lod.vs b/res/gamedata/shaders/r5/lod.vs new file mode 100644 index 00000000000..e2bd3dd7572 --- /dev/null +++ b/res/gamedata/shaders/r5/lod.vs @@ -0,0 +1,50 @@ +#include "common.h" + +struct vv +{ + float3 pos0 : POSITION0 ; + float3 pos1 : POSITION1 ; + float3 n0 : NORMAL0 ; + float3 n1 : NORMAL1 ; + float2 tc0 : TEXCOORD0 ; + float2 tc1 : TEXCOORD1 ; + float4 rgbh0 : TEXCOORD2; // rgb.h + float4 rgbh1 : TEXCOORD3; // rgb.h + float4 sun_af : COLOR0; // x=sun_0, y=sun_1, z=alpha, w=factor +}; +struct vf +{ + float3 Pe : TEXCOORD0 ; + float2 tc0 : TEXCOORD1 ; // base0 + float2 tc1 : TEXCOORD2 ; // base1 + float4 af : COLOR1 ; // alpha&factor + float4 hpos: SV_Position; +}; + +#define L_SCALE (2.0h*1.55h) +vf main ( vv I ) +{ + vf o; + + I.sun_af.xyz = I.sun_af.zyx; + I.rgbh0.xyz = I.rgbh0.zyx; + I.rgbh1.xyz = I.rgbh1.zyx; + + // lerp pos + float factor = I.sun_af.w ; + float4 pos = float4 (lerp(I.pos0,I.pos1,factor),1); + + float h = lerp (I.rgbh0.w,I.rgbh1.w,factor) *L_SCALE; + + o.hpos = mul (m_VP, pos); // xform, input in world coords + o.Pe = mul (m_V, pos); + + // replicate TCs + o.tc0 = I.tc0; + o.tc1 = I.tc1; + + // calc normal & lighting + o.af = float4 (h,h,I.sun_af.z,factor); + return o ; +} +FXVS; diff --git a/res/gamedata/shaders/r5/mark_msaa_edges.ps b/res/gamedata/shaders/r5/mark_msaa_edges.ps new file mode 100644 index 00000000000..325e9baf005 Binary files /dev/null and b/res/gamedata/shaders/r5/mark_msaa_edges.ps differ diff --git a/res/gamedata/shaders/r5/mblur.h b/res/gamedata/shaders/r5/mblur.h new file mode 100644 index 00000000000..9941f5224f1 --- /dev/null +++ b/res/gamedata/shaders/r5/mblur.h @@ -0,0 +1,48 @@ +#ifndef MBLUR_H +#define MBLUR_H + +#ifndef USE_MBLUR +float3 mblur (float2 UV, float3 pos, float3 c_original) { return c_original; } +#else +#include "common.h" + +float3 mblur (float2 UV, float3 pos, float3 c_original) { return c_original; } +// TODO: DX10: Reimplement +// Currently disabled. +/* +uniform float4x4 m_current; +uniform float4x4 m_previous; +uniform float2 m_blur; // scale_x / 12, scale_y / 12 + +#define MBLUR_SAMPLES float(12) +#define MBLUR_CLAMP float(0.001) + +float3 mblur (float2 UV, float3 pos, float3 c_original) +{ + float4 pos4 = float4 (pos,1.h); + + float4 p_current = mul (m_current, pos4); + float4 p_previous = mul (m_previous, pos4); + float2 p_velocity = m_blur * ( (p_current.xy/p_current.w)-(p_previous.xy/p_previous.w) ); + p_velocity = clamp (p_velocity,-MBLUR_CLAMP,+MBLUR_CLAMP); + + // For each sample, sum up each sample's color in "Blurred" and then divide + // to average the color after all the samples are added. + float3 blurred = c_original ; + blurred += tex2D(s_image, p_velocity * 1.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 2.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 3.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 4.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 5.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 6.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 7.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 8.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 9.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 10.h + UV).rgb; + blurred += tex2D(s_image, p_velocity * 11.h + UV).rgb; + return blurred/MBLUR_SAMPLES; +} +*/ +#endif + +#endif diff --git a/res/gamedata/shaders/r3/mip_fog.h b/res/gamedata/shaders/r5/mip_fog.h similarity index 100% rename from res/gamedata/shaders/r3/mip_fog.h rename to res/gamedata/shaders/r5/mip_fog.h diff --git a/res/gamedata/shaders/r5/model_def_lplanes.vs b/res/gamedata/shaders/r5/model_def_lplanes.vs new file mode 100644 index 00000000000..4473a5dfa23 --- /dev/null +++ b/res/gamedata/shaders/r5/model_def_lplanes.vs @@ -0,0 +1,50 @@ +#include "common.h" +#include "skin.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; // base + float4 c0 : COLOR0; // color + float4 hpos : SV_Position; +}; + +vf _main (v_model v) +{ + vf o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.tc0 = v.tc.xy; // copy tc + + // calculate fade + float3 dir_v = normalize (mul(m_WV,v.P)); + float3 norm_v = normalize (mul(m_WV,v.N)); + float fade = abs (dot(dir_v,norm_v)); + o.c0 = fade; + + return o; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +vf main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +vf main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +vf main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +vf main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +vf main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +vf main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif diff --git a/res/gamedata/shaders/r3/model_def_lq.ps b/res/gamedata/shaders/r5/model_def_lq.ps similarity index 100% rename from res/gamedata/shaders/r3/model_def_lq.ps rename to res/gamedata/shaders/r5/model_def_lq.ps diff --git a/res/gamedata/shaders/r3/model_def_lq.vs b/res/gamedata/shaders/r5/model_def_lq.vs similarity index 100% rename from res/gamedata/shaders/r3/model_def_lq.vs rename to res/gamedata/shaders/r5/model_def_lq.vs diff --git a/res/gamedata/shaders/r5/model_distort.vs b/res/gamedata/shaders/r5/model_distort.vs new file mode 100644 index 00000000000..4ac70b743e2 --- /dev/null +++ b/res/gamedata/shaders/r5/model_distort.vs @@ -0,0 +1,50 @@ +#include "common.h" +#include "skin.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; // base + float4 c0 : COLOR0; // color + float4 hpos : SV_Position; +}; + +vf _main (v_model v) +{ + vf o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.tc0 = v.tc.xy; // copy tc + + // calculate fade + float3 dir_v = normalize (mul(m_WV,v.P)); + float3 norm_v = normalize (mul(m_WV,v.N)); + float fade = 1-abs (dot(dir_v,norm_v)); + o.c0 = fade; + + return o; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +vf main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +vf main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +vf main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +vf main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +vf main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +vf main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r5/model_distort4ghost.vs b/res/gamedata/shaders/r5/model_distort4ghost.vs new file mode 100644 index 00000000000..88dde76291a --- /dev/null +++ b/res/gamedata/shaders/r5/model_distort4ghost.vs @@ -0,0 +1,55 @@ +#include "common.h" +#include "skin.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; // base + float4 c0 : COLOR0; // color +// Igor: for additional depth dest +#ifdef USE_SOFT_PARTICLES + float4 tctexgen : TEXCOORD1; +#endif // USE_SOFT_PARTICLES + float4 hpos: SV_Position; +}; + +vf _main (v_model v) +{ + vf o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.tc0 = v.tc.xy; // copy tc + + // calculate fade + float3 dir_v = normalize (mul(m_WV,v.P)); + float3 norm_v = normalize (mul(m_WV,v.N)); +// float fade = 0.6*(abs (dot(dir_v,norm_v))); + float fade = 1.3*(1 - abs (dot(dir_v,norm_v))); + o.c0 = fade; + + return o; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +vf main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +vf main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +vf main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +vf main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +vf main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +vf main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r5/model_distort4glass.vs b/res/gamedata/shaders/r5/model_distort4glass.vs new file mode 100644 index 00000000000..77400d0a3ea --- /dev/null +++ b/res/gamedata/shaders/r5/model_distort4glass.vs @@ -0,0 +1,54 @@ +#include "common.h" +#include "skin.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; // base + float4 c0 : COLOR0; // color +// Igor: for additional depth dest +#ifdef USE_SOFT_PARTICLES + float4 tctexgen : TEXCOORD1; +#endif // USE_SOFT_PARTICLES + float4 hpos: SV_Position; +}; + +vf _main (v_model v) +{ + vf o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.tc0 = v.tc.xy; // copy tc + + // calculate fade + float3 dir_v = normalize (mul(m_WV,v.P)); + float3 norm_v = normalize (mul(m_WV,v.N)); + float fade = 0.9*abs (dot(dir_v,norm_v)); + o.c0 = fade; + + return o; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +vf main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +vf main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +vf main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +vf main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +vf main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +vf main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r5/model_distort_inv.vs b/res/gamedata/shaders/r5/model_distort_inv.vs new file mode 100644 index 00000000000..5a246a4298a --- /dev/null +++ b/res/gamedata/shaders/r5/model_distort_inv.vs @@ -0,0 +1,50 @@ +#include "common.h" +#include "skin.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; // base + float4 c0 : COLOR0; // color + float4 hpos: SV_Position; +}; + +vf _main (v_model v) +{ + vf o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.tc0 = v.tc.xy; // copy tc + + // calculate fade + float3 dir_v = normalize (mul(m_WV,v.P)); + float3 norm_v = normalize (mul(m_WV,v.N)); + float fade = abs (dot(dir_v,norm_v)); + o.c0 = fade; + + return o; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +vf main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +vf main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +vf main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +vf main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +vf main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +vf main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r5/model_env_lq.ps b/res/gamedata/shaders/r5/model_env_lq.ps new file mode 100644 index 00000000000..ae3cc4fe80b Binary files /dev/null and b/res/gamedata/shaders/r5/model_env_lq.ps differ diff --git a/res/gamedata/shaders/r3/model_env_lq.vs b/res/gamedata/shaders/r5/model_env_lq.vs similarity index 100% rename from res/gamedata/shaders/r3/model_env_lq.vs rename to res/gamedata/shaders/r5/model_env_lq.vs diff --git a/res/gamedata/shaders/r5/models_lightplanes.s b/res/gamedata/shaders/r5/models_lightplanes.s new file mode 100644 index 00000000000..1a7c3b32a8a --- /dev/null +++ b/res/gamedata/shaders/r5/models_lightplanes.s @@ -0,0 +1,11 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_def_lplanes","base_lplanes") + : fog (false) + : zb (true,false) + : blend (true,blend.srcalpha,blend.one) + : aref (true,0) + : sorting (2, true) + --shader:sampler ("s_base") :texture (t_base) + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end diff --git a/res/gamedata/shaders/r5/models_pautina.s b/res/gamedata/shaders/r5/models_pautina.s new file mode 100644 index 00000000000..415c346458f --- /dev/null +++ b/res/gamedata/shaders/r5/models_pautina.s @@ -0,0 +1,39 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort4ghost","particle_hard") -- particle_alphaonly + : sorting (3, true) + : blend (true,blend.srccolor,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : distort (false) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort4ghost","particle_distort") + : sorting (3, true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture ("pfx\\pfx_dist_glass") --:texture (t_base) -- ("pfx\\pfx_dist_glass2") + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", "pfx\\pfx_dist_glass") --:texture (t_base) -- ("pfx\\pfx_dist_glass2") + shader: dx10sampler ("smp_linear") + +end + +--[[ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_def_lplanes","base_lplanes") + : fog (false) + : zb (true,false) + : blend (true,blend.srccolor,blend.one) + : aref (true,0) + : sorting (2, true) + shader:sampler ("s_base") :texture (t_base) +end +]] \ No newline at end of file diff --git a/res/gamedata/shaders/r3/models_selflight.s b/res/gamedata/shaders/r5/models_selflight.s similarity index 100% rename from res/gamedata/shaders/r3/models_selflight.s rename to res/gamedata/shaders/r5/models_selflight.s diff --git a/res/gamedata/shaders/r3/models_selflight_det.s b/res/gamedata/shaders/r5/models_selflight_det.s similarity index 100% rename from res/gamedata/shaders/r3/models_selflight_det.s rename to res/gamedata/shaders/r5/models_selflight_det.s diff --git a/res/gamedata/shaders/r3/models_selflightl.s b/res/gamedata/shaders/r5/models_selflightl.s similarity index 100% rename from res/gamedata/shaders/r3/models_selflightl.s rename to res/gamedata/shaders/r5/models_selflightl.s diff --git a/res/gamedata/shaders/r5/models_xanomaly.s b/res/gamedata/shaders/r5/models_xanomaly.s new file mode 100644 index 00000000000..2bd7288e143 --- /dev/null +++ b/res/gamedata/shaders/r5/models_xanomaly.s @@ -0,0 +1,26 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort4glass","particle_hard") + : sorting (2,true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,true) + : fog (false) + : distort (false) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort4glass","particle_distort") + : sorting (2, true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,true) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture ("pfx\\pfx_dist_glass3") + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", "pfx\\pfx_dist_glass3") --:texture (t_base) -- ("pfx\\pfx_dist_glass2") + shader: dx10sampler ("smp_linear") +end diff --git a/res/gamedata/shaders/r5/models_xdistort.s b/res/gamedata/shaders/r5/models_xdistort.s new file mode 100644 index 00000000000..b646138eb3a --- /dev/null +++ b/res/gamedata/shaders/r5/models_xdistort.s @@ -0,0 +1,26 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_alphaonly") -- particle_alphaonly + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_distort") + : sorting (3, false) + : blend (true,blend.srccolor,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_base) -- "pfx\\pfx_distortion" + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", t_base) + shader: dx10sampler ("smp_linear") +end diff --git a/res/gamedata/shaders/r5/models_xdistortcolor.s b/res/gamedata/shaders/r5/models_xdistortcolor.s new file mode 100644 index 00000000000..e9a19afa09d --- /dev/null +++ b/res/gamedata/shaders/r5/models_xdistortcolor.s @@ -0,0 +1,26 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_hard") -- particle_alphaonly + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_distort") + : sorting (3, false) + : blend (true,blend.srccolor,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_base) -- "pfx\\pfx_distortion" + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", t_base) + shader: dx10sampler ("smp_linear") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/models_xdistortcolorl.s b/res/gamedata/shaders/r5/models_xdistortcolorl.s new file mode 100644 index 00000000000..dc01f474a26 --- /dev/null +++ b/res/gamedata/shaders/r5/models_xdistortcolorl.s @@ -0,0 +1,26 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_hard") -- particle_alphaonly + : sorting (2,true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_distort") + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_base) -- "pfx\\pfx_distortion" + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", t_base) + shader: dx10sampler ("smp_linear") +end diff --git a/res/gamedata/shaders/r5/models_xdistortcolorlinv.s b/res/gamedata/shaders/r5/models_xdistortcolorlinv.s new file mode 100644 index 00000000000..1e0e76e0384 --- /dev/null +++ b/res/gamedata/shaders/r5/models_xdistortcolorlinv.s @@ -0,0 +1,26 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort_inv","particle_hard") + : sorting (2,true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort","particle_distort") + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_base) -- "pfx\\pfx_distortion" + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", t_base) + shader: dx10sampler ("smp_linear") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/models_xdistortinv.s b/res/gamedata/shaders/r5/models_xdistortinv.s new file mode 100644 index 00000000000..8fefff1ecdb --- /dev/null +++ b/res/gamedata/shaders/r5/models_xdistortinv.s @@ -0,0 +1,26 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_distort_inv","particle_alphaonly") -- particle_alphaonly + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) + shader: dx10texture ("s_base", t_base) + shader: dx10sampler ("smp_base") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort_inv","particle_distort") + : sorting (3, false) + : blend (true,blend.srccolor,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_base) -- "pfx\\pfx_distortion" + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", t_base) + shader: dx10sampler ("smp_linear") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/models_xmonolith.s b/res/gamedata/shaders/r5/models_xmonolith.s new file mode 100644 index 00000000000..33a12b0e1a2 --- /dev/null +++ b/res/gamedata/shaders/r5/models_xmonolith.s @@ -0,0 +1,46 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_env_lq","model_env_lq") + : fog (true) + : zb (true,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : sorting (3,true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_env") :texture ("sky\\sky_5_cube") : clamp() + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_env", "sky\\sky_5_cube") + + shader: dx10sampler ("smp_base") + shader: dx10sampler ("smp_rtlinear") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort4glass","particle_distort") + : sorting (3, true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture ("pfx\\pfx_dist_glass4") + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", "pfx\\pfx_dist_glass4") + shader: dx10sampler ("smp_linear") +end + +--[[ +function normal_hq(shader, t_base, t_second, t_detail) + shader:begin ("model_env_hq","model_env_hq") + : fog (true) + : zb (true,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : sorting (3,true) + shader:sampler ("s_base") :texture (t_base) + shader:sampler ("s_env") :texture ("sky\\sky_5_cube") : clamp() + shader:sampler ("s_lmap") :texture ("$user$projector") + : clamp () + : f_linear () + : project (true) +end +]] diff --git a/res/gamedata/shaders/r5/models_xwindows.s b/res/gamedata/shaders/r5/models_xwindows.s new file mode 100644 index 00000000000..be31d4de37e --- /dev/null +++ b/res/gamedata/shaders/r5/models_xwindows.s @@ -0,0 +1,46 @@ +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("model_distort4glass","particle_distort") + : sorting (3, true) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture ("pfx\\pfx_dist_glass") + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_distort", "pfx\\pfx_dist_glass") --:texture (t_base) -- ("pfx\\pfx_dist_glass2") + shader: dx10sampler ("smp_linear") +end + +--[[ +function normal_hq(shader, t_base, t_second, t_detail) + shader:begin ("model_env_hq","model_env_hq") + : fog (true) + : zb (true,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : sorting (3,true) + shader:sampler ("s_base") :texture (t_base) + shader:sampler ("s_env") :texture ("sky\\sky_5_cube") : clamp() + shader:sampler ("s_lmap") :texture ("$user$projector") + : clamp () + : f_linear () + : project (true) +end +]] + +function normal (shader, t_base, t_second, t_detail) + shader:begin ("model_env_lq","model_env_lq") + : fog (true) + : zb (true,false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : aref (true,0) + : sorting (3,true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_env") :texture ("sky\\sky_5_cube") : clamp() + shader: dx10texture ("s_base", t_base) + shader: dx10texture ("s_env", "sky\\sky_5_cube") + + shader: dx10sampler ("smp_base") + shader: dx10sampler ("smp_rtlinear") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r3/night_vision.h b/res/gamedata/shaders/r5/night_vision.h similarity index 100% rename from res/gamedata/shaders/r3/night_vision.h rename to res/gamedata/shaders/r5/night_vision.h diff --git a/res/gamedata/shaders/r3/nightvision_gen_1.ps b/res/gamedata/shaders/r5/nightvision_gen_1.ps similarity index 100% rename from res/gamedata/shaders/r3/nightvision_gen_1.ps rename to res/gamedata/shaders/r5/nightvision_gen_1.ps diff --git a/res/gamedata/shaders/r3/nightvision_gen_2.ps b/res/gamedata/shaders/r5/nightvision_gen_2.ps similarity index 100% rename from res/gamedata/shaders/r3/nightvision_gen_2.ps rename to res/gamedata/shaders/r5/nightvision_gen_2.ps diff --git a/res/gamedata/shaders/r3/nightvision_gen_3.ps b/res/gamedata/shaders/r5/nightvision_gen_3.ps similarity index 100% rename from res/gamedata/shaders/r3/nightvision_gen_3.ps rename to res/gamedata/shaders/r5/nightvision_gen_3.ps diff --git a/res/gamedata/shaders/r5/particle-clip.vs b/res/gamedata/shaders/r5/particle-clip.vs new file mode 100644 index 00000000000..46ff3686882 --- /dev/null +++ b/res/gamedata/shaders/r5/particle-clip.vs @@ -0,0 +1,27 @@ +#include "common.h" + +struct vv +{ + float4 P : POSITION; + float2 tc : TEXCOORD0; + float4 c : COLOR0; +}; +struct v2p +{ + float2 tc : TEXCOORD0; + float4 c : COLOR0; + float4 hpos : SV_Position; +}; + +v2p main (vv v) +{ + v2p o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords + o.hpos.z = abs (o.hpos.z); + o.hpos.w = abs (o.hpos.w); + o.tc = v.tc; // copy tc + o.c = v.c; // copy color + + return o; +} diff --git a/res/gamedata/shaders/r5/particle.ps b/res/gamedata/shaders/r5/particle.ps new file mode 100644 index 00000000000..311759a95b4 Binary files /dev/null and b/res/gamedata/shaders/r5/particle.ps differ diff --git a/res/gamedata/shaders/r5/particle.vs b/res/gamedata/shaders/r5/particle.vs new file mode 100644 index 00000000000..0b03225d91d --- /dev/null +++ b/res/gamedata/shaders/r5/particle.vs @@ -0,0 +1,41 @@ +#include "common.h" + +struct vv +{ + float4 P : POSITION; + float2 tc : TEXCOORD0; + float4 c : COLOR0; +}; + +struct v2p +{ + float2 tc : TEXCOORD0; + float4 c : COLOR0; + +// Igor: for additional depth dest +#ifdef USE_SOFT_PARTICLES + float4 tctexgen : TEXCOORD1; +#endif // USE_SOFT_PARTICLES + + float4 hpos : SV_Position; +}; + +uniform float4x4 mVPTexgen; + +v2p main (vv v) +{ + v2p o; + + o.hpos = mul (m_WVP, v.P); // xform, input in world coords +// o.hpos = mul (m_VP, v.P); // xform, input in world coords + o.tc = v.tc; // copy tc + o.c = unpack_D3DCOLOR(v.c); // copy color + +// Igor: for additional depth dest +#ifdef USE_SOFT_PARTICLES + o.tctexgen = mul( mVPTexgen, v.P); + o.tctexgen.z = o.hpos.z; +#endif // USE_SOFT_PARTICLES + + return o; +} diff --git a/res/gamedata/shaders/r5/particle_alphaonly.ps b/res/gamedata/shaders/r5/particle_alphaonly.ps new file mode 100644 index 00000000000..e7509e43597 Binary files /dev/null and b/res/gamedata/shaders/r5/particle_alphaonly.ps differ diff --git a/res/gamedata/shaders/r5/particle_distort.ps b/res/gamedata/shaders/r5/particle_distort.ps new file mode 100644 index 00000000000..23622bb56af Binary files /dev/null and b/res/gamedata/shaders/r5/particle_distort.ps differ diff --git a/res/gamedata/shaders/r5/particle_distort_hard.ps b/res/gamedata/shaders/r5/particle_distort_hard.ps new file mode 100644 index 00000000000..26849c9442c Binary files /dev/null and b/res/gamedata/shaders/r5/particle_distort_hard.ps differ diff --git a/res/gamedata/shaders/r5/particle_hard.ps b/res/gamedata/shaders/r5/particle_hard.ps new file mode 100644 index 00000000000..a42d6f66828 Binary files /dev/null and b/res/gamedata/shaders/r5/particle_hard.ps differ diff --git a/res/gamedata/shaders/r5/particle_s-aadd.ps b/res/gamedata/shaders/r5/particle_s-aadd.ps new file mode 100644 index 00000000000..e95c188521f Binary files /dev/null and b/res/gamedata/shaders/r5/particle_s-aadd.ps differ diff --git a/res/gamedata/shaders/r5/particle_s-add.ps b/res/gamedata/shaders/r5/particle_s-add.ps new file mode 100644 index 00000000000..7b940540678 Binary files /dev/null and b/res/gamedata/shaders/r5/particle_s-add.ps differ diff --git a/res/gamedata/shaders/r5/particle_s-blend.ps b/res/gamedata/shaders/r5/particle_s-blend.ps new file mode 100644 index 00000000000..9a5507e5b8a Binary files /dev/null and b/res/gamedata/shaders/r5/particle_s-blend.ps differ diff --git a/res/gamedata/shaders/r5/particles_xadd.s b/res/gamedata/shaders/r5/particles_xadd.s new file mode 100644 index 00000000000..cf875e0a1e9 --- /dev/null +++ b/res/gamedata/shaders/r5/particles_xadd.s @@ -0,0 +1,37 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("particle", "particle") + : sorting (3, false) + : blend (true,blend.one,blend.one) + : aref (false,0) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_position") :texture ("$user$position") + + shader:dx10texture ("s_base" ,t_base) + shader:dx10texture ("s_position" ,"$user$position") + + shader:dx10sampler ("smp_base") + shader:dx10sampler ("smp_nofilter") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("particle", "particle_distort") + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_second) -- "pfx\\pfx_distortion" +-- shader:sampler ("s_position") :texture ("$user$position") + + shader:dx10texture ("s_base" ,t_base) + shader:dx10texture ("s_distort" ,t_base) -- "pfx\\pfx_distortion" + shader:dx10texture ("s_position" ,"$user$position") + + shader:dx10sampler ("smp_base") + shader: dx10sampler ("smp_linear") + shader:dx10sampler ("smp_nofilter") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/particles_xdistort.s b/res/gamedata/shaders/r5/particles_xdistort.s new file mode 100644 index 00000000000..07ba64b87ba --- /dev/null +++ b/res/gamedata/shaders/r5/particles_xdistort.s @@ -0,0 +1,19 @@ +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("particle", "particle_distort") + : sorting (3, false) + : blend (true,blend.srcalpha,blend.invsrcalpha) + : zb (true,false) + : fog (false) + : distort (true) +-- shader:sampler ("s_base") :texture (t_base) +-- shader:sampler ("s_distort") :texture (t_base) -- "pfx\\pfx_distortion" +-- shader:sampler ("s_position") :texture ("$user$position") + + shader:dx10texture ("s_base" ,t_base) + shader:dx10texture ("s_distort" ,t_base) -- "pfx\\pfx_distortion" + shader:dx10texture ("s_position" ,"$user$position") + + shader:dx10sampler ("smp_base") + shader:dx10sampler ("smp_linear") + shader:dx10sampler ("smp_nofilter") +end diff --git a/res/gamedata/shaders/r3/pbr_brdf.h b/res/gamedata/shaders/r5/pbr_brdf.h similarity index 100% rename from res/gamedata/shaders/r3/pbr_brdf.h rename to res/gamedata/shaders/r5/pbr_brdf.h diff --git a/res/gamedata/shaders/r3/pbr_brdf_blinn.h b/res/gamedata/shaders/r5/pbr_brdf_blinn.h similarity index 100% rename from res/gamedata/shaders/r3/pbr_brdf_blinn.h rename to res/gamedata/shaders/r5/pbr_brdf_blinn.h diff --git a/res/gamedata/shaders/r3/pbr_brdf_ggx.h b/res/gamedata/shaders/r5/pbr_brdf_ggx.h similarity index 100% rename from res/gamedata/shaders/r3/pbr_brdf_ggx.h rename to res/gamedata/shaders/r5/pbr_brdf_ggx.h diff --git a/res/gamedata/shaders/r3/pbr_cubemap_check.h b/res/gamedata/shaders/r5/pbr_cubemap_check.h similarity index 100% rename from res/gamedata/shaders/r3/pbr_cubemap_check.h rename to res/gamedata/shaders/r5/pbr_cubemap_check.h diff --git a/res/gamedata/shaders/r3/pbr_settings.h b/res/gamedata/shaders/r5/pbr_settings.h similarity index 100% rename from res/gamedata/shaders/r3/pbr_settings.h rename to res/gamedata/shaders/r5/pbr_settings.h diff --git a/res/gamedata/shaders/r3/pda_overlay.ps b/res/gamedata/shaders/r5/pda_overlay.ps similarity index 100% rename from res/gamedata/shaders/r3/pda_overlay.ps rename to res/gamedata/shaders/r5/pda_overlay.ps diff --git a/res/gamedata/shaders/r3/pda_overlay.s b/res/gamedata/shaders/r5/pda_overlay.s similarity index 100% rename from res/gamedata/shaders/r3/pda_overlay.s rename to res/gamedata/shaders/r5/pda_overlay.s diff --git a/res/gamedata/shaders/r3/pda_overlay.vs b/res/gamedata/shaders/r5/pda_overlay.vs similarity index 100% rename from res/gamedata/shaders/r3/pda_overlay.vs rename to res/gamedata/shaders/r5/pda_overlay.vs diff --git a/res/gamedata/shaders/r5/portal.ps b/res/gamedata/shaders/r5/portal.ps new file mode 100644 index 00000000000..fc0fe57c620 Binary files /dev/null and b/res/gamedata/shaders/r5/portal.ps differ diff --git a/res/gamedata/shaders/r5/portal.s b/res/gamedata/shaders/r5/portal.s new file mode 100644 index 00000000000..33725fa80a1 --- /dev/null +++ b/res/gamedata/shaders/r5/portal.s @@ -0,0 +1,11 @@ +function normal (shader, t_base, t_second, t_detail) +-- shader :begin ("portal","simple_color") + shader :begin ("portal","portal") + :fog (true) + :zb (true,false) + :sorting (3, true) + :blend (true,blend.srcalpha,blend.invsrcalpha) +-- TODO: DX10: Setup samplers +-- shader :sampler ("s_tonemap") :texture ("$user$tonemap") + shader:dx10texture ("s_tonemap", "$user$tonemap") +end diff --git a/res/gamedata/shaders/r3/portal.vs b/res/gamedata/shaders/r5/portal.vs similarity index 100% rename from res/gamedata/shaders/r3/portal.vs rename to res/gamedata/shaders/r5/portal.vs diff --git a/res/gamedata/shaders/r5/postprocess.ps b/res/gamedata/shaders/r5/postprocess.ps new file mode 100644 index 00000000000..7dd8f49b718 Binary files /dev/null and b/res/gamedata/shaders/r5/postprocess.ps differ diff --git a/res/gamedata/shaders/r5/postprocess.s b/res/gamedata/shaders/r5/postprocess.s new file mode 100644 index 00000000000..9f60576568e --- /dev/null +++ b/res/gamedata/shaders/r5/postprocess.s @@ -0,0 +1,40 @@ +-- normal pp +t_rt = "$user$albedo" +t_noise = "fx\\fx_noise2" + +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_postpr","postprocess") + : fog (false) + : zb (false,false) +-- shader:sampler ("s_base0") :texture("$user$albedo") : clamp() : f_linear () +-- shader:sampler ("s_base1") :texture("$user$albedo") : clamp() : f_linear () +-- shader:sampler ("s_noise") :texture("fx\\fx_noise2") : f_linear () + + shader:dx10texture ("s_base0", "$user$albedo") + shader:dx10texture ("s_base1", "$user$albedo") + shader:dx10texture ("s_noise", "fx\\fx_noise2") + + shader:dx10sampler ("smp_rtlinear") + shader:dx10sampler ("smp_linear") +end + +function l_special (shader, t_base, t_second, t_detail) + shader:begin ("stub_notransform_postpr","postprocess_CM") + : fog (false) + : zb (false,false) +-- shader:sampler ("s_base0") :texture("$user$albedo") : clamp() : f_linear () +-- shader:sampler ("s_base1") :texture("$user$albedo") : clamp() : f_linear () +-- shader:sampler ("s_noise") :texture("fx\\fx_noise2") : f_linear () + + shader:dx10texture ("s_base0", "$user$albedo") + shader:dx10texture ("s_base1", "$user$albedo") + shader:dx10texture ("s_noise", "fx\\fx_noise2") + + shader:dx10sampler ("smp_rtlinear") + shader:dx10sampler ("smp_linear") + +-- shader:sampler ("s_grad1") :texture("grad\\grad_red_yellow") : clamp() : f_linear () +-- shader:sampler ("s_grad1") :texture("grad\\grad_test1") : clamp() : f_linear () + shader:dx10texture ("s_grad0", "$user$cmap0") + shader:dx10texture ("s_grad1", "$user$cmap1") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/postprocess_cm.ps b/res/gamedata/shaders/r5/postprocess_cm.ps new file mode 100644 index 00000000000..3be7dce1c3c Binary files /dev/null and b/res/gamedata/shaders/r5/postprocess_cm.ps differ diff --git a/res/gamedata/shaders/r3/pp_blur.ps b/res/gamedata/shaders/r5/pp_blur.ps similarity index 100% rename from res/gamedata/shaders/r3/pp_blur.ps rename to res/gamedata/shaders/r5/pp_blur.ps diff --git a/res/gamedata/shaders/r5/rain_apply_gloss.ps b/res/gamedata/shaders/r5/rain_apply_gloss.ps new file mode 100644 index 00000000000..05f23ecd198 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_apply_gloss.ps differ diff --git a/res/gamedata/shaders/r5/rain_apply_gloss_msaa.ps b/res/gamedata/shaders/r5/rain_apply_gloss_msaa.ps new file mode 100644 index 00000000000..5dd39f8ac7e Binary files /dev/null and b/res/gamedata/shaders/r5/rain_apply_gloss_msaa.ps differ diff --git a/res/gamedata/shaders/r5/rain_apply_gloss_nomsaa.ps b/res/gamedata/shaders/r5/rain_apply_gloss_nomsaa.ps new file mode 100644 index 00000000000..208ad78faf0 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_apply_gloss_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/rain_apply_normal.ps b/res/gamedata/shaders/r5/rain_apply_normal.ps new file mode 100644 index 00000000000..8948442cdd5 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_apply_normal.ps differ diff --git a/res/gamedata/shaders/r5/rain_apply_normal_msaa.ps b/res/gamedata/shaders/r5/rain_apply_normal_msaa.ps new file mode 100644 index 00000000000..fc30d7f2cd8 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_apply_normal_msaa.ps differ diff --git a/res/gamedata/shaders/r5/rain_apply_normal_nomsaa.ps b/res/gamedata/shaders/r5/rain_apply_normal_nomsaa.ps new file mode 100644 index 00000000000..60d89f25eb4 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_apply_normal_nomsaa.ps differ diff --git a/res/gamedata/shaders/r3/rain_layer.ps b/res/gamedata/shaders/r5/rain_layer.ps similarity index 100% rename from res/gamedata/shaders/r3/rain_layer.ps rename to res/gamedata/shaders/r5/rain_layer.ps diff --git a/res/gamedata/shaders/r3/rain_patch_normal.ps b/res/gamedata/shaders/r5/rain_patch_normal.ps similarity index 100% rename from res/gamedata/shaders/r3/rain_patch_normal.ps rename to res/gamedata/shaders/r5/rain_patch_normal.ps diff --git a/res/gamedata/shaders/r5/rain_patch_normal_msaa.ps b/res/gamedata/shaders/r5/rain_patch_normal_msaa.ps new file mode 100644 index 00000000000..8d70c0ba35a Binary files /dev/null and b/res/gamedata/shaders/r5/rain_patch_normal_msaa.ps differ diff --git a/res/gamedata/shaders/r5/rain_patch_normal_new.ps b/res/gamedata/shaders/r5/rain_patch_normal_new.ps new file mode 100644 index 00000000000..7f64a50be8a Binary files /dev/null and b/res/gamedata/shaders/r5/rain_patch_normal_new.ps differ diff --git a/res/gamedata/shaders/r5/rain_patch_normal_new_msaa.ps b/res/gamedata/shaders/r5/rain_patch_normal_new_msaa.ps new file mode 100644 index 00000000000..9d240ce53e4 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_patch_normal_new_msaa.ps differ diff --git a/res/gamedata/shaders/r5/rain_patch_normal_new_nomsaa.ps b/res/gamedata/shaders/r5/rain_patch_normal_new_nomsaa.ps new file mode 100644 index 00000000000..2152722ea7d Binary files /dev/null and b/res/gamedata/shaders/r5/rain_patch_normal_new_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/rain_patch_normal_nomsaa.ps b/res/gamedata/shaders/r5/rain_patch_normal_nomsaa.ps new file mode 100644 index 00000000000..c29d975d0e4 Binary files /dev/null and b/res/gamedata/shaders/r5/rain_patch_normal_nomsaa.ps differ diff --git a/res/gamedata/shaders/r3/reflections.h b/res/gamedata/shaders/r5/reflections.h similarity index 100% rename from res/gamedata/shaders/r3/reflections.h rename to res/gamedata/shaders/r5/reflections.h diff --git a/res/gamedata/shaders/r3/screenspace_common.h b/res/gamedata/shaders/r5/screenspace_common.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_common.h rename to res/gamedata/shaders/r5/screenspace_common.h diff --git a/res/gamedata/shaders/r3/screenspace_common_noise.h b/res/gamedata/shaders/r5/screenspace_common_noise.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_common_noise.h rename to res/gamedata/shaders/r5/screenspace_common_noise.h diff --git a/res/gamedata/shaders/r3/screenspace_common_ripples.h b/res/gamedata/shaders/r5/screenspace_common_ripples.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_common_ripples.h rename to res/gamedata/shaders/r5/screenspace_common_ripples.h diff --git a/res/gamedata/shaders/r3/screenspace_debanding.h b/res/gamedata/shaders/r5/screenspace_debanding.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_debanding.h rename to res/gamedata/shaders/r5/screenspace_debanding.h diff --git a/res/gamedata/shaders/r3/screenspace_dof.h b/res/gamedata/shaders/r5/screenspace_dof.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_dof.h rename to res/gamedata/shaders/r5/screenspace_dof.h diff --git a/res/gamedata/shaders/r3/screenspace_fog.h b/res/gamedata/shaders/r5/screenspace_fog.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_fog.h rename to res/gamedata/shaders/r5/screenspace_fog.h diff --git a/res/gamedata/shaders/r3/screenspace_hud_raindrops.h b/res/gamedata/shaders/r5/screenspace_hud_raindrops.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_hud_raindrops.h rename to res/gamedata/shaders/r5/screenspace_hud_raindrops.h diff --git a/res/gamedata/shaders/r3/screenspace_il.h b/res/gamedata/shaders/r5/screenspace_il.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_il.h rename to res/gamedata/shaders/r5/screenspace_il.h diff --git a/res/gamedata/shaders/r3/screenspace_reflections.h b/res/gamedata/shaders/r5/screenspace_reflections.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_reflections.h rename to res/gamedata/shaders/r5/screenspace_reflections.h diff --git a/res/gamedata/shaders/r3/screenspace_shadows.h b/res/gamedata/shaders/r5/screenspace_shadows.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_shadows.h rename to res/gamedata/shaders/r5/screenspace_shadows.h diff --git a/res/gamedata/shaders/r3/screenspace_water.h b/res/gamedata/shaders/r5/screenspace_water.h similarity index 100% rename from res/gamedata/shaders/r3/screenspace_water.h rename to res/gamedata/shaders/r5/screenspace_water.h diff --git a/res/gamedata/shaders/r5/selflight.s b/res/gamedata/shaders/r5/selflight.s new file mode 100644 index 00000000000..827499f4c66 --- /dev/null +++ b/res/gamedata/shaders/r5/selflight.s @@ -0,0 +1,12 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("dumb","dumb") + : fog (false) + : zb (false,false) + : blend (true,blend.zero,blend.one) + : aref (false,0) + : sorting (2, false) +-- shader:sampler ("s_base") :texture (t_base) + + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end diff --git a/res/gamedata/shaders/r3/settings_screenspace_AO.h b/res/gamedata/shaders/r5/settings_screenspace_AO.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_AO.h rename to res/gamedata/shaders/r5/settings_screenspace_AO.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_DEBAND.h b/res/gamedata/shaders/r5/settings_screenspace_DEBAND.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_DEBAND.h rename to res/gamedata/shaders/r5/settings_screenspace_DEBAND.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_FLORA.h b/res/gamedata/shaders/r5/settings_screenspace_FLORA.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_FLORA.h rename to res/gamedata/shaders/r5/settings_screenspace_FLORA.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_FOG.h b/res/gamedata/shaders/r5/settings_screenspace_FOG.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_FOG.h rename to res/gamedata/shaders/r5/settings_screenspace_FOG.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_IL.h b/res/gamedata/shaders/r5/settings_screenspace_IL.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_IL.h rename to res/gamedata/shaders/r5/settings_screenspace_IL.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_PUDDLES.h b/res/gamedata/shaders/r5/settings_screenspace_PUDDLES.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_PUDDLES.h rename to res/gamedata/shaders/r5/settings_screenspace_PUDDLES.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_SSR.h b/res/gamedata/shaders/r5/settings_screenspace_SSR.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_SSR.h rename to res/gamedata/shaders/r5/settings_screenspace_SSR.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_SSS.h b/res/gamedata/shaders/r5/settings_screenspace_SSS.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_SSS.h rename to res/gamedata/shaders/r5/settings_screenspace_SSS.h diff --git a/res/gamedata/shaders/r3/settings_screenspace_WATER.h b/res/gamedata/shaders/r5/settings_screenspace_WATER.h similarity index 100% rename from res/gamedata/shaders/r3/settings_screenspace_WATER.h rename to res/gamedata/shaders/r5/settings_screenspace_WATER.h diff --git a/res/gamedata/shaders/r3/shadow.h b/res/gamedata/shaders/r5/shadow.h similarity index 100% rename from res/gamedata/shaders/r3/shadow.h rename to res/gamedata/shaders/r5/shadow.h diff --git a/res/gamedata/shaders/r5/shadow_direct_base.gs b/res/gamedata/shaders/r5/shadow_direct_base.gs new file mode 100644 index 00000000000..16cca26604c --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_base.gs @@ -0,0 +1,40 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Geometry +#define CASCADE_COUNT 3 +uniform float4x4 m_shadow_direct[CASCADE_COUNT]; // световая матрица (fuckingsun->X.D.combine) + +struct geometry_output +{ + float4 hpos : SV_Position; + uint RTIndex : SV_RenderTargetArrayIndex; +}; + +[maxvertexcount(CASCADE_COUNT*3)] +void main(triangle v2p_shadow_direct input[3], inout TriangleStream ShadowStream) +{ + [unroll] + for( int f = 0; f < CASCADE_COUNT; ++f ) + { + { + geometry_output output = (geometry_output)0; + + output.RTIndex = f; + + [unroll] + for( uint v = 0; v < 3; ++v ) + { + float4 pos_w = input[v].position_w; // мировая позиция + //float4 light_wvp = mul(pos_w, m_shadow_direct[f+3]); + float4 light_wvp = mul(m_shadow_direct[f], pos_w); + //output.hpos = mul(light_wvp, m_cubemap_shadow_project); + output.hpos = light_wvp; + + ShadowStream.Append( output ); + } + + ShadowStream.RestartStrip(); + } + } +} diff --git a/res/gamedata/shaders/r5/shadow_direct_base.ps b/res/gamedata/shaders/r5/shadow_direct_base.ps new file mode 100644 index 00000000000..0654a9ddfe7 Binary files /dev/null and b/res/gamedata/shaders/r5/shadow_direct_base.ps differ diff --git a/res/gamedata/shaders/r5/shadow_direct_base.vs b/res/gamedata/shaders/r5/shadow_direct_base.vs new file mode 100644 index 00000000000..9196c67aec7 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_base.vs @@ -0,0 +1,21 @@ +#include "common.h" + +struct a2v +{ +// float4 tc0: TEXCOORD0; // Texture coordinates + float4 P: POSITION; // Object-space position +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_shadow_direct main ( a2v I ) +{ + v2p_shadow_direct O; + + O.hpos = mul (m_WVP, I.P ); +#ifndef USE_HWSMAP + O.depth = O.hpos.z; +#endif + return O; +} +FXVS; diff --git a/res/gamedata/shaders/r5/shadow_direct_base_aref.gs b/res/gamedata/shaders/r5/shadow_direct_base_aref.gs new file mode 100644 index 00000000000..202e6895e14 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_base_aref.gs @@ -0,0 +1,42 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Geometry +#define CASCADE_COUNT 3 +uniform float4x4 m_shadow_direct[CASCADE_COUNT]; // световая матрица (fuckingsun->X.D.combine) + +struct geometry_output +{ + float2 tc0 : TEXCOORD1; + float4 hpos : SV_Position; + uint RTIndex : SV_RenderTargetArrayIndex; +}; + +[maxvertexcount(CASCADE_COUNT*3)] +void main(triangle v2p_shadow_direct_aref input[3], inout TriangleStream ShadowStream) +{ + [unroll] + for( int f = 0; f < CASCADE_COUNT; ++f ) + { + { + geometry_output output = (geometry_output)0; + + output.RTIndex = f; + + [unroll] + for( uint v = 0; v < 3; ++v ) + { + float4 pos_w = input[v].position_w; // мировая позиция + //float4 light_wvp = mul(pos_w, m_shadow_direct[f+3]); + float4 light_wvp = mul(m_shadow_direct[f], pos_w); + //output.hpos = mul(light_wvp, m_cubemap_shadow_project); + output.hpos = light_wvp; + output.tc0 = input[v].tc0; + + ShadowStream.Append( output ); + } + + ShadowStream.RestartStrip(); + } + } +} diff --git a/res/gamedata/shaders/r5/shadow_direct_base_aref.ps b/res/gamedata/shaders/r5/shadow_direct_base_aref.ps new file mode 100644 index 00000000000..0d92cf5ec57 Binary files /dev/null and b/res/gamedata/shaders/r5/shadow_direct_base_aref.ps differ diff --git a/res/gamedata/shaders/r5/shadow_direct_base_aref.vs b/res/gamedata/shaders/r5/shadow_direct_base_aref.vs new file mode 100644 index 00000000000..1cad02ca4f3 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_base_aref.vs @@ -0,0 +1,21 @@ +#include "common.h" + +struct a2v +{ + float4 P : POSITION; // Object-space position + int2 tc0 : TEXCOORD0; // Texture coordinates +}; + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_shadow_direct_aref main ( v_static I ) +{ + v2p_shadow_direct_aref O; + O.hpos = mul (m_WVP, I.P ); + O.tc0 = unpack_tc_base (I.tc,I.T.w,I.B.w ); // copy tc +#ifndef USE_HWSMAP + O.depth = O.hpos.z; +#endif + return O; +} +FXVS; diff --git a/res/gamedata/shaders/r5/shadow_direct_model.vs b/res/gamedata/shaders/r5/shadow_direct_model.vs new file mode 100644 index 00000000000..cb57f7ee8e2 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_model.vs @@ -0,0 +1,43 @@ +#include "common.h" +#include "skin.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_shadow_direct _main( v_model I ) +{ + v2p_shadow_direct O ; + float4 hpos = mul( m_WVP, I.P ); + + O.hpos = hpos; +#ifndef USE_HWSMAP + O.depth = O.hpos.z; +#endif + return O ; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +v2p_shadow_direct main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +v2p_shadow_direct main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +v2p_shadow_direct main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +v2p_shadow_direct main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +v2p_shadow_direct main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +v2p_shadow_direct main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif + +FXVS; diff --git a/res/gamedata/shaders/r5/shadow_direct_model_aref.vs b/res/gamedata/shaders/r5/shadow_direct_model_aref.vs new file mode 100644 index 00000000000..9534402643b --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_model_aref.vs @@ -0,0 +1,43 @@ +#include "common.h" +#include "skin.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_shadow_direct_aref _main( v_model I ) +{ + v2p_shadow_direct_aref O; + float4 hpos = mul (m_WVP, I.P ); + O.hpos = hpos; + O.tc0 = I.tc; +#ifndef USE_HWSMAP + O.depth = O.hpos.z; +#endif + return O; +} + +///////////////////////////////////////////////////////////////////////// +#ifdef SKIN_NONE +v2p_shadow_direct_aref main(v_model v) { return _main(v); } +#endif + +#ifdef SKIN_0 +v2p_shadow_direct_aref main(v_model_skinned_0 v) { return _main(skinning_0(v)); } +#endif + +#ifdef SKIN_1 +v2p_shadow_direct_aref main(v_model_skinned_1 v) { return _main(skinning_1(v)); } +#endif + +#ifdef SKIN_2 +v2p_shadow_direct_aref main(v_model_skinned_2 v) { return _main(skinning_2(v)); } +#endif + +#ifdef SKIN_3 +v2p_shadow_direct_aref main(v_model_skinned_3 v) { return _main(skinning_3(v)); } +#endif + +#ifdef SKIN_4 +v2p_shadow_direct_aref main(v_model_skinned_4 v) { return _main(skinning_4(v)); } +#endif + +FXVS; diff --git a/res/gamedata/shaders/r5/shadow_direct_tree.vs b/res/gamedata/shaders/r5/shadow_direct_tree.vs new file mode 100644 index 00000000000..b2a25a19c24 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_tree.vs @@ -0,0 +1,54 @@ +#include "common.h" + +uniform float3x4 m_xform; +uniform float3x4 m_xform_v; +uniform float4 consts; // {1/quant,1/quant,???,???} +uniform float4 c_scale,c_bias,wind,wave; + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +#ifdef USE_AREF +v2p_shadow_direct_aref main ( v_shadow_direct_aref I ) +#else // USE_AREF +v2p_shadow_direct main ( v_shadow_direct I ) +#endif // USE_AREF +{ +#ifdef USE_AREF + v2p_shadow_direct_aref O; +#else // USE_AREF + v2p_shadow_direct O; +#endif // USE_AREF + + + // Transform to world coords + float3 pos = mul (m_xform , I.P); + + // + float base = m_xform._24; // take base height from matrix + float dp = calc_cyclic (wave.w+dot(pos,(float3)wave)); + float H = pos.y - base; // height of vertex (scaled, rotated, etc.) + float inten = H * dp; // intensity + float2 result; +#ifdef USE_TREEWAVE + result = 0; +#else // USE_TREEWAVE +#ifdef USE_AREF + float frac = I.tc.z*consts.x; // fractional (or rigidity) +#else // USE_AREF + float frac = 0; +#endif // USE_AREF + result = calc_xz_wave (wind.xz*inten, frac); +#endif // USE_TREEWAVE + + float4 f_pos = float4(pos.x+result.x, pos.y, pos.z+result.y, 1); + + O.hpos = mul (m_VP, f_pos ); +#ifdef USE_AREF + O.tc0 = (I.tc * consts).xy; // + result; +#endif // USE_AREF +#ifndef USE_HWSMAP + O.depth = O.hpos.z; +#endif + return O; +} +FXVS; diff --git a/res/gamedata/shaders/r5/shadow_direct_tree_aref.vs b/res/gamedata/shaders/r5/shadow_direct_tree_aref.vs new file mode 100644 index 00000000000..feae71db038 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_tree_aref.vs @@ -0,0 +1,2 @@ +#define USE_AREF +#include "shadow_direct_tree.vs" \ No newline at end of file diff --git a/res/gamedata/shaders/r5/shadow_direct_tree_s.vs b/res/gamedata/shaders/r5/shadow_direct_tree_s.vs new file mode 100644 index 00000000000..3b142028fc9 --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_tree_s.vs @@ -0,0 +1,2 @@ +#define USE_TREEWAVE +#include "shadow_direct_tree.vs" \ No newline at end of file diff --git a/res/gamedata/shaders/r5/shadow_direct_tree_s_aref.vs b/res/gamedata/shaders/r5/shadow_direct_tree_s_aref.vs new file mode 100644 index 00000000000..e626d1d4e4e --- /dev/null +++ b/res/gamedata/shaders/r5/shadow_direct_tree_s_aref.vs @@ -0,0 +1,2 @@ +#define USE_AREF +#include "shadow_direct_tree_s.vs" \ No newline at end of file diff --git a/res/gamedata/shaders/r5/shared/cloudconfig.h b/res/gamedata/shaders/r5/shared/cloudconfig.h new file mode 100644 index 00000000000..e2e3b43ee92 --- /dev/null +++ b/res/gamedata/shaders/r5/shared/cloudconfig.h @@ -0,0 +1,11 @@ +#ifndef _CLOUDCONFIG_H +#define _CLOUDCONFIG_H + +// note: timers has resolution (sec), where x=1, y=10, z=1/10, +#define CLOUD_TILE0 (0.7f) +#define CLOUD_SPEED0 (2*0.05)//(0.033f) +#define CLOUD_TILE1 (2.8)//(2.5f) +#define CLOUD_SPEED1 (2*0.025)//(0.033f) +#define CLOUD_FADE (0.5) + +#endif diff --git a/res/gamedata/shaders/r5/shared/common.h b/res/gamedata/shaders/r5/shared/common.h new file mode 100644 index 00000000000..221f75f2aa0 --- /dev/null +++ b/res/gamedata/shaders/r5/shared/common.h @@ -0,0 +1,90 @@ +////////////////////////////////////////////////// +// All comments by Nivenhbro are preceded by ! +///////////////////////////////////////////////// + +#ifndef SHARED_COMMON_H +#define SHARED_COMMON_H + +// Used by VS +cbuffer dynamic_transforms +{ + uniform float4x4 m_WVP; // World View Projection composition + uniform float3x4 m_WV; + uniform float3x4 m_W; + // Used by VS only + uniform float4 L_material; // 0,0,0,mid + uniform float4 hemi_cube_pos_faces; + uniform float4 hemi_cube_neg_faces; + uniform float4 dt_params; // Detail params +} + +cbuffer shader_params +{ + float m_AlphaRef; +} + +cbuffer static_globals +{ + uniform float3x4 m_V; + uniform float3x4 m_inv_V; + uniform float4x4 m_P; + uniform float4x4 m_VP; + + uniform float4 timers; + + uniform float4 fog_plane; + uniform float4 fog_params; // x=near*(1/(far-near)), ?,?, w = -1/(far-near) + uniform float4 fog_color; + + uniform float4 L_ambient; // L_ambient.w = skynbox-lerp-factor + uniform float3 L_sun_color; + uniform float3 L_sun_dir_w; + uniform float4 L_hemi_color; + uniform float4 Ldynamic_dir; + uniform float4 Ldynamic_pos; + uniform float4 Ldynamic_color; + + uniform float3 eye_position; + + uniform float4 pos_decompression_params; + uniform float4 pos_decompression_params2; + + uniform float4 parallax; + uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + uniform float4 rain_params; //x = raindensity, y = wetness + uniform float4 pp_img_corrections; + uniform float4 pp_img_cg; +} + +/* +// + + + + +uniform float4x4 m_texgen; +//uniform float4x4 mVPTexgen; +uniform float3 L_sun_dir_e; + +//uniform float3 eye_direction; +uniform float3 eye_normal; +*/ + +float calc_cyclic (float x) +{ + float phase = 1/(2*3.141592653589f); + float sqrt2 = 1.4142136f; + float sqrt2m2 = 2.8284271f; + float f = sqrt2m2*frac(x)-sqrt2; // [-sqrt2 .. +sqrt2] !No changes made, but this controls the grass wave (which is violent if I must say) + return f*f - 1.f; // [-1 .. +1] +} + +float2 calc_xz_wave (float2 dir2D, float frac) +{ + // Beizer + float2 ctrl_A = float2(0.f, 0.f ); + float2 ctrl_B = float2(dir2D.x, dir2D.y ); + return lerp (ctrl_A, ctrl_B, frac); //!This calculates tree wave. No changes made +} + +#endif diff --git a/res/gamedata/shaders/r5/shared/waterconfig.h b/res/gamedata/shaders/r5/shared/waterconfig.h new file mode 100644 index 00000000000..89d1e220053 --- /dev/null +++ b/res/gamedata/shaders/r5/shared/waterconfig.h @@ -0,0 +1,56 @@ +#ifndef _WATERCONFIG_H +#define _WATERCONFIG_H + +//настройки для: (1) +//waterdistortion +//waterdistortion2 + +#define W_POSITION_SHIFT_HEIGHT (1.f/60.f) //(1.f/100.f) //amplitude /50 - small, /10 - large +#define W_POSITION_SHIFT_SPEED (25.f) //(25.0f) +#define W_DISTORT_BASE_TILE_0 (1.0f) //(1.0f) +#define W_DISTORT_BASE_TILE_1 (1.1f) //(1.1f) +#define W_DISTORT_AMP_0 (+0.15f) //(+0.15f) +#define W_DISTORT_AMP_1 (+0.55f) //(-0.30f) +#define W_DISTORT_POWER (1.0f) //(1.0f) + +#endif + + +/* +//////////////////////////////////////////////////////////////////////////////// +-- waters clear +//////////////////////////////////////////////////////////////////////////////// +настройки для: + waterdistortion + waterdistortion2 +//////////////////////////////////////////////////////////////////////////////// +#define W_POSITION_SHIFT_HEIGHT (1.f/50.f) //(1.f/100.f) //amplitude /50 - small, /10 - large +#define W_POSITION_SHIFT_SPEED (15.f) //(25.0f) +#define W_DISTORT_BASE_TILE_0 (1.3f) //(1.6f) +#define W_DISTORT_BASE_TILE_1 (2.3f) //(1.1f) +#define W_DISTORT_AMP_0 (+0.35f) //(+0.15f) +#define W_DISTORT_AMP_1 (-1.75f) //(-0.30f) +#define W_DISTORT_POWER (1.0f) //(1.0f) +//////////////////////////////////////////////////////////////////////////////// +настройки для: + waterdistortion + waterdistortion +//////////////////////////////////////////////////////////////////////////////// +#define W_POSITION_SHIFT_HEIGHT (1.f/80.f) //(1.f/100.f) //amplitude /50 - small, /10 - large +#define W_POSITION_SHIFT_SPEED (20.f) //(25.0f) +#define W_DISTORT_BASE_TILE_0 (1.6f) //(1.6f) +#define W_DISTORT_BASE_TILE_1 (1.1f) //(1.1f) +#define W_DISTORT_AMP_0 (+0.15f) //(+0.15f) +#define W_DISTORT_AMP_1 (-0.30f) //(-0.30f) +#define W_DISTORT_POWER (6.0f) //(6.0f) +//////////////////////////////////////////////////////////////////////////////// +-- waters mulyaka +//////////////////////////////////////////////////////////////////////////////// +#define W_POSITION_SHIFT_HEIGHT (1.f/50.f) // amplitude /50 - small, /10 - large +#define W_POSITION_SHIFT_SPEED (25.f) +#define W_DISTORT_BASE_TILE (0.1f) //(1.0f) +#define W_DISTORT_AMP_0 (+0.58f) //(-0.08f) +#define W_DISTORT_AMP_1 (+0.38f) //(+0.18f) +#define W_DISTORT_POWER (3.0f) //(2.0f) +//////////////////////////////////////////////////////////////////////////////// +*/ diff --git a/res/gamedata/shaders/r5/shared/watermove.h b/res/gamedata/shaders/r5/shared/watermove.h new file mode 100644 index 00000000000..77dda828095 --- /dev/null +++ b/res/gamedata/shaders/r5/shared/watermove.h @@ -0,0 +1,26 @@ +#ifndef _WATERMOVE_H +#define _WATERMOVE_H + +float4 watermove (float4 P) { + float3 wave1 = float3(0.11f,0.13f,0.07f)*W_POSITION_SHIFT_SPEED ; + float dh = sin (timers.x+dot((float3)P,wave1)) ; + P.y += dh * W_POSITION_SHIFT_HEIGHT ; + return P ; +} +float2 watermove_tc (float2 base, float2 P, float amp) { + float2 wave1 = float2 (0.2111f,0.2333f)*amp ; + float angle = timers.z + dot (P,wave1) ; + float du = sin (angle); + float dv = cos (angle); + return (base + amp*float2(du,dv)); +} + +float3 waterrefl (out float amount, float3 P, float3 N) { + float3 v2point = normalize (P-eye_position); + float3 vreflect= reflect (v2point, N); + float fresnel = (.5f + .5f*dot(vreflect,v2point)); + amount = 1 - fresnel*fresnel; // 0=full env, 1=no env + return vreflect; +} + +#endif diff --git a/res/gamedata/shaders/r5/shared/wmark.h b/res/gamedata/shaders/r5/shared/wmark.h new file mode 100644 index 00000000000..c997718f46e --- /dev/null +++ b/res/gamedata/shaders/r5/shared/wmark.h @@ -0,0 +1,24 @@ +#ifndef WMARK_H +#define WMARK_H +#include "common.h" + +#define NORMAL_SHIFT 0.007f +#define MIN_SHIFT 0.003f +#define MAX_SHIFT 0.011f +#define RANGE 100.f + +uniform float3 eye_direction; + +float4 wmark_shift (float3 pos, float3 norm) +{ + float3 P = pos; + float3 N = norm; + float3 sd = eye_position-P; + float d = length(sd); + float w = min(d/RANGE,1.f); + float s = lerp(MIN_SHIFT,MAX_SHIFT,d); + P += N.xyz*NORMAL_SHIFT; + P -= normalize(eye_direction + normalize(P-eye_position)) * s; + return float4 (P,1.f); +} +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r5/simple.ps b/res/gamedata/shaders/r5/simple.ps new file mode 100644 index 00000000000..135aba5b3e7 Binary files /dev/null and b/res/gamedata/shaders/r5/simple.ps differ diff --git a/res/gamedata/shaders/r5/simple_color.ps b/res/gamedata/shaders/r5/simple_color.ps new file mode 100644 index 00000000000..fc0fe57c620 Binary files /dev/null and b/res/gamedata/shaders/r5/simple_color.ps differ diff --git a/res/gamedata/shaders/r5/skin.h b/res/gamedata/shaders/r5/skin.h new file mode 100644 index 00000000000..985c1db37b8 --- /dev/null +++ b/res/gamedata/shaders/r5/skin.h @@ -0,0 +1,253 @@ +#ifndef SKIN_H +#define SKIN_H + +#include "common.h" +//RoH & SM+ +struct v_model_skinned_0 +{ + float4 P : POSITION; // (float,float,float,1) - quantized // short4 + float3 N : NORMAL; // normal // DWORD + float3 T : TANGENT; // tangent // DWORD + float3 B : BINORMAL; // binormal // DWORD + float2 tc : TEXCOORD0; // (u,v) // short2 +}; +struct v_model_skinned_1 // 24 bytes +{ + float4 P : POSITION; // (float,float,float,1) - quantized // short4 + float4 N : NORMAL; // (nx,ny,nz,index) // DWORD + float3 T : TANGENT; // tangent // DWORD + float3 B : BINORMAL; // binormal // DWORD + float2 tc : TEXCOORD0; // (u,v) // short2 +}; +struct v_model_skinned_2 // 28 bytes +{ + float4 P : POSITION; // (float,float,float,1) - quantized // short4 + float4 N : NORMAL; // (nx,ny,nz,weight) // DWORD + float3 T : TANGENT; // tangent // DWORD + float3 B : BINORMAL; // binormal // DWORD + float4 tc : TEXCOORD0; // (u,v, w=m-index0, z=m-index1) // short4 +}; + +struct v_model_skinned_3 // 28 bytes +{ + float4 P : POSITION; // (float,float,float,1) - quantized // short4 + float4 N : NORMAL; // (nx,ny,nz,weight0) // DWORD + float4 T : TANGENT; // (tx,ty,tz,weight1) // DWORD + float4 B : BINORMAL; // (bx,by,bz,m-index2) // DWORD + float4 tc : TEXCOORD0; // (u,v, w=m-index0, z=m-index1) // short4 +}; + +struct v_model_skinned_4 // 28 bytes +{ + float4 P : POSITION; // (float,float,float,1) - quantized // short4 + float4 N : NORMAL; // (nx,ny,nz,weight0) // DWORD + float4 T : TANGENT; // (tx,ty,tz,weight1) // DWORD + float4 B : BINORMAL; // (bx,by,bz,weight2) // DWORD + float2 tc : TEXCOORD0; // (u,v) // short2 + float4 ind: TEXCOORD1; // (x=m-index0, y=m-index1, z=m-index2, w=m-index3) // DWORD +}; + +////////////////////////////////////////////////////////////////////////////////////////// + +float4 u_position (float4 v) { return float4(v.xyz, 1.f); } // -12..+12 + +////////////////////////////////////////////////////////////////////////////////////////// +//uniform float4 sbones_array [256-22] : register(vs,c22); +//tbuffer SkeletonBones +//{ + float4 sbones_array [256-22]; +//} + +float3 skinning_dir (float3 dir, float3 m0, float3 m1, float3 m2) +{ + float3 U = unpack_normal (dir); + return float3 + ( + dot (m0, U), + dot (m1, U), + dot (m2, U) + ); +} +float4 skinning_pos (float4 pos, float4 m0, float4 m1, float4 m2) +{ + float4 P = u_position (pos); + return float4 + ( + dot (m0, P), + dot (m1, P), + dot (m2, P), + 1 + ); +} + +v_model skinning_0 (v_model_skinned_0 v) +{ + // Swizzle for D3DCOLOUR format + v.N = v.N.zyx; + v.T = v.T.zyx; + v.B = v.B.zyx; + + // skinning + v_model o; + o.P = u_position (v.P); + o.N = unpack_normal(v.N); + o.T = unpack_normal(v.T); + o.B = unpack_normal(v.B); + o.tc = v.tc; + return o; +} +v_model skinning_1 (v_model_skinned_1 v) +{ + // Swizzle for D3DCOLOUR format + v.N.xyz = v.N.zyx; + v.T.xyz = v.T.zyx; + v.B.xyz = v.B.zyx; + + // matrices + int mid = v.N.w * 255 + 0.3; + float4 m0 = sbones_array[mid+0]; + float4 m1 = sbones_array[mid+1]; + float4 m2 = sbones_array[mid+2]; + + // skinning + v_model o; + o.P = skinning_pos(v.P, m0,m1,m2 ); + o.N = skinning_dir(v.N, m0,m1,m2 ); + o.T = skinning_dir(v.T, m0,m1,m2 ); + o.B = skinning_dir(v.B, m0,m1,m2 ); + o.tc = v.tc; + return o; +} +v_model skinning_2 (v_model_skinned_2 v) +{ + // Swizzle for D3DCOLOUR format + v.N.xyz = v.N.zyx; + v.T.xyz = v.T.zyx; + v.B.xyz = v.B.zyx; + + // matrices + int id_0 = v.tc.z; + float4 m0_0 = sbones_array[id_0+0]; + float4 m1_0 = sbones_array[id_0+1]; + float4 m2_0 = sbones_array[id_0+2]; + int id_1 = v.tc.w; + float4 m0_1 = sbones_array[id_1+0]; + float4 m1_1 = sbones_array[id_1+1]; + float4 m2_1 = sbones_array[id_1+2]; + + // lerp + float w = v.N.w; + float4 m0 = lerp(m0_0,m0_1,w); + float4 m1 = lerp(m1_0,m1_1,w); + float4 m2 = lerp(m2_0,m2_1,w); + + // skinning + v_model o; + o.P = skinning_pos(v.P, m0,m1,m2 ); + o.N = skinning_dir(v.N, m0,m1,m2 ); + o.T = skinning_dir(v.T, m0,m1,m2 ); + o.B = skinning_dir(v.B, m0,m1,m2 ); + o.tc = v.tc; + return o; +} +v_model skinning_3 (v_model_skinned_3 v) +{ + // Swizzle for D3DCOLOUR format + v.N.xyz = v.N.zyx; + v.T.xyz = v.T.zyx; + v.B.xyz = v.B.zyx; + + // matrices + int id_0 = v.tc.z; + float4 m0_0 = sbones_array[id_0+0]; + float4 m1_0 = sbones_array[id_0+1]; + float4 m2_0 = sbones_array[id_0+2]; + int id_1 = v.tc.w; + float4 m0_1 = sbones_array[id_1+0]; + float4 m1_1 = sbones_array[id_1+1]; + float4 m2_1 = sbones_array[id_1+2]; + int id_2 = v.B.w*255+0.3; + float4 m0_2 = sbones_array[id_2+0]; + float4 m1_2 = sbones_array[id_2+1]; + float4 m2_2 = sbones_array[id_2+2]; + + // lerp + float w0 = v.N.w; + float w1 = v.T.w; + float w2 = 1-w0-w1; + float4 m0 = m0_0*w0; + float4 m1 = m1_0*w0; + float4 m2 = m2_0*w0; + + m0 += m0_1*w1; + m1 += m1_1*w1; + m2 += m2_1*w1; + + m0 += m0_2*w2; + m1 += m1_2*w2; + m2 += m2_2*w2; + + // skinning + v_model o; + o.P = skinning_pos(v.P, m0,m1,m2 ); + o.N = skinning_dir(v.N, m0,m1,m2 ); + o.T = skinning_dir(v.T, m0,m1,m2 ); + o.B = skinning_dir(v.B, m0,m1,m2 ); + o.tc = v.tc; +#ifdef SKIN_COLOR + o.rgb_tint = float3 (2,0,0) ; + if (id_0==id_1) o.rgb_tint = float3(1,2,0); +#endif + return o; +} +v_model skinning_4 (v_model_skinned_4 v) +{ + // Swizzle for D3DCOLOUR format + v.N.xyz = v.N.zyx; + v.T.xyz = v.T.zyx; + v.B.xyz = v.B.zyx; + v.ind.xyz = v.ind.zyx; + + // matrices + float id[4]; + float4 m[4][3]; // [bone index][matrix row or column???] + [unroll] + for (int i=0; i<4; ++i) + { + id[i] = v.ind[i]*255+0.3; + [unroll] + for (int j=0; j<3; ++j) + m[i][j] = sbones_array[id[i]+j]; + } + + // lerp + float w[4]; + w[0] = v.N.w; + w[1] = v.T.w; + w[2] = v.B.w; + w[3] = 1-w[0]-w[1]-w[2]; + + float4 m0 = m[0][0]*w[0]; + float4 m1 = m[0][1]*w[0]; + float4 m2 = m[0][2]*w[0]; + + [unroll] + for (int i=1; i<4; ++i) + { + m0 += m[i][0]*w[i]; + m1 += m[i][1]*w[i]; + m2 += m[i][2]*w[i]; + } + + // skinning + v_model o; + o.P = skinning_pos(v.P, m0,m1,m2 ); + o.N = skinning_dir(v.N, m0,m1,m2 ); + o.T = skinning_dir(v.T, m0,m1,m2 ); + o.B = skinning_dir(v.B, m0,m1,m2 ); + o.tc = v.tc; + + return o; +} + +#endif \ No newline at end of file diff --git a/res/gamedata/shaders/r3/sky2.ps b/res/gamedata/shaders/r5/sky2.ps similarity index 100% rename from res/gamedata/shaders/r3/sky2.ps rename to res/gamedata/shaders/r5/sky2.ps diff --git a/res/gamedata/shaders/r3/sky2.vs b/res/gamedata/shaders/r5/sky2.vs similarity index 100% rename from res/gamedata/shaders/r3/sky2.vs rename to res/gamedata/shaders/r5/sky2.vs diff --git a/res/gamedata/shaders/r3/sload.h b/res/gamedata/shaders/r5/sload.h similarity index 100% rename from res/gamedata/shaders/r3/sload.h rename to res/gamedata/shaders/r5/sload.h diff --git a/res/gamedata/shaders/r3/srgb.h b/res/gamedata/shaders/r5/srgb.h similarity index 100% rename from res/gamedata/shaders/r3/srgb.h rename to res/gamedata/shaders/r5/srgb.h diff --git a/res/gamedata/shaders/r5/ssao.ps b/res/gamedata/shaders/r5/ssao.ps new file mode 100644 index 00000000000..c1a1d58a456 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao.ps differ diff --git a/res/gamedata/shaders/r5/ssao_blur.ps b/res/gamedata/shaders/r5/ssao_blur.ps new file mode 100644 index 00000000000..61d0bf76e73 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_blur.ps differ diff --git a/res/gamedata/shaders/r5/ssao_calc.ps b/res/gamedata/shaders/r5/ssao_calc.ps new file mode 100644 index 00000000000..bde54946d19 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_calc.ps differ diff --git a/res/gamedata/shaders/r5/ssao_calc_msaa.ps b/res/gamedata/shaders/r5/ssao_calc_msaa.ps new file mode 100644 index 00000000000..b76f766b67d Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_calc_msaa.ps differ diff --git a/res/gamedata/shaders/r5/ssao_calc_nomsaa.ps b/res/gamedata/shaders/r5/ssao_calc_nomsaa.ps new file mode 100644 index 00000000000..aa1f6020636 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_calc_nomsaa.ps differ diff --git a/res/gamedata/shaders/r5/ssao_hbao.ps b/res/gamedata/shaders/r5/ssao_hbao.ps new file mode 100644 index 00000000000..b67f64acad9 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_hbao.ps differ diff --git a/res/gamedata/shaders/r5/ssao_hdao.cs b/res/gamedata/shaders/r5/ssao_hdao.cs new file mode 100644 index 00000000000..c869cf4f87b --- /dev/null +++ b/res/gamedata/shaders/r5/ssao_hdao.cs @@ -0,0 +1,3 @@ +#define SM_5_0 +#include "common.h" +#include "ssao_hdao_new.ps" \ No newline at end of file diff --git a/res/gamedata/shaders/r5/ssao_hdao.ps b/res/gamedata/shaders/r5/ssao_hdao.ps new file mode 100644 index 00000000000..badd69e0f95 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_hdao.ps differ diff --git a/res/gamedata/shaders/r5/ssao_hdao_msaa.cs b/res/gamedata/shaders/r5/ssao_hdao_msaa.cs new file mode 100644 index 00000000000..915d362fdaa --- /dev/null +++ b/res/gamedata/shaders/r5/ssao_hdao_msaa.cs @@ -0,0 +1 @@ +#include "ssao_hdao.cs" \ No newline at end of file diff --git a/res/gamedata/shaders/r5/ssao_hdao_new.ps b/res/gamedata/shaders/r5/ssao_hdao_new.ps new file mode 100644 index 00000000000..0af930f93d1 Binary files /dev/null and b/res/gamedata/shaders/r5/ssao_hdao_new.ps differ diff --git a/res/gamedata/shaders/r3/ssdo.ps b/res/gamedata/shaders/r5/ssdo.ps similarity index 100% rename from res/gamedata/shaders/r3/ssdo.ps rename to res/gamedata/shaders/r5/ssdo.ps diff --git a/res/gamedata/shaders/r5/stub_default.ps b/res/gamedata/shaders/r5/stub_default.ps new file mode 100644 index 00000000000..a447470b732 Binary files /dev/null and b/res/gamedata/shaders/r5/stub_default.ps differ diff --git a/res/gamedata/shaders/r5/stub_default.s b/res/gamedata/shaders/r5/stub_default.s new file mode 100644 index 00000000000..a40a95a86f1 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_default.s @@ -0,0 +1,9 @@ +function normal (shader, t_base, t_second, t_detail) + shader:begin ("stub_default","stub_default") + +-- Decouple sampler and texture +-- shader:sampler ("s_base") : texture(t_base) : clamp() : f_linear () +-- TODO: DX10: move stub_default to smp_rtlinear + shader:dx10texture ("s_base", t_base) + shader:dx10sampler ("smp_base") +end \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_default.vs b/res/gamedata/shaders/r5/stub_default.vs new file mode 100644 index 00000000000..59fced76731 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_default.vs @@ -0,0 +1,14 @@ +#include "common.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL I) +{ + v2p_TL O; + + O.HPos = mul( m_WVP, I.P); + O.Tex0 = I.Tex0; + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_default_ma.ps b/res/gamedata/shaders/r5/stub_default_ma.ps new file mode 100644 index 00000000000..86955845048 Binary files /dev/null and b/res/gamedata/shaders/r5/stub_default_ma.ps differ diff --git a/res/gamedata/shaders/r5/stub_notransform.vs b/res/gamedata/shaders/r5/stub_notransform.vs new file mode 100644 index 00000000000..2bd9b5848e1 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform.vs @@ -0,0 +1,15 @@ +#include "common_iostructs.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL I ) +{ + v2p_TL O; + + O.HPos = I.P; + O.Tex0 = I.Tex0; + // Some shaders that use this stub don't need Color at all + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_2uv.vs b/res/gamedata/shaders/r5/stub_notransform_2uv.vs new file mode 100644 index 00000000000..a2fbc63a892 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_2uv.vs @@ -0,0 +1,16 @@ +#include "common_iostructs.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL2uv main ( v_TL2uv I ) +{ + v2p_TL2uv O; + + O.HPos = I.P; + O.Tex0 = I.Tex0; + O.Tex1 = I.Tex1; + // Some shaders that use this stub don't need Color at all + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_aa_aa.vs b/res/gamedata/shaders/r5/stub_notransform_aa_aa.vs new file mode 100644 index 00000000000..7bfacc867b2 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_aa_aa.vs @@ -0,0 +1,32 @@ +#include "common_iostructs.h" + +uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_aa_AA main ( v_aa_AA I ) +{ + v2p_aa_AA O; + +// O.HPos = I.P; + + { + I.P.xy += 0.5f; +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + + O.Tex0 = I.Tex0; + O.Tex1 = I.Tex1; + O.Tex2 = I.Tex2; + O.Tex3 = I.Tex3; + O.Tex4 = I.Tex4; + O.Tex5 = I.Tex5; + O.Tex6 = I.Tex6; + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_build.vs b/res/gamedata/shaders/r5/stub_notransform_build.vs new file mode 100644 index 00000000000..2f85a894e2c --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_build.vs @@ -0,0 +1,27 @@ +#include "common_iostructs.h" + +float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_build main ( v_build I ) +{ + v2p_build O; + + { + + I.P.xy += 0.5f; // Bugs with rasterizer??? Possible float-pixel shift. +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + O.Tex0 = I.Tex0; + O.Tex1 = I.Tex1; + O.Tex2 = I.Tex2; + O.Tex3 = I.Tex3; + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_filter.vs b/res/gamedata/shaders/r5/stub_notransform_filter.vs new file mode 100644 index 00000000000..45245b62df6 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_filter.vs @@ -0,0 +1,30 @@ +#include "common_iostructs.h" + +float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_filter main ( v_filter I ) +{ + v2p_filter O; + +// O.HPos = I.P; + { + I.P.xy += 0.5f; // Bugs with rasterizer??? Possible float-pixel shift. +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + O.Tex0 = I.Tex0; + O.Tex1 = I.Tex1; + O.Tex2 = I.Tex2; + O.Tex3 = I.Tex3; + O.Tex4 = I.Tex4; + O.Tex5 = I.Tex5; + O.Tex6 = I.Tex6; + O.Tex7 = I.Tex7; + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_postpr.vs b/res/gamedata/shaders/r5/stub_notransform_postpr.vs new file mode 100644 index 00000000000..3f8b4a69a59 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_postpr.vs @@ -0,0 +1,31 @@ +#include "common_iostructs.h" + +uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_postpr main ( v_postpr I ) +{ + v2p_postpr O; + +// O.HPos = I.P; + + { + I.P.xy += 0.5f; +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + + O.Tex0 = I.Tex0; + O.Tex1 = I.Tex1; + O.Tex2 = I.Tex2; + + O.Color = I.Color.bgra; // swizzle vertex colour + O.Gray = I.Gray.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_t.vs b/res/gamedata/shaders/r5/stub_notransform_t.vs new file mode 100644 index 00000000000..d6b33b69d1a --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_t.vs @@ -0,0 +1,26 @@ +#include "common_iostructs.h" + +uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL_positiont I ) +{ + v2p_TL O; + +// O.HPos = P; + + { + I.P.xy += 0.5f; +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + O.Tex0 = I.Tex0; + O.Color = I.Color.bgra; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_t_m2.vs b/res/gamedata/shaders/r5/stub_notransform_t_m2.vs new file mode 100644 index 00000000000..a5d294888af --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_t_m2.vs @@ -0,0 +1,26 @@ +#include "common_iostructs.h" + +uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL_positiont I ) +{ + v2p_TL O; + +// O.HPos = P; + + { + I.P.xy += 0.5f; +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + O.Tex0 = I.Tex0; + O.Color = float4(I.Color.bgr*2, 1.0f); // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_t_m4.vs b/res/gamedata/shaders/r5/stub_notransform_t_m4.vs new file mode 100644 index 00000000000..bc5bcda5d80 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_t_m4.vs @@ -0,0 +1,26 @@ +#include "common_iostructs.h" + +uniform float4 screen_res; // Screen resolution (x-Width,y-Height, zw - 1/resolution) + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL_positiont I ) +{ + v2p_TL O; + +// O.HPos = P; + + { + I.P.xy += 0.5f; +// O.HPos.x = I.P.x/1024 * 2 - 1; +// O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.x = I.P.x * screen_res.z * 2 - 1; + O.HPos.y = (I.P.y * screen_res.w * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + O.Tex0 = I.Tex0; + O.Color = float4(I.Color.bgr*4, 1.0f); // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r5/stub_notransform_t_ma.vs b/res/gamedata/shaders/r5/stub_notransform_t_ma.vs new file mode 100644 index 00000000000..5c86da5d523 --- /dev/null +++ b/res/gamedata/shaders/r5/stub_notransform_t_ma.vs @@ -0,0 +1,22 @@ +#include "common_iostructs.h" + +////////////////////////////////////////////////////////////////////////////////////////// +// Vertex +v2p_TL main ( v_TL_positiont I ) +{ + v2p_TL O; + +// O.HPos = P; + + { + I.P.xy += 0.5f; + O.HPos.x = I.P.x/1024 * 2 - 1; + O.HPos.y = (I.P.y/768 * 2 - 1)*-1; + O.HPos.zw = I.P.zw; + } + + O.Tex0 = I.Tex0; + O.Color = I.Color.aaaa; // swizzle vertex colour + + return O; +} \ No newline at end of file diff --git a/res/gamedata/shaders/r3/stub_screen_space.vs b/res/gamedata/shaders/r5/stub_screen_space.vs similarity index 100% rename from res/gamedata/shaders/r3/stub_screen_space.vs rename to res/gamedata/shaders/r5/stub_screen_space.vs diff --git a/res/gamedata/shaders/r5/test.gs b/res/gamedata/shaders/r5/test.gs new file mode 100644 index 00000000000..de73f685ce4 --- /dev/null +++ b/res/gamedata/shaders/r5/test.gs @@ -0,0 +1,19 @@ +#include "common.h" + + +////////////////////////////////////////////////////////////////////////////////////////// +// Geometry +[maxvertexcount (3)] +void main(triangle v2p_TL In[3], inout TriangleStream triStream) +{ + v2p_TL Out; + + for(int v=0; v<3; v++) + { + Out.HPos = In[v].HPos; + Out.Tex0 = In[v].Tex0; + Out.Color = float4(0,0,1,1); // swizzle vertex colour + triStream.Append( Out ); + } + triStream.RestartStrip(); +} \ No newline at end of file diff --git a/res/gamedata/shaders/r3/tonemap_srgb.h b/res/gamedata/shaders/r5/tonemap_srgb.h similarity index 100% rename from res/gamedata/shaders/r3/tonemap_srgb.h rename to res/gamedata/shaders/r5/tonemap_srgb.h diff --git a/res/gamedata/shaders/r3/tonemapping.h b/res/gamedata/shaders/r5/tonemapping.h similarity index 100% rename from res/gamedata/shaders/r3/tonemapping.h rename to res/gamedata/shaders/r5/tonemapping.h diff --git a/res/gamedata/shaders/r5/vert.ps b/res/gamedata/shaders/r5/vert.ps new file mode 100644 index 00000000000..25c70c553ad Binary files /dev/null and b/res/gamedata/shaders/r5/vert.ps differ diff --git a/res/gamedata/shaders/r3/vert.vs b/res/gamedata/shaders/r5/vert.vs similarity index 100% rename from res/gamedata/shaders/r3/vert.vs rename to res/gamedata/shaders/r5/vert.vs diff --git a/res/gamedata/shaders/r3/water.ps b/res/gamedata/shaders/r5/water.ps similarity index 100% rename from res/gamedata/shaders/r3/water.ps rename to res/gamedata/shaders/r5/water.ps diff --git a/res/gamedata/shaders/r3/water.vs b/res/gamedata/shaders/r5/water.vs similarity index 100% rename from res/gamedata/shaders/r3/water.vs rename to res/gamedata/shaders/r5/water.vs diff --git a/res/gamedata/shaders/r3/water_regular.ps b/res/gamedata/shaders/r5/water_regular.ps similarity index 100% rename from res/gamedata/shaders/r3/water_regular.ps rename to res/gamedata/shaders/r5/water_regular.ps diff --git a/res/gamedata/shaders/r3/water_regular.vs b/res/gamedata/shaders/r5/water_regular.vs similarity index 100% rename from res/gamedata/shaders/r3/water_regular.vs rename to res/gamedata/shaders/r5/water_regular.vs diff --git a/res/gamedata/shaders/r3/water_ryaska.ps b/res/gamedata/shaders/r5/water_ryaska.ps similarity index 100% rename from res/gamedata/shaders/r3/water_ryaska.ps rename to res/gamedata/shaders/r5/water_ryaska.ps diff --git a/res/gamedata/shaders/r3/water_ryaska.vs b/res/gamedata/shaders/r5/water_ryaska.vs similarity index 100% rename from res/gamedata/shaders/r3/water_ryaska.vs rename to res/gamedata/shaders/r5/water_ryaska.vs diff --git a/res/gamedata/shaders/r5/water_soft.ps b/res/gamedata/shaders/r5/water_soft.ps new file mode 100644 index 00000000000..f9d21df8965 Binary files /dev/null and b/res/gamedata/shaders/r5/water_soft.ps differ diff --git a/res/gamedata/shaders/r3/water_studen.vs b/res/gamedata/shaders/r5/water_soft.vs similarity index 100% rename from res/gamedata/shaders/r3/water_studen.vs rename to res/gamedata/shaders/r5/water_soft.vs diff --git a/res/gamedata/shaders/r3/water_studen.ps b/res/gamedata/shaders/r5/water_studen.ps similarity index 100% rename from res/gamedata/shaders/r3/water_studen.ps rename to res/gamedata/shaders/r5/water_studen.ps diff --git a/res/gamedata/shaders/r3/water_underground.vs b/res/gamedata/shaders/r5/water_studen.vs similarity index 100% rename from res/gamedata/shaders/r3/water_underground.vs rename to res/gamedata/shaders/r5/water_studen.vs diff --git a/res/gamedata/shaders/r3/water_underground.ps b/res/gamedata/shaders/r5/water_underground.ps similarity index 100% rename from res/gamedata/shaders/r3/water_underground.ps rename to res/gamedata/shaders/r5/water_underground.ps diff --git a/res/gamedata/shaders/r5/water_underground.vs b/res/gamedata/shaders/r5/water_underground.vs new file mode 100644 index 00000000000..51a726ee39a --- /dev/null +++ b/res/gamedata/shaders/r5/water_underground.vs @@ -0,0 +1,2 @@ +#define NEED_SOFT_WATER +#include "water.vs" \ No newline at end of file diff --git a/res/gamedata/shaders/r3/waterd.ps b/res/gamedata/shaders/r5/waterd.ps similarity index 100% rename from res/gamedata/shaders/r3/waterd.ps rename to res/gamedata/shaders/r5/waterd.ps diff --git a/res/gamedata/shaders/r3/waterd.vs b/res/gamedata/shaders/r5/waterd.vs similarity index 100% rename from res/gamedata/shaders/r3/waterd.vs rename to res/gamedata/shaders/r5/waterd.vs diff --git a/res/gamedata/shaders/r5/waterd_soft.ps b/res/gamedata/shaders/r5/waterd_soft.ps new file mode 100644 index 00000000000..26a96c2bc72 Binary files /dev/null and b/res/gamedata/shaders/r5/waterd_soft.ps differ diff --git a/res/gamedata/shaders/r5/waterd_soft.vs b/res/gamedata/shaders/r5/waterd_soft.vs new file mode 100644 index 00000000000..430dbc3986f --- /dev/null +++ b/res/gamedata/shaders/r5/waterd_soft.vs @@ -0,0 +1,2 @@ +#define NEED_SOFT_WATER +#include "waterd.vs" \ No newline at end of file diff --git a/res/gamedata/shaders/r5/wmark.vs b/res/gamedata/shaders/r5/wmark.vs new file mode 100644 index 00000000000..382df5569b7 --- /dev/null +++ b/res/gamedata/shaders/r5/wmark.vs @@ -0,0 +1,30 @@ +#include "common.h" +#include "shared\wmark.h" + +struct vf +{ + float2 tc0 : TEXCOORD0; + float3 c0 : COLOR0; // c0=all lighting + float fog : FOG; + float4 hpos : SV_Position; +}; + +vf main (v_static v) +{ + vf o; + + float3 N = unpack_normal (v.Nh); + float4 P = wmark_shift (v.P,N); + o.hpos = mul (m_VP, P); // xform, input in world coords + o.tc0 = unpack_tc_base (v.tc,v.T.w,v.B.w); // copy tc + + //float3 L_rgb = v.color.xyz; // precalculated RGB lighting + //float3 L_hemi = v_hemi(N)*v.norm.w; // hemisphere + //float3 L_sun = v_sun(N)*v.color.w; // sun + //float3 L_final = L_rgb + L_hemi + L_sun + L_ambient ; + + o.c0 = 0; //L_final; + o.fog = saturate(calc_fogging (v.P)); // fog, input in world coords + + return o; +} diff --git a/res/gamedata/shaders/r5/yuv2rgb.ps b/res/gamedata/shaders/r5/yuv2rgb.ps new file mode 100644 index 00000000000..6ddcca40a40 Binary files /dev/null and b/res/gamedata/shaders/r5/yuv2rgb.ps differ diff --git a/src/Layers/xrRender/xrRender_console.cpp b/src/Layers/xrRender/xrRender_console.cpp index 614e020d196..b13d4dd3fef 100644 --- a/src/Layers/xrRender/xrRender_console.cpp +++ b/src/Layers/xrRender/xrRender_console.cpp @@ -852,6 +852,29 @@ class CCC_Fog_Reload : public IConsole_Command # endif // MASTER_GOLD #endif // (RENDER == R_R3) || (RENDER == R_R4) +class CCC_new_shader_support : public CCC_Mask +{ +public: + CCC_new_shader_support(pcstr N, Flags32* V, u32 M) : CCC_Mask(N, V, M) { ; }; + void Execute(LPCSTR args) override + { +#if RENDER == R_R4 + if (HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0) + { + CCC_Mask::Execute(args); + } + else + { + args = "off"; + CCC_Mask::Execute(args); + } +#else + args = "off"; + CCC_Mask::Execute(args); +#endif + } +}; + //----------------------------------------------------------------------- void xrRender_initconsole() { @@ -1089,7 +1112,7 @@ void xrRender_initconsole() CMD3(CCC_Token, "r3_water_refl", &ps_r_water_reflection, qwater_reflection_quality_token); CMD3(CCC_Mask, "r3_water_refl_half_depth", &ps_r2_ls_flags_ext, R3FLAGEXT_SSR_HALF_DEPTH); CMD3(CCC_Mask, "r3_water_refl_jitter", &ps_r2_ls_flags_ext, R3FLAGEXT_SSR_JITTER); - CMD3(CCC_Mask, "r4_new_shader_support", &ps_r2_ls_flags_ext, R4FLAGEXT_NEW_SHADER_SUPPORT); + CMD3(CCC_new_shader_support, "r4_new_shader_support", &ps_r2_ls_flags_ext, R4FLAGEXT_NEW_SHADER_SUPPORT); //CMD3(CCC_Mask, "r3_msaa", &ps_r2_ls_flags, R3FLAG_MSAA); CMD3(CCC_Token, "r3_msaa", &ps_r3_msaa, qmsaa_token); diff --git a/src/Layers/xrRender_R2/r2.h b/src/Layers/xrRender_R2/r2.h index 1c17cb20ab0..2606b72c161 100644 --- a/src/Layers/xrRender_R2/r2.h +++ b/src/Layers/xrRender_R2/r2.h @@ -414,7 +414,12 @@ class CRender final : public D3DXRenderBase #elif defined(USE_DX11) BackendAPI GetBackendAPI() const override { return IRender::BackendAPI::D3D11; } u32 get_dx_level() override { return HW.FeatureLevel >= D3D_FEATURE_LEVEL_10_1 ? 0x000A0001 : 0x000A0000; } - pcstr getShaderPath() override { return "r3\\"; } + pcstr getShaderPath() override + { + if (HW.FeatureLevel >= D3D_FEATURE_LEVEL_11_0) + return ps_r2_ls_flags_ext.test(R4FLAGEXT_NEW_SHADER_SUPPORT) ? "r5\\" : "r3\\"; + return "r3\\"; + } #elif defined(USE_OGL) BackendAPI GetBackendAPI() const override { return IRender::BackendAPI::OpenGL; } u32 get_dx_level() override { return /*HW.pDevice1?0x000A0001:*/0x000A0000; }