//++++++++++++++++++++++++++++++ // CryENB V3 EFFECT.TXT FILE // FXAA converted by Myster92, rest made by Boris Vorontsov, tweaked by Fabriciuz // Copyright: Boris Vorontsov, MysTer92, Timothy Lottes & Fabriciuz //++++++++++++++++++++++++++++++ float SharpStrengthLuma = 0.16; float SharpClamp = 0.5; float OffsetBias = 0.4; float NoiseAmount=0.1; float4 tempF1; float4 tempF2; float4 tempF3; float4 Timer; float4 ScreenSize; float4 SunDirection; texture2D texColor; texture2D texNoise; sampler2D SamplerColor = sampler_state { Texture = ; MinFilter = LINEAR; MagFilter = LINEAR; MipFilter = NONE;//NONE; AddressU = Clamp; AddressV = Clamp; SRGBTexture=FALSE; MaxMipLevel=0; MipMapLodBias=0; }; sampler2D SamplerNoise = sampler_state { Texture = ; MinFilter = POINT; MagFilter = POINT; MipFilter = NONE;//NONE; AddressU = Wrap; AddressV = Wrap; SRGBTexture=FALSE; MaxMipLevel=0; MipMapLodBias=0; }; struct VS_OUTPUT_POST { float4 vpos : POSITION; float2 txcoord : TEXCOORD0; }; struct VS_INPUT_POST { float3 pos : POSITION; float2 txcoord : TEXCOORD0; }; VS_OUTPUT_POST VS_PostProcess(VS_INPUT_POST IN) { VS_OUTPUT_POST OUT; float4 pos=float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); OUT.vpos=pos; OUT.txcoord.xy=IN.txcoord.xy; return OUT; } //++++++++++++++++++++++++++++++ // FXAA v2 CONSOLE by TIMOTHY LOTTES @ NVIDIA // Ported to ENBSeries by MysTer92 (Svyatoslav Gampel) //++++++++++++++++++++++++++++++ float4 PS_PostProcess(VS_OUTPUT_POST i) : COLOR { #define FXAA_SUBPIX_SHIFT (1.0/8.0) #define FXAA_REDUCE_MIN (1.0/32.0) #define FXAA_REDUCE_MUL (1.0/16.0) #define FXAA_SPAN_MAX 8.0 half2 rcpFrame = half2(1/ScreenSize.x, 1/(ScreenSize.x/ScreenSize.z)); half4 posPos; posPos.xy = i.txcoord.xy; posPos.zw = posPos.xy - (rcpFrame.xy * (0.5 + FXAA_SUBPIX_SHIFT)); half3 rgbNW = tex2D(SamplerColor, posPos.zw ).xyz; half3 rgbNE = tex2D(SamplerColor, posPos.zw + half2(rcpFrame.x, 0.0) ).xyz; half3 rgbSW = tex2D(SamplerColor, posPos.zw + half2(0.0, rcpFrame.y) ).xyz; half3 rgbSE = tex2D(SamplerColor, posPos.zw +rcpFrame.xy ).xyz; half3 rgbM = tex2D(SamplerColor, posPos.xy).xyz; half3 luma = half3(0.299, 0.587, 0.114); half lumaNW = dot(rgbNW, luma); half lumaNE = dot(rgbNE, luma); half lumaSW = dot(rgbSW, luma); half lumaSE = dot(rgbSE, luma); half lumaM = dot(rgbM, luma); half lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE))); half lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE))); half2 dir; half lumaNWNE = lumaNW + lumaNE; half lumaSWSE = lumaSW + lumaSE; dir.x = -((lumaNWNE) - (lumaSWSE)); dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE)); half dirReduce = max( (lumaSWSE + lumaNWNE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN); half rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce); dir = min(half2( FXAA_SPAN_MAX, FXAA_SPAN_MAX), max(half2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * rcpFrame.xy; half3 rgbA = (1.0/2.0) * (tex2D(SamplerColor, posPos.xy + dir * (1.0/3.0 - 0.5) ).xyz + tex2D(SamplerColor, posPos.xy + dir * (2.0/3.0 - 0.5) ).xyz); half3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (tex2D(SamplerColor, posPos.xy + dir * (0.0/3.0 - 0.5) ).xyz + tex2D(SamplerColor, posPos.xy + dir * (3.0/3.0 - 0.5) ).xyz); half lumaB = dot(rgbB, luma); if((lumaB < lumaMin) || (lumaB > lumaMax)) return half4(rgbA, 1.0); return float4(rgbB, 1.0); } float4 PS_PostProcess_Sharp_Noise(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR { float4 res = 0; float4 tex=0.0; tex.xy=IN.txcoord.xy; float3 ori = tex2D(SamplerColor, tex).rgb; float2 p; p.x = 1.0/ScreenSize.x; p.y=p.x/ScreenSize.z; float3 blur_ori = tex2D(SamplerColor, tex + float2(0.5 * p.x,-p.y * OffsetBias)).rgb; blur_ori += tex2D(SamplerColor, tex + float2(OffsetBias * -p.x,0.5 * -p.y)).rgb; blur_ori += tex2D(SamplerColor, tex + float2(OffsetBias * p.x,0.5 * p.y)).rgb; blur_ori += tex2D(SamplerColor, tex + float2(0.5 * -p.x,p.y * OffsetBias)).rgb; blur_ori /= 4.0; float3 sharp = ori - blur_ori; float sharp_luma = dot(sharp, SharpStrengthLuma); sharp_luma = clamp(sharp_luma, -SharpClamp, SharpClamp); float4 done = tex2D(SamplerColor, tex) + sharp_luma; float origgray=dot(done.xyz, 0.333); tex.xy=IN.txcoord.xy*16.0 + origgray; float4 cnoi=tex2Dlod(SamplerNoise, tex); done=lerp(done, (cnoi.x+0.5)*done, NoiseAmount*saturate(1.0-origgray*1.8)); done.w=1.0; return done; } technique PostProcess { pass P0 { VertexShader = compile vs_3_0 VS_PostProcess(); PixelShader = compile ps_3_0 PS_PostProcess_Sharp_Noise(); FogEnable=FALSE; ALPHATESTENABLE=FALSE; SEPARATEALPHABLENDENABLE=FALSE; AlphaBlendEnable=FALSE; FogEnable=FALSE; SRGBWRITEENABLE=FALSE; } } technique PostProcess2 { pass P0 { VertexShader = compile vs_3_0 VS_PostProcess(); PixelShader = compile ps_3_0 PS_PostProcess(); FogEnable=FALSE; ALPHATESTENABLE=FALSE; SEPARATEALPHABLENDENABLE=FALSE; AlphaBlendEnable=FALSE; FogEnable=FALSE; SRGBWRITEENABLE=FALSE; } } technique PostProcess3 { pass P0 { VertexShader = compile vs_3_0 VS_PostProcess(); PixelShader = compile ps_3_0 PS_PostProcess_Sharp_Noise(); FogEnable=FALSE; ALPHATESTENABLE=FALSE; SEPARATEALPHABLENDENABLE=FALSE; AlphaBlendEnable=FALSE; FogEnable=FALSE; SRGBWRITEENABLE=FALSE; } } technique PostProcess4 { pass P0 { VertexShader = compile vs_3_0 VS_PostProcess(); PixelShader = compile ps_3_0 PS_PostProcess(); FogEnable=FALSE; ALPHATESTENABLE=FALSE; SEPARATEALPHABLENDENABLE=FALSE; AlphaBlendEnable=FALSE; FogEnable=FALSE; SRGBWRITEENABLE=FALSE; } } technique PostProcess5 { pass P0 { VertexShader = compile vs_3_0 VS_PostProcess(); PixelShader = compile ps_3_0 PS_PostProcess(); DitherEnable=TRUE; ZEnable=FALSE; CullMode=NONE; ALPHATESTENABLE=FALSE; SEPARATEALPHABLENDENABLE=FALSE; AlphaBlendEnable=FALSE; StencilEnable=FALSE; FogEnable=FALSE; SRGBWRITEENABLE=FALSE; } }