diff --git a/enbseries/menbeffectfilters.fx b/enbseries/menbeffectfilters.fx index bae5881..1e5d45f 100644 --- a/enbseries/menbeffectfilters.fx +++ b/enbseries/menbeffectfilters.fx @@ -215,7 +215,8 @@ float3 GradingLUT( float3 res ) volume maps, but PS 3.0 has a limit of 16 samplers and I think ENB can't load volume maps anyway. */ - float3 tcol = clamp(res,0.0,1.0)*0.875+0.0625; + float3 tcol = clamp(res,0.0,1.0); + tcol.rg = tcol.rg*0.5+0.25; float2 lc1 = float2(tcol.r/16.0+floor(tcol.b*16.0)/16.0,tcol.g/64.0 +clut/64.0); float2 lc2 = float2(tcol.r/16.0+ceil(tcol.b*16.0)/16.0,tcol.g/64.0 @@ -224,7 +225,6 @@ float3 GradingLUT( float3 res ) float3 tcl1 = tex2D(SamplerLUT,lc1); float3 tcl2 = tex2D(SamplerLUT,lc2); tcol = lerp(tcl1,tcl2,dec); - tcol = (tcol-0.0625)/0.875; float lutblend = lerp(lerp(lutblend_n,lutblend_d,tod),lerp(lutblend_in, lutblend_id,tod),ind); return lerp(res,tcol,lutblend); diff --git a/enbseries/menbeffectinternals.fx b/enbseries/menbeffectinternals.fx index bb118a5..851aa28 100644 --- a/enbseries/menbeffectinternals.fx +++ b/enbseries/menbeffectinternals.fx @@ -177,8 +177,8 @@ sampler2D SamplerLUT = sampler_state MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; + AddressU = Clamp; + AddressV = Clamp; SRGBTexture = FALSE; MaxMipLevel = 0; MipMapLodBias = 0; diff --git a/enbseries/menbextrafilters.fx b/enbseries/menbextrafilters.fx index c26fb0c..72e2678 100644 --- a/enbseries/menbextrafilters.fx +++ b/enbseries/menbextrafilters.fx @@ -373,12 +373,81 @@ float4 PS_Curvature( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR res.rgb = idist.rgb; return res; } +/* Why am I doing this */ +float4 PS_Blur( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord.xy; + float4 res = tex2D(SamplerColor,coord); + if ( !bssblurenable ) return res; + float2 ofs[16] = + { + float2(1.0,1.0), float2(-1.0,-1.0), + float2(-1.0,1.0), float2(1.0,-1.0), + + float2(1.0,0.0), float2(-1.0,0.0), + float2(0.0,1.0), float2(0.0,-1.0), + + float2(1.41,0.0), float2(-1.41,0.0), + float2(0.0,1.41), float2(0.0,-1.41), + + float2(1.41,1.41), float2(-1.41,-1.41), + float2(-1.41,1.41), float2(1.41,-1.41) + }; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bssblurradius; + int i; + [unroll] for ( i=0; i<16; i++ ) + res += tex2D(SamplerColor,coord+ofs[i]*bof); + res /= 17.0; + res.a = 1.0; + return res; +} +float4 PS_Sharp( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord.xy; + float4 res = tex2D(SamplerColor,coord); + if ( !bsssharpenable ) return res; + float2 ofs[8] = + { + float2(1.0,1.0), float2(-1.0,-1.0), + float2(-1.0,1.0), float2(1.0,-1.0), + + float2(1.41,1.41), float2(-1.41,-1.41), + float2(-1.41,1.41), float2(1.41,-1.41) + }; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bsssharpradius; + float4 tcol = res; + int i; + [unroll] for ( i=0; i<8; i++ ) + tcol += tex2D(SamplerColor,coord+ofs[i]*bof); + tcol /= 9.0; + float4 orig = res; + res = orig*(1.0+dot(orig.rgb-tcol.rgb,0.333333)*bsssharpamount); + float rg = clamp(pow(orig.b,3.0),0.0,1.0); + res = lerp(res,orig,rg); + res.a = 1.0; + return res; +} +float4 PS_Shift( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord.xy; + float4 res = tex2D(SamplerColor,coord); + if ( !bssshiftenable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bssshiftradius; + res.g = tex2D(SamplerColor,coord).g; + res.r = tex2D(SamplerColor,coord+float2(0,-bof.y)).r; + res.b = tex2D(SamplerColor,coord+float2(0,bof.y)).b; + res.a = 1.0; + return res; +} technique PostProcess { pass p0 { VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_ChromaKey(); + PixelShader = compile ps_3_0 PS_Blur(); DitherEnable = FALSE; ZEnable = FALSE; CullMode = NONE; @@ -395,7 +464,7 @@ technique PostProcess2 pass p0 { VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_Retro(); + PixelShader = compile ps_3_0 PS_Sharp(); DitherEnable = FALSE; ZEnable = FALSE; CullMode = NONE; @@ -412,7 +481,7 @@ technique PostProcess3 pass p0 { VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_ASCII(); + PixelShader = compile ps_3_0 PS_Shift(); DitherEnable = FALSE; ZEnable = FALSE; CullMode = NONE; @@ -429,7 +498,7 @@ technique PostProcess4 pass p0 { VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_DotMatrix(); + PixelShader = compile ps_3_0 PS_ChromaKey(); DitherEnable = FALSE; ZEnable = FALSE; CullMode = NONE; @@ -442,6 +511,57 @@ technique PostProcess4 } } technique PostProcess5 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Retro(); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess6 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_ASCII(); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess7 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_DotMatrix(); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess8 { pass p0 { diff --git a/enbseries/menbextrasettings.fx b/enbseries/menbextrasettings.fx index da17694..168a36b 100644 --- a/enbseries/menbextrasettings.fx +++ b/enbseries/menbextrasettings.fx @@ -242,3 +242,44 @@ float curvesoft string UIWidget = "Spinner"; float UIMin = 0.0; > = {0.0}; +/* BlurSharpShift, some people are obsessed with this nonsense */ +string str_bss = "BlurSharpShift"; +bool bssblurenable +< + string UIName = "Enable Blur"; + string UIWidget = "Checkbox"; +> = {false}; +float bssblurradius +< + string UIName = "Blur Sampling Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.25}; +bool bsssharpenable +< + string UIName = "Enable Sharp"; + string UIWidget = "Checkbox"; +> = {false}; +float bsssharpradius +< + string UIName = "Sharp Sampling Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float bsssharpamount +< + string UIName = "Sharpening Amount"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {6.0}; +bool bssshiftenable +< + string UIName = "Enable Shift"; + string UIWidget = "Checkbox"; +> = {false}; +float bssshiftradius +< + string UIName = "Shift Sampling Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.75}; diff --git a/enbseries/menblutpreset.png b/enbseries/menblutpreset.png index 69ed40f..0f54c92 100644 Binary files a/enbseries/menblutpreset.png and b/enbseries/menblutpreset.png differ