diff --git a/enbseries.ini b/enbseries.ini index 8a973cb..57d5616 100644 --- a/enbseries.ini +++ b/enbseries.ini @@ -144,22 +144,22 @@ GradientHorizonColorFilterDusk=0.973, 0.259, 0.133 GradientHorizonColorFilterNight=0.655, 0.816, 0.976 GradientHorizonColorFilterInteriorDay=1, 1, 1 GradientHorizonColorFilterInteriorNight=0.851, 0.863, 0.89 -CloudsIntensityDawn=0.92 -CloudsIntensitySunrise=1.070001 +CloudsIntensityDawn=0.74 +CloudsIntensitySunrise=0.920001 CloudsIntensityDay=1.240001 -CloudsIntensitySunset=1.040001 -CloudsIntensityDusk=0.900001 -CloudsIntensityNight=0.790001 +CloudsIntensitySunset=0.910001 +CloudsIntensityDusk=0.750001 +CloudsIntensityNight=0.440001 CloudsIntensityInteriorDay=1.17 -CloudsIntensityInteriorNight=0.7 -CloudsCurveDawn=1.13 -CloudsCurveSunrise=1.09 +CloudsIntensityInteriorNight=0.49 +CloudsCurveDawn=0.9 +CloudsCurveSunrise=0.95 CloudsCurveDay=1.0 -CloudsCurveSunset=1.1 -CloudsCurveDusk=1.16 -CloudsCurveNight=1.25 +CloudsCurveSunset=0.97 +CloudsCurveDusk=0.91 +CloudsCurveNight=0.86 CloudsCurveInteriorDay=1.02 -CloudsCurveInteriorNight=1.2 +CloudsCurveInteriorNight=0.83 CloudsDesaturationDawn=0.0 CloudsDesaturationSunrise=0.0 CloudsDesaturationDay=0.0 diff --git a/enbseries/VERSION b/enbseries/VERSION index ae8075b..c149d01 100644 --- a/enbseries/VERSION +++ b/enbseries/VERSION @@ -1 +1 @@ -3.3.0 "Red Sunset" +3.3.1 "Red Sunset" diff --git a/enbseries/enbdepthoffield.fx b/enbseries/enbdepthoffield.fx index 666df7b..f60b835 100644 --- a/enbseries/enbdepthoffield.fx +++ b/enbseries/enbdepthoffield.fx @@ -39,40 +39,6 @@ float distcha string UIName = "Distortion Chromatic Aberration"; string UIWidget = "Spinner"; > = {10.0}; -bool waterenable -< - string UIName = "Enable Underwater"; - string UIWidget = "Checkbox"; -> = {false}; -float3 uwm -< - string UIName = "Underwater Frequency"; - string UIWidget = "Vector"; - float3 UIMin = {0.0,0.0,0.0}; -> = {1.4,1.6,1.4}; -float3 uwf -< - string UIName = "Underwater Speed"; - string UIWidget = "Vector"; - float3 UIMin = {0.0,0.0,0.0}; -> = {10.0,8.0,16.0}; -float3 uws -< - string UIName = "Underwater Amplitude"; - string UIWidget = "Vector"; - float3 UIMin = {0.0,0.0,0.0}; -> = {0.3,0.5,0.8}; -float uwz -< - string UIName = "Underwater Zoom"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -bool wateralways -< - string UIName = "Always Underwater"; - string UIWidget = "Checkbox"; -> = {false}; bool heatenable < string UIName = "Enable Hot Air Refraction"; @@ -123,148 +89,37 @@ float heatfactor_dw < string UIName = "Heat Factor Dawn"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {0.2}; float heatfactor_sr < string UIName = "Heat Factor Sunrise"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {0.5}; float heatfactor_dy < string UIName = "Heat Factor Day"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {1.0}; float heatfactor_ss < string UIName = "Heat Factor Sunset"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {0.7}; float heatfactor_ds < string UIName = "Heat Factor Dusk"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {0.1}; float heatfactor_nt < string UIName = "Heat Factor Night"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {0.0}; float heatfactor_i < string UIName = "Heat Factor Interior"; string UIWidget = "Spinner"; - float UIMin = 0.0; > = {0.0}; -bool heatalways -< - string UIName = "Heat Always Enable"; - string UIWidget = "Checkbox"; -> = {false}; -bool frostenable -< - string UIName = "Enable Screen Frost"; - string UIWidget = "Checkbox"; -> = {false}; -float frostpow -< - string UIName = "Frost Contrast"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float froststrength -< - string UIName = "Frost Strength"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float frostrpow -< - string UIName = "Frost Radial Contrast"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float frostrmult -< - string UIName = "Frost Radial Intensity"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float frostrbump -< - string UIName = "Frost Radial Offset"; - string UIWidget = "Spinner"; -> = {0.0}; -float frostblend -< - string UIName = "Frost Texture Blend"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float frostbpow -< - string UIName = "Frost Texture Blend Contrast"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float frostsize -< - string UIName = "Frost Texture Size"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float frostfactor_dw -< - string UIName = "Frost Factor Dawn"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.1}; -float frostfactor_sr -< - string UIName = "Frost Factor Sunrise"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float frostfactor_dy -< - string UIName = "Frost Factor Day"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float frostfactor_ss -< - string UIName = "Frost Factor Sunset"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float frostfactor_ds -< - string UIName = "Frost Factor Dusk"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.1}; -float frostfactor_nt -< - string UIName = "Frost Factor Night"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float frostfactor_i -< - string UIName = "Frost Factor Interior"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -bool frostalways -< - string UIName = "Frost Always Enable"; - string UIWidget = "Checkbox"; -> = {false}; string str_focus = "Focusing Parameters"; /* focus modes: @@ -1197,22 +1052,6 @@ Texture2D TextureHeat string ResourceName = "menbheat.png"; #endif >; -Texture2D TextureFrost -< -#ifdef FROST_DDS - string ResourceName = "menbfrost.dds"; -#else - string ResourceName = "menbfrost.png"; -#endif ->; -Texture2D TextureFrostBump -< -#ifdef FROSTBUMP_DDS - string ResourceName = "menbfrostbump.dds"; -#else - string ResourceName = "menbfrostbump.png"; -#endif ->; SamplerState Sampler0 { @@ -1541,21 +1380,6 @@ float4 PS_SSAOApply( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target return res*mud; } -/* - Underwater distortion, which currently has no real use due to Boris being - lazy. fWaterLevel doesn't yet provide any usable values. -*/ -float2 UnderwaterDistort( float2 coord ) -{ - if ( !wateralways ) return coord; - float2 ofs = float2(0.0,0.0); - float siny = sin(pi*2.0*(coord.y*uwm.x+Timer.x*uwf.x*100.0))*uws.x; - ofs.y = siny+sin(pi*2.0*(coord.x*uwm.y+Timer.x*uwf.y*100.0))*uws.y; - ofs.x = siny+sin(pi*2.0*(coord.x*uwm.z+Timer.x*uwf.z*100.0))*uws.z; - ofs -= (coord-0.5)*2.0*uwz; - return coord+ofs*0.01; -} - /* Distant hot air refraction. Not very realistic, but does the job. */ float2 DistantHeat( float2 coord ) { @@ -1565,8 +1389,8 @@ float2 DistantHeat( float2 coord ) float distfade = clamp(pow(max(0,dep),heatfadepow)*heatfademul +heatfadebump,0.0,1.0); if ( distfade <= 0.0 ) return coord; - float todpow = todx_ind(heatfactor); - if ( !heatalways && (todpow <= 0.0) ) return coord; + float todpow = max(0.0,todx_ind(heatfactor)); + if ( todpow <= 0.0 ) return coord; if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); float2 nc = coord*(bresl/HEATSIZE)*heatsize; @@ -1575,7 +1399,7 @@ float2 DistantHeat( float2 coord ) ofs = (ofs-0.5)*2.0; ofs *= pow(length(ofs),heatpow); ofs *= todpow; - if ( !heatalways ) ofs *= max(0.0,warmfactor-coldfactor); + /*ofs *= max(0.0,warmfactor-coldfactor);*/ odep = TextureDepth.SampleLevel(Sampler1,coord+ofs*heatstrength *distfade*0.01,0).x; float odistfade = clamp(pow(max(0,odep),heatfadepow)*heatfademul @@ -1592,7 +1416,6 @@ float4 PS_Distortion( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); float2 ofs = coord; - if ( waterenable ) ofs = UnderwaterDistort(ofs); if ( heatenable ) ofs = DistantHeat(ofs); ofs -= coord; float4 res; @@ -1843,61 +1666,11 @@ float4 PS_DoFPostBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target return res; } -/* Screen frost shader. Not very realistic either, but looks fine too. */ -float2 ScreenFrost( float2 coord ) -{ - float2 bresl; - if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; - else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 nc = coord*(bresl/FROSTSIZE)*frostsize; - float2 ofs = TextureFrostBump.Sample(Sampler2,nc).xy; - ofs = (ofs-0.5)*2.0; - ofs *= pow(length(ofs),frostpow)*froststrength; - float todpow = todx_ind(frostfactor); - if ( !frostalways ) ofs *= max(0.0,coldfactor-warmfactor)*todpow; - else ofs *= todpow; - float dist = distance(coord,float2(0.5,0.5))*2.0; - ofs *= clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0,1.0); - return coord+ofs; -} - /* screen frost overlay */ -float4 PS_FrostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +float4 PS_DebugFocus( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target { float2 coord = IN.txcoord.xy; - float2 bresl; - if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; - else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float4 res; - [branch] if ( frostenable ) - { - float2 ofs = ScreenFrost(coord); - ofs -= coord; - if ( (distcha != 0.0) && (length(ofs) != 0.0) ) - { - float2 ofr, ofg, ofb; - ofr = ofs*(1.0-distcha*0.01); - ofg = ofs; - ofb = ofs*(1.0+distcha*0.01); - res = float4(TextureColor.Sample(Sampler1,coord+ofr).r, - TextureColor.Sample(Sampler1,coord+ofg).g, - TextureColor.Sample(Sampler1,coord+ofb).b,1.0); - } - else res = TextureColor.Sample(Sampler1,coord+ofs); - float2 nc = coord*(bresl/FROSTSIZE)*frostsize; - float bmp = pow(max(0,TextureFrost.SampleLevel(Sampler2,nc, - 0).x),frostbpow); - float dist = distance(coord,float2(0.5,0.5))*2.0; - dist = clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0, - 1.0)*frostblend; - float todpow = todx_ind(frostfactor); - /* Weathers not implemented in FO4 ENB as of 0.291 */ - if ( !frostalways ) - dist *= max(0.0,coldfactor-warmfactor)*todpow; - else dist *= todpow; - res.rgb *= 1.0+bmp*dist; - } - else res = TextureColor.Sample(Sampler1,coord); + float4 res = TextureColor.Sample(Sampler1,coord); if ( !focusdisplay || (focuscircle == -1) ) return res; if ( focuscircle == -2 ) { @@ -2032,7 +1805,7 @@ technique11 Prepass8 pass p0 { SetVertexShader(CompileShader(vs_5_0,VS_Quad())); - SetPixelShader(CompileShader(ps_5_0,PS_FrostPass())); + SetPixelShader(CompileShader(ps_5_0,PS_DebugFocus())); } } @@ -2105,7 +1878,7 @@ technique11 PrepassB8 pass p0 { SetVertexShader(CompileShader(vs_5_0,VS_Quad())); - SetPixelShader(CompileShader(ps_5_0,PS_FrostPass())); + SetPixelShader(CompileShader(ps_5_0,PS_DebugFocus())); } } diff --git a/enbseries/enbdepthoffield.fx.ini b/enbseries/enbdepthoffield.fx.ini index df886d8..e02fa2a 100644 --- a/enbseries/enbdepthoffield.fx.ini +++ b/enbseries/enbdepthoffield.fx.ini @@ -6,12 +6,6 @@ Depth Cutoff=999998.0 Near Z=0.05 Far Z=3098.0 Distortion Chromatic Aberration=9.5 -Enable Underwater=false -Underwater Frequency=2.36, 3.39, 2.72 -Underwater Speed=24.3, 21.9, 26.5 -Underwater Amplitude=0.1, 0.11, 0.07 -Underwater Zoom=0.15 -Always Underwater=false Enable Hot Air Refraction=true Heat Texture Size=11.71 Heat Speed=0.56 @@ -20,31 +14,13 @@ Heat Fade Intensity=1.14 Heat Fade Offset=-0.81 Heat Intensity=0.45 Heat Contrast=1.19 -Heat Factor Dawn=0.0 +Heat Factor Dawn=-0.17 Heat Factor Sunrise=0.62 Heat Factor Day=1.06 Heat Factor Sunset=0.54 -Heat Factor Dusk=0.0 -Heat Factor Night=0.0 +Heat Factor Dusk=-0.14 +Heat Factor Night=-0.51 Heat Factor Interior=0.0 -Heat Always Enable=true -Enable Screen Frost=false -Frost Contrast=1.67 -Frost Strength=0.02 -Frost Radial Contrast=1.67 -Frost Radial Intensity=0.83 -Frost Radial Offset=-0.66 -Frost Texture Blend=0.94 -Frost Texture Blend Contrast=2.44 -Frost Texture Size=0.85 -Frost Factor Dawn=0.0 -Frost Factor Sunrise=0.0 -Frost Factor Day=0.0 -Frost Factor Sunset=0.0 -Frost Factor Dusk=0.0 -Frost Factor Night=1.06 -Frost Factor Interior=0.0 -Frost Always Enable=true Focus Mode=1 Display Focus Points=false Enable Manual Focus=false @@ -156,9 +132,9 @@ Depth Grading Intensity Interior=1.73 Depth Grading Shift Night=-1.41 Depth Grading Shift Day=-1.27 Depth Grading Shift Interior=-1.37 -Depth Grading Blend Night=1.0 -Depth Grading Blend Day=1.0 -Depth Grading Blend Interior=1.0 +Depth Grading Blend Night=0.3 +Depth Grading Blend Day=0.4 +Depth Grading Blend Interior=0.5 Enable RGB Grading=true Grading Intensity Night Red=1.0 Grading Intensity Night Green=1.0 diff --git a/enbseries/enbeffect.fx b/enbseries/enbeffect.fx index f0d72fc..ef5bd28 100644 --- a/enbseries/enbeffect.fx +++ b/enbseries/enbeffect.fx @@ -6,6 +6,107 @@ */ #include "menbglobaldefs.fx" +string str_misc = "Miscellaneous"; +/* fixed resolution, keeps blur filters at a consistent internal resolution */ +int2 fixed +< + string UIName = "Fixed Resolution"; + string UIWidget = "Vector"; + int2 UIMin = {0,0}; +> = {1920,1080}; +string str_dist = "Distortion Filters"; +float distcha +< + string UIName = "Distortion Chromatic Aberration"; + string UIWidget = "Spinner"; +> = {10.0}; +bool frostenable +< + string UIName = "Enable Screen Frost"; + string UIWidget = "Checkbox"; +> = {false}; +float frostpow +< + string UIName = "Frost Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float froststrength +< + string UIName = "Frost Strength"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostrpow +< + string UIName = "Frost Radial Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostrmult +< + string UIName = "Frost Radial Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostrbump +< + string UIName = "Frost Radial Offset"; + string UIWidget = "Spinner"; +> = {0.0}; +float frostblend +< + string UIName = "Frost Texture Blend"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostbpow +< + string UIName = "Frost Texture Blend Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostsize +< + string UIName = "Frost Texture Size"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostfactor_dw +< + string UIName = "Frost Factor Dawn"; + string UIWidget = "Spinner"; +> = {0.1}; +float frostfactor_sr +< + string UIName = "Frost Factor Sunrise"; + string UIWidget = "Spinner"; +> = {0.0}; +float frostfactor_dy +< + string UIName = "Frost Factor Day"; + string UIWidget = "Spinner"; +> = {0.0}; +float frostfactor_ss +< + string UIName = "Frost Factor Sunset"; + string UIWidget = "Spinner"; +> = {0.0}; +float frostfactor_ds +< + string UIName = "Frost Factor Dusk"; + string UIWidget = "Spinner"; +> = {0.1}; +float frostfactor_nt +< + string UIName = "Frost Factor Night"; + string UIWidget = "Spinner"; +> = {0.25}; +float frostfactor_i +< + string UIName = "Frost Factor Interior"; + string UIWidget = "Spinner"; +> = {0.0}; string str_noise = "Film Grain"; bool ne < @@ -109,14 +210,13 @@ string str_tonemap = "Tone Mapping"; 3 : Uncharted 2 4 : Hejl Dawson 5 : Haarm-Peter Duiker - 6 : SweetFX */ int tmapenable < string UIName = "Tonemapping Method"; string UIWidget = "Spinner"; int UIMin = -1; - int UIMax = 6; + int UIMax = 5; > = {3}; float tmapexposure_n < @@ -262,126 +362,6 @@ float unW_i string UIName = "Uncharted2 Linear White Interior"; string UIWidget = "Spinner"; > = {10.0}; -float sfxgamma_n -< - string UIName = "SweetFX Gamma Night"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 2.0; -> = {1.0}; -float sfxgamma_d -< - string UIName = "SweetFX Gamma Day"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 2.0; -> = {1.0}; -float sfxgamma_i -< - string UIName = "SweetFX Gamma Interior"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 2.0; -> = {1.0}; -float sfxexposure_n -< - string UIName = "SweetFX Exposure Night"; - string UIWidget = "Spinner"; - float UIMin = -1.0; - float UIMax = 1.0; -> = {0.0}; -float sfxexposure_d -< - string UIName = "SweetFX Exposure Day"; - string UIWidget = "Spinner"; - float UIMin = -1.0; - float UIMax = 1.0; -> = {0.0}; -float sfxexposure_i -< - string UIName = "SweetFX Exposure Interior"; - string UIWidget = "Spinner"; - float UIMin = -1.0; - float UIMax = 1.0; -> = {0.0}; -float sfxsaturation_n -< - string UIName = "SweetFX Saturation Night"; - string UIWidget = "Spinner"; - float UIMin = -1.0; - float UIMax = 1.0; -> = {0.0}; -float sfxsaturation_d -< - string UIName = "SweetFX Saturation Day"; - string UIWidget = "Spinner"; - float UIMin = -1.0; - float UIMax = 1.0; -> = {0.0}; -float sfxsaturation_i -< - string UIName = "SweetFX Saturation Interior"; - string UIWidget = "Spinner"; - float UIMin = -1.0; - float UIMax = 1.0; -> = {0.0}; -float sfxbleach_n -< - string UIName = "SweetFX Bleach Night"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.0}; -float sfxbleach_d -< - string UIName = "SweetFX Bleach Day"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.0}; -float sfxbleach_i -< - string UIName = "SweetFX Bleach Interior"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.0}; -float sfxdefog_n -< - string UIName = "SweetFX Defog Night"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.0}; -float sfxdefog_d -< - string UIName = "SweetFX Defog Day"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.0}; -float sfxdefog_i -< - string UIName = "SweetFX Defog Interior"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.0}; -float3 sfxfogcolor_n -< - string UIName = "SweetFX Defog Color Night"; - string UIWidget = "Color"; -> = {0.0,0.0,1.0}; -float3 sfxfogcolor_d -< - string UIName = "SweetFX Defog Color Day"; - string UIWidget = "Color"; -> = {0.0,0.0,1.0}; -float3 sfxfogcolor_i -< - string UIName = "SweetFX Defog Color Interior"; - string UIWidget = "Color"; -> = {0.0,0.0,1.0}; /* Color grading */ string str_grade = "Color Grading Suite"; @@ -720,6 +700,14 @@ Texture2D TextureTonemap < string ResourceName = "menbfilmlut.png"; >; +Texture2D TextureFrost +< +#ifdef FROST_DDS + string ResourceName = "menbfrost.dds"; +#else + string ResourceName = "menbfrost.png"; +#endif +>; SamplerState Sampler0 { @@ -733,6 +721,13 @@ SamplerState Sampler1 AddressU = Clamp; AddressV = Clamp; }; +SamplerState Sampler2 +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + SamplerState SamplerLUT { Filter = MIN_MAG_MIP_LINEAR; @@ -875,31 +870,6 @@ float3 TonemapHejlDawson( float3 res ) float3 x = max(0.0,res-0.004); return (x*(6.2*x+.5))/(x*(6.2*x+1.7)+0.06); } -/* The standard tonemap from sweetfx */ -float3 TonemapSFX( float3 res ) -{ - float Gamma = tod_ind(sfxgamma); - float Exposure = tod_ind(sfxexposure); - float Saturation = tod_ind(sfxsaturation); - float Bleach = tod_ind(sfxbleach); - float Defog = tod_ind(sfxdefog); - float3 FogColor = tod_ind(sfxfogcolor); - float3 tcol = res; - tcol = saturate(tcol-Defog*FogColor*2.55); - tcol *= pow(2.0,Exposure); - tcol = pow(tcol,Gamma); - float lum = luminance(tcol); - float L = saturate(1.0*(lum-0.45)); - float3 A2 = Bleach*tcol; - float3 res1 = 2.0*tcol*lum; - float3 res2 = 1.0-2.0*(1.0-lum)*(1.0-tcol); - float3 newc = lerp(res1,res2,L); - float3 mixrgb = A2*newc; - tcol += (1.0-A2)*mixrgb; - float3 gray = dot(tcol,1.0/3.0); - float3 diff = tcol-gray; - return (tcol+diff*Saturation)/(1+(diff*Saturation)); -} float3 Tonemap( float3 res ) { float3 tcol = pow(max(res,0.0),1.0/2.2); @@ -907,8 +877,7 @@ float3 Tonemap( float3 res ) res *= tod_ind(tmapexposure); float tblend = tod_ind(tmapblend); float3 mapped; - if ( tmapenable == 6 ) mapped = TonemapSFX(res); - else if ( tmapenable == 5 ) mapped = TonemapHaarmPeterDuiker(res); + if ( tmapenable == 5 ) mapped = TonemapHaarmPeterDuiker(res); else if ( tmapenable == 4 ) mapped = TonemapHejlDawson(res); else if ( tmapenable == 3 ) mapped = TonemapUC2(res); else if ( tmapenable == 2 ) mapped = TonemapReinhard(res); @@ -1111,15 +1080,87 @@ float2 Adaptation( float2 coord ) #endif } +/* Screen frost shader. Not very realistic either, but looks fine too. */ +float2 ScreenFrost( float2 coord ) +{ + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 nc = coord*(bresl/FROSTSIZE)*frostsize; + float2 ofs = TextureFrost.Sample(Sampler2,nc).xy; + ofs = (ofs-0.5)*2.0; + ofs *= pow(length(ofs),frostpow)*froststrength; + float todpow = max(0.0,todx_ind(frostfactor)); + ofs *= todpow; + /*ofs *= max(0.0,coldfactor-warmfactor);*/ + float dist = distance(coord,float2(0.5,0.5))*2.0; + ofs *= clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0,1.0); + return coord+ofs; +} + float4 PS_Draw( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target { float2 coord = IN.txcoord0.xy; - float4 res = TextureColor.Sample(Sampler0,coord); + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float4 res, mud; + [branch] if ( frostenable ) + { + float2 ofs = ScreenFrost(coord); + ofs -= coord; + if ( (distcha != 0.0) && (length(ofs) != 0.0) ) + { + float2 ofr, ofg, ofb; + ofr = ofs*(1.0-distcha*0.01); + ofg = ofs; + ofb = ofs*(1.0+distcha*0.01); + res = float4(TextureColor.Sample(Sampler0,coord+ofr).r, + TextureColor.Sample(Sampler0,coord+ofg).g, + TextureColor.Sample(Sampler0,coord+ofb).b,1.0); #ifdef SKYRIMSE - float4 mud = TextureBloom.Sample(Sampler1,coord); + mud = float4(TextureBloom.Sample(Sampler1,coord+ofr).r, + TextureBloom.Sample(Sampler1,coord+ofg).g, + TextureBloom.Sample(Sampler1,coord+ofb).b,1.0); #else - float4 mud = TextureBloom.Sample(Sampler1,Params01[4].zw*coord); + mud = float4(TextureBloom.Sample(Sampler1, + Params01[4].zw*(coord+ofr)).r, + TextureBloom.Sample(Sampler1,Params01[4].zw + *(coord+ofg)).g,TextureBloom.Sample(Sampler1, + Params01[4].zw*(coord+ofb)).b,1.0); #endif + } + else + { + res = TextureColor.Sample(Sampler0,coord+ofs); +#ifdef SKYRIMSE + mud = TextureBloom.Sample(Sampler1,coord+ofs); +#else + mud = TextureBloom.Sample(Sampler1,Params01[4].zw + *(coord+ofs)); +#endif + } + float2 nc = coord*(bresl/FROSTSIZE)*frostsize; + float bmp = pow(max(0,TextureFrost.SampleLevel(Sampler2,nc, + 0).z),frostbpow); + float dist = distance(coord,float2(0.5,0.5))*2.0; + dist = clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0, + 1.0)*frostblend; + float todpow = max(0.0,todx_ind(frostfactor)); + dist *= todpow; + /* Weathers not implemented in FO4 ENB as of 0.291 */ + /*dist *= max(0.0,coldfactor-warmfactor);*/ + res.rgb *= 1.0+bmp*dist; + } + else + { + res = TextureColor.Sample(Sampler0,coord); +#ifdef SKYRIMSE + mud = TextureBloom.Sample(Sampler1,coord); +#else + mud = TextureBloom.Sample(Sampler1,Params01[4].zw*coord); +#endif + } /* Insert MariENB filters here */ float2 adapt = Adaptation(coord); if ( bloomdebug ) res.rgb *= 0; diff --git a/enbseries/enbeffect.fx.ini b/enbseries/enbeffect.fx.ini index 5a59d30..caedb26 100644 --- a/enbseries/enbeffect.fx.ini +++ b/enbseries/enbeffect.fx.ini @@ -1,5 +1,24 @@ [ENBEFFECT.FX] TECHNIQUE=1 +Fixed ResolutionX=1920 +Fixed ResolutionY=1080 +Distortion Chromatic Aberration=9.5 +Enable Screen Frost=false +Frost Contrast=1.67 +Frost Strength=0.02 +Frost Radial Contrast=1.67 +Frost Radial Intensity=0.83 +Frost Radial Offset=-0.66 +Frost Texture Blend=0.94 +Frost Texture Blend Contrast=2.44 +Frost Texture Size=0.85 +Frost Factor Dawn=0.0 +Frost Factor Sunrise=0.0 +Frost Factor Day=0.0 +Frost Factor Sunset=0.0 +Frost Factor Dusk=0.0 +Frost Factor Night=1.06 +Frost Factor Interior=0.0 Enable Grain=true Grain Speed=25.0 Grain Intensity=0.250001 diff --git a/enbseries/menbfrost.png b/enbseries/menbfrost.png index 9cf9f2b..cb31b6a 100644 Binary files a/enbseries/menbfrost.png and b/enbseries/menbfrost.png differ diff --git a/enbseries/menbfrostbump.png b/enbseries/menbfrostbump.png deleted file mode 100644 index 7ee8022..0000000 Binary files a/enbseries/menbfrostbump.png and /dev/null differ