diff --git a/MariENB_LICENSE.txt b/MariENB_LICENSE.txt new file mode 100644 index 0000000..35c1860 --- /dev/null +++ b/MariENB_LICENSE.txt @@ -0,0 +1,19 @@ +Copyright (c) 2013-2014 UnSX Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/effect.txt b/effect.txt index e0599a6..200aa92 100644 --- a/effect.txt +++ b/effect.txt @@ -1,1187 +1,12 @@ /* effect.txt : MariENB additional filters. - (C)2013 Marisa Kirisame, UnSX Team. + (C)2013-2014 Marisa Kirisame, UnSX Team. Part of MariENB, the personal ENB of Marisa. Released under the MIT License. */ -/* FXAA */ -bool fxaaenable -< - string UIName = "EnableFXAA"; - string UIWidget = "Checkbox"; -> = {false}; -float fxaaspanmax -< - string UIName = "FXAASpanMax"; - string UIWidget = "Checkbox"; -> = {4.0}; -float fxaareducemul -< - string UIName = "FXAAReduceMul"; - string UIWidget = "Checkbox"; -> = {16.0}; -float fxaareducemin -< - string UIName = "FXAAReduceMin"; - string UIWidget = "Checkbox"; -> = {128.0}; -/* border blurring */ -bool bbenable -< - string UIName = "BlurEnable"; - string UIWidget = "Checkbox"; -> = {true}; -/* border blur sampling range */ -float bbsamp -< - string UIName = "BlurSample"; - string UIWidget = "Spinner"; -> = {1.0}; -/* border blur level */ -int bblevel -< - string UIName = "BlurLevel"; - string UIWidget = "Spinner"; -> = {1}; -/* blend power of blur */ -float bbpow -< - string UIName = "BlurPower"; - string UIWidget = "Spinner"; -> = {15.46}; -/* falloff curve of blur towards center of screen */ -float bbcurve -< - string UIName = "BlurCurve"; - string UIWidget = "Spinner"; -> = {1.2}; -/* blur falloff radius */ -float bbradius -< - string UIName = "BlurRadius"; - string UIWidget = "Spinner"; -> = {0.69}; -/* border darkening */ -bool dkenable -< - string UIName = "DarkEnable"; - string UIWidget = "Checkbox"; -> = {true}; -/* radius of darkening (relative to screen width) */ -float dkradius -< - string UIName = "DarkRadius"; - string UIWidget = "Spinner"; -> = {0.37}; -/* falloff of darkening */ -float dkcurve -< - string UIName = "DarkCurve"; - string UIWidget = "Spinner"; -> = {1.94}; -/* bump of darkening */ -float dkbump -< - string UIName = "DarkBump"; - string UIWidget = "Spinner"; -> = {0.79}; -/* shine/bloom compensation */ -bool compenable -< - string UIName = "EnableCompensate"; - string UIWidget = "Checkbox"; -> = {true}; -/* compensation factor */ -float compfactor -< - string UIName = "CompensateFactor"; - string UIWidget = "Spinner"; -> = {0.19}; -/* compensation power */ -float comppow -< - string UIName = "CompensatePower"; - string UIWidget = "Spinner"; -> = {1.05}; -/* compensation saturation */ -float compsat -< - string UIName = "CompensateSaturation"; - string UIWidget = "Spinner"; -> = {0.3}; -/* brightness bump for compensation */ -float compbump -< - string UIName = "CompensateBump"; - string UIWidget = "Spinner"; -> = {0.0}; -bool gradeenable -< - string UIName = "EnableGrading"; - string UIWidget = "Checkbox"; -> = {true}; -/* miscellaneous color grading parameters */ -float gradeadd_r -< - string UIName = "GradingAddR"; - string UIWidget = "Spinner"; -> = {0.0}; -float gradeadd_g -< - string UIName = "GradingAddG"; - string UIWidget = "Spinner"; -> = {0.0}; -float gradeadd_b -< - string UIName = "GradingAddB"; - string UIWidget = "Spinner"; -> = {0.0}; -float grademul_r -< - string UIName = "GradingMulR"; - string UIWidget = "Spinner"; -> = {1.02}; -float grademul_g -< - string UIName = "GradingMulG"; - string UIWidget = "Spinner"; -> = {1.08}; -float grademul_b -< - string UIName = "GradingMulB"; - string UIWidget = "Spinner"; -> = {1.04}; -float gradepow_r -< - string UIName = "GradingPowR"; - string UIWidget = "Spinner"; -> = {1.07}; -float gradepow_g -< - string UIName = "GradingPowG"; - string UIWidget = "Spinner"; -> = {1.12}; -float gradepow_b -< - string UIName = "GradingPowB"; - string UIWidget = "Spinner"; -> = {1.08}; -float gradecol_r -< - string UIName = "GradingColR"; - string UIWidget = "Spinner"; -> = {0.04}; -float gradecol_g -< - string UIName = "GradingColG"; - string UIWidget = "Spinner"; -> = {0.07}; -float gradecol_b -< - string UIName = "GradingColB"; - string UIWidget = "Spinner"; -> = {0.59}; -float gradecolfact -< - string UIName = "GradingColFactor"; - string UIWidget = "Spinner"; -> = {-0.24}; -/* Soft grain */ -bool ne -< - string UIName = "EnableSoftGrain"; - string UIWidget = "Checkbox"; -> = {true}; -/* soft grain speed */ -float nf -< - string UIName = "SoftGrainSpeed"; - string UIWidget = "Spinner"; -> = {2.68}; -/* soft grain intensity */ -float ni -< - string UIName = "SoftGrainIntensity"; - string UIWidget = "Spinner"; -> = {0.04}; -/* soft grain saturation */ -float ns -< - string UIName = "SoftGrainSaturation"; - string UIWidget = "Spinner"; -> = {0.09}; -/* Two-pass noise */ -bool np -< - string UIName = "SoftGrainTwopass"; - string UIWidget = "Checkbox"; -> = {true}; -/* grain blend function: 0 normal, 1 add, 2 overlay, 3 multiply */ -int nb -< - string UIName = "SoftGrainBlendfunc"; - string UIWidget = "Spinner"; -> = {1}; -/* grain deviation */ -float nk -< - string UIName = "SoftGrainDeviation"; - string UIWidget = "Spinner"; -> = {0.05}; -/* grain magnification */ -float nm1 -< - string UIName = "SoftGrainMagnification1"; - string UIWidget = "Spinner"; -> = {1.25}; -float nm2 -< - string UIName = "SoftGrainMagnification2"; - string UIWidget = "Spinner"; -> = {0.64}; -float nm3 -< - string UIName = "SoftGrainMagnification3"; - string UIWidget = "Spinner"; -> = {0.35}; -/* grain magnification pass 1 */ -float nm11 -< - string UIName = "SoftGrainMagnification11"; - string UIWidget = "Spinner"; -> = {2.05}; -float nm12 -< - string UIName = "SoftGrainMagnification12"; - string UIWidget = "Spinner"; -> = {3.11}; -float nm13 -< - string UIName = "SoftGrainMagnification13"; - string UIWidget = "Spinner"; -> = {2.22}; -/* grain magnification pass 2 */ -float nm21 -< - string UIName = "SoftGrainMagnification21"; - string UIWidget = "Spinner"; -> = {4.25}; -float nm22 -< - string UIName = "SoftGrainMagnification22"; - string UIWidget = "Spinner"; -> = {0.42}; -float nm23 -< - string UIName = "SoftGrainMagnification23"; - string UIWidget = "Spinner"; -> = {6.29}; -/* grain power */ -float nj -< - string UIName = "SoftGrainPower"; - string UIWidget = "Spinner"; -> = {2.93}; -/* Block graphics filter with palette reduction */ -bool benable -< - string UIName = "EnableBlockGFX"; - string UIWidget = "Checkbox"; -> = {false}; -/* emulated resolution for block graphics (0 or less for real resolution) */ -float bresw -< - string UIName = "BlockGFXResolutionW"; - string UIWidget = "Spinner"; -> = {1.0}; -float bresh -< - string UIName = "BlockGFXResolutionH"; - string UIWidget = "Spinner"; -> = {1.0}; -/* do not scale */ -bool bnoscale -< - string UIName = "BlockGFXNoScale"; - string UIWidget = "Checkbox"; -> = {false}; -/* perform aspect ratio correction on emulated screen (ignored if no scale) */ -bool bratio -< - string UIName = "BlockGFXAspect"; - string UIWidget = "Checkbox"; -> = {false}; -/* extra border factor (negative values for overscan) */ -float bborderf -< - string UIName = "BlockGFXBorder"; - string UIWidget = "Spinner"; -> = {0.00}; -/* palette type for block graphics */ -int bpaltype -< - string UIName = "BlockGFXpalette"; - string UIWidget = "Spinner"; -> = {5}; -/* CGA subpalette */ -int bcganum -< - string UIName = "BlockGFXcgamode"; - string UIWidget = "Spinner"; -> = {0}; -/* Dirty screen effect (static noise) */ -bool dirtenable -< - string UIName = "EnableDirt"; - string UIWidget = "Checkbox"; -> = {true}; -/* dirt amount */ -float dirtcfactor -< - string UIName = "DirtCoordFactor"; - string UIWidget = "Spinner"; -> = {0.09}; -float dirtlfactor -< - string UIName = "DirtLuminanceFactor"; - string UIWidget = "Spinner"; -> = {0.0}; -float dirtmc -< - string UIName = "DirtCoordMagnification"; - string UIWidget = "Spinner"; -> = {3.04}; -float dirtml -< - string UIName = "DirtLuminanceMagnification"; - string UIWidget = "Spinner"; -> = {1.0}; -/* Letterbox */ -bool boxe -< - string UIName = "EnableBox"; - string UIWidget = "Checkbox"; -> = {true}; -/* horizontal factor */ -float boxh -< - string UIName = "BoxHorizontal"; - string UIWidget = "Spinner"; -> = {1.5}; -/* vertical factor */ -float boxv -< - string UIName = "BoxVertical"; - string UIWidget = "Spinner"; -> = {1.0}; -/* softening */ -float boxb -< - string UIName = "BoxSoften"; - string UIWidget = "Spinner"; -> = {0.02}; -/* box alpha */ -float boxa -< - string UIName = "BoxAlpha"; - string UIWidget = "Spinner"; -> = {6.07}; -/* Use CRT curvature shader */ -bool crtenable -< - string UIName = "EnableCurvature"; - string UIWidget = "Checkbox"; -> = {false}; -/* chromatic aberration on CRT: fancy effect that isn't really realistic */ -float chromaab -< - string UIName = "CurveChromaticAberration"; - string UIWidget = "Spinner"; -> = {0.93}; -/* curvature lens zoom (0.5 = none) */ -float lenszoom -< - string UIName = "CurveZoom"; - string UIWidget = "Spinner"; -> = {50.0}; -/* curvature lens distortion */ -float lensdist -< - string UIName = "CurveLens"; - string UIWidget = "Spinner"; -> = {0.0}; -/* curvature CUBIC lens distortion */ -float lensdistc -< - string UIName = "CurveLensCubic"; - string UIWidget = "Spinner"; -> = {0.0}; /* do not touch this! */ #define E_SHADER_3_0 -/* texture sizes */ -#define NOISERES 256.0 -/* gaussian blur matrices */ -const float2x2 gauss3 = -{ - 0.16,0.12, - 0.12,0.09 -}; -const float3x3 gauss5 = -{ - 0.0865051903114,0.0692041522491,0.0346020761246, - 0.0692041522491,0.0553633217993,0.0276816609, - 0.0346020761246,0.0276816609,0.01384083045 -}; -const float4x4 gauss7 = -{ - 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, - 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, - 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, - 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 -}; -/* standard stuff (not all used) */ -float tempF1; -float tempF2; -float tempF3; -float tempF4; -float tempF5; -float tempF6; -float tempF7; -float tempF8; -float tempF9; -float tempF0; -float4 ScreenSize; -float ENightDayFactor; -float EInteriorFactor; -float4 Timer; -float FieldOfView; -/* samplers and textures (some not yet used) */ -texture2D texColor; -texture2D texDepth; -texture2D texPalette; -sampler2D SamplerColor = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerDepth = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerPalette = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -texture2D texNoise1 -< - string ResourceName = "menbnoise1.png"; ->; -texture2D texNoise2 -< - string ResourceName = "menbnoise2.png"; ->; -texture2D texNoise3 -< - string ResourceName = "menbnoise3.png"; ->; -sampler2D SamplerNoise1 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = POINT; - MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerNoise2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = POINT; - MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerNoise3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -/* whatever */ -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord : TEXCOORD0; -}; -/* Shader routines */ -VS_OUTPUT_POST VS_Process(VS_INPUT_POST IN) -{ - VS_OUTPUT_POST OUT; - float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1); - OUT.vpos = pos; - OUT.txcoord.xy = IN.txcoord.xy; - return OUT; -} -float4 PS_Process(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = float2(IN.txcoord.x,IN.txcoord.y); - float4 res = tex2D(SamplerColor,coord); - return res; -} -float4 PS_ProcessPass1(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = float2(IN.txcoord.x,IN.txcoord.y); - float4 res = tex2D(SamplerColor,coord); - if ( fxaaenable ) - { - float fxaareducemul_ = 1.0/max(abs(fxaareducemul),1.0); - float fxaareducemin_ = 1.0/max(abs(fxaareducemin),1.0); - float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 bof = float2(1.0/bresl.x,1.0/bresl.y); - float3 rgbNW = tex2D(SamplerColor,coord+float2(-1,-1)*bof).rgb; - float3 rgbNE = tex2D(SamplerColor,coord+float2(1,-1)*bof).rgb; - float3 rgbSW = tex2D(SamplerColor,coord+float2(-1,1)*bof).rgb; - float3 rgbSE = tex2D(SamplerColor,coord+float2(1,1)*bof).rgb; - float3 rgbM = tex2D(SamplerColor,coord).rgb; - float3 luma = float3(0.299,0.587,0.114); - float lumaNW = dot(rgbNW,luma); - float lumaNE = dot(rgbNE,luma); - float lumaSW = dot(rgbSW,luma); - float lumaSE = dot(rgbSE,luma); - float lumaM = dot(rgbM,luma); - float lumaMin = min(lumaM,min(min(lumaNW,lumaNE),min(lumaSW,lumaSE))); - float lumaMax = max(lumaM,max(max(lumaNW,lumaNE),max(lumaSW,lumaSE))); - float2 dir = float2(-((lumaNW+lumaNE)-(lumaSW+lumaSE)),((lumaNW+lumaSW) - -(lumaNE+lumaSE))); - float dirReduce = max((lumaNW+lumaNE+lumaSW+lumaSE)*(0.25 - *fxaareducemul_),fxaareducemin_); - float rcpDirMin = 1.0/(min(abs(dir.x),abs(dir.y))+dirReduce); - dir = min(float2(fxaaspanmax,fxaaspanmax),max(float2(-fxaaspanmax, - -fxaaspanmax),dir*rcpDirMin))/bresl; - float3 rgbA = (1.0/2.0)*(tex2D(SamplerColor,coord+dir*(1.0/3.0-0.5)) - .rgb+tex2D(SamplerColor,coord+dir*(2.0/3.0-0.5)).rgb); - float3 rgbB = rgbA*(1.0/2.0)+(1.0/4.0)*(tex2D(SamplerColor,coord+dir - *(0.0/3.0-0.5)).rgb+tex2D(SamplerColor,coord+dir*(3.0/3.0 - -0.5)).rgb); - float lumaB = dot(rgbB,luma); - if ( (lumaB < lumaMin) || (lumaB > lumaMax) ) - res.rgb = rgbA; - else - res.rgb = rgbB; - } - return res; -} -float4 PS_ProcessPass2(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = float2(IN.txcoord.x,IN.txcoord.y); - float4 res = tex2D(SamplerColor,coord); - if ( bbenable ) - { - float4 origcolor = res; - float4 tcol = float4(0,0,0,0); - float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*bbsamp; - int i, j; - if ( bblevel == 1 ) - { - for ( i=-2; i<=2; i++ ) - for ( j=-2; j<=2; j++ ) - tcol += gauss5[abs(i)][abs(j)] - *tex2D(SamplerColor,coord+float2(i,j)*bof); - } - else if ( bblevel == 2 ) - { - for ( i=-3; i<=3; i++ ) - for ( j=-3; j<=3; j++ ) - tcol += gauss7[abs(i)][abs(j)] - *tex2D(SamplerColor,coord+float2(i,j)*bof); - } - else - { - for ( i=-1; i<=1; i++ ) - for ( j=-1; j<=1; j++ ) - tcol += gauss3[abs(i)][abs(j)] - *tex2D(SamplerColor,coord+float2(i,j)*bof); - } - float2 uv = (coord.xy-0.5)*bbradius; - float vig = clamp(pow(saturate(dot(uv.xy,uv.xy)),bbcurve),0.0,1.0); - res.rgb = lerp(origcolor.rgb,tcol.rgb,clamp(vig*bbpow,0.0,1.0)); - } - if ( dkenable ) - { - float2 bresl = float2(1.0,ScreenSize.w); - float2 bof = bresl*dkradius; - float val = 0.0; - if ( coord.x < bof.x ) - val = lerp(val,1,1.0-coord.x/bof.x); - if ( coord.y < bof.y ) - val = lerp(val,1,1.0-coord.y/bof.y); - if ( 1.0-coord.x < bof.x ) - val = lerp(val,1,1.0-(1.0-coord.x)/bof.x); - if ( 1.0-coord.y < bof.y ) - val = lerp(val,1,1.0-(1.0-coord.y)/bof.y); - val = clamp(val*dkbump,0,1); - res.rgb = lerp(res.rgb,float3(0,0,0),pow(val,dkcurve)); - } - if ( ne ) - { - float ts = Timer.x*nf; - ts *= 1000.0; - float2 tcs = coord; - float2 s1 = tcs+float2(0,ts); - float2 s2 = tcs+float2(ts,0); - float2 s3 = tcs+float2(ts,ts); - float n1, n2, n3; - float2 nr = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w)/NOISERES; - if ( np ) - { - n1 = tex2D(SamplerNoise2,s1*nm11*nr).r; - n2 = tex2D(SamplerNoise2,s2*nm12*nr).g; - n3 = tex2D(SamplerNoise2,s3*nm13*nr).b; - s1 = tcs+float2(ts+n1*nk,n2*nk); - s2 = tcs+float2(n2,ts+n3*nk); - s3 = tcs+float2(ts+n3*nk,ts+n1*nk); - n1 = tex2D(SamplerNoise2,s1*nm21*nr).r; - n2 = tex2D(SamplerNoise2,s2*nm22*nr).g; - n3 = tex2D(SamplerNoise2,s3*nm23*nr).b; - } - else - { - n1 = tex2D(SamplerNoise3,s1*nm1*nr).r; - n2 = tex2D(SamplerNoise3,s2*nm2*nr).g; - n3 = tex2D(SamplerNoise3,s3*nm3*nr).b; - } - float n4 = (n1+n2+n3)/3; - float3 ng = float3(n4,n4,n4); - float3 nc = float3(n1,n2,n3); - float3 nt = pow(clamp(lerp(ng,nc,ns),0.0,1.0),nj); - if ( nb == 1 ) - res.rgb += nt*ni; - else if ( nb == 2 ) - { - res.r = (res.r<0.5)?(2.0*res.r*(0.5+(nt.r*ni))) - :(1.0-2.0*(1.0-res.r)*(1.0-((0.5+(nt.r*ni))))); - res.g = (res.g<0.5)?(2.0*res.g*(0.5+(nt.g*ni))) - :(1.0-2.0*(1.0-res.g)*(1.0-((0.5+(nt.g*ni))))); - res.b = (res.b<0.5)?(2.0*res.b*(0.5+(nt.b*ni))) - :(1.0-2.0*(1.0-res.b)*(1.0-((0.5+(nt.b*ni))))); - } - else if ( nb == 3 ) - res.rgb *= 1.0+(nt*ni); - else - res.rgb = lerp(res.rgb,nt,ni); - } - if ( compenable ) - { - float4 ovr = pow(saturate(res+compbump),comppow); - float ovrs = (ovr.r+ovr.g+ovr.b)/3.0; - ovr = ovr*compsat+ovrs*(1.0-compsat); - res.rgb -= ovr.rgb*compfactor; - } - if ( gradeenable ) - { - float3 gradeadd = float3(gradeadd_r,gradeadd_g,gradeadd_b); - float3 grademul = float3(grademul_r,grademul_g,grademul_b); - float3 gradepow = float3(gradepow_r,gradepow_g,gradepow_b); - float3 gradecol = float3(gradecol_r,gradecol_g,gradecol_b); - res.rgb = saturate(res.rgb+gradeadd); - res.rgb = saturate(res.rgb*grademul); - res.rgb = saturate(pow(res.rgb,gradepow)); - float tonev = (res.r+res.g+res.b)/3.0; - float3 tonecolor = gradecol*tonev; - res.rgb = res.rgb*(1.0-gradecolfact)+tonecolor*gradecolfact; - } - if ( dirtenable ) - { - float2 r = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w)/NOISERES; - float4 ncolc = tex2D(SamplerNoise1,coord*dirtmc*r); - float2 ds = float2(res.r+res.g,res.g+res.b)/2.0; - float4 ncoll = tex2D(SamplerNoise1,ds*dirtml); - res = lerp(res,(ncolc.r+1)*res, - dirtcfactor*saturate(1-(ds.x+ds.y)*0.25)); - res = lerp(res,(ncoll.r+1)*res, - dirtlfactor*saturate(1-(ds.x+ds.y)*0.25)); - } - if ( boxe ) - { - float boxf = pow(clamp(boxh-abs(2.0*coord.x-1.0),0.0,1.0),boxb) - *pow(clamp(boxv-abs(2.0*coord.y-1.0),0.0,1.0),boxb); - res.rgb = lerp(res.rgb*(1.0-boxa),res.rgb,boxf); - } - return res; -} -float4 PS_ProcessPass3(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = float2(IN.txcoord.x,IN.txcoord.y); - float4 res = tex2D(SamplerColor,coord); - if ( !benable ) - return res; - float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 bresl = float2(1,1); - float2 dresl; - if ( bresw <= 0 || bresh <= 0 ) - bresl = rresl; - else - { - if ( bresw <= 1.0 ) - bresl.x = rresl.x*bresw; - else - bresl.x = bresw; - if ( bresh <= 1.0 ) - bresl.y = rresl.y*bresh; - else - bresl.y = bresh; - } - float2 rratio = rresl/bresl; - float2 ncoord = coord; - if ( !bnoscale ) - { - if ( bratio ) - rratio /= min(rratio.x,rratio.y); - else - rratio /= rratio; - rratio *= 1+bborderf; - dresl = bresl*rratio; - ncoord = ((coord-float2(0.5,0.5))*rratio)+float2(0.5,0.5); - ncoord = floor(ncoord*bresl)/bresl; - } - else - { - rratio = float2(1.0,1.0); - dresl = rresl; - } - if ( bresw <= 0 || bresh <= 0 ) - ncoord = coord; - float4 tcol = tex2D(SamplerColor,ncoord); - /* clamp */ - if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 ) - tcol *= 0; - if ( bpaltype == 0 ) - { - float4 dac; - if ( bcganum == 0 ) - { - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.35); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol -= 0.1; - if ( evx != evy ) - tcol += 0.25; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*5.0; - dac.g = dac.a+(tcol.g-dac.a)*5.0; - dac.b = dac.a+(tcol.b-dac.a)*5.0; - } - else if ( bcganum%2 == 0 ) - { - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.4); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol -= 0.1; - if ( evx != evy ) - tcol += 0.225; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*4.5; - dac.g = dac.a+(tcol.g-dac.a)*4.5; - dac.b = dac.a+(tcol.b-dac.a)*4.5; - } - else - { - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.45); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol -= 0.1; - if ( evx != evy ) - tcol += 0.2; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*4.0; - dac.g = dac.a+(tcol.g-dac.a)*4.0; - dac.b = dac.a+(tcol.b-dac.a)*4.0; - } - /* color lookup */ - float3 cgapal[4] = - { - float3(0.000,0.000,0.000), - float3(1.000,1.000,1.000), - float3(0.000,0.000,0.000), - float3(0.000,0.000,0.000), - }; - if ( bcganum == 1 ) - { - cgapal[1] = float3(0.000,0.666,0.666); - cgapal[2] = float3(0.666,0.000,0.666); - cgapal[3] = float3(0.666,0.666,0.666); - } - else if ( bcganum == 2 ) - { - cgapal[1] = float3(0.333,1.000,1.000); - cgapal[2] = float3(1.000,0.333,1.000); - cgapal[3] = float3(1.000,1.000,1.000); - } - else if ( bcganum == 3 ) - { - cgapal[1] = float3(0.000,0.666,0.000); - cgapal[2] = float3(0.666,0.000,0.000); - cgapal[3] = float3(0.666,0.333,0.000); - } - else if ( bcganum == 4 ) - { - cgapal[1] = float3(0.333,1.000,0.333); - cgapal[2] = float3(1.000,0.333,0.333); - cgapal[3] = float3(0.333,1.000,0.333); - } - else if ( bcganum == 5 ) - { - cgapal[1] = float3(0.000,0.666,0.666); - cgapal[2] = float3(0.666,0.000,0.000); - cgapal[3] = float3(0.666,0.666,0.666); - } - else if ( bcganum == 6 ) - { - cgapal[1] = float3(0.333,1.000,1.000); - cgapal[2] = float3(1.000,0.333,0.333); - cgapal[3] = float3(1.000,1.000,1.000); - } - float dist = 2.0; - int idx = 0; - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cgapal[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cgapal[i]); - } - } - res.rgb = cgapal[idx]; - } - else if ( bpaltype == 1 ) - { - float4 dac; - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.5); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol -= 0.04; - if ( evx != evy ) - tcol += 0.08; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*3.0; - dac.g = dac.a+(tcol.g-dac.a)*3.0; - dac.b = dac.a+(tcol.b-dac.a)*3.0; - float3 egapal[16] = - { - float3(0.000,0.000,0.000), - float3(0.666,0.000,0.000), - float3(0.000,0.666,0.000), - float3(0.666,0.333,0.000), - float3(0.000,0.000,0.666), - float3(0.666,0.000,0.666), - float3(0.000,0.666,0.666), - float3(0.666,0.666,0.666), - float3(0.333,0.333,0.333), - float3(1.000,0.333,0.333), - float3(0.333,1.000,0.333), - float3(1.000,1.000,0.333), - float3(0.333,0.333,1.000), - float3(1.000,0.333,1.000), - float3(0.333,1.000,1.000), - float3(1.000,1.000,1.000), - }; - float dist = 2.0; - int idx = 0; - for ( int i=0; i<16; i++ ) - { - if ( distance(dac.rgb,egapal[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,egapal[i]); - } - } - res.rgb = egapal[idx]; - } - else if ( bpaltype == 2 ) - { - float4 dac; - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.5); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol -= 0.04; - if ( evx != evy ) - tcol += 0.08; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*3.0; - dac.g = dac.a+(tcol.g-dac.a)*3.0; - dac.b = dac.a+(tcol.b-dac.a)*3.0; - /* color lookup */ - float3 egapal[16] = - { - float3(0.000000,0.000000,0.000000), - float3(0.500000,0.000000,0.000000), - float3(0.125000,0.500000,0.000000), - float3(0.625000,0.250000,0.125000), - float3(0.000000,0.125000,0.343750), - float3(0.234375,0.000000,0.343750), - float3(0.062500,0.625000,0.812500), - float3(0.343750,0.343750,0.343750), - float3(0.125000,0.125000,0.125000), - float3(1.000000,0.250000,0.250000), - float3(0.281250,1.000000,0.250000), - float3(1.000000,0.875000,0.234375), - float3(0.187500,0.500000,1.000000), - float3(0.750000,0.187500,1.000000), - float3(0.281250,0.875000,1.000000), - float3(1.000000,1.000000,1.000000), - }; - float dist = 2.0; - int idx = 0; - for ( int i=0; i<16; i++ ) - { - if ( distance(dac.rgb,egapal[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,egapal[i]); - } - } - res.rgb = egapal[idx]; - } - else if ( bpaltype == 3 ) - { - float4 dac; - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.5); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol.rgb += 0.02; - if ( evx != evy ) - tcol.rgb += 0.04; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*2.5; - dac.g = dac.a+(tcol.g-dac.a)*2.5; - dac.b = dac.a+(tcol.b-dac.a)*2.5; - /* truncate */ - res.rgb = trunc(dac.rgb*4.0)/4.0; - } - else if ( bpaltype == 4 ) - { - float4 dac; - /* brighten shadows */ - tcol.rgb = pow(tcol.rgb,0.7); - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol.rgb += 0.01; - if ( evx != evy ) - tcol.rgb += 0.02; - /* oversaturate components */ - dac.a = (tcol.r+tcol.g+tcol.b)/3.0; - dac.r = dac.a+(tcol.r-dac.a)*1.5; - dac.g = dac.a+(tcol.g-dac.a)*1.5; - dac.b = dac.a+(tcol.b-dac.a)*1.5; - /* truncate */ - res.r = trunc(dac.r*8.0)/8.0; - res.g = trunc(dac.g*4.0)/4.0; - res.b = trunc(dac.b*8.0)/8.0; - } - else if ( bpaltype == 5 ) - { - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - tcol.rgb += 0.01; - if ( evx != evy ) - tcol.rgb += 0.02; - /* truncate */ - res.rgb = trunc(tcol.rgb*16.0)/16.0; - } - else if ( bpaltype == 6 ) - { - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - if ( evx == evy ) - tcol.rgb -= 0.002; - /* truncate */ - res.r = trunc(tcol.r*32.0)/32.0; - res.g = trunc(tcol.g*64.0)/64.0; - res.b = trunc(tcol.b*32.0)/32.0; - } - else if ( bpaltype == 7 ) - { - /* dither */ - bool evx = (coord.x*dresl.x)%2 < 1; - bool evy = (coord.y*dresl.y)%2 < 1; - if ( evx == evy ) - tcol.rgb -= 0.001; - /* truncate */ - res.rgb = trunc(tcol.rgb*64.0)/64.0; - } - else - return tcol; - return res; -} -float4 PS_ProcessPass4(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = float2(IN.txcoord.x,IN.txcoord.y); - float4 res = tex2D(SamplerColor,coord); - if ( crtenable ) - { - float4 tcol = res; - float3 eta = float3(1+chromaab*0.09,1+chromaab*0.06,1+chromaab*0.03); - float2 center = float2(coord.x-0.5,coord.y-0.5); - float zfact = 100.0/lenszoom; - float r2 = center.x*center.x+center.y*center.y; - float f = 0; - if( lensdistc == 0.0) - f = 1+r2*lensdist*0.1; - else - f = 1+r2*(lensdist*0.1+lensdistc*0.1*sqrt(r2)); - float x = f*zfact*center.x+0.5; - float y = f*zfact*center.y+0.5; - float2 rcoord = (f*eta.r)*zfact*(center.xy*0.5)+0.5; - float2 gcoord = (f*eta.g)*zfact*(center.xy*0.5)+0.5; - float2 bcoord = (f*eta.b)*zfact*(center.xy*0.5)+0.5; - float4 idist = float4(tex2D(SamplerColor,rcoord).r, - tex2D(SamplerColor,gcoord).g, - tex2D(SamplerColor,bcoord).b, - tex2D(SamplerColor,float2(x,y)).a); - res.rgb = idist.rgb; - } - return res; -} -technique PostProcess -{ - pass P0 - { - VertexShader = compile vs_3_0 VS_Process(); - PixelShader = compile ps_3_0 PS_ProcessPass1(); - AlphaBlendEnable = TRUE; - SrcBlend = ONE; - DestBlend = ONE; - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess2 -{ - pass P0 - { - VertexShader = compile vs_3_0 VS_Process(); - PixelShader = compile ps_3_0 PS_ProcessPass2(); - AlphaBlendEnable = TRUE; - SrcBlend = ONE; - DestBlend = ONE; - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess3 -{ - pass P0 - { - VertexShader = compile vs_3_0 VS_Process(); - PixelShader = compile ps_3_0 PS_ProcessPass3(); - AlphaBlendEnable = TRUE; - SrcBlend = ONE; - DestBlend = ONE; - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess4 -{ - pass P0 - { - VertexShader = compile vs_3_0 VS_Process(); - PixelShader = compile ps_3_0 PS_ProcessPass4(); - AlphaBlendEnable = TRUE; - SrcBlend = ONE; - DestBlend = ONE; - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} \ No newline at end of file +/* separate for easier maintenance */ +#include "menbsettings.fx" +#include "menbinternals.fx" +#include "menbfilters.fx" diff --git a/enbbloom.fx b/enbbloom.fx index 63db810..138565d 100644 --- a/enbbloom.fx +++ b/enbbloom.fx @@ -1,470 +1,12 @@ -//++++++++++++++++++++++++++++++++++++++++++++ -// ENBSeries effect file -// visit http://enbdev.com for updates -// Copyright (c) 2007-2011 Boris Vorontsov -//++++++++++++++++++++++++++++++++++++++++++++ - - - -//+++++++++++++++++++++++++++++ -//internal parameters, can be modified -//+++++++++++++++++++++++++++++ -//none - - - -//+++++++++++++++++++++++++++++ -//external parameters, do not modify -//+++++++++++++++++++++++++++++ -//keyboard controlled temporary variables (in some versions exists in the config file). Press and hold key 1,2,3...8 together with PageUp or PageDown to modify. By default all set to 1.0 -float4 tempF1; //0,1,2,3 -float4 tempF2; //5,6,7,8 -float4 tempF3; //9,0 -//x=Width, y=1/Width, z=ScreenScaleY, w=1/ScreenScaleY -float4 ScreenSize; -//x=generic timer in range 0..1, period of 16777216 ms (4.6 hours), w=frame time elapsed (in seconds) -float4 Timer; -//additional info for computations -float4 TempParameters; -//Lenz reflection intensity, lenz reflection power -float4 LenzParameters; -//BloomRadius1, BloomRadius2, BloomBlueShiftAmount, BloomContrast -float4 BloomParameters; - - - -texture2D texBloom1; -texture2D texBloom2; -texture2D texBloom3; -texture2D texBloom4; -texture2D texBloom5; -texture2D texBloom6; -texture2D texBloom7;//additional bloom tex -texture2D texBloom8;//additional bloom tex - -sampler2D SamplerBloom1 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom4 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom5 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom6 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom7 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom8 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE;//NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; - - - -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -VS_OUTPUT_POST VS_Bloom(VS_INPUT_POST IN) -{ - VS_OUTPUT_POST OUT; - - OUT.vpos=float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); - - OUT.txcoord0.xy=IN.txcoord0.xy+TempParameters.xy;//1.0/(bloomtexsize*2.0) - - return OUT; -} - - -//zero pass HQ, input texture is fullscreen -//SamplerBloom1 - fullscreen texture -float4 PS_BloomPrePass(VS_OUTPUT_POST In) : COLOR -{ - float4 bloomuv; - - float4 bloom=0.0;//tex2D(SamplerBloom1, In.txcoord0); - const float2 offset[4]= - { - float2(0.25, 1.25), - float2(0.25, -0.25), - float2(-0.25, 0.25), - float2(-0.25, -0.25) - }; - //TempParameters.w==1 if first pass, ==2 is second pass - float2 screenfact=TempParameters.z; - screenfact.y*=ScreenSize.z; - float4 srcbloom=bloom; - for (int i=0; i<4; i++) - { - bloomuv.xy=offset[i]; - bloomuv.xy=(bloomuv.xy*screenfact.xy)+In.txcoord0.xy; - float4 tempbloom=tex2D(SamplerBloom1, bloomuv.xy); - bloom.xyz+=tempbloom.xyz; - } - bloom.xyz*=0.25; - - bloom.xyz=min(bloom.xyz, 32768.0); - bloom.xyz=max(bloom.xyz, 0.0); - - return bloom; -} - - - -//first and second passes draw to every texture -//twice, after computations of these two passes, -//result is set as input to next cycle - -//first pass -//SamplerBloom1 is result of prepass or second pass from cycle -float4 PS_BloomTexture1(VS_OUTPUT_POST In) : COLOR -{ - float4 bloomuv; - - float4 bloom=tex2D(SamplerBloom1, In.txcoord0); - const float2 offset[8]= - { - float2(1.0, 1.0), - float2(1.0, -1.0), - float2(-1.0, 1.0), - float2(-1.0, -1.0), - float2(0.0, 1.0), - float2(0.0, -1.0), - float2(1.0, 0.0), - float2(-1.0, 0.0) - }; - float2 screenfact=TempParameters.z; - screenfact.y*=ScreenSize.z; - float4 srcbloom=bloom; - //TempParameters.w == (1+passnumber) - float step=BloomParameters.x;//*pow(2.0, BloomParameters.x * (TempParameters.w-1.0));//*0.5 -// float step=(TempParameters.w-0.25);// - screenfact.xy*=step;//==================================================== - - float4 bloomadd=bloom; - - for (int i=0; i<8; i++) - { - bloomuv.xy=offset[i]; - bloomuv.xy=(bloomuv.xy*screenfact.xy)+In.txcoord0.xy;//-(1.0/256.0);//-(1.0/512.0); - float4 tempbloom=tex2D(SamplerBloom1, bloomuv.xy); - bloom+=tempbloom; - } - bloom*=0.111111; - - - //float3 violet=float3(0.78, 0.5, 1.0); - //float3 violet=float3(0.6, 0.4, 1.0);//v2 - float3 violet=float3(0.6, 0.4, 1.0);//v3 -// float3 violet=float3(0.27, 0.52, 1.0);//v4 - - //this applies when white - //float gray=0.104*dot(srcbloom.xyz, 0.333);//max(srcbloom.x, max(srcbloom.y, srcbloom.z)); - //this applies on dark and when contrast - float ttt=dot(bloom.xyz, 0.333)-dot(srcbloom.xyz, 0.333); - ttt=max(ttt, 0.0); - float gray=BloomParameters.z*ttt*10;//max(srcbloom.x, max(srcbloom.y, srcbloom.z)); - float mixfact=(gray/(1.0+gray)); - mixfact*=1.0-saturate((TempParameters.w-1.0)*0.2); - violet.xy+=saturate((TempParameters.w-1.0)*0.3); - violet.xy=saturate(violet.xy); - bloom.xyz*=lerp(1.0, violet.xyz, mixfact); - - bloom.w=1.0; - return bloom; -} - - -//second pass -//SamplerBloom1 is result of first pass -float4 PS_BloomTexture2(VS_OUTPUT_POST In) : COLOR -{ - float4 bloomuv; - - float4 bloom=tex2D(SamplerBloom1, In.txcoord0); - const float2 offset[8]= - { - float2(1.0, 1.0), - float2(1.0, -1.0), - float2(-1.0, 1.0), - float2(-1.0, -1.0), - float2(0.0, 1.0), - float2(0.0, -1.0), - float2(1.0, 0.0), - float2(-1.0, 0.0) - }; - float2 screenfact=TempParameters.z; - screenfact.y*=ScreenSize.z; - float4 srcbloom=bloom; - - //TempParameters.w == (1+passnumber) -// float step=(TempParameters.w-0.25); - float step=BloomParameters.y;//*pow(2.0, BloomParameters.y * (TempParameters.w-1.0))*2.0;//*0.5 - screenfact.xy*=step;//*0.25==================================================== - float4 rotvec=0.0; - sincos(0.3927, rotvec.x, rotvec.y); - for (int i=0; i<8; i++) - { - bloomuv.xy=offset[i]; - bloomuv.xy=reflect(bloomuv.xy, rotvec.xy); - bloomuv.xy=(bloomuv.xy*screenfact.xy)+In.txcoord0.xy; - float4 tempbloom=tex2D(SamplerBloom1, bloomuv.xy); - bloom+=tempbloom; - } - bloom*=0.111111; - - bloom.w=1.0; - return bloom; -} - - - -//last pass, mix several bloom textures -//SamplerBloom5 is the result of prepass -//float4 PS_BloomPostPass(float2 vPos : VPOS ) : COLOR -float4 PS_BloomPostPass(VS_OUTPUT_POST In) : COLOR -{ - float4 bloom; - - //v1 - bloom =tex2D(SamplerBloom1, In.txcoord0); - bloom+=tex2D(SamplerBloom2, In.txcoord0); - bloom+=tex2D(SamplerBloom3, In.txcoord0); - bloom+=tex2D(SamplerBloom4, In.txcoord0); - bloom+=tex2D(SamplerBloom7, In.txcoord0); - bloom+=tex2D(SamplerBloom8, In.txcoord0); - bloom+=tex2D(SamplerBloom5, In.txcoord0); -// bloom+=tex2D(SamplerBloom6, In.txcoord0); - bloom*=0.142857; - - float3 lenz=0; - float2 lenzuv=0.0; - //deepness, curvature, inverse size - const float3 offset[4]= - { - float3(1.6, 4.0, 1.0), - float3(0.7, 0.25, 2.0), - float3(0.3, 1.5, 0.5), - float3(-0.5, 1.0, 1.0) - }; - //color filter per reflection - const float3 factors[4]= - { - float3(0.3, 0.4, 0.4), - float3(0.2, 0.4, 0.5), - float3(0.5, 0.3, 0.7), - float3(0.1, 0.2, 0.7) - }; - -//lenzuv.xy=0.5-lenzuv.xy; -//distfact=0.5-lenzuv.xy-0.5; - - if (LenzParameters.x>0.00001) - { - for (int i=0; i<4; i++) - { - float2 distfact=(In.txcoord0.xy-0.5); - lenzuv.xy=offset[i].x*distfact; - lenzuv.xy*=pow(2.0*length(float2(distfact.x*ScreenSize.z,distfact.y)), offset[i].y); - lenzuv.xy*=offset[i].z; - lenzuv.xy=0.5-lenzuv.xy;//v1 - // lenzuv.xy=In.txcoord0.xy-lenzuv.xy;//v2 - float3 templenz=tex2D(SamplerBloom2, lenzuv.xy); - templenz=templenz*factors[i]; - distfact=(lenzuv.xy-0.5); - distfact*=2.0; - templenz*=saturate(1.0-dot(distfact,distfact));//limit by uv 0..1 - // templenz=factors[i] * (1.0-dot(distfact,distfact)); - float maxlenz=max(templenz.x, max(templenz.y, templenz.z)); -/* float3 tempnor=(templenz.xyz/maxlenz); - tempnor=pow(tempnor, tempF1.z); - templenz.xyz=tempnor.xyz*maxlenz; +/* + enbbloom.fx : MariENB bloom filter. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. */ - float tempnor=(maxlenz/(1.0+maxlenz)); - tempnor=pow(tempnor, LenzParameters.y); - templenz.xyz*=tempnor; - - // templenz*=maxlenz*maxlenz; - lenz+=templenz; - // lenz.xyz=max(lenz.xyz, templenz.xyz*0.99); - } - lenz.xyz*=0.25*LenzParameters.x; - - bloom.xyz+=lenz.xyz; -// bloom.w=dot(lenz.xyz, 0.333); - bloom.w=max(lenz.xyz, max(lenz.y, lenz.z)); - } - return bloom; -} - - - -technique BloomPrePass -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Bloom(); - PixelShader = compile ps_3_0 PS_BloomPrePass(); - - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - CullMode=NONE; - AlphaBlendEnable=FALSE; - AlphaTestEnable=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } -} - -technique BloomTexture1 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Bloom(); - PixelShader = compile ps_3_0 PS_BloomTexture1(); - - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - CullMode=NONE; - AlphaBlendEnable=FALSE; - AlphaTestEnable=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } -} - - -technique BloomTexture2 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Bloom(); - PixelShader = compile ps_3_0 PS_BloomTexture2(); - - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - CullMode=NONE; - AlphaBlendEnable=FALSE; - AlphaTestEnable=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } -} - -technique BloomPostPass -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Bloom(); - PixelShader = compile ps_3_0 PS_BloomPostPass(); - - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - CullMode=NONE; - AlphaBlendEnable=FALSE; - AlphaTestEnable=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } -} - - - +/* do not touch this! */ +#define E_SHADER_3_0 +/* separate for easier maintenance */ +#include "menbbloomsettings.fx" +#include "menbbloominternals.fx" +#include "menbbloomfilters.fx" diff --git a/enbeffect.fx b/enbeffect.fx index 2c45c3a..67afd98 100644 --- a/enbeffect.fx +++ b/enbeffect.fx @@ -1,616 +1,12 @@ - #define POSTPROCESS 2 - - - float EBrightnessV2Day < - string UIName="EBrightnessV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.4}; - - float EAdaptationMinV2Day < - string UIName="EAdaptationMinV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.05}; - - float EAdaptationMaxV2Day < - string UIName="EAdaptationMaxV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.15}; - - float EToneMappingCurveV2Day < - string UIName="EToneMappingCurveV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - float EIntensityContrastV2Day < - string UIName="EIntensityContrastV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - float EToneMappingOversaturationV2Day < - string UIName="EToneMappingOversaturationV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=200.0; - > = {40.0}; - - float EColorSaturationV2Day < - string UIName="EColorSaturationV2Day"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.3}; - - - - - - float EBrightnessV2Night < - string UIName="EBrightnessV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - float EAdaptationMinV2Night < - string UIName="EAdaptationMinV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.1}; - - float EAdaptationMaxV2Night < - string UIName="EAdaptationMaxV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.2}; - - float EToneMappingCurveV2Night < - string UIName="EToneMappingCurveV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {4.3}; - - float EIntensityContrastV2Night < - string UIName="EIntensityContrastV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - float EToneMappingOversaturationV2Night < - string UIName="EToneMappingOversaturationV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=200.0; - > = {20.0}; - - float EColorSaturationV2Night < - string UIName="EColorSaturationV2Night"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - - - - float EBrightnessV2Interior < - string UIName="EBrightnessV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - float EAdaptationMinV2Interior < - string UIName="EAdaptationMinV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.1}; - - float EAdaptationMaxV2Interior < - string UIName="EAdaptationMaxV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {0.2}; - - float EToneMappingCurveV2Interior < - string UIName="EToneMappingCurveV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {4.3}; - - float EIntensityContrastV2Interior < - string UIName="EIntensityContrastV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - - float EToneMappingOversaturationV2Interior < - string UIName="EToneMappingOversaturationV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=200.0; - > = {20.0}; - - float EColorSaturationV2Interior < - string UIName="EColorSaturationV2Interior"; - string UIWidget="Spinner"; - float UIMin=0.0; - float UIMax=50.0; - > = {1.0}; - -//+++++++++++++++++++++++++++++ -//external parameters, do not modify -//+++++++++++++++++++++++++++++ -//keyboard controlled temporary variables (in some versions exists in the config file). Press and hold key 1,2,3...8 together with PageUp or PageDown to modify. By default all set to 1.0 -float4 tempF1; //0,1,2,3 -float4 tempF2; //5,6,7,8 -float4 tempF3; //9,0 -//x=generic timer in range 0..1, period of 16777216 ms (4.6 hours), w=frame time elapsed (in seconds) -float4 Timer; -//x=Width, y=1/Width, z=ScreenScaleY, w=1/ScreenScaleY -float4 ScreenSize; -//changes in range 0..1, 0 means that night time, 1 - day time -float ENightDayFactor; -//changes 0 or 1. 0 means that exterior, 1 - interior -float EInteriorFactor; -//enb version of bloom applied, ignored if original post processing used -float EBloomAmount; - - -texture2D texs0;//color -texture2D texs1;//bloom skyrim -texture2D texs2;//adaptation skyrim -texture2D texs3;//bloom enb -texture2D texs4;//adaptation enb -texture2D texs7;//palette enb - -sampler2D _s0 = sampler_state -{ - Texture = ; - MinFilter = POINT;// - MagFilter = POINT;// - MipFilter = NONE;//LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D _s1 = sampler_state -{ - Texture = ; - MinFilter = LINEAR;// - MagFilter = LINEAR;// - MipFilter = NONE;//LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D _s2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR;// - MagFilter = LINEAR;// - MipFilter = NONE;//LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D _s3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR;// - MagFilter = LINEAR;// - MipFilter = NONE;//LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D _s4 = sampler_state -{ - Texture = ; - MinFilter = LINEAR;// - MagFilter = LINEAR;// - MipFilter = NONE;//LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D _s7 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; - - - -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -VS_OUTPUT_POST VS_Quad(VS_INPUT_POST IN) -{ - VS_OUTPUT_POST OUT; - - OUT.vpos=float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); - - OUT.txcoord0.xy=IN.txcoord0.xy; - - return OUT; -} - - -//skyrim shader specific externals, do not modify -float4 _c1 : register(c1); -float4 _c2 : register(c2); -float4 _c3 : register(c3); -float4 _c4 : register(c4); -float4 _c5 : register(c5); - -float4 PS_D6EC7DD1(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float4 _oC0=0.0; //output - - float4 _c6=float4(0, 0, 0, 0); - float4 _c7=float4(0.212500006, 0.715399981, 0.0720999986, 1.0); - - float4 r0; - float4 r1; - float4 r2; - float4 r3; - float4 r4; - float4 r5; - float4 r6; - float4 r7; - float4 r8; - float4 r9; - float4 r10; - float4 r11; - - - float4 _v0=0.0; - - _v0.xy=IN.txcoord0.xy; - r1=tex2D(_s0, _v0.xy); //color - - r11=r1; //my bypass - _oC0.xyz=r1.xyz; //for future use without game color corrections - - float hnd = ENightDayFactor; - float pi = (1-EInteriorFactor); - -#ifdef APPLYGAMECOLORCORRECTION - //apply original - r0.x=1.0/_c2.y; - r1=tex2D(_s2, _v0); - r0.yz=r1.xy * _c1.y; - r0.w=1.0/r0.y; - r0.z=r0.w * r0.z; - r1=tex2D(_s0, _v0); - r1.xyz=r1 * _c1.y; - r0.w=dot(_c7.xyz, r1.xyz); - r1.w=r0.w * r0.z; - r0.z=r0.z * r0.w + _c7.w; - r0.z=1.0/r0.z; - r0.x=r1.w * r0.x + _c7.w; - r0.x=r0.x * r1.w; - r0.x=r0.z * r0.x; - if (r0.w<0) r0.x=_c6.x; - r0.z=1.0/r0.w; - r0.z=r0.z * r0.x; - r0.x=saturate(-r0.x + _c2.x); -// r2=tex2D(_s3, _v0);//enb bloom - r2=tex2D(_s1, _v0);//skyrim bloom - r2.xyz=r2 * _c1.y; - r2.xyz=r0.x * r2; - r1.xyz=r1 * r0.z + r2; - r0.x=dot(r1.xyz, _c7.xyz); - r1.w=_c7.w; - r2=lerp(r0.x, r1, _c3.x); - r1=r0.x * _c4 - r2; - r1=_c4.w * r1 + r2; - r1=_c3.w * r1 - r0.y; //khajiit night vision _c3.w - r0=_c3.z * r1 + r0.y; - r1=-r0 + _c5; - _oC0=_c5.w * r1 + r0; - - -#endif //APPLYGAMECOLORCORRECTION - /* -#ifndef APPLYGAMECOLORCORRECTION -//temporary fix for khajiit night vision, but it also degrade colors. -// r1=tex2D(_s2, _v0); -// r0.y=r1.xy * _c1.y; - r1=_oC0; - r1.xyz=r1 * _c1.y; - r0.x=dot(r1.xyz, _c7.xyz); - r2=lerp(r0.x, r1, _c3.x); - r1=r0.x * _c4 - r2; - r1=_c4.w * r1 + r2; - r1=_c3.w * r1;// - r0.y; - r0=_c3.z * r1;// + r0.y; - r1=-r0 + _c5; - _oC0=_c5.w * r1 + r0; -#endif //!APPLYGAMECOLORCORRECTION + enbeffect.fx : MariENB base shader. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. */ - - float4 color=_oC0; - - - //adaptation in time - float4 Adaptation=tex2D(_s4, 0.5); - float grayadaptation=max(max(Adaptation.x, Adaptation.y), Adaptation.z); -// grayadaptation=1.0/grayadaptation; - - - float4 xcolorbloom=tex2D(_s3, _v0.xy); //bloom -// float maxb=max(xcolorbloom.x, max(xcolorbloom.y, xcolorbloom.z)); -// float violetamount=maxb/(maxb+EVioletShiftAmountInv); -// xcolorbloom.xyz=lerp(xcolorbloom.xyz, xcolorbloom.xyz*EVioletShiftColor, violetamount*violetamount); - - - //darkening if too bright screen -// float srcgray=max(color.x, max(color.y, color.z)); -//v1 not good for hdr, scaling required -// color.xyz=color.xyz-(saturate(EAdaptationDarkeningAmount*grayadaptation) * color.xyz)*(1.0-saturate(srcgray*tempF2.y)); -//v2 -// color.xyz=color.xyz-(saturate(EAdaptationDarkeningAmount*grayadaptation) * color.xyz)*(1.0-saturate(srcgray/(srcgray+1.0*tempF2.y))); -//v3 -// color.xyz=color.xyz-(saturate(EAdaptationDarkeningAmount*grayadaptation) * color.xyz)*(1.0/(srcgray*0.7+1.0));//0.7 to modify!!! - - - color.xyz+=xcolorbloom.xyz*EBloomAmount; -// color.xyz=color.xyz-((EAdaptationDarkeningAmount/(grayadaptation*2.0*tempF1.x+1.0)) * color.xyz)*(1.0/(srcgray*0.7+1.0));//0.7 to modify!!! -//v4 -// color.xyz=color.xyz/(grayadaptation*EAdaptationAmount*tempF1.x+1.0); - -//color.xyz=color.xyz+(xcolorbloom.xyz); - -//color.xyz*=EColorFilter; - -//color.xyz*=2.0; - -//-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -#if (POSTPROCESS==2) - - float newEAdaptationMax = lerp( EAdaptationMaxV2Interior, ( lerp( EAdaptationMaxV2Night, EAdaptationMaxV2Day, hnd ) ), pi ); - float newEAdaptationMin = lerp( EAdaptationMinV2Interior, ( lerp( EAdaptationMinV2Night, EAdaptationMinV2Day, hnd ) ), pi ); - float newEBrightnessV2 = lerp( EBrightnessV2Interior, ( lerp( EBrightnessV2Night, EBrightnessV2Day, hnd ) ), pi ); - float newEToneMappingCurve = lerp( EToneMappingCurveV2Interior, ( lerp( EToneMappingCurveV2Night, EToneMappingCurveV2Day, hnd ) ), pi ); - float newEIntensityContrastV2 = lerp( EIntensityContrastV2Interior, ( lerp( EIntensityContrastV2Night, EIntensityContrastV2Day, hnd ) ), pi ); - float newEToneMappingOversaturationV2 = lerp( EToneMappingOversaturationV2Interior, ( lerp( EToneMappingOversaturationV2Night, EToneMappingOversaturationV2Day, hnd ) ), pi ); - float newEColorSaturationV2 = lerp( EColorSaturationV2Interior, ( lerp( EColorSaturationV2Night, EColorSaturationV2Day, hnd ) ), pi ); - - grayadaptation=max(grayadaptation, 0.0); - grayadaptation=min(grayadaptation, 50.0); - color.xyz=color.xyz/(grayadaptation*newEAdaptationMax+newEAdaptationMin);//*tempF1.x - - color.xyz*=(newEBrightnessV2); - color.xyz+=0.000001; - float3 xncol=normalize(color.xyz); - float3 scl=color.xyz/xncol.xyz; - scl=pow(scl, newEIntensityContrastV2); - xncol.xyz=pow(xncol.xyz, newEColorSaturationV2); - color.xyz=scl*xncol.xyz; - - float lumamax=newEToneMappingOversaturationV2; - color.xyz=(color.xyz * (1.0 + color.xyz/lumamax))/(color.xyz + newEToneMappingCurve); - - - -#endif - -//-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -//-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //pallete texture (0.082+ version feature) -#ifdef E_CC_PALETTE - color.rgb=saturate(color.rgb); - float3 brightness=Adaptation.xyz;//tex2D(_s4, 0.5);//adaptation luminance -// brightness=saturate(brightness);//old version from ldr games - brightness=(brightness/(brightness+1.0));//new version - brightness=max(brightness.x, max(brightness.y, brightness.z));//new version - float3 palette; - float4 uvsrc=0.0; - uvsrc.y=brightness.r; - uvsrc.x=color.r; - palette.r=tex2Dlod(_s7, uvsrc).r; - uvsrc.x=color.g; - uvsrc.y=brightness.g; - palette.g=tex2Dlod(_s7, uvsrc).g; - uvsrc.x=color.b; - uvsrc.y=brightness.b; - palette.b=tex2Dlod(_s7, uvsrc).b; - color.rgb=palette.rgb; -#endif //E_CC_PALETTE - - -/* -//temporary testing -color.xyz=tex2D(_s0, _v0.xy); -//color.xyz=xcolorbloom.xyz*tempF1.x; -//color.xyz=pow(color.xyz, 0.5); -color.xyz+=(xcolorbloom.xyz-color.xyz)*tempF1.y; -//color.xyz=xcolorbloom.xyz*tempF1.y; -color.xyz=color.xyz*tempF1.x; -//color.xyz=color.xyz/(color.xyz +1.0*tempF1.z); -color.xyz=(color.xyz * (1.0 + color.xyz/40))/(color.xyz + EToneMappingCurveV3); - Adaptation=tex2D(_s4, 0.5); - grayadaptation=max(max(Adaptation.x, Adaptation.y), Adaptation.z); - grayadaptation=max(grayadaptation, 0.0); - grayadaptation=min(grayadaptation, 50.0); -// color.xyz=Adaptation*2;//*tempF1.x - -//color.xyz=tex2D(_s0, _v0.xy)*1.3; -*/ - -// color.xyz=tex2D(_s0, _v0.xy)*pow(tempF1.x,4); -// color.xyz=max(xcolorbloom.xyz, tex2D(_s0, _v0.xy).xyz)*pow(tempF1.x,4)*0.7; - - _oC0.w=1.0; - _oC0.xyz=color.xyz; - return _oC0; -} - - - -//switch between vanilla and mine post processing -#ifndef ENB_FLIPTECHNIQUE -technique Shader_D6EC7DD1 -#else -technique Shader_ORIGINALPOSTPROCESS -#endif -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Quad(); - PixelShader = compile ps_3_0 PS_D6EC7DD1(); - - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - ZEnable=FALSE; - ZWriteEnable=FALSE; - CullMode=NONE; - AlphaTestEnable=FALSE; - AlphaBlendEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } -} - - - -//original shader of post processing -#ifndef ENB_FLIPTECHNIQUE -technique Shader_ORIGINALPOSTPROCESS -#else -technique Shader_D6EC7DD1 -#endif -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Quad(); - PixelShader= - asm - { -// Parameters: -// sampler2D Avg; -// sampler2D Blend; -// float4 Cinematic; -// float4 ColorRange; -// float4 Fade; -// sampler2D Image; -// float4 Param; -// float4 Tint; -// Registers: -// Name Reg Size -// ------------ ----- ---- -// ColorRange c1 1 -// Param c2 1 -// Cinematic c3 1 -// Tint c4 1 -// Fade c5 1 -// Image s0 1 -// Blend s1 1 -// Avg s2 1 -//s0 bloom result -//s1 color -//s2 is average color - - ps_3_0 - def c6, 0, 0, 0, 0 - //was c0 originally - def c7, 0.212500006, 0.715399981, 0.0720999986, 1 - dcl_texcoord v0.xy - dcl_2d s0 - dcl_2d s1 - dcl_2d s2 - rcp r0.x, c2.y - texld r1, v0, s2 - mul r0.yz, r1.xxyw, c1.y - rcp r0.w, r0.y - mul r0.z, r0.w, r0.z - texld r1, v0, s1 - mul r1.xyz, r1, c1.y - dp3 r0.w, c7, r1 - mul r1.w, r0.w, r0.z - mad r0.z, r0.z, r0.w, c7.w - rcp r0.z, r0.z - mad r0.x, r1.w, r0.x, c7.w - mul r0.x, r0.x, r1.w - mul r0.x, r0.z, r0.x - cmp r0.x, -r0.w, c6.x, r0.x - rcp r0.z, r0.w - mul r0.z, r0.z, r0.x - add_sat r0.x, -r0.x, c2.x - texld r2, v0, s0 - mul r2.xyz, r2, c1.y - mul r2.xyz, r0.x, r2 - mad r1.xyz, r1, r0.z, r2 - dp3 r0.x, r1, c7 - mov r1.w, c7.w - lrp r2, c3.x, r1, r0.x - mad r1, r0.x, c4, -r2 - mad r1, c4.w, r1, r2 - mad r1, c3.w, r1, -r0.y - mad r0, c3.z, r1, r0.y - add r1, -r0, c5 - mad oC0, c5.w, r1, r0 - }; - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - ZEnable=FALSE; - ZWriteEnable=FALSE; - CullMode=NONE; - AlphaTestEnable=FALSE; - AlphaBlendEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } -} - +/* do not touch this! */ +#define E_SHADER_3_0 +/* separate for easier maintenance */ +#include "menbeffectsettings.fx" +#include "menbeffectinternals.fx" +#include "menbeffectfilters.fx" diff --git a/enbeffectprepass.fx b/enbeffectprepass.fx index f8c82da..0fff001 100644 --- a/enbeffectprepass.fx +++ b/enbeffectprepass.fx @@ -1,695 +1,13 @@ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// ENBSeries effect file -// visit http://enbdev.com for updates -// Copyright (c) 2007-2011 Boris Vorontsov -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/* + enbeffectprepass.fx : MariENB pre-pass filters. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* do not touch this! */ +#define E_SHADER_3_0 +/* separate for easier maintenance */ +#include "menbprepasssettings.fx" +#include "menbprepassinternals.fx" +#include "menbprepassfilters.fx" -//+++++++++++++++++++++++++++++ -// Internal parameters, can be modified -//+++++++++++++++++++++++++++++ -float EBlurSamplingRange = 4.0; // not used -float EApertureScale = 4.0; // not used - -//+++++++++++++++++++++++++++++ -// External parameters, do not modify -//+++++++++++++++++++++++++++++ -// Keyboard controlled temporary variables (in some versions exists in the config file). Press and hold key 1,2,3...8 together with PageUp or PageDown to modify. -// By default all set to 1.0 -float4 tempF1; //0,1,2,3 -float4 tempF2; //5,6,7,8 -float4 tempF3; //9,0 -// x=Width, y=1/Width, z=ScreenScaleY, w=1/ScreenScaleY -float4 ScreenSize; -// x=generic timer in range 0..1, period of 16777216 ms (4.6 hours), w=frame time elapsed (in seconds) -float4 Timer; -// Adaptation delta time for focusing -float FadeFactor; - -// textures -texture2D texColor; -texture2D texDepth; -texture2D texNoise; -texture2D texPalette; -texture2D texFocus; // computed focusing depth -texture2D texCurr; // 4*4 texture for focusing -texture2D texPrev; // 4*4 texture for focusing - -sampler2D SamplerColor = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Mirror; - AddressV = Mirror; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; - -sampler2D SamplerDepth = sampler_state -{ - Texture = ; - MinFilter = POINT; - MagFilter = POINT; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; - -sampler2D SamplerNoise = sampler_state -{ - Texture = ; - MinFilter = POINT; - MagFilter = POINT; - MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; - -sampler2D SamplerPalette = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; - -// for focus computation -sampler2D SamplerCurr = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; - -// for focus computation -sampler2D SamplerPrev = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -// for dof only in PostProcess techniques -sampler2D SamplerFocus = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - 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; -}; - -//////////////////////////////////////////////////////////////////// -// Begin focusing (by Boris Vorontsov) -//////////////////////////////////////////////////////////////////// -VS_OUTPUT_POST VS_Focus(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; -} - -//SRCpass1X=ScreenWidth; -//SRCpass1Y=ScreenHeight; -//DESTpass2X=4; -//DESTpass2Y=4; -float4 PS_ReadFocus(VS_OUTPUT_POST IN) : COLOR -{ - float res = tex2D(SamplerDepth, 0.5).x; - //float3 color = tex2D(SamplerColor, 0.5).rgb; - return res; -} - -//SRCpass1X=4; -//SRCpass1Y=4; -//DESTpass2X=4; -//DESTpass2Y=4; -float4 PS_WriteFocus(VS_OUTPUT_POST IN) : COLOR -{ - float res = 0.0; - float curr = tex2D(SamplerCurr, 0.5).x; - float prev = tex2D(SamplerPrev, 0.5).x; - - res = lerp(prev, curr, saturate(FadeFactor));// time elapsed factor - res = max(res, 0.0); - - return res; -} - -technique ReadFocus -{ - pass P0 - { - VertexShader = compile vs_3_0 VS_Focus(); - PixelShader = compile ps_3_0 PS_ReadFocus(); - - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} - -technique WriteFocus -{ - pass P0 - { - VertexShader = compile vs_3_0 VS_Focus(); - PixelShader = compile ps_3_0 PS_WriteFocus(); - - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -//////////////////////////////////////////////////////////////////// -// End focusing code -//////////////////////////////////////////////////////////////////// - -/*------------------------------------------------------------------------------ - ENB prepass modification 2.0.6 by Matso - Credits to Boris Vorontsov -------------------------------------------------------------------------------*/ -// Effects enabling options -//#define ENABLE_DOF 1 // comment to disable depth of field -#define ENABLE_FAST_DOF 1 // comment to disable fast depth of field (never use both ENABLE_DOF and ENABLE_FAST_DOF - possible game crash or horrible FPS drop) -//#define ENABLE_SHARP 1 // comment to disable sharpening -//#define ENABLE_CHROMA 1 // comment to disable chromatic aberration (additional chromatic aberration applied beyond depth of field) - -// Methods enabling options -//#define USE_CHROMA_DOF 1 // comment it to disable chromatic aberration sampling in DoF -#define USE_SMOOTH_DOF 1 // comment it to disable smooth DoF -#define USE_BOKEH_DOF 1 // comment it to disable bokeh DoF -//#define USE_ANAMFLARE 1 // comment it to disable anamorphic lens flare (not working very well -_-) -#define USE_DOUBLE_BLUR 1 // comment it to disable additional blur - -// Useful constants -#define SEED Timer.x -#define PI 3.1415926535897932384626433832795 -#define CHROMA_POW 65.0 // the bigger the value, the more visible chomatic aberration effect in DoF - -// Fast DoF constants -#define DOF_SCALE 2356.1944901923449288469825374596 // PI * 750 -#define FIRST_PASS 0 // only 0, 1, 2, or 3 -#define SECOND_PASS 1 // only 0, 1, 2, or 3 -#define THIRD_PASS 2 // only 0, 1, 2, or 3 -#define FOURTH_PASS 3 // only 0, 1, 2, or 3 -#define DOF(sd,sf) fBlurScale * smoothstep(fDofBias, fDofCutoff, abs(sd - sf)) -#define USE_NATURAL_BOKEH 1 - -// Chromatic aberration parameters -float3 fvChroma = float3(0.995, 1.000, 1.005); // displacement scales of red, green and blue respectively -float fBaseRadius = 0.9; // below this radius the effect is less visible -float fFalloffRadius = 1.8; // over this radius the effects is maximal -float fChromaPower = 1.0; // power of the chromatic displacement (curve of the 'fvChroma' vector) - -// Sharpen parameters -float fSharpScale = 0.32; // intensity of sharpening -float2 fvTexelSize = float2(1.0 / 1920.0, 1.0 / 1080.0); // set your resolution sizes - -// Depth of field parameters -float fFocusBias = 0.045; // bigger values for nearsightedness, smaller for farsightedness (lens focal point distance) -float fDofCutoff = 0.25; // manages the smoothness of the DoF (bigger value results in wider depth of field) -float fDofBias = 0.12; // distance not taken into account in DoF (all closer then the distance is in focus) -float fBlurScale = 0.002; // governs image blur scale (the bigger value, the stronger blur) -float fBlurCutoff = 0.1; // bluring tolerance depending on the pixel and sample depth (smaller causes objects edges to be preserved) - -// Bokeh parameters -float fBokehCurve = 2.0; // the larger the value, the more visible the bokeh effect is -float fBokehIntensity = 0.95; // governs bokeh brightness -float fBokehConstant = 0.1; // constant value of the bokeh weighting (bigger cause more powerful bokeh) - -// Grain parameters -float fGrainFreq = 2000.0; // movie grain frequency -float fGrainScale = 0.02; // effect scale - -// Anamorphic flare parameters (by default not used) -float fLuminance = 0.85; // bright pass luminance value -float fBlur = 2000.0; // blur amount, manages the size of the flare -float fIntensity = 0.25; // effect intensity - -// External parameters -extern float fWaterLevel = 1.0; // DO NOT CHANGE - must be 1.0 for now! - -/** - * Chromatic aberration function - given texture coordinate and a focus value - * retrieves chromatically distorted color of the pixel. Each of the color - * channels are displaced according to the pixel coordinate and its distance - * from the center of the image. Also the DoF out-of-focus value is applied. - * (http://en.wikipedia.org/wiki/Chromatic_aberration) - */ -float4 ChromaticAberration(float2 tex, float outOfFocus) -{ - float d = distance(tex, float2(0.5, 0.5)); - float f = smoothstep(fBaseRadius, fFalloffRadius, d + outOfFocus * d); - float3 chroma = pow(f + fvChroma, fChromaPower); - - float2 tr = ((2.0 * tex - 1.0) * chroma.r) * 0.5 + 0.5; - float2 tg = ((2.0 * tex - 1.0) * chroma.g) * 0.5 + 0.5; - float2 tb = ((2.0 * tex - 1.0) * chroma.b) * 0.5 + 0.5; - - float3 color = float3(tex2D(SamplerColor, tr).r, tex2D(SamplerColor, tg).g, tex2D(SamplerColor, tb).b) * (1.0 - f); - - return float4(color, 1.0); -} - -/** - * Chromatic aberration done accoriding to the focus factor provided. - */ -float4 ChromaticAberrationFocus(float2 tex, float outOfFocus) -{ - float d = distance(tex, float2(0.5, 0.5)); - float f = smoothstep(fBaseRadius, fFalloffRadius, d); - float3 chroma = pow(f + fvChroma, CHROMA_POW * outOfFocus * fChromaPower); - - float2 tr = ((2.0 * tex - 1.0) * chroma.r) * 0.5 + 0.5; - float2 tg = ((2.0 * tex - 1.0) * chroma.g) * 0.5 + 0.5; - float2 tb = ((2.0 * tex - 1.0) * chroma.b) * 0.5 + 0.5; - - float3 color = float3(tex2D(SamplerColor, tr).r, tex2D(SamplerColor, tg).g, tex2D(SamplerColor, tb).b) * (1.0 - outOfFocus); - - return float4(color, 1.0); -} - -/** - * Pseudo-random number generator - returns a number generated according to the provided vector. - */ -float Random(float2 co) -{ - return frac(sin(dot(co.xy, float2(12.9898, 78.233))) * 43758.5453); -} - -/** - * Movie grain function - returns a random, time scaled value for the given pixel coordinate. - */ -float Grain(float3 tex) -{ - float r = Random(tex.xy); - float grain = sin(PI * tex.z * r * fGrainFreq) * fGrainScale * r; - return grain; -} - -/** - * Bright pass - rescales sampled pixel to emboss bright enough value. - */ -float3 BrightPass(float2 tex) -{ - float3 c = tex2D(SamplerColor, tex).rgb; - float3 bC = max(c - float3(fLuminance, fLuminance, fLuminance), 0.0); - float bright = dot(bC, 1.0); - bright = smoothstep(0.0f, 0.5, bright); - return lerp(0.0, c, bright); -} - -float3 BrightColor(float3 c) -{ - float3 bC = max(c - float3(fLuminance, fLuminance, fLuminance), 0.0); - float bright = dot(bC, 1.0); - bright = smoothstep(0.0f, 0.5, bright); - return lerp(0.0, c, bright); -} - -/** - * Anamorphic sampling function - scales pixel coordinate - * to stratch the image along one of the axels. - * (http://en.wikipedia.org/wiki/Anamorphosis) - */ -float3 AnamorphicSample(int axis, float2 tex, float blur) -{ - tex = 2.0 * tex - 1.0; - if (!axis) tex.x /= -blur; - else tex.y /= -blur; - tex = 0.5 * tex + 0.5; - return BrightPass(tex); -} - -/** - * Converts pixel color to gray-scale. - */ -float GrayScale(float3 sample) -{ - return dot(sample, float3(0.3, 0.59, 0.11)); -} - -/** - * Returns an under water distortion according to the given coordinate and time factor. - */ -float2 UnderWaterDistortion(float2 coord) -{ - float2 distortion = float2(0.0, 0.0); - // TODO:... - - return coord;// + distortion * (fWaterLevel - 1.0); -} - -///// Shaders //////////////////////////////////////////////////////////////////////////////// -// Vertex shader (Boris code) -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; -} - -// Sharpen pixel shader (Matso code) -float4 PS_ProcessPass_Sharpen(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 Color = 9.0 * tex2D(SamplerColor, coord.xy); - - Color -= tex2D(SamplerColor, coord.xy + float2(-fvTexelSize.x, fvTexelSize.y) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(0.0, fvTexelSize.y) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(fvTexelSize.x, fvTexelSize.y) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(fvTexelSize.x, 0.0) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(fvTexelSize.x, -fvTexelSize.y) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(0.0, -fvTexelSize.y) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(-fvTexelSize.x, -fvTexelSize.y) * fSharpScale); - Color -= tex2D(SamplerColor, coord.xy + float2(-fvTexelSize.x, 0.0) * fSharpScale); - - Color.a = 1.0; - return Color; -} - -// Anamorphic lens flare pixel shader (Matso code) -float4 PS_ProcessPass_Anamorphic(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float4 res; - float2 coord = IN.txcoord.xy; - float3 anamFlare = AnamorphicSample(0, coord.xy, fBlur) * float3(0.0, 0.0, 1.0); - res.rgb = anamFlare * fIntensity; - res.a = 1.0; - return res; -} - -// Fast depth of field pixel shader (Matso code) -float4 PS_ProcessPass_FastDoF(VS_OUTPUT_POST IN, float2 vPos : VPOS, uniform int axis) : COLOR -{ - float4 res; - float2 base = UnderWaterDistortion(IN.txcoord.xy); - float4 tcol = tex2D(SamplerColor, base.xy); - float sd = tex2D(SamplerDepth, base).x; - -#ifndef USE_SMOOTH_DOF - float sf = tex2D(SamplerDepth, 0.5).x - fFocusBias * fWaterLevel; -#else - float sf = tex2D(SamplerFocus, 0.5).x - fFocusBias * 2.0 * fWaterLevel; -#endif - float outOfFocus = DOF(sd, sf); - - float offset[4] = { -1.282, -0.524, 0.524, 1.282 }; -#ifndef USE_NATURAL_BOKEH - float2 tds[4] = { float2(1.0, 0.0), float2(0.0, 1.0), float2(0.707, 0.707), float2(-0.707, 0.707) }; -#else - float2 tds[16] = { - float2(0.2007, 0.9796), - float2(-0.2007, 0.9796), - float2(0.2007, 0.9796), - float2(-0.2007, 0.9796), - - float2(0.8240, 0.5665), - float2(0.5665, 0.8240), - float2(0.8240, 0.5665), - float2(0.5665, 0.8240), - - float2(0.9796, 0.2007), - float2(0.9796, -0.2007), - float2(0.9796, 0.2007), - float2(0.9796, -0.2007), - - float2(-0.8240, 0.5665), - float2(-0.5665, 0.8240), - float2(-0.8240, 0.5665), - float2(-0.5665, 0.8240) - }; -#endif - - float blur = DOF_SCALE * outOfFocus; - float wValue = 1.0; - -#ifndef USE_NATURAL_BOKEH - tdirs[axis].x *= fvTexelSize.x; - tdirs[axis].y *= fvTexelSize.y; -#endif - -#ifdef USE_BOKEH_DOF - blur *= 0.35; -#endif - - for (int i = 0; i < 4; i++) - { -#ifndef USE_NATURAL_BOKEH - float2 tdir = offset[i] * tds[axis] * blur; -#else - float2 tdir = tds[axis * 4 + i] * fvTexelSize * offset[i] * blur; -#endif - - float2 coord = base + tdir.xy; -#ifdef USE_CHROMA_DOF - float4 ct = ChromaticAberrationFocus(coord.xy, outOfFocus); -#else - float4 ct = tex2D(SamplerColor, coord.xy); -#endif - float sds = tex2D(SamplerDepth, coord).x; - -#ifndef USE_BOKEH_DOF - float w = 1.0 + abs(offset[i]); // weight blur for better effect -#else - #if USE_BOKEH_DOF == 1 // my own bokeh weighting - float b = GrayScale(ct.rgb) + length(ct.rgb) + fBokehConstant + blur; - float w = pow(b * fBokehIntensity, fBokehCurve) + abs(offset[i]) + blur; - #endif -#endif - w *= (1.0 - smoothstep(0.0, fBlurCutoff, abs(sds - sd))); - tcol += ct * w; - wValue += w; - } - - tcol /= wValue; - - res.xyz = tcol.xyz; - res.w = 1.0; - return res; -} - -// Chromatic abrration with no DoF (Matso code) -float4 PS_ProcessPass_Chroma(VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 result = ChromaticAberration(coord.xy, 0.0); - result.a = 1.0; - return result; -} - -////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#ifdef ENABLE_SHARP - technique PostProcess - { - pass P0 - { - VertexShader = compile vs_3_0 VS_PostProcess(); - PixelShader = compile ps_3_0 PS_ProcessPass_Sharpen(); - - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - #ifdef USE_ANAMFLARE - pass P1 - { - AlphaBlendEnable = true; - SrcBlend = One; - DestBlend = One; - - PixelShader = compile ps_3_0 PS_ProcessPass_Anamorphic(); - } - #endif - } -#endif - -#ifndef ENABLE_FAST_DOF - #ifdef ENABLE_CHROMA - #ifndef ENABLE_SHARP - technique PostProcess - #else - technique PostProcess2 - #endif - { - pass P0 - { - VertexShader = compile vs_3_0 VS_PostProcess(); - PixelShader = compile ps_3_0 PS_ProcessPass_Chroma(); - - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - } - #endif -#endif - -#ifndef ENABLE_CHROMA - #ifdef ENABLE_FAST_DOF - #ifndef ENABLE_SHARP - technique PostProcess - #else - technique PostProcess2 - #endif - { - pass P0 - { - VertexShader = compile vs_3_0 VS_PostProcess(); - PixelShader = compile ps_3_0 PS_ProcessPass_FastDoF(FIRST_PASS); - - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - } - - #ifndef ENABLE_SHARP - technique PostProcess2 - #else - technique PostProcess3 - #endif - { - pass P0 - { - VertexShader = compile vs_3_0 VS_PostProcess(); - PixelShader = compile ps_3_0 PS_ProcessPass_FastDoF(SECOND_PASS); - - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - } - - #ifdef USE_DOUBLE_BLUR - #ifndef ENABLE_SHARP - technique PostProcess3 - #else - technique PostProcess4 - #endif - { - pass P0 - { - VertexShader = compile vs_3_0 VS_PostProcess(); - PixelShader = compile ps_3_0 PS_ProcessPass_FastDoF(THIRD_PASS); - - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - } - - #ifndef ENABLE_SHARP - technique PostProcess4 - #else - technique PostProcess5 - #endif - { - pass P0 - { - VertexShader = compile vs_3_0 VS_PostProcess(); - PixelShader = compile ps_3_0 PS_ProcessPass_FastDoF(FOURTH_PASS); - - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - } - #endif - #endif -#endif diff --git a/enblens.fx b/enblens.fx index 47b5165..47c6fca 100644 --- a/enblens.fx +++ b/enblens.fx @@ -1,351 +1,58 @@ -//++++++++++++++++++++++++++++++++++++++++++++ -// ENBSeries effect file -// visit http://enbdev.com for updates -// Copyright (c) 2007-2013 Boris Vorontsov -//++++++++++++++++++++++++++++++++++++++++++++ - - - -//+++++++++++++++++++++++++++++ -//internal parameters, can be modified -//+++++++++++++++++++++++++++++ -//none - - - -//+++++++++++++++++++++++++++++ -//external parameters, do not modify -//+++++++++++++++++++++++++++++ -//keyboard controlled temporary variables (in some versions exists in the config file). Press and hold key 1,2,3...8 together with PageUp or PageDown to modify. By default all set to 1.0 -float4 tempF1; //0,1,2,3 -float4 tempF2; //5,6,7,8 -float4 tempF3; //9,0 -//x=Width, y=1/Width, z=ScreenScaleY, w=1/ScreenScaleY -float4 ScreenSize; -//changes in range 0..1, 0 means that night time, 1 - day time -float ENightDayFactor; -//changes 0 or 1. 0 means that exterior, 1 - interior -float EInteriorFactor; -//x=generic timer in range 0..1, period of 16777216 ms (4.6 hours), w=frame time elapsed (in seconds) -float4 Timer; -//additional info for computations -float4 TempParameters; -//x=reflection intensity, y=reflection power, z=dirt intensity, w=dirt power -float4 LensParameters; -//fov in degrees -float FieldOfView; - - - -texture2D texColor; -texture2D texMask;//enblensmask texture -texture2D texBloom1; -texture2D texBloom2; -texture2D texBloom3; -texture2D texBloom4; -texture2D texBloom5; -texture2D texBloom6; -texture2D texBloom7; -texture2D texBloom8; - -sampler2D SamplerColor = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerMask = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom1 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom4 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom5 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom6 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom7 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerBloom8 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - +/* + enblens.fx : MariENB Lens filters. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* Effects have yet to be implemented. Sorry for the inconvenience. */ struct VS_OUTPUT_POST { - float4 vpos : POSITION; + float4 vpos : POSITION; float2 txcoord0 : TEXCOORD0; }; struct VS_INPUT_POST { - float3 pos : POSITION; + float3 pos : POSITION; float2 txcoord0 : TEXCOORD0; }; - - - -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -VS_OUTPUT_POST VS_Draw(VS_INPUT_POST IN) +VS_OUTPUT_POST VS_Dummy( VS_INPUT_POST IN ) { VS_OUTPUT_POST OUT; - - OUT.vpos=float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); - - OUT.txcoord0.xy=IN.txcoord0.xy+TempParameters.xy;//1.0/(bloomtexsize*2.0) - + OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); + OUT.txcoord0.xy = IN.txcoord0.xy; return OUT; } - - - -float4 PS_Draw(VS_OUTPUT_POST In) : COLOR +float4 PS_Dummy( VS_OUTPUT_POST In ) : COLOR { - float4 res=0.0; - - float2 coord; - //deepness, curvature, inverse size - const float3 offset[4]= - { - float3(1.6, 4.0, 1.0), - float3(0.7, 0.25, 2.0), - float3(0.3, 1.5, 0.5), - float3(-0.5, 1.0, 1.0) - }; - //color filter per reflection - const float3 factors[4]= - { - float3(0.3, 0.4, 0.4), - float3(0.2, 0.4, 0.5), - float3(0.5, 0.3, 0.7), - float3(0.1, 0.2, 0.7) - }; - - for (int i=0; i<4; i++) - { - float2 distfact=(In.txcoord0.xy-0.5); - coord.xy=offset[i].x*distfact; - coord.xy*=pow(2.0*length(float2(distfact.x*ScreenSize.z,distfact.y)), offset[i].y); - coord.xy*=offset[i].z; - coord.xy=0.5-coord.xy;//v1 -// coord.xy=In.txcoord0.xy-coord.xy;//v2 - float3 templens=tex2D(SamplerBloom2, coord.xy); - templens=templens*factors[i]; - distfact=(coord.xy-0.5); - distfact*=2.0; - templens*=saturate(1.0-dot(distfact,distfact));//limit by uv 0..1 -// templens=factors[i] * (1.0-dot(distfact,distfact)); - float maxlens=max(templens.x, max(templens.y, templens.z)); -// float3 tempnor=(templens.xyz/maxlens); -// tempnor=pow(tempnor, tempF1.z); -// templens.xyz=tempnor.xyz*maxlens; - float tempnor=(maxlens/(1.0+maxlens)); - tempnor=pow(tempnor, LensParameters.y); - templens.xyz*=tempnor; - - res.xyz+=templens; - } - res.xyz*=0.25*LensParameters.x; - - - //add mask - { - coord=In.txcoord0.xy; - //coord.y*=ScreenSize.w;//remove stretching of image - float4 mask=tex2D(SamplerMask, coord); - float3 templens=tex2D(SamplerBloom6, In.txcoord0.xy); - float maxlens=max(templens.x, max(templens.y, templens.z)); - float tempnor=(maxlens/(1.0+maxlens)); - tempnor=pow(tempnor, LensParameters.w); - templens.xyz*=tempnor * LensParameters.z; - res.xyz+=mask.xyz * templens.xyz; - } - - return res; + return 0.0; } - - -//blurring may required when quality of blurring is too bad for bilinear filtering on screen -float4 PS_LensPostPass(VS_OUTPUT_POST In) : COLOR -{ - float4 res=0.0; -/* - //blur - const float2 offset[4]= - { - float2( 1.25, 1.25), - float2( 1.25,-1.25), - float2(-1.25, 1.25), - float2(-1.25,-1.25) - }; - //float2 screenfact=TempParameters.y; - //screenfact.y*=ScreenSize.z; - float2 screenfact=ScreenSize.y; - screenfact.y*=ScreenSize.z; - for (int i=0; i<4; i++) - { - float2 coord=offset[i].xy*screenfact.xy+In.txcoord0.xy; - res.xyz+=tex2D(SamplerColor, coord); - } - res.xyz*=0.25; - res.xyz=min(res.xyz, 32768.0); - res.xyz=max(res.xyz, 0.0); -*/ - //no blur - res=tex2D(SamplerColor, In.txcoord0.xy); - res.xyz=min(res.xyz, 32768.0); - res.xyz=max(res.xyz, 0.0); - - return res; -} - - - -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -//actual computation, draw all effects to small texture technique Draw { - pass p0 - { - VertexShader = compile vs_3_0 VS_Draw(); - PixelShader = compile ps_3_0 PS_Draw(); - - ColorWriteEnable=ALPHA|RED|GREEN|BLUE; - CullMode=NONE; - AlphaBlendEnable=FALSE; - AlphaTestEnable=FALSE; - SeparateAlphaBlendEnable=FALSE; - SRGBWriteEnable=FALSE; + pass p0 + { + VertexShader = compile vs_3_0 VS_Dummy(); + PixelShader = compile ps_3_0 PS_Dummy(); + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + CullMode = NONE; + AlphaBlendEnable = FALSE; + AlphaTestEnable = FALSE; + SeparateAlphaBlendEnable = FALSE; + SRGBWriteEnable = FALSE; } } - - - -//final pass, output to screen with additive blending and no alpha technique LensPostPass { - pass p0 - { - VertexShader = compile vs_3_0 VS_Draw(); - PixelShader = compile ps_3_0 PS_LensPostPass(); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - ColorWriteEnable=RED|GREEN|BLUE;//warning, no alpha output! - CullMode=NONE; - AlphaTestEnable=FALSE; - SeparateAlphaBlendEnable=FALSE; - SRGBWriteEnable=FALSE; + pass p0 + { + VertexShader = compile vs_3_0 VS_Dummy(); + PixelShader = compile ps_3_0 PS_Dummy(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; + ColorWriteEnable = RED|GREEN|BLUE; + CullMode = NONE; + AlphaTestEnable = FALSE; + SeparateAlphaBlendEnable = FALSE; + SRGBWriteEnable = FALSE; } } diff --git a/enblocal.ini b/enblocal.ini deleted file mode 100644 index a5c3bf1..0000000 --- a/enblocal.ini +++ /dev/null @@ -1,88 +0,0 @@ -; enblocal.ini : ENB configuration file. -; (C)2013 Marisa Kirisame, UnSX Team. -; Part of MariENB, the personal ENB of Marisa. -; Released under the MIT License. - -[PROXY] -EnableProxyLibrary=false -InitProxyFunctions=false -ProxyLibrary= - -[GLOBAL] -UsePatchSpeedhackWithoutGraphics=false -UseDefferedRendering=true -ForceFakeVideocard=false -IgnoreCreationKit=true - -[PERFORMANCE] -SpeedHack=true -EnableOcclusionCulling=true - -[MULTIHEAD] -ForceVideoAdapterIndex=false -VideoAdapterIndex=0 - -[MEMORY] -ExpandSystemMemoryX64=true -ReduceSystemMemoryUsage=true -DisableDriverMemoryManager=false -ReservedMemorySizeMb=1024 -EnableUnsafeMemoryHacks=false -DisablePreloadToVRAM=true -VideoMemorySizeMb=1024 -EnableCompression=true -AutodetectVideoMemorySize=true - -[WINDOW] -ForceBorderless=true -ForceBorderlessFullscreen=true - -[ENGINE] -ForceAnisotropicFiltering=true -MaxAnisotropy=16 -EnableVSync=false -AddDisplaySuperSamplingResolutions=false -VSyncSkipNumFrames=0 -ForceLodBias=true -LodBias=-0.5 - -[LIMITER] -WaitBusyRenderer=true -EnableFPSLimit=true -FPSLimit=60.0 - -[INPUT] -KeyReadConfig=8 -KeyCombination=16 -KeyUseEffect=123 -KeyFPSLimit=0 -KeyShowFPS=106 -KeyScreenshot=44 -KeyEditor=13 -KeyFreeVRAM=115 - -[ADAPTIVEQUALITY] -Enable=false -Quality=2 -DesiredFPS=60.0 - -[FIX] -FixPhysics=true -FixGameBugs=true -FixParallaxBugs=true -FixAliasedTextures=true -IgnoreLoadingScreen=false -IgnoreInventory=true -FixSsaoWaterTransparency=true -FixSsaoHairTransparency=true -FixTintGamma=true -RemoveBlur=false -FixSubSurfaceScattering=true -FixSkyReflection=true -FixCursorVisibility=true - -[ANTIALIASING] -EnableEdgeAA=false -EnableSubPixelAA=false -EnableTemporalAA=true -EnableTransparencyAA=false diff --git a/enbseries.ini b/enbseries.ini index f60475a..1dbc5d2 100644 --- a/enbseries.ini +++ b/enbseries.ini @@ -1,19 +1,19 @@ ; enbseries.ini : ENB configuration file. -; (C)2013 Marisa Kirisame, UnSX Team. +; (C)2013-2014 Marisa Kirisame, UnSX Team. ; Part of MariENB, the personal ENB of Marisa. ; Released under the MIT License. [GLOBAL] AdditionalConfigFile= -UseEffect=false +UseEffect=true [EFFECT] UseOriginalPostProcessing=false UseOriginalObjectsProcessing=false EnableBloom=true EnableAdaptation=false -EnableAmbientOcclusion=true -EnableDepthOfField=false +EnableAmbientOcclusion=false +EnableDepthOfField=true EnableDetailedShadow=true EnableSunRays=true EnableSkyLighting=true @@ -33,8 +33,8 @@ EnableMist=true [BLOOM] Quality=1 -AmountDay=0.06 -AmountNight=0.09 +AmountDay=0.5 +AmountNight=0.85 AmountInterior=1.35 BlueShiftAmountDay=21.369999 BlueShiftAmountNight=13.0 @@ -42,13 +42,13 @@ BlueShiftAmountInterior=12.0 ContrastDay=1.0 ContrastNight=3.0 ContrastInterior=2.0 -AmountSunrise=0.19 -AmountSunset=0.15 -AmountInteriorDay=0.1 -AmountInteriorNight=0.11 +AmountSunrise=1.02 +AmountSunset=1.31 +AmountInteriorDay=0.66 +AmountInteriorNight=0.9 BlueShiftAmountSunrise=15.77 -BlueShiftAmountSunset=17.539999 -BlueShiftAmountInteriorDay=19.209999 +BlueShiftAmountSunset=17.530001 +BlueShiftAmountInteriorDay=19.219999 BlueShiftAmountInteriorNight=14.86 IgnoreWeatherSystem=true @@ -79,17 +79,17 @@ FadeFogRangeInterior=0.0 SizeScale=0.5 SourceTexturesScale=0.5 FilterQuality=1 -AOAmount=2.24 +AOAmount=2.44 ILAmount=0.0 -UseComplexAmbientOcclusion=true +UseComplexAmbientOcclusion=false UseAmbientIndirectLighting=false SamplingPrecision=1 -FadeFogRange=4.18 +FadeFogRange=3.14 FilterType=0 -AOAmountInterior=2.04 +AOAmountInterior=2.71 ILAmountInterior=0.0 -AOIntensity=1.13 -AOIntensityInterior=1.01 +AOIntensity=1.49 +AOIntensityInterior=1.51 AOType=0 AOMixingType=0 AOMixingTypeInterior=0 @@ -107,7 +107,7 @@ DetectorLevelCurve=1.0 DetectorOldVersion=false [ADAPTATION] -ForceMinMaxValues=false +ForceMinMaxValues=true AdaptationSensitivity=0.35 AdaptationTime=3.22 AdaptationMin=0.85001 @@ -115,40 +115,40 @@ AdaptationMax=1.23 [ENVIRONMENT] DirectLightingIntensityDay=1.29 -DirectLightingIntensityNight=1.28 +DirectLightingIntensityNight=1.32 DirectLightingIntensityInterior=1.014688 DirectLightingCurveDay=1.24 -DirectLightingCurveNight=1.28 +DirectLightingCurveNight=1.15 DirectLightingCurveInterior=1.25 DirectLightingDesaturationDay=0.0 DirectLightingDesaturationNight=0.0 DirectLightingDesaturationInterior=0.0 -SpecularAmountMultiplierDay=0.81 -SpecularAmountMultiplierNight=1.07 +SpecularAmountMultiplierDay=1.15 +SpecularAmountMultiplierNight=1.44 SpecularAmountMultiplierInterior=1.0 -SpecularPowerMultiplierDay=0.641 -SpecularPowerMultiplierNight=0.401 +SpecularPowerMultiplierDay=1.551 +SpecularPowerMultiplierNight=1.651 SpecularPowerMultiplierInterior=1.0 SpecularFromLightDay=0.0 SpecularFromLightNight=0.0 SpecularFromLightInterior=0.0 AmbientLightingIntensityDay=0.66 -AmbientLightingIntensityNight=0.16 +AmbientLightingIntensityNight=0.22 AmbientLightingIntensityInterior=0.914 AmbientLightingCurveDay=1.29 -AmbientLightingCurveNight=1.29 +AmbientLightingCurveNight=1.18 AmbientLightingCurveInterior=0.75 AmbientLightingDesaturationDay=0.0 AmbientLightingDesaturationNight=0.0 AmbientLightingDesaturationInterior=0.0 -PointLightingIntensityDay=1.04 -PointLightingIntensityNight=1.26 +PointLightingIntensityDay=1.29 +PointLightingIntensityNight=2.15 PointLightingIntensityInterior=0.825 -PointLightingCurveDay=1.01875 -PointLightingCurveNight=1.21 +PointLightingCurveDay=1.26875 +PointLightingCurveNight=1.56 PointLightingCurveInterior=0.825 -PointLightingDesaturationDay=0.07 -PointLightingDesaturationNight=0.06 +PointLightingDesaturationDay=0.12 +PointLightingDesaturationNight=0.3 PointLightingDesaturationInterior=0.0 FogColorMultiplierDay=0.6 FogColorMultiplierNight=0.51 @@ -159,26 +159,26 @@ FogColorCurveInterior=1.0 ColorPowDay=1.0 ColorPowNight=1.0 ColorPowInterior=0.9 -DirectLightingIntensitySunrise=1.3 -DirectLightingIntensitySunset=1.41 +DirectLightingIntensitySunrise=1.55 +DirectLightingIntensitySunset=2.09 DirectLightingIntensityInteriorDay=1.27 -DirectLightingIntensityInteriorNight=1.28 -DirectLightingCurveSunrise=1.37 -DirectLightingCurveSunset=1.48 +DirectLightingIntensityInteriorNight=1.27 +DirectLightingCurveSunrise=1.59 +DirectLightingCurveSunset=1.91 DirectLightingCurveInteriorDay=1.05 -DirectLightingCurveInteriorNight=1.23 +DirectLightingCurveInteriorNight=1.11 DirectLightingDesaturationSunrise=0.0 DirectLightingDesaturationSunset=0.0 DirectLightingDesaturationInteriorDay=0.0 DirectLightingDesaturationInteriorNight=0.0 -SpecularAmountMultiplierSunrise=1.17 -SpecularAmountMultiplierSunset=1.2 -SpecularAmountMultiplierInteriorDay=0.92 -SpecularAmountMultiplierInteriorNight=1.1 -SpecularPowerMultiplierSunrise=0.231 -SpecularPowerMultiplierSunset=0.211 -SpecularPowerMultiplierInteriorDay=0.491 -SpecularPowerMultiplierInteriorNight=0.441 +SpecularAmountMultiplierSunrise=1.49 +SpecularAmountMultiplierSunset=1.51 +SpecularAmountMultiplierInteriorDay=1.27 +SpecularAmountMultiplierInteriorNight=1.38 +SpecularPowerMultiplierSunrise=1.181 +SpecularPowerMultiplierSunset=1.141 +SpecularPowerMultiplierInteriorDay=1.241 +SpecularPowerMultiplierInteriorNight=1.441 SpecularFromLightSunrise=0.0 SpecularFromLightSunset=0.0 SpecularFromLightInteriorDay=0.0 @@ -198,9 +198,9 @@ AmbientLightingDesaturationInteriorNight=0.0 AmbientColorFilterAmountSunrise=0.12 AmbientColorFilterAmountDay=0.11 AmbientColorFilterAmountSunset=0.14 -AmbientColorFilterAmountNight=0.17 +AmbientColorFilterAmountNight=0.33 AmbientColorFilterAmountInteriorDay=0.11 -AmbientColorFilterAmountInteriorNight=0.15 +AmbientColorFilterAmountInteriorNight=0.24 AmbientColorFilterTopSunrise=0.902, 0.784, 0.212 AmbientColorFilterTopDay=0.882, 0.863, 0.71 AmbientColorFilterTopSunset=0.945, 0.369, 0.0353 @@ -219,24 +219,24 @@ AmbientColorFilterBottomSunset=0.851, 0.384, 0.184 AmbientColorFilterBottomNight=0.11, 0.165, 0.408 AmbientColorFilterBottomInteriorDay=0.169, 0.29, 0.294 AmbientColorFilterBottomInteriorNight=0.0824, 0.133, 0.278 -PointLightingIntensitySunrise=1.11 -PointLightingIntensitySunset=1.11 -PointLightingIntensityInteriorDay=1.17 -PointLightingIntensityInteriorNight=1.15 -PointLightingCurveSunrise=1.3 -PointLightingCurveSunset=1.33 -PointLightingCurveInteriorDay=1.06 -PointLightingCurveInteriorNight=1.16 -PointLightingDesaturationSunrise=0.08 -PointLightingDesaturationSunset=0.06 -PointLightingDesaturationInteriorDay=0.03 -PointLightingDesaturationInteriorNight=0.04 -ParticleLightsIntensitySunrise=0.92 -ParticleLightsIntensityDay=0.86 -ParticleLightsIntensitySunset=0.93 -ParticleLightsIntensityNight=0.96 -ParticleLightsIntensityInteriorDay=0.62 -ParticleLightsIntensityInteriorNight=0.81 +PointLightingIntensitySunrise=1.72 +PointLightingIntensitySunset=1.69 +PointLightingIntensityInteriorDay=1.8 +PointLightingIntensityInteriorNight=2.01 +PointLightingCurveSunrise=1.59 +PointLightingCurveSunset=1.78 +PointLightingCurveInteriorDay=1.3 +PointLightingCurveInteriorNight=1.45 +PointLightingDesaturationSunrise=0.28 +PointLightingDesaturationSunset=0.32 +PointLightingDesaturationInteriorDay=0.18 +PointLightingDesaturationInteriorNight=0.26 +ParticleLightsIntensitySunrise=1.19 +ParticleLightsIntensityDay=0.94 +ParticleLightsIntensitySunset=1.14 +ParticleLightsIntensityNight=1.15 +ParticleLightsIntensityInteriorDay=0.77 +ParticleLightsIntensityInteriorNight=0.96 FogColorMultiplierSunrise=0.4 FogColorMultiplierSunset=0.35 FogColorMultiplierInteriorDay=0.39 @@ -272,7 +272,7 @@ GradientIntensityDay=1.310001 GradientIntensityNight=0.740001 GradientIntensityInterior=0.85 GradientDesaturationDay=0.29 -GradientDesaturationNight=0.04 +GradientDesaturationNight=0.05 GradientDesaturationInterior=0.325 GradientTopIntensityDay=2.570001 GradientTopIntensityNight=1.550001 @@ -393,47 +393,47 @@ MoonDesaturationSunset=0.14 MoonDesaturationNight=0.12 MoonDesaturationInteriorDay=0.22 MoonDesaturationInteriorNight=0.13 -CloudsOpacitySunrise=1.48 -CloudsOpacityDay=1.52 -CloudsOpacitySunset=1.37 -CloudsOpacityNight=1.12 -CloudsOpacityInteriorDay=1.63 -CloudsOpacityInteriorNight=1.43 +CloudsOpacitySunrise=0.98 +CloudsOpacityDay=1.31 +CloudsOpacitySunset=0.94 +CloudsOpacityNight=0.48 +CloudsOpacityInteriorDay=1.27 +CloudsOpacityInteriorNight=0.45 CloudsEdgeFadeRange=0.95 CloudsEdgeMoonMultiplier=4.32 IgnoreWeatherSystem=true [OBJECT] -SubSurfaceScatteringMultiplierDay=0.0 -SubSurfaceScatteringMultiplierNight=0.0 +SubSurfaceScatteringMultiplierDay=0.48 +SubSurfaceScatteringMultiplierNight=0.26 SubSurfaceScatteringMultiplierInterior=0.0 -SubSurfaceScatteringPowerDay=1.0 -SubSurfaceScatteringPowerNight=1.0 +SubSurfaceScatteringPowerDay=4.0 +SubSurfaceScatteringPowerNight=4.6 SubSurfaceScatteringPowerInterior=1.1 -SubSurfaceScatteringMultiplierSunrise=0.0 -SubSurfaceScatteringMultiplierSunset=0.0 -SubSurfaceScatteringMultiplierInteriorDay=0.0 -SubSurfaceScatteringMultiplierInteriorNight=0.0 -SubSurfaceScatteringPowerSunrise=1.0 -SubSurfaceScatteringPowerSunset=1.0 -SubSurfaceScatteringPowerInteriorDay=1.0 -SubSurfaceScatteringPowerInteriorNight=1.0 +SubSurfaceScatteringMultiplierSunrise=0.71 +SubSurfaceScatteringMultiplierSunset=0.84 +SubSurfaceScatteringMultiplierInteriorDay=0.31 +SubSurfaceScatteringMultiplierInteriorNight=0.19 +SubSurfaceScatteringPowerSunrise=2.81 +SubSurfaceScatteringPowerSunset=2.52 +SubSurfaceScatteringPowerInteriorDay=5.06 +SubSurfaceScatteringPowerInteriorNight=5.63 IgnoreWeatherSystem=true [LIGHTSPRITE] IntensityDay=0.53 -IntensityNight=0.81 +IntensityNight=1.56 IntensityInterior=0.5 CurveDay=0.93 CurveNight=1.305 CurveInterior=0.925 -IntensitySunrise=0.64 -IntensitySunset=0.7 -IntensityInteriorDay=1.07 -IntensityInteriorNight=0.96 +IntensitySunrise=0.92 +IntensitySunset=0.99 +IntensityInteriorDay=1.82 +IntensityInteriorNight=1.75 CurveSunrise=1.16 CurveSunset=0.93 -CurveInteriorDay=1.25 +CurveInteriorDay=1.17 CurveInteriorNight=1.34 IgnoreWeatherSystem=true @@ -515,7 +515,7 @@ IgnoreWeatherSystem=true [DEPTHOFFIELD] FadeTime=0.85 -Quality=1 +Quality=2 IgnoreWeatherSystem=true [RAYS] @@ -529,15 +529,15 @@ SunRaysMultiplierInteriorNight=0.44 IgnoreWeatherSystem=true [SKYLIGHTING] -Quality=1 +Quality=2 FilterQuality=1 AmbientMinLevel=0.39375 AmbientMinLevelSunrise=0.33 AmbientMinLevelDay=0.64 AmbientMinLevelSunset=0.4 AmbientMinLevelNight=0.29 -AmbientMinLevelInteriorDay=0.22 -AmbientMinLevelInteriorNight=0.18 +AmbientMinLevelInteriorDay=0.2 +AmbientMinLevelInteriorNight=0.19 IgnoreWeatherSystem=true [WEATHER] @@ -553,18 +553,18 @@ DuskDuration=2.0 NightTime=0.0 [VEGETATION] -SubSurfaceScatteringMultiplierSunrise=0.0 -SubSurfaceScatteringMultiplierDay=0.0 -SubSurfaceScatteringMultiplierSunset=0.0 -SubSurfaceScatteringMultiplierNight=0.0 -SubSurfaceScatteringMultiplierInteriorDay=0.0 -SubSurfaceScatteringMultiplierInteriorNight=0.0 -SubSurfaceScatteringPowerSunrise=1.0 -SubSurfaceScatteringPowerDay=1.0 -SubSurfaceScatteringPowerSunset=1.0 -SubSurfaceScatteringPowerNight=1.0 -SubSurfaceScatteringPowerInteriorDay=1.0 -SubSurfaceScatteringPowerInteriorNight=1.0 +SubSurfaceScatteringMultiplierSunrise=1.24 +SubSurfaceScatteringMultiplierDay=0.88 +SubSurfaceScatteringMultiplierSunset=1.4 +SubSurfaceScatteringMultiplierNight=1.14 +SubSurfaceScatteringMultiplierInteriorDay=0.96 +SubSurfaceScatteringMultiplierInteriorNight=1.08 +SubSurfaceScatteringPowerSunrise=4.09 +SubSurfaceScatteringPowerDay=4.44 +SubSurfaceScatteringPowerSunset=3.41 +SubSurfaceScatteringPowerNight=5.9 +SubSurfaceScatteringPowerInteriorDay=5.31 +SubSurfaceScatteringPowerInteriorNight=6.37 IgnoreWeatherSystem=true [PARTICLE] @@ -588,7 +588,7 @@ FilterQuality=1 FilterBluriness=1.0 SizeScale=0.5 SourceTexturesScale=0.5 -Amount=0.56 +Amount=0.64 Power=1.41 GlosinessMin=0.0 GlosinessMax=1.0 @@ -622,39 +622,39 @@ IgnoreWeatherSystem=true [RAIN] Enable=true -EnableAntialiasing=false +EnableAntialiasing=true EnableSupersampling=false -MotionStretch=0.35 -MotionTransparency=0.89 +MotionStretch=0.38 +MotionTransparency=0.86 IgnoreWeatherSystem=true [EYES] -SubSurfaceScatteringMultiplierSunrise=0.0 -SubSurfaceScatteringMultiplierDay=0.0 -SubSurfaceScatteringMultiplierSunset=0.0 -SubSurfaceScatteringMultiplierNight=0.0 -SubSurfaceScatteringMultiplierInteriorDay=0.0 -SubSurfaceScatteringMultiplierInteriorNight=0.0 -SubSurfaceScatteringPowerSunrise=1.0 -SubSurfaceScatteringPowerDay=1.0 -SubSurfaceScatteringPowerSunset=1.0 -SubSurfaceScatteringPowerNight=1.0 -SubSurfaceScatteringPowerInteriorDay=1.0 -SubSurfaceScatteringPowerInteriorNight=1.0 +SubSurfaceScatteringMultiplierSunrise=1.5 +SubSurfaceScatteringMultiplierDay=1.09 +SubSurfaceScatteringMultiplierSunset=1.66 +SubSurfaceScatteringMultiplierNight=1.38 +SubSurfaceScatteringMultiplierInteriorDay=1.12 +SubSurfaceScatteringMultiplierInteriorNight=1.26 +SubSurfaceScatteringPowerSunrise=2.69 +SubSurfaceScatteringPowerDay=3.83 +SubSurfaceScatteringPowerSunset=2.56 +SubSurfaceScatteringPowerNight=4.4 +SubSurfaceScatteringPowerInteriorDay=4.11 +SubSurfaceScatteringPowerInteriorNight=5.13 IgnoreWeatherSystem=true [SUBSURFACESCATTERING] Quality=1 -Radius=2.18 -Amount=0.5 -EpidermalAmount=1.23 -SubdermalAmount=2.25 -EpidermalDiffuseSaturation=-0.13 -SubdermalDiffuseSaturation=0.03 -EpidermalMix=0.92 -SubdermalMix=0.49 -SubdermalTranslucency=0.95 -SubdermalPhase=0.92 +Radius=0.88 +Amount=0.81 +EpidermalAmount=1.52 +SubdermalAmount=2.39 +EpidermalDiffuseSaturation=-0.45 +SubdermalDiffuseSaturation=0.23 +EpidermalMix=0.6 +SubdermalMix=0.55 +SubdermalTranslucency=0.92 +SubdermalPhase=0.75 IgnoreWeatherSystem=true [LENS] @@ -687,20 +687,20 @@ IgnoreWeatherSystem=true [WATER] EnableDispersion=true EnableCaustics=true -ReflectionAmount=0.86 -FrennelMultiplier=3.16 -FrennelMin=0.18 +ReflectionAmount=0.58 +FrennelMultiplier=3.18 +FrennelMin=0.15 FrennelMax=1.0 -DispersionAmount=0.93 -CausticsAmount=1.46 +DispersionAmount=0.91 +CausticsAmount=1.47 EnableParallax=true EnableShadow=true EnableSelfReflection=true EnableLighting=true EnableDisplacement=true DisplacementQuality=1 -SunSpecularMultiplier=1.63 -SunScatteringMultiplier=2.07 +SunSpecularMultiplier=1.6 +SunScatteringMultiplier=3.04 WavesAmplitudeSunrise=1.0 WavesAmplitudeDay=1.0 WavesAmplitudeSunset=1.0 @@ -709,9 +709,9 @@ WavesAmplitudeInteriorDay=1.0 WavesAmplitudeInteriorNight=1.0 ShadowQuality=1 EnableShadowNoise=true -SunLightingMultiplier=0.76 -WetMultiplier=0.7 -Muddiness=0.44 +SunLightingMultiplier=0.82 +WetMultiplier=0.42 +Muddiness=0.31 EnablePreCache=true EnableVolumetricShadow=true DisplacementFilterQuality=1 diff --git a/enbseries/effect.txt.ini b/enbseries/effect.txt.ini index aaa64a4..4920f77 100644 --- a/enbseries/effect.txt.ini +++ b/enbseries/effect.txt.ini @@ -1,96 +1,165 @@ [EFFECT.TXT] TECHNIQUE=0 EnableFXAA=false -FXAASpanMax=3.999999 -FXAAReduceMul=16.0 +FXAASpanMax=2.0 +FXAAReduceMul=32.0 FXAAReduceMin=128.0 -EnableBorderBlur=true -BorderBlurSamplingRange=1.0 -BorderBlurPower=22.0 -BorderBlurCurve=1.5 -BorderBlurRadius=0.55 -BorderBlurSize=1 -EnableCrossBlur=true -CrossBlurSamplingRange=1.0 -CrossBlurSize=1 +BlurEnable=false +BlurSampleNight=1.0 +BlurSampleDay=0.86 +BlurSampleInteriorNight=0.93 +BlurSampleInteriorDay=0.75 +BlurLevel=1 +BlurPowerNight=14.95 +BlurPowerDay=11.57 +BlurPowerInteriorNight=16.059999 +BlurPowerInteriorDay=12.22 +BlurCurveNight=1.45 +BlurCurveDay=1.53 +BlurCurveInteriorNight=1.32 +BlurCurveInteriorDay=1.49 +BlurRadiusNight=0.68 +BlurRadiusDay=0.62 +BlurRadiusInteriorNight=0.74 +BlurRadiusInteriorDay=0.7 +DarkEnable=true +DarkRadiusNight=0.35 +DarkRadiusDay=0.25 +DarkRadiusInteriorNight=0.45 +DarkRadiusInteriorDay=0.3 +DarkCurveNight=2.16 +DarkCurveDay=2.45 +DarkCurveInteriorNight=1.95 +DarkCurveInteriorDay=2.34 +DarkBumpNight=0.79 +DarkBumpDay=0.62 +DarkBumpInteriorNight=0.9 +DarkBumpInteriorDay=0.82 EnableCompensate=true -CompensateFactor=0.19 -CompensatePower=1.05 -CompensateSaturation=0.3 -CompensateBump=0.0 +CompensateFactorNight=0.65 +CompensateFactorDay=0.72 +CompensateFactorInteriorNight=0.71 +CompensateFactorInteriorDay=0.78 +CompensatePowerNight=1.14 +CompensatePowerDay=1.18 +CompensatePowerInteriorNight=1.16 +CompensatePowerInteriorDay=1.23 +CompensateSaturationNight=0.86 +CompensateSaturationDay=0.41 +CompensateSaturationInteriorNight=0.82 +CompensateSaturationInteriorDay=0.49 +CompensateBumpNight=0.0 +CompensateBumpDay=0.0 +CompensateBumpInteriorNight=0.0 +CompensateBumpInteriorDay=0.0 EnableGrading=true -GradingAddR=0.0 -GradingAddG=0.0 -GradingAddB=0.0 -GradingMulR=1.02 -GradingMulG=1.08 -GradingMulB=1.04 -GradingPowR=1.07 -GradingPowG=1.12 -GradingPowB=1.08 -GradingColR=0.04 -GradingColG=0.07 -GradingColB=0.59 -GradingColFactor=-0.24 -EnableSoftGrain=true -SoftGrainSpeed=2.679999 -SoftGrainIntensity=0.04 -SoftGrainSaturation=0.09 -SoftGrainPatterned=true +GradingAddRNight=0.0 +GradingAddGNight=0.0 +GradingAddBNight=0.0 +GradingAddRDay=0.0 +GradingAddGDay=0.0 +GradingAddBDay=0.0 +GradingAddRInteriorNight=0.0 +GradingAddGInteriorNight=0.0 +GradingAddBInteriorNight=0.0 +GradingAddRInteriorDay=0.0 +GradingAddGInteriorDay=0.0 +GradingAddBInteriorDay=0.0 +GradingMulRNight=3.01 +GradingMulGNight=3.12 +GradingMulBNight=3.24 +GradingMulRDay=3.42 +GradingMulGDay=3.34 +GradingMulBDay=3.24 +GradingMulRInteriorNight=3.57 +GradingMulGInteriorNight=3.43 +GradingMulBInteriorNight=3.27 +GradingMulRInteriorDay=3.67 +GradingMulGInteriorDay=3.56 +GradingMulBInteriorDay=3.48 +GradingPowRNight=1.03 +GradingPowGNight=1.01 +GradingPowBNight=0.95 +GradingPowRDay=1.23 +GradingPowGDay=1.2 +GradingPowBDay=1.14 +GradingPowRInteriorNight=1.07 +GradingPowGInteriorNight=1.02 +GradingPowBInteriorNight=0.97 +GradingPowRInteriorDay=1.21 +GradingPowGInteriorDay=1.16 +GradingPowBInteriorDay=1.11 +GradingColRNight=-0.21 +GradingColGNight=-0.28 +GradingColBNight=-1.41 +GradingColRDay=-0.8 +GradingColGDay=-0.2 +GradingColBDay=-0.62 +GradingColRInteriorNight=-0.52 +GradingColGInteriorNight=-0.3 +GradingColBInteriorNight=-1.37 +GradingColRInteriorDay=-0.52 +GradingColGInteriorDay=-0.36 +GradingColBInteriorDay=-0.72 +GradingColFactorNight=-0.27 +GradingColFactorDay=-0.16 +GradingColFactorInteriorNight=-0.24 +GradingColFactorInteriorDay=-0.12 +EnableSoftGrain=false +SoftGrainSpeedNight=0.02 +SoftGrainSpeedDay=0.07 +SoftGrainSpeedInteriorNight=0.01 +SoftGrainSpeedInteriorDay=0.03 +SoftGrainIntensityNight=0.03 +SoftGrainIntensityDay=0.01 +SoftGrainIntensityInteriorNight=0.03 +SoftGrainIntensityInteriorDay=0.01 +SoftGrainSaturationNight=-0.22 +SoftGrainSaturationDay=-0.18 +SoftGrainSaturationInteriorNight=-0.24 +SoftGrainSaturationInteriorDay=-0.31 +SoftGrainTwopass=false SoftGrainBlendfunc=1 SoftGrainDeviation=0.05 -SoftGrainMagnification11=2.049997 -SoftGrainMagnification12=3.109994 +SoftGrainMagnification1=13.69 +SoftGrainMagnification2=19.26 +SoftGrainMagnification3=17.889999 +SoftGrainMagnification11=2.05 +SoftGrainMagnification12=3.11 SoftGrainMagnification13=2.22 -SoftGrainMagnification21=4.249999 -SoftGrainMagnification22=0.419999 -SoftGrainMagnification23=6.290002 -SoftGrainPower=2.93 +SoftGrainMagnification21=4.25 +SoftGrainMagnification22=0.42 +SoftGrainMagnification23=6.29 +SoftGrainPowerNight=2.16 +SoftGrainPowerDay=5.22 +SoftGrainPowerInteriorNight=2.59 +SoftGrainPowerInteriorDay=4.7 EnableBlockGFX=false BlockGFXResolutionW=1.0 BlockGFXResolutionH=1.0 -BlockGFXNoScale=false -BlockGFXAspect=false -BlockGFXBorder=0.0 -BlockGFXpalette=5 -EnableDotMatrix=false -DotBlend=0.2 -DotSize=1 -EnableDirt=true -DirtFactor=0.03 -EnableCurvature=false -CurveChromaticAberration=0.03 -CurveZoom=49.999928 -CurveLens=0.0 -CurveLensCubic=0.0 -SoftGrainTwopass=true -SoftGrainMagnification1=1.250002 -SoftGrainMagnification2=0.639998 -SoftGrainMagnification3=0.350001 -DirtCoordFactor=0.09 +BlockGFXpalette=0 +BlockGFXcgamode=0 +BlockGFXegamode=1 +BlockGFXDither=5 +BlockGFXPrepassGamma=0.25 +BlockGFXDitherBump=-0.5 +BlockGFXDitherMultiplier=0.5 +BlockGFXPrepassSaturation=-0.0 +EnableDirt=false +DirtCoordFactor=0.25 DirtLuminanceFactor=0.0 -DirtCoordMagnification=3.039998 +DirtCoordMagnification=2.0 DirtLuminanceMagnification=1.0 EnableBox=true BoxHorizontal=1.5 -BoxVertical=1.0 -BoxSoften=0.02 -BoxAlpha=6.069999 -BlockGFXcgamode=0 -DarkEnable=true -DarkRadius=0.37 -DarkCurve=1.94 -DarkBump=0.79 -BlurEnable=true -BlurSample=2.25 -BlurLevel=1 -BlurPower=15.46 -BlurCurve=1.2 -BlurRadius=0.69 -EnableMud=true -MudLevel=3 -MudSample=16.32 -MudFactor=1.52 -MudPower=1.73 -MudSaturation=1.6 -MudBump=-0.32 +BoxVertical=0.85 +BoxSoften=0.01 +BoxAlpha=5.999999 +EnableCurvature=false +CurveChromaticAberration=0.06 +CurveZoom=50.299999 +CurveLens=0.0 +CurveLensCubic=0.0 +EnableSharpen=true +SharpenSample=0.2 +SharpenBlend=1.0 diff --git a/enbseries/enbbloom.fx.ini b/enbseries/enbbloom.fx.ini index 598c291..1d41937 100644 --- a/enbseries/enbbloom.fx.ini +++ b/enbseries/enbbloom.fx.ini @@ -1,2 +1,11 @@ [ENBBLOOM.FX] TECHNIQUE=0 +PreEnable=true +PreSample=1.0 +PreLevel=1 +PostSample=1.000001 +PostLevel=1 +BloomIntensity=0.4 +BloomBump=-0.1 +BloomPower=1.5 +BloomSaturation=0.75 diff --git a/enbseries/enbeffect.fx.ini b/enbseries/enbeffect.fx.ini index ffc67f3..41377b8 100644 --- a/enbseries/enbeffect.fx.ini +++ b/enbseries/enbeffect.fx.ini @@ -1,23 +1,28 @@ [ENBEFFECT.FX] TECHNIQUE=0 -EBrightnessV2Day=6.25 -EAdaptationMinV2Day=0.03 -EAdaptationMaxV2Day=0.93 -EToneMappingCurveV2Day=3.61 -EIntensityContrastV2Day=0.97 -EToneMappingOversaturationV2Day=15.990001 -EColorSaturationV2Day=1.01 -EBrightnessV2Night=3.77 -EAdaptationMinV2Night=1.14 -EAdaptationMaxV2Night=0.05 -EToneMappingCurveV2Night=3.26 -EIntensityContrastV2Night=0.94 -EToneMappingOversaturationV2Night=26.289999 -EColorSaturationV2Night=0.9 -EBrightnessV2Interior=10.27 -EAdaptationMinV2Interior=1.27 -EAdaptationMaxV2Interior=0.1 -EToneMappingCurveV2Interior=3.62 -EIntensityContrastV2Interior=0.99 -EToneMappingOversaturationV2Interior=15.94 -EColorSaturationV2Interior=1.09 +EnableAdaptation=true +AdaptationMinNight=0.89 +AdaptationMinDay=0.09 +AdaptationMinInteriorNight=1.12 +AdaptationMinInteriorDay=0.14 +AdaptationMaxNight=0.5 +AdaptationMaxDay=0.94 +AdaptationMaxInteriorNight=0.02 +AdaptationMaxInteriorDay=1.08 +EnableTonemapping=true +TonemappingNight=1.13 +TonemappingDay=1.64 +TonemappingInteriorNight=1.25 +TonemappingInteriorDay=1.37 +TonemappingOversaturationNight=26.289999 +TonemappingOversaturationDay=10.95 +TonemappingOversaturationInteriorNight=22.74 +TonemappingOversaturationInteriorDay=15.83 +EnablePalette=true +PaletteBlendNight=0.19 +PaletteBlendDay=0.33 +PaletteBlendInteriorNight=0.25 +PaletteBlendInteriorDay=0.45 +EnableBloomSoften=true +BloomSoftenLevel=1 +BloomSoftenRadius=1.0 diff --git a/enbseries/enbeffectprepass.fx.ini b/enbseries/enbeffectprepass.fx.ini index 3d9898c..a7f7c6d 100644 --- a/enbseries/enbeffectprepass.fx.ini +++ b/enbseries/enbeffectprepass.fx.ini @@ -1,2 +1,50 @@ [ENBEFFECTPREPASS.FX] TECHNIQUE=0 +CelEnable=true +CelMode=0 +CelRadius=0.5 +CelPower=0.25 +CelBump=0.0 +CelBlend=2.5 +SSAOEnable=true +SSAODebug=0 +SSAORadius=16.0 +SSAOBump=0.0 +SSAOPower=4.0 +SSAOBlend=1.25 +SSAONoise=1.0 +DoFEnable=true +DoFRadius=1.5 +DoFBump=0.0 +DoFPow=3.0 +DoFBlend=1.0 +DoFCut=0.0 +DoFDebug=0 +CelMult=2.0 +SSAOMult=2.0 +DoFMult=12.000001 +DoFLevel=1 +FocusCircleEnable=true +FocusCircleSlices=3 +FocusCircleRadius=10.0 +FocusCircleCircles=1 +FocusDotDebugRadius=0.01 +FocusCircleStep=0.25 +FocusCircleOffset=0.0 +FocusCircleMix=0.25 +SSAONormalOffset1=0.0 +SSAONormalOffset2=0.01 +SSAONormalOffset3=0.01 +SSAONormalOffset4=0.0 +SSAONoiseSize=64.0 +SSAOBlurEnable=true +SSAOBlurRadius=1.0 +SSAOBlurLevel=2 +SSAOTrim=1.0 +SSAOFadeBump=0.0 +SSAOFadeMult=0.5 +SSAOFadePow=1.0 +CelTrim=1.01 +CelFade=2.5 +SSAOFade=0.6 +DoFTrim=1.01 diff --git a/enbseries/enblens.fx.ini b/enbseries/enblens.fx.ini index 18ad05f..d1938c1 100644 --- a/enbseries/enblens.fx.ini +++ b/enbseries/enblens.fx.ini @@ -1,25 +1,2 @@ [ENBLENS.FX] TECHNIQUE=0 -EnableLens=true -LensAspect=false -LensGhosts=3 -LensDistortion=0.85 -LensBaseScale=1.94 -LensBaseBias=-0.32 -LensDisplacement=0.79 -LensHalo=0.44 -LensHaloScale=0.44 -LensHaloBias=-0.74 -LensBasePower=6.33 -LensHaloPower=2.85 -LensMirrorScale=3.25 -LensMirrorBias=-0.33 -LensMirrorPower=0.67 -LensBaseSaturation=0.52 -LensHaloSaturation=0.67 -LensMirrorSaturation=0.74 -DirtFactor=0.42 -DirtPower=1.65 -DirtSample=8.0 -LensLevel=0 -LensSample=8.0 diff --git a/enbsunsprite.fx b/enbsunsprite.fx index 028f97a..da13c6a 100644 --- a/enbsunsprite.fx +++ b/enbsunsprite.fx @@ -1,735 +1,49 @@ -// K ENB -// Multiple Passes Lenzes w_Individual Size and Color Control -// Code extensive modifications by KYO aka Oyama w/some help from Boris ;) -// Lenz Texture by OpethFeldt -// Copyright (c) 2007-2013 Boris Vorontsov -// Medium Hexagons - -//===================================================================================================== -// Internal parameters -//===================================================================================================== - -float ELenzIntensity=1.0; //[Global Intensity] -float LenzScaleFactor=0.288; //[Global Scale, will affect all lenzes] //1.0, 0.75, 0.66, 0.5, 0.25, 0.33, 0.322, so on - -float LenzFactorDraw=1.0; //[Allows for separated factors in case of additional Draw techniques, such as Draw2, ect...] - -float LenzContrastDraw=1.3; //[Contrast to clouds - More is weaker opacity compared to clouds] - -/** - * Separated Lenzes controls for Draw techniques : Offset, Scale, Scale Factor, Color RGB, Color Multiplier - * KYO : color balance will also act as a separate intensity control for each lenz - * Color : 1.0, 1.0, 1.0 is full intensity / opacity - * If color components are below 1.0, lenz is losing opacity - * You can counterbalance it by increasing f#_ColorMultiplier over 1.0 - * Fine tuning is balancing global intensity, RGB balance, multiplier - */ - -//Lenz #1 -#define f1_LenzOffset -0.8 //Position from Sun to Eye -#define f1_LenzScale 0.093 //Size of the Lenz Flare -#define f1_LenzFactor 1.0 //Multiplier for Size, in case 2 lenzes are sharing close offset a/o scale -#define f1_LenzColor float3(0.75, 0.75, 0.50) //Color in RGB (0.00 to 1.00) for the Lenz Flare -#define f1_ColorMultiplier 1.0 //Color Multiplier, in case RGB values are too low - Fine Tuning - -//Lenz #2 -#define f2_LenzOffset -0.54 -#define f2_LenzScale 0.066 -#define f2_LenzFactor 1.0 -#define f2_LenzColor float3(0.85, 0.65, 0.85) -#define f2_ColorMultiplier 1.2 - -//Lenz #3 -#define f3_LenzOffset -0.34 -#define f3_LenzScale 0.100 -#define f3_LenzFactor 1.0 -#define f3_LenzColor float3(1.0, 1.0, 1.0) -#define f3_ColorMultiplier 1.0 - -//Lenz #4 -#define f4_LenzOffset -0.14 -#define f4_LenzScale 0.099 -#define f4_LenzFactor 0.75 -#define f4_LenzColor float3(0.25, 1.0, 0.75) -#define f4_ColorMultiplier 1.0 - -//Lenz #5 -#define f5_LenzOffset -0.27 -#define f5_LenzScale 0.072 -#define f5_LenzFactor 1.0 -#define f5_LenzColor float3(0.3, 0.3, 0.25) -#define f5_ColorMultiplier 2.0 - -//Lenz #6 -#define f6_LenzOffset -0.3 -#define f6_LenzScale 0.115 -#define f6_LenzFactor 0.75 -#define f6_LenzColor float3(0.20, 0.30, 0.35) -#define f6_ColorMultiplier 1.2 - -//Lenz #7 -#define f7_LenzOffset -0.4 -#define f7_LenzScale 0.098 -#define f7_LenzFactor 1.0 -#define f7_LenzColor float3(1.0, 1.0, 1.0) -#define f7_ColorMultiplier 1.0 - -//Lenz #8 -#define f8_LenzOffset -0.2 -#define f8_LenzScale 0.081 -#define f8_LenzFactor 0.5 -#define f8_LenzColor float3(0.25, 0.95, 0.45) -#define f8_ColorMultiplier 1.8 - -//Lenz #9 -#define f9_LenzOffset -0.1 -#define f9_LenzScale 0.121 -#define f9_LenzFactor 0.85 -#define f9_LenzColor float3(1.0, 1.0, 1.0) -#define f9_ColorMultiplier 1.0 - -//Lenz #10 -#define f10_LenzOffset 0.0 -#define f10_LenzScale 0.111 -#define f10_LenzFactor 1.0 -#define f10_LenzColor float3(0.55, 0.55, 0.55) -#define f10_ColorMultiplier 1.0 - -//Lenz #11 -#define f11_LenzOffset 0.8 -#define f11_LenzScale 0.234 -#define f11_LenzFactor 1.11 -#define f11_LenzColor float3(0.35, 0.45, 0.62) -#define f11_ColorMultiplier 2.0 - -//Lenz #12 -#define f12_LenzOffset 0.9 -#define f12_LenzScale 0.144 -#define f12_LenzFactor 1.11 -#define f12_LenzColor float3(0.35, 0.35, 0.42) -#define f12_ColorMultiplier 1.0 - -//Lenz #13 -#define f13_LenzOffset 1.0 -#define f13_LenzScale 0.174 -#define f13_LenzFactor 1.11 -#define f13_LenzColor float3(0.35, 0.35, 0.42) -#define f13_ColorMultiplier 1.0 - -//Lenz #14 -#define f14_LenzOffset 0.42 -#define f14_LenzScale 0.064 -#define f14_LenzFactor 1.11 -#define f14_LenzColor float3(0.35, 0.35, 0.42) -#define f14_ColorMultiplier 1.0 - -//Lenz #15 -#define f15_LenzOffset 0.53 -#define f15_LenzScale 0.074 -#define f15_LenzFactor 1.11 -#define f15_LenzColor float3(0.35, 0.35, 0.42) -#define f15_ColorMultiplier 1.0 - -//Lenz #16 -#define f16_LenzOffset 0.65 -#define f16_LenzScale 0.094 -#define f16_LenzFactor 1.11 -#define f16_LenzColor float3(0.35, 0.35, 0.42) -#define f16_ColorMultiplier 1.0 - -//Lenz #17 -#define f17_LenzOffset 0.76 -#define f17_LenzScale 0.104 -#define f17_LenzFactor 1.11 -#define f17_LenzColor float3(0.35, 0.35, 0.42) -#define f17_ColorMultiplier 1.0 - -//Lenz #18 -#define f18_LenzOffset 0.9 -#define f18_LenzScale 0.114 -#define f18_LenzFactor 1.11 -#define f18_LenzColor float3(0.35, 0.35, 0.42) -#define f18_ColorMultiplier 1.0 - -//Lenz #19 -#define f19_LenzOffset 1.0 -#define f19_LenzScale 0.174 -#define f19_LenzFactor 1.11 -#define f19_LenzColor float3(0.35, 0.35, 0.42) -#define f19_ColorMultiplier 1.0 - -//Lenz #20 -#define f20_LenzOffset 1.2 -#define f20_LenzScale 0.224 -#define f20_LenzFactor 1.11 -#define f20_LenzColor float3(0.35, 0.35, 0.42) -#define f20_ColorMultiplier 1.0 - -//Lenz #21 -#define f21_LenzOffset 1.6 -#define f21_LenzScale 0.234 -#define f21_LenzFactor 1.11 -#define f21_LenzColor float3(0.35, 0.35, 0.42) -#define f21_ColorMultiplier 1.0 - -//Lenz #22 -#define f22_LenzOffset 1.9 -#define f22_LenzScale 0.064 -#define f22_LenzFactor 1.11 -#define f22_LenzColor float3(0.35, 0.35, 0.42) -#define f22_ColorMultiplier 1.0 - -//Add or Remove additional Lenzes controls here, as done above -//This being done, a/o remove passes of technique below - -//===================================================================================================== -// External parameters -//===================================================================================================== -//Keyboard controlled temporary variables (in some versions exists in the config file). -//Press and hold key 1,2,3...8 together with PageUp or PageDown to modify. By default all set to 1.0 -float4 tempF1; //0,1,2,3 -float4 tempF2; //5,6,7,8 -float4 tempF3; //9,0 -//x=Width, y=1/Width, z=ScreenScaleY, w=1/ScreenScaleY -float4 ScreenSize; -//x=generic timer in range 0..1, period of 16777216 ms (4.6 hours), w=frame time elapsed (in seconds) -float4 Timer; -//xy=sun position on screen, w=visibility -float4 LightParameters; - -//textures -texture2D texColor; -texture2D texMask; - -sampler2D SamplerColor = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - -sampler2D SamplerMask = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture=FALSE; - MaxMipLevel=0; - MipMapLodBias=0; -}; - +/* + enbsunsprite.fx : MariENB sun sprite filters. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* Effects have yet to be implemented. Sorry for the inconvenience. */ struct VS_OUTPUT_POST { - float4 vpos : POSITION; + float4 vpos : POSITION; float2 txcoord : TEXCOORD0; }; - struct VS_INPUT_POST { - float3 pos : POSITION; + float3 pos : POSITION; float2 txcoord : TEXCOORD0; }; - -/** - * Several sprites moving similar to lenz effect - * They are transformed in vertex shader and drawed separately for better performance - * Offset is set in passes of technique - */ - -VS_OUTPUT_POST VS_Draw(VS_INPUT_POST IN, uniform float offset, uniform float scale) +VS_OUTPUT_POST VS_Dummy( VS_INPUT_POST IN ) { VS_OUTPUT_POST OUT; - - float4 pos=float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); - pos.y*=ScreenSize.z; - - //create own parameters instead of this, including uv offsets - float2 shift=LightParameters.xy * offset; - pos.xy=pos.xy * (scale * LenzScaleFactor) - shift; - - OUT.vpos=pos; - OUT.txcoord.xy=IN.txcoord.xy; - + 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; } - -float4 PS_Draw(VS_OUTPUT_POST IN, float2 vPos : VPOS, uniform float3 colorfilter, uniform float colormultiplier) : COLOR +float4 PS_Dummy( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR { - float4 res; - float2 coord=IN.txcoord.xy; - - //read sun visibility as amount of effect - float sunmask=tex2D(SamplerMask, float2(0.5, 0.5)).x; - sunmask=pow(sunmask, LenzContrastDraw); //more contrast to clouds - clip(sunmask-0.02);//early exit if too low - - float4 origcolor=tex2D(SamplerColor, coord.xy); - sunmask*=LightParameters.w * (ELenzIntensity * LenzFactorDraw); - res.xyz=origcolor * sunmask; - - float clipper=dot(res.xyz, 0.333); - clip(clipper-0.0003);//skip draw if black - - res.xyz*=colorfilter * colormultiplier; - res.w=1.0; - return res; + return 0.0; } - -//------------------------------------------------------------------------------------------------------------------------- - -/** - * TECHNIQUES - */ - technique Draw { pass P0 { - VertexShader = compile vs_3_0 VS_Draw(f1_LenzOffset, (f1_LenzScale * f1_LenzFactor)); //offset, scale, scale factor - PixelShader = compile ps_3_0 PS_Draw(f1_LenzColor, f1_ColorMultiplier); //Color RGB - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - + VertexShader = compile vs_3_0 VS_Dummy(); + PixelShader = compile ps_3_0 PS_Dummy(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P1 - { - VertexShader = compile vs_3_0 VS_Draw(f2_LenzOffset, (f2_LenzScale * f2_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f2_LenzColor, f2_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P2 - { - VertexShader = compile vs_3_0 VS_Draw(f3_LenzOffset, (f3_LenzScale * f3_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f3_LenzColor, f3_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P3 - { - VertexShader = compile vs_3_0 VS_Draw(f4_LenzOffset, (f4_LenzScale * f4_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f4_LenzColor, f4_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P4 - { - VertexShader = compile vs_3_0 VS_Draw(f5_LenzOffset, (f5_LenzScale * f5_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f5_LenzColor, f5_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P5 - { - VertexShader = compile vs_3_0 VS_Draw(f6_LenzOffset, (f6_LenzScale * f6_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f6_LenzColor, f6_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P6 - { - VertexShader = compile vs_3_0 VS_Draw(f7_LenzOffset, (f7_LenzScale * f7_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f7_LenzColor, f7_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P7 - { - VertexShader = compile vs_3_0 VS_Draw(f8_LenzOffset, (f8_LenzScale * f8_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f8_LenzColor, f8_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P8 - { - VertexShader = compile vs_3_0 VS_Draw(f9_LenzOffset, (f9_LenzScale * f9_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f9_LenzColor, f9_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P9 - { - VertexShader = compile vs_3_0 VS_Draw(f10_LenzOffset, (f10_LenzScale * f10_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f10_LenzColor, f10_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P10 - { - VertexShader = compile vs_3_0 VS_Draw(f11_LenzOffset, (f11_LenzScale * f11_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f11_LenzColor, f11_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P11 - { - VertexShader = compile vs_3_0 VS_Draw(f11_LenzOffset, (f12_LenzScale * f12_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f12_LenzColor, f12_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P12 - { - VertexShader = compile vs_3_0 VS_Draw(f13_LenzOffset, (f13_LenzScale * f13_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f13_LenzColor, f13_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P13 - { - VertexShader = compile vs_3_0 VS_Draw(f14_LenzOffset, (f14_LenzScale * f14_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f14_LenzColor, f14_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P14 - { - VertexShader = compile vs_3_0 VS_Draw(f15_LenzOffset, (f15_LenzScale * f15_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f15_LenzColor, f15_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P15 - { - VertexShader = compile vs_3_0 VS_Draw(f16_LenzOffset, (f16_LenzScale * f16_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f16_LenzColor, f16_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P16 - { - VertexShader = compile vs_3_0 VS_Draw(f17_LenzOffset, (f17_LenzScale * f17_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f17_LenzColor, f17_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P17 - { - VertexShader = compile vs_3_0 VS_Draw(f18_LenzOffset, (f18_LenzScale * f18_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f18_LenzColor, f18_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P18 - { - VertexShader = compile vs_3_0 VS_Draw(f19_LenzOffset, (f19_LenzScale * f19_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f19_LenzColor, f19_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P19 - { - VertexShader = compile vs_3_0 VS_Draw(f20_LenzOffset, (f20_LenzScale * f20_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f20_LenzColor, f20_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P20 - { - VertexShader = compile vs_3_0 VS_Draw(f21_LenzOffset, (f21_LenzScale * f21_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f21_LenzColor, f21_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; - } - - pass P21 - { - VertexShader = compile vs_3_0 VS_Draw(f22_LenzOffset, (f22_LenzScale * f22_LenzFactor)); - PixelShader = compile ps_3_0 PS_Draw(f22_LenzColor, f22_ColorMultiplier); - - AlphaBlendEnable=TRUE; - SrcBlend=ONE; - DestBlend=ONE; - - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - DitherEnable=FALSE; - ZEnable=FALSE; - CullMode=NONE; - ALPHATESTENABLE=FALSE; - SEPARATEALPHABLENDENABLE=FALSE; - StencilEnable=FALSE; - FogEnable=FALSE; - SRGBWRITEENABLE=FALSE; + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; } } -// KYO : and so on... \ No newline at end of file diff --git a/menbbloomfilters.fx b/menbbloomfilters.fx new file mode 100644 index 0000000..49ac9a9 --- /dev/null +++ b/menbbloomfilters.fx @@ -0,0 +1,160 @@ +/* + menbbloomfilters.fx : MariENB bloom shader routines. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +VS_OUTPUT_POST VS_Bloom(VS_INPUT_POST IN) +{ + VS_OUTPUT_POST OUT; + float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1); + OUT.vpos = pos; + OUT.txcoord0.xy = IN.txcoord0.xy+TempParameters.xy; + return OUT; +} +/* pre-pass bloom texture preparation */ +float4 PS_BloomPrePass(VS_OUTPUT_POST In) : COLOR +{ + float2 coord = In.txcoord0.xy; + if ( !preenable ) + return tex2D(SamplerBloom1,coord); + float4 res = 0.0; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*presample; + int i, j; + if ( prelevel == 1 ) + { + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + res += gauss5[abs(i)][abs(j)] + *tex2D(SamplerBloom1,coord+float2(i,j) + *bof); + } + else if ( prelevel == 2 ) + { + for ( i=-3; i<=3; i++ ) + for ( j=-3; j<=3; j++ ) + res += gauss7[abs(i)][abs(j)] + *tex2D(SamplerBloom1,coord+float2(i,j) + *bof); + } + else + { + for ( i=-1; i<=1; i++ ) + for ( j=-1; j<=1; j++ ) + res += gauss3[abs(i)][abs(j)] + *tex2D(SamplerBloom1,coord+float2(i,j) + *bof); + } + return res; +} +/* multipass */ +float4 PS_BloomTexture(VS_OUTPUT_POST In) : COLOR +{ + float2 coord = In.txcoord0.xy; + float4 res = 0.0; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*postsample + *(TempParameters.w+0.25); + int i, j; + if ( postlevel == 1 ) + { + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + res += gauss5[abs(i)][abs(j)] + *tex2D(SamplerBloom1,coord+float2(i,j) + *bof); + } + else if ( postlevel == 2 ) + { + for ( i=-3; i<=3; i++ ) + for ( j=-3; j<=3; j++ ) + res += gauss7[abs(i)][abs(j)] + *tex2D(SamplerBloom1,coord+float2(i,j) + *bof); + } + else + { + for ( i=-1; i<=1; i++ ) + for ( j=-1; j<=1; j++ ) + res += gauss3[abs(i)][abs(j)] + *tex2D(SamplerBloom1,coord+float2(i,j) + *bof); + } + return res; +} +/* end pass */ +float4 PS_BloomPostPass(VS_OUTPUT_POST In) : COLOR +{ + float2 coord = In.txcoord0.xy; + float4 res = (tex2D(SamplerBloom1,coord)+tex2D(SamplerBloom2,coord) + +tex2D(SamplerBloom3,coord)+tex2D(SamplerBloom4,coord) + +tex2D(SamplerBloom5,coord)+tex2D(SamplerBloom6,coord) + +tex2D(SamplerBloom7,coord)+tex2D(SamplerBloom8,coord))*0.125; + res = pow(saturate(res+bloombump),bloompower); + float ress = (res.r+res.g+res.b)/3.0; + res = res*bloomsaturation+ress*(1.0-bloomsaturation); + res.rgb *= bloomintensity; + return res; +} +/* techniques */ +technique BloomPrePass +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Bloom(); + PixelShader = compile ps_3_0 PS_BloomPrePass(); + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + CullMode = NONE; + AlphaBlendEnable = FALSE; + AlphaTestEnable = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique BloomTexture1 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Bloom(); + PixelShader = compile ps_3_0 PS_BloomTexture(); + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + CullMode = NONE; + AlphaBlendEnable = FALSE; + AlphaTestEnable = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique BloomTexture2 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Bloom(); + PixelShader = compile ps_3_0 PS_BloomTexture(); + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + CullMode = NONE; + AlphaBlendEnable = FALSE; + AlphaTestEnable = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique BloomPostPass +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Bloom(); + PixelShader = compile ps_3_0 PS_BloomPostPass(); + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + CullMode = NONE; + AlphaBlendEnable = FALSE; + AlphaTestEnable = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} diff --git a/menbbloominternals.fx b/menbbloominternals.fx new file mode 100644 index 0000000..a86257a --- /dev/null +++ b/menbbloominternals.fx @@ -0,0 +1,152 @@ +/* + menbbloominternals.fx : MariENB bloom internal variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* gaussian blur matrices */ +static const float2x2 gauss3 = +{ + 0.16,0.12, + 0.12,0.09 +}; +static const float3x3 gauss5 = +{ + 0.0865051903114,0.0692041522491,0.0346020761246, + 0.0692041522491,0.0553633217993,0.0276816609, + 0.0346020761246,0.0276816609,0.01384083045 +}; +static const float4x4 gauss7 = +{ + 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, + 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, + 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, + 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 +}; +/* standard stuff (not all used) */ +float4 tempF1; +float4 tempF2; +float4 tempF3; +float4 ScreenSize; +float4 Timer; +float4 TempParameters; +float4 LenzParameters; +float4 BloomParameters; +float ENightDayFactor; +float EInteriorFactor; +/* samplers and textures (some left unused) */ +texture2D texBloom1; +texture2D texBloom2; +texture2D texBloom3; +texture2D texBloom4; +texture2D texBloom5; +texture2D texBloom6; +texture2D texBloom7; +texture2D texBloom8; +sampler2D SamplerBloom1 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom2 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom3 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom4 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom5 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom6 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom7 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerBloom8 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +/* whatever */ +struct VS_OUTPUT_POST +{ + float4 vpos : POSITION; + float2 txcoord0 : TEXCOORD0; +}; +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord0 : TEXCOORD0; +}; diff --git a/menbbloomsettings.fx b/menbbloomsettings.fx new file mode 100644 index 0000000..ebf0cce --- /dev/null +++ b/menbbloomsettings.fx @@ -0,0 +1,60 @@ +/* + menbbloomsettings.fx : MariENB bloom user-tweakable variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* do bloom prepass blur */ +bool preenable +< + string UIName = "PreEnable"; + string UIWidget = "Checkbox"; +> = {true}; +/* bloom prepass blur radius */ +float presample +< + string UIName = "PreSample"; + string UIWidget = "Spinner"; +> = {2.0}; +/* bloom prepass blur level */ +int prelevel +< + string UIName = "PreLevel"; + string UIWidget = "Spinner"; +> = {2}; +/* bloom postpass blur radius */ +float postsample +< + string UIName = "PostSample"; + string UIWidget = "Spinner"; +> = {8.0}; +/* bloom postpas blur level */ +int postlevel +< + string UIName = "PostLevel"; + string UIWidget = "Spinner"; +> = {1}; +/* bloom intensity */ +float bloomintensity +< + string UIName = "BloomIntensity"; + string UIWidget = "Spinner"; +> = {0.25}; +/* bloom power */ +float bloompower +< + string UIName = "BloomPower"; + string UIWidget = "Spinner"; +> = {1.4}; +/* bloom saturation */ +float bloomsaturation +< + string UIName = "BloomSaturation"; + string UIWidget = "Spinner"; +> = {0.3}; +/* bloom offset */ +float bloombump +< + string UIName = "BloomBump"; + string UIWidget = "Spinner"; +> = {-0.10}; diff --git a/menbeffectfilters.fx b/menbeffectfilters.fx new file mode 100644 index 0000000..3480e6b --- /dev/null +++ b/menbeffectfilters.fx @@ -0,0 +1,179 @@ +/* + menbeffectfilters.fx : MariENB base shader routines. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) +{ + VS_OUTPUT_POST OUT; + OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); + OUT.txcoord0.xy = IN.txcoord0.xy; + return OUT; +} +/* MariENB shader */ +float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord0.xy; + float4 res = tex2D(_s0,coord); + float tod = ENightDayFactor; + float ind = EInteriorFactor; + /* screen mud goes here */ + if ( softbloom ) + { + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*softbloomsmp; + int i,j; + if ( softbloomlv == 1 ) + { + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + res += gauss5[abs(i)][abs(j)] + *tex2D(_s3,coord+float2(i,j) + *bof)*EBloomAmount; + } + else if ( softbloomlv == 2 ) + { + for ( i=-3; i<=3; i++ ) + for ( j=-3; j<=3; j++ ) + res += gauss7[abs(i)][abs(j)] + *tex2D(_s3,coord+float2(i,j) + *bof)*EBloomAmount; + } + else + { + for ( i=-1; i<=1; i++ ) + for ( j=-1; j<=1; j++ ) + res += gauss3[abs(i)][abs(j)] + *tex2D(_s3,coord+float2(i,j) + *bof)*EBloomAmount; + } + } + else + res += tex2D(_s3,coord)*EBloomAmount; + float4 adapt = tex2D(_s4,0.5); + /* adaptation */ + if ( aenable ) + { + float adapts = clamp((adapt.r+adapt.g+adapt.b)/3.0,0.0,50.0); + float amin = lerp(lerp(amin_n,amin_d,tod),lerp(amin_in,amin_id, + tod),ind); + float amax = lerp(lerp(amax_n,amax_d,tod),lerp(amax_in,amax_id, + tod),ind); + res.rgb = res.rgb/(adapts*amax+amin); + } + /* tone mapping */ + if ( tmenable ) + { + float tone = lerp(lerp(tone_n,tone_d,tod),lerp(tone_in,tone_id, + tod),ind); + float tovr = lerp(lerp(tovr_n,tovr_d,tod),lerp(tovr_in,tovr_id, + tod),ind); + res.rgb = (res.rgb*(1+res.rgb/tovr))/(res.rgb+tone); + } + /* palette texture */ + if ( palenable ) + { + float palb = lerp(lerp(palb_n,palb_d,tod),lerp(palb_in,palb_id, + tod),ind); + res.rgb = saturate(res.rgb); + float3 bright = adapt.rgb/(adapt.rgb+1.0); + float brights = (bright.r+bright.g+bright.b)/3.0; + float3 pal = float3(tex2D(_s7,float2(res.r,brights)).r, + tex2D(_s7,float2(res.g,brights)).g, + tex2D(_s7,float2(res.b,brights)).b); + res.rgb = res.rgb*(1.0-palb)+pal.rgb*palb; + } + res.a = 1.0; + return res; + +} +/* + So... let me get this straight... rather than simply switching techniques, + Boris just compiles the program twice with and without this macro, then + toggling "UseEffect" switches between each variation? What the fuck? +*/ +#ifndef ENB_FLIPTECHNIQUE +technique Shader_D6EC7DD1 +#else +technique Shader_ORIGINALPOSTPROCESS +#endif +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Mari(); + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + ZEnable = FALSE; + ZWriteEnable = FALSE; + CullMode = NONE; + AlphaTestEnable = FALSE; + AlphaBlendEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +#ifndef ENB_FLIPTECHNIQUE +technique Shader_ORIGINALPOSTPROCESS +#else +technique Shader_D6EC7DD1 +#endif +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + /* + >2014 + >inline assembly + Have to keep this part intact, sadly + Boris what the fuck have you done + */ + PixelShader = asm + { + ps_3_0 + def c6,0,0,0,0 + def c7,0.212500006,0.715399981,0.0720999986,1 + dcl_texcoord v0.xy + dcl_2d s0 + dcl_2d s1 + dcl_2d s2 + rcp r0.x,c2.y + texld r1,v0,s2 + mul r0.yz,r1.xxyw,c1.y + rcp r0.w,r0.y + mul r0.z,r0.w,r0.z + texld r1,v0,s1 + mul r1.xyz,r1,c1.y + dp3 r0.w,c7,r1 + mul r1.w,r0.w,r0.z + mad r0.z,r0.z,r0.w,c7.w + rcp r0.z,r0.z + mad r0.x,r1.w,r0.x,c7.w + mul r0.x,r0.x,r1.w + mul r0.x,r0.z,r0.x + cmp r0.x,-r0.w,c6.x,r0.x + rcp r0.z,r0.w + mul r0.z,r0.z,r0.x + add_sat r0.x,-r0.x,c2.x + texld r2,v0,s0 + mul r2.xyz,r2,c1.y + mul r2.xyz,r0.x,r2 + mad r1.xyz,r1,r0.z,r2 + dp3 r0.x,r1,c7 + mov r1.w,c7.w + lrp r2,c3.x,r1,r0.x + mad r1,r0.x,c4,-r2 + mad r1,c4.w,r1,r2 + mad r1,c3.w,r1,-r0.y + mad r0,c3.z,r1,r0.y + add r1,-r0,c5 + mad oC0,c5.w,r1,r0 + }; + ColorWriteEnable = ALPHA|RED|GREEN|BLUE; + ZEnable = FALSE; + ZWriteEnable = FALSE; + CullMode = NONE; + AlphaTestEnable = FALSE; + AlphaBlendEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} diff --git a/menbeffectinternals.fx b/menbeffectinternals.fx new file mode 100644 index 0000000..ec45b6a --- /dev/null +++ b/menbeffectinternals.fx @@ -0,0 +1,124 @@ +/* + menbeffectinternals.fx : MariENB base internal variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* gaussian blur matrices */ +static const float2x2 gauss3 = +{ + 0.16,0.12, + 0.12,0.09 +}; +static const float3x3 gauss5 = +{ + 0.0865051903114,0.0692041522491,0.0346020761246, + 0.0692041522491,0.0553633217993,0.0276816609, + 0.0346020761246,0.0276816609,0.01384083045 +}; +static const float4x4 gauss7 = +{ + 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, + 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, + 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, + 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 +}; +/* standard stuff (not all used) */ +float4 tempF1; +float4 tempF2; +float4 tempF3; +float4 Timer; +float4 ScreenSize; +float ENightDayFactor; +float EInteriorFactor; +float EBloomAmount; +/* samplers and textures (some unused) */ +texture2D texs0; +texture2D texs1; +texture2D texs2; +texture2D texs3; +texture2D texs4; +texture2D texs7; +sampler2D _s0 = sampler_state +{ + Texture = ; + MinFilter = POINT; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D _s1 = sampler_state +{ + Texture = ; + MinFilter = POINT; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D _s2 = sampler_state +{ + Texture = ; + MinFilter = POINT; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D _s3 = sampler_state +{ + Texture = ; + MinFilter = POINT; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D _s4 = sampler_state +{ + Texture = ; + MinFilter = POINT; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D _s7 = sampler_state +{ + Texture = ; + MinFilter = POINT; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +/* whatever */ +struct VS_OUTPUT_POST +{ + float4 vpos : POSITION; + float2 txcoord0 : TEXCOORD0; +}; +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord0 : TEXCOORD0; +}; diff --git a/menbeffectsettings.fx b/menbeffectsettings.fx new file mode 100644 index 0000000..668945d --- /dev/null +++ b/menbeffectsettings.fx @@ -0,0 +1,140 @@ +/* + menbeffectsettings.fx : MariENB base user-tweakable variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* Soften bloom */ +bool softbloom +< + string UIName = "EnableBloomSoften"; + string UIWidget = "Checkbox"; +> = {true}; +int softbloomlv +< + string UIName = "BloomSoftenLevel"; + string UIWidget = "Slider"; +> = {2}; +float softbloomsmp +< + string UIName = "BloomSoftenRadius"; + string UIWidget = "Slider"; +> = {1.0}; +/* Adaptation */ +bool aenable +< + string UIName = "EnableAdaptation"; + string UIWidget = "Checkbox"; +> = {true}; +float amin_n +< + string UIName = "AdaptationMinNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float amin_d +< + string UIName = "AdaptationMinDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float amin_in +< + string UIName = "AdaptationMinInteriorNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float amin_id +< + string UIName = "AdaptationMinInteriorDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float amax_n +< + string UIName = "AdaptationMaxNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float amax_d +< + string UIName = "AdaptationMaxDay"; + string UIWidget = "Spinner"; +> = {1.0}; +float amax_in +< + string UIName = "AdaptationMaxInteriorNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float amax_id +< + string UIName = "AdaptationMaxInteriorDay"; + string UIWidget = "Spinner"; +> = {1.0}; +/* tone mapping */ +bool tmenable +< + string UIName = "EnableTonemapping"; + string UIWidget = "Checkbox"; +> = {true}; +float tone_n +< + string UIName = "TonemappingNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float tone_d +< + string UIName = "TonemappingDay"; + string UIWidget = "Spinner"; +> = {1.0}; +float tone_in +< + string UIName = "TonemappingInteriorNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float tone_id +< + string UIName = "TonemappingInteriorDay"; + string UIWidget = "Spinner"; +> = {1.0}; +float tovr_n +< + string UIName = "TonemappingOversaturationNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float tovr_d +< + string UIName = "TonemappingOversaturationDay"; + string UIWidget = "Spinner"; +> = {1.0}; +float tovr_in +< + string UIName = "TonemappingOversaturationInteriorNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float tovr_id +< + string UIName = "TonemappingOversaturationInteriorDay"; + string UIWidget = "Spinner"; +> = {1.0}; +/* palette texture */ +bool palenable +< + string UIName = "EnablePalette"; + string UIWidget = "Checkbox"; +> = {true}; +float palb_n +< + string UIName = "PaletteBlendNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float palb_d +< + string UIName = "PaletteBlendDay"; + string UIWidget = "Spinner"; +> = {1.0}; +float palb_in +< + string UIName = "PaletteBlendInteriorNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float palb_id +< + string UIName = "PaletteBlendInteriorDay"; + string UIWidget = "Spinner"; +> = {1.0}; diff --git a/menbfilters.fx b/menbfilters.fx new file mode 100644 index 0000000..d800576 --- /dev/null +++ b/menbfilters.fx @@ -0,0 +1,627 @@ +/* + menbfilters.fx : MariENB shader routines. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) +{ + VS_OUTPUT_POST OUT; + OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); + OUT.txcoord.xy = IN.txcoord.xy; + return OUT; +} +float4 PS_FXAA( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = float2(IN.txcoord.x,IN.txcoord.y); + float4 res = tex2D(SamplerColor,coord); + if ( !fxaaenable ) + return res; + float fxaareducemul_ = 1.0/max(abs(fxaareducemul),1.0); + float fxaareducemin_ = 1.0/max(abs(fxaareducemin),1.0); + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y); + float3 rgbNW = tex2D(SamplerColor,coord+float2(-1,-1)*bof).rgb; + float3 rgbNE = tex2D(SamplerColor,coord+float2(1,-1)*bof).rgb; + float3 rgbSW = tex2D(SamplerColor,coord+float2(-1,1)*bof).rgb; + float3 rgbSE = tex2D(SamplerColor,coord+float2(1,1)*bof).rgb; + float3 rgbM = tex2D(SamplerColor,coord).rgb; + float3 luma = float3(0.299,0.587,0.114); + float lumaNW = dot(rgbNW,luma); + float lumaNE = dot(rgbNE,luma); + float lumaSW = dot(rgbSW,luma); + float lumaSE = dot(rgbSE,luma); + float lumaM = dot(rgbM,luma); + float lumaMin = min(lumaM,min(min(lumaNW,lumaNE),min(lumaSW,lumaSE))); + float lumaMax = max(lumaM,max(max(lumaNW,lumaNE),max(lumaSW,lumaSE))); + float2 dir = float2(-((lumaNW+lumaNE)-(lumaSW+lumaSE)),((lumaNW+lumaSW) + -(lumaNE+lumaSE))); + float dirReduce = max((lumaNW+lumaNE+lumaSW+lumaSE)*(0.25 + *fxaareducemul_),fxaareducemin_); + float rcpDirMin = 1.0/(min(abs(dir.x),abs(dir.y))+dirReduce); + dir = min(float2(fxaaspanmax,fxaaspanmax),max(float2(-fxaaspanmax, + -fxaaspanmax),dir*rcpDirMin))/bresl; + float3 rgbA = (1.0/2.0)*(tex2D(SamplerColor,coord+dir*(1.0/3.0-0.5)) + .rgb+tex2D(SamplerColor,coord+dir*(2.0/3.0-0.5)).rgb); + float3 rgbB = rgbA*(1.0/2.0)+(1.0/4.0)*(tex2D(SamplerColor,coord+dir + *(0.0/3.0-0.5)).rgb+tex2D(SamplerColor,coord+dir*(3.0/3.0-0.5)) + .rgb); + float lumaB = dot(rgbB,luma); + if ( (lumaB < lumaMin) || (lumaB > lumaMax) ) + res.rgb = rgbA; + else + res.rgb = rgbB; + res.a = 1.0; + return res; +} +float4 PS_Enhance( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = float2(IN.txcoord.x,IN.txcoord.y); + float4 res = tex2D(SamplerColor,coord); + float tod = ENightDayFactor; + float ind = EInteriorFactor; + if ( bbenable ) + { + float4 origcolor = res; + float4 tcol = float4(0,0,0,0); + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float bbsamp = lerp(lerp(bbsamp_n,bbsamp_d,tod),lerp(bbsamp_in, + bbsamp_id,tod),ind); + float bbradius = lerp(lerp(bbradius_n,bbradius_d,tod), + lerp(bbradius_in,bbradius_id,tod),ind); + float bbcurve = lerp(lerp(bbcurve_n,bbcurve_d,tod), + lerp(bbcurve_in,bbcurve_id,tod),ind); + float bbpow = lerp(lerp(bbpow_n,bbpow_d,tod),lerp(bbpow_in, + bbpow_id,tod),ind); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*bbsamp; + int i, j; + if ( bblevel == 1 ) + { + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + tcol += gauss5[abs(i)][abs(j)] + *tex2D(SamplerColor,coord + +float2(i,j)*bof); + } + else if ( bblevel == 2 ) + { + for ( i=-3; i<=3; i++ ) + for ( j=-3; j<=3; j++ ) + tcol += gauss7[abs(i)][abs(j)] + *tex2D(SamplerColor,coord + +float2(i,j)*bof); + } + else + { + for ( i=-1; i<=1; i++ ) + for ( j=-1; j<=1; j++ ) + tcol += gauss3[abs(i)][abs(j)] + *tex2D(SamplerColor,coord + +float2(i,j)*bof); + } + float2 uv = (coord.xy-0.5)*bbradius; + float vig = clamp(pow(saturate(dot(uv.xy,uv.xy)),bbcurve),0.0 + ,1.0); + res.rgb = lerp(origcolor.rgb,tcol.rgb,clamp(vig*bbpow,0.0 + ,1.0)); + } + if ( dkenable ) + { + float2 bresl = float2(1.0,ScreenSize.w); + float dkradius = lerp(lerp(dkradius_n,dkradius_d,tod), + lerp(dkradius_in,dkradius_id,tod),ind); + float dkbump = lerp(lerp(dkbump_n,dkbump_d,tod),lerp(dkbump_in, + dkbump_id,tod),ind); + float dkcurve = lerp(lerp(dkcurve_n,dkcurve_d,tod), + lerp(dkcurve_in,dkcurve_id,tod),ind); + float2 bof = bresl*dkradius; + float val = 0.0; + if ( coord.x < bof.x ) + val = lerp(val,1,1.0-coord.x/bof.x); + if ( coord.y < bof.y ) + val = lerp(val,1,1.0-coord.y/bof.y); + if ( 1.0-coord.x < bof.x ) + val = lerp(val,1,1.0-(1.0-coord.x)/bof.x); + if ( 1.0-coord.y < bof.y ) + val = lerp(val,1,1.0-(1.0-coord.y)/bof.y); + val = clamp(val*dkbump,0,1); + res.rgb = lerp(res.rgb,float3(0,0,0),pow(val,dkcurve)); + } + if ( ne ) + { + float nf = lerp(lerp(nf_n,nf_d,tod),lerp(nf_in,nf_id,tod),ind); + float ns = lerp(lerp(ns_n,ns_d,tod),lerp(ns_in,ns_id,tod),ind); + float nj = lerp(lerp(nj_n,nj_d,tod),lerp(nj_in,nj_id,tod),ind); + float ni = lerp(lerp(ni_n,ni_d,tod),lerp(ni_in,ni_id,tod),ind); + float ts = Timer.x*nf; + ts *= 1000.0; + float2 tcs = coord; + float2 s1 = tcs+float2(0,ts); + float2 s2 = tcs+float2(ts,0); + float2 s3 = tcs+float2(ts,ts); + float n1, n2, n3; + float2 nr = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w) + /NOISERES; + if ( np ) + { + n1 = tex2D(SamplerNoise2,s1*nm11*nr).r; + n2 = tex2D(SamplerNoise2,s2*nm12*nr).g; + n3 = tex2D(SamplerNoise2,s3*nm13*nr).b; + s1 = tcs+float2(ts+n1*nk,n2*nk); + s2 = tcs+float2(n2,ts+n3*nk); + s3 = tcs+float2(ts+n3*nk,ts+n1*nk); + n1 = tex2D(SamplerNoise2,s1*nm21*nr).r; + n2 = tex2D(SamplerNoise2,s2*nm22*nr).g; + n3 = tex2D(SamplerNoise2,s3*nm23*nr).b; + } + else + { + n1 = tex2D(SamplerNoise3,s1*nm1*nr).r; + n2 = tex2D(SamplerNoise3,s2*nm2*nr).g; + n3 = tex2D(SamplerNoise3,s3*nm3*nr).b; + } + float n4 = (n1+n2+n3)/3; + float3 ng = float3(n4,n4,n4); + float3 nc = float3(n1,n2,n3); + float3 nt = pow(clamp(lerp(ng,nc,ns),0.0,1.0),nj); + if ( nb == 1 ) + res.rgb += nt*ni; + else if ( nb == 2 ) + { + res.r = (res.r<0.5)?(2.0*res.r*(0.5+(nt.r*ni))) + :(1.0-2.0*(1.0-res.r)*(1.0-((0.5+(nt.r*ni))))); + res.g = (res.g<0.5)?(2.0*res.g*(0.5+(nt.g*ni))) + :(1.0-2.0*(1.0-res.g)*(1.0-((0.5+(nt.g*ni))))); + res.b = (res.b<0.5)?(2.0*res.b*(0.5+(nt.b*ni))) + :(1.0-2.0*(1.0-res.b)*(1.0-((0.5+(nt.b*ni))))); + } + else if ( nb == 3 ) + res.rgb *= 1.0+(nt*ni); + else + res.rgb = lerp(res.rgb,nt,ni); + } + if ( compenable ) + { + float compbump = lerp(lerp(compbump_n,compbump_d,tod), + lerp(compbump_in,compbump_id,tod),ind); + float comppow = lerp(lerp(comppow_n,comppow_d,tod), + lerp(comppow_in,comppow_id,tod),ind); + float compsat = lerp(lerp(compsat_n,compsat_d,tod), + lerp(compsat_in,compsat_id,tod),ind); + float compfactor = lerp(lerp(compfactor_n,compfactor_d,tod), + lerp(compfactor_in,compfactor_id,tod),ind); + float4 ovr = pow(saturate(res+compbump),comppow); + float ovrs = (ovr.r+ovr.g+ovr.b)/3.0; + ovr = ovr*compsat+ovrs*(1.0-compsat); + res.rgb -= ovr.rgb*compfactor; + } + if ( gradeenable ) + { + float gradeadd_r = lerp(lerp(gradeadd_r_n,gradeadd_r_d,tod), + lerp(gradeadd_r_in,gradeadd_r_id,tod),ind); + float gradeadd_g = lerp(lerp(gradeadd_g_n,gradeadd_g_d,tod), + lerp(gradeadd_g_in,gradeadd_g_id,tod),ind); + float gradeadd_b = lerp(lerp(gradeadd_b_n,gradeadd_b_d,tod), + lerp(gradeadd_b_in,gradeadd_b_id,tod),ind); + float grademul_r = lerp(lerp(grademul_r_n,grademul_r_d,tod), + lerp(grademul_r_in,grademul_r_id,tod),ind); + float grademul_g = lerp(lerp(grademul_g_n,grademul_g_d,tod), + lerp(grademul_g_in,grademul_g_id,tod),ind); + float grademul_b = lerp(lerp(grademul_b_n,grademul_b_d,tod), + lerp(grademul_b_in,grademul_b_id,tod),ind); + float gradepow_r = lerp(lerp(gradepow_r_n,gradepow_r_d,tod), + lerp(gradepow_r_in,gradepow_r_id,tod),ind); + float gradepow_g = lerp(lerp(gradepow_g_n,gradepow_g_d,tod), + lerp(gradepow_g_in,gradepow_g_id,tod),ind); + float gradepow_b = lerp(lerp(gradepow_b_n,gradepow_b_d,tod), + lerp(gradepow_b_in,gradepow_b_id,tod),ind); + float gradecol_r = lerp(lerp(gradecol_r_n,gradecol_r_d,tod), + lerp(gradecol_r_in,gradecol_r_id,tod),ind); + float gradecol_g = lerp(lerp(gradecol_g_n,gradecol_g_d,tod), + lerp(gradecol_g_in,gradecol_g_id,tod),ind); + float gradecol_b = lerp(lerp(gradecol_b_n,gradecol_b_d,tod), + lerp(gradecol_b_in,gradecol_b_id,tod),ind); + float gradecolfact = lerp(lerp(gradecolfact_n,gradecolfact_d, + tod),lerp(gradecolfact_in,gradecolfact_id,tod),ind); + float3 gradeadd = float3(gradeadd_r,gradeadd_g,gradeadd_b); + float3 grademul = float3(grademul_r,grademul_g,grademul_b); + float3 gradepow = float3(gradepow_r,gradepow_g,gradepow_b); + float3 gradecol = float3(gradecol_r,gradecol_g,gradecol_b); + res.rgb = saturate(res.rgb+gradeadd); + res.rgb = saturate(res.rgb*grademul); + res.rgb = saturate(pow(res.rgb,gradepow)); + float tonev = (res.r+res.g+res.b)/3.0; + float3 tonecolor = gradecol*tonev; + res.rgb = res.rgb*(1.0-gradecolfact)+tonecolor*gradecolfact; + } + if ( dirtenable ) + { + float2 r = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w) + /NOISERES; + float4 ncolc = tex2D(SamplerNoise1,coord*dirtmc*r); + float2 ds = float2(res.r+res.g,res.g+res.b)/2.0; + float4 ncoll = tex2D(SamplerNoise1,ds*dirtml); + res = lerp(res,(ncolc.r+1)*res, + dirtcfactor*saturate(1-(ds.x+ds.y)*0.25)); + res = lerp(res,(ncoll.r+1)*res, + dirtlfactor*saturate(1-(ds.x+ds.y)*0.25)); + } + if ( boxe ) + { + res.rgb = saturate(res.rgb); + float boxf = pow(clamp(boxh-abs(2.0*coord.x-1.0),0.0,1.0),boxb) + *pow(clamp(boxv-abs(2.0*coord.y-1.0),0.0,1.0),boxb); + res.rgb = lerp(res.rgb*(1.0-boxa),res.rgb,boxf); + } + res.a = 1.0; + return res; +} +float4 ReducePrepass( in float4 color, in float2 coord ) +{ + color.rgb = pow(max(color.rgb,0.0),bgamma); + float4 dac; + dac.a = (color.r+color.g+color.b)/3.0; + dac.rgb = dac.a+(color.rgb-dac.a)*bsaturation; + if ( bdither == 0 ) + dac.rgb += bdbump+tex2D(SamplerNoise3,coord/NOISERES).r*bdmult; + else if ( bdither == 1 ) + dac.rgb += bdbump+checkers[int(coord.x%2)+2*int(coord.y%2)] + *bdmult; + else if ( bdither == 2 ) + dac.rgb += bdbump+ordered2[int(coord.x%2)+2*int(coord.y%2)] + *bdmult; + else if ( bdither == 3 ) + dac.rgb += bdbump+ordered3[int(coord.x%3)+3*int(coord.y%3)] + *bdmult; + else if ( bdither == 4 ) + dac.rgb += bdbump+ordered4[int(coord.x%4)+4*int(coord.y%4)] + *bdmult; + else if ( bdither == 5 ) + dac.rgb += bdbump+ordered8[int(coord.x%8)+8*int(coord.y%8)] + *bdmult; + dac = saturate(dac); + return dac; +} +float4 ReduceCGA( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + if ( bcganum == 0 ) + { + dac.a = (dac.r+dac.g+dac.b)/3.0; + return (dac.a>0.5); + } + float dist = 2.0; + int idx = 0; + if ( bcganum == 1 ) + { + for ( int i=0; i<4; i++ ) + { + if ( distance(dac.rgb,cga1l[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga1l[i]); + } + } + color.rgb = cga1l[idx]; + } + else if ( bcganum == 2 ) + { + for ( int i=0; i<4; i++ ) + { + if ( distance(dac.rgb,cga1h[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga1h[i]); + } + } + color.rgb = cga1h[idx]; + } + else if ( bcganum == 3 ) + { + for ( int i=0; i<4; i++ ) + { + if ( distance(dac.rgb,cga2l[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga2l[i]); + } + } + color.rgb = cga2l[idx]; + } + else if ( bcganum == 4 ) + { + for ( int i=0; i<4; i++ ) + { + if ( distance(dac.rgb,cga2h[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga2h[i]); + } + } + color.rgb = cga2h[idx]; + } + else if ( bcganum == 5 ) + { + for ( int i=0; i<4; i++ ) + { + if ( distance(dac.rgb,cga3l[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga3l[i]); + } + } + color.rgb = cga3l[idx]; + } + else if ( bcganum == 6 ) + { + for ( int i=0; i<4; i++ ) + { + if ( distance(dac.rgb,cga3h[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga3h[i]); + } + } + color.rgb = cga3h[idx]; + } + return color; +} +float4 ReduceEGA( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + float dist = 2.0; + int idx = 0; + if ( beganum == 0 ) + { + for ( int i=0; i<16; i++ ) + { + if ( distance(dac.rgb,stdega[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,stdega[i]); + } + } + color.rgb = stdega[idx]; + } + else + { + for ( int i=0; i<16; i++ ) + { + if ( distance(dac.rgb,aosega[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,aosega[i]); + } + } + color.rgb = aosega[idx]; + } + return color; +} +float4 ReduceRGB2( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*4.0)/4.0; + return color; +} +float4 ReduceRGB323( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*float3(8.0,4.0,8.0))/float3(8.0,4.0,8.0); + return color; +} +float4 ReduceRGB4( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*16.0)/16.0; + return color; +} +float4 ReduceRGB565( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*float3(32.0,64.0,32.0)) + /float3(32.0,64.0,32.0); + return color; +} +float4 ReduceRGB6( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*64.0)/64.0; + return color; +} +float4 PS_Block( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = float2(IN.txcoord.x,IN.txcoord.y); + float4 res = tex2D(SamplerColor,coord); + if ( !benable ) + return res; + float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bresl; + if ( bresw <= 0 || bresh <= 0 ) + bresl = rresl; + else + { + if ( bresw <= 1.0 ) + bresl.x = rresl.x*bresw; + else + bresl.x = bresw; + if ( bresh <= 1.0 ) + bresl.y = rresl.y*bresh; + else + bresl.y = bresh; + } + float2 ncoord = (coord-float2(0.5,0.5))+float2(0.5,0.5); + ncoord = floor(ncoord*bresl)/bresl; + if ( bresw <= 0 || bresh <= 0 ) + ncoord = coord; + float4 tcol = tex2D(SamplerColor,ncoord); + /* clamp */ + if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 ) + tcol *= 0; + if ( bpaltype == 0 ) + res = ReduceCGA(tcol,coord*bresl); + else if ( bpaltype == 1 ) + res = ReduceEGA(tcol,coord*bresl); + else if ( bpaltype == 2 ) + res = ReduceRGB2(tcol,coord*bresl); + else if ( bpaltype == 3 ) + res = ReduceRGB323(tcol,coord*bresl); + else if ( bpaltype == 4 ) + res = ReduceRGB4(tcol,coord*bresl); + else if ( bpaltype == 5 ) + res = ReduceRGB565(tcol,coord*bresl); + else if ( bpaltype == 6 ) + res = ReduceRGB6(tcol,coord*bresl); + else + res = tcol; + res.a = 1.0; + return res; +} +float4 PS_Curve( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = float2(IN.txcoord.x,IN.txcoord.y); + float4 res = tex2D(SamplerColor,coord); + if ( !crtenable ) + return res; + float4 tcol = res; + float3 eta = float3(1+chromaab*0.09,1+chromaab*0.06,1+chromaab*0.03); + float2 center = float2(coord.x-0.5,coord.y-0.5); + float zfact = 100.0/lenszoom; + float r2 = center.x*center.x+center.y*center.y; + float f = 0; + if( lensdistc == 0.0) + f = 1+r2*lensdist*0.1; + else + f = 1+r2*(lensdist*0.1+lensdistc*0.1*sqrt(r2)); + float x = f*zfact*center.x+0.5; + float y = f*zfact*center.y+0.5; + float2 rcoord = (f*eta.r)*zfact*(center.xy*0.5)+0.5; + float2 gcoord = (f*eta.g)*zfact*(center.xy*0.5)+0.5; + float2 bcoord = (f*eta.b)*zfact*(center.xy*0.5)+0.5; + float4 idist = float4(tex2D(SamplerColor,rcoord).r, + tex2D(SamplerColor,gcoord).g, + tex2D(SamplerColor,bcoord).b, + tex2D(SamplerColor,float2(x,y)).a); + res.rgb = idist.rgb; + res.a = 1.0; + return res; +} +float4 PS_Sharp( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = float2(IN.txcoord.x,IN.txcoord.y); + float4 res = tex2D(SamplerColor,coord); + if ( !shenable ) + return res; + float4 origcolor = res; + float4 tcol = float4(0,0,0,0); + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*shsamp; + int i, j; + tcol = float4(0,0,0,0); + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + tcol += shmat[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j)*bof); + res = res*(1.0-shblend)+tcol*shblend; + res.a = 1.0; + return res; +} +technique PostProcess +{ + pass FXAA + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_FXAA(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess2 +{ + pass Reel + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Enhance(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess3 +{ + pass Turboslut + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Sharp(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess4 +{ + pass Retrograde + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Block(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess5 +{ + pass Butt + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Curve(); + AlphaBlendEnable = TRUE; + SrcBlend = ONE; + DestBlend = ONE; + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} diff --git a/menbinternals.fx b/menbinternals.fx new file mode 100644 index 0000000..f097f53 --- /dev/null +++ b/menbinternals.fx @@ -0,0 +1,277 @@ +/* + menbinternals.fx : MariENB internal variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* texture sizes */ +#define NOISERES 256.0 +/* sharpen matrix quadrant */ +static const float3x3 shmat = +{ + 5.76,-0.5,-0.2, + -0.5,-0.25,-0.1, + -0.2,-0.1,-0.04, +}; +/* gaussian blur matrices */ +static const float2x2 gauss3 = +{ + 0.16,0.12, + 0.12,0.09 +}; +static const float3x3 gauss5 = +{ + 0.0865051903114,0.0692041522491,0.0346020761246, + 0.0692041522491,0.0553633217993,0.0276816609, + 0.0346020761246,0.0276816609,0.01384083045 +}; +static const float4x4 gauss7 = +{ + 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, + 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, + 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, + 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 +}; +/* dithering threshold maps */ +static const float checkers[4] = +{ + 1,0, + 0,1 +}; +#define d(x) x/4.0 +static const float ordered2[4] = +{ + d(0),d(2), + d(4),d(2) +}; +#undef d +#define d(x) x/9.0 +static const float ordered3[9] = +{ + d(2),d(6),d(3), + d(5),d(0),d(8), + d(1),d(7),d(4) +}; +#undef d +#define d(x) x/16.0 +static const float ordered4[16] = +{ + d( 0),d( 8),d( 2),d(10), + d(12),d( 4),d(14),d( 6), + d( 3),d(11),d( 1),d( 9), + d(15),d( 7),d(13),d( 5) +}; +#undef d +#define d(x) x/64.0 +static const float ordered8[64] = +{ + d( 0),d(48),d(12),d(60),d( 3),d(51),d(15),d(63), + d(32),d(16),d(44),d(28),d(35),d(19),d(47),d(31), + d( 8),d(56),d( 4),d(52),d(11),d(59),d( 7),d(55), + d(40),d(24),d(36),d(20),d(43),d(27),d(39),d(23), + d( 2),d(50),d(14),d(62),d( 1),d(49),d(13),d(61), + d(34),d(18),d(46),d(30),d(33),d(17),d(45),d(29), + d(10),d(58),d( 6),d(54),d( 9),d(57),d( 5),d(53), + d(42),d(26),d(38),d(22),d(41),d(25),d(37),d(21) +}; +#undef d +/* palettes */ +#define d(x) x/3.0 +static const float3 cga1l[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(0),d(2),d(2)), + float3(d(2),d(0),d(2)), + float3(d(2),d(2),d(2)) +}; +static const float3 cga1h[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(1),d(3),d(3)), + float3(d(3),d(1),d(3)), + float3(d(3),d(3),d(3)) +}; +static const float3 cga2l[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(0),d(2),d(0)), + float3(d(2),d(0),d(0)), + float3(d(2),d(1),d(0)) +}; +static const float3 cga2h[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(1),d(3),d(1)), + float3(d(3),d(1),d(1)), + float3(d(3),d(2),d(1)) +}; +static const float3 cga3l[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(0),d(2),d(2)), + float3(d(2),d(0),d(0)), + float3(d(2),d(2),d(2)) +}; +static const float3 cga3h[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(1),d(3),d(3)), + float3(d(3),d(1),d(1)), + float3(d(3),d(3),d(3)) +}; +static const float3 stdega[16] = +{ + float3(d(0),d(0),d(0)), + float3(d(2),d(0),d(0)), + float3(d(0),d(2),d(0)), + float3(d(2),d(1),d(0)), + float3(d(0),d(0),d(2)), + float3(d(2),d(0),d(2)), + float3(d(0),d(2),d(2)), + float3(d(2),d(2),d(2)), + float3(d(1),d(1),d(1)), + float3(d(3),d(1),d(1)), + float3(d(1),d(3),d(1)), + float3(d(3),d(3),d(1)), + float3(d(1),d(1),d(3)), + float3(d(3),d(1),d(3)), + float3(d(1),d(3),d(3)), + float3(d(3),d(3),d(3)) +}; +#undef d +#define d(x) x/256.0 +static const float3 aosega[16] = +{ + float3(d( 0),d( 0),d( 0)), + float3(d(128),d( 0),d( 0)), + float3(d( 32),d(128),d( 0)), + float3(d(160),d( 64),d( 32)), + float3(d( 0),d( 32),d( 88)), + float3(d( 60),d( 0),d( 88)), + float3(d( 16),d(160),d(208)), + float3(d( 88),d( 88),d( 88)), + float3(d( 32),d( 32),d( 32)), + float3(d(256),d( 64),d( 64)), + float3(d( 72),d(256),d( 64)), + float3(d(256),d(224),d( 60)), + float3(d( 48),d(128),d(256)), + float3(d(192),d( 48),d(256)), + float3(d( 72),d(224),d(256)), + float3(d(256),d(256),d(256)), +}; +#undef d +/* standard stuff (not all used) */ +float tempF1; +float tempF2; +float tempF3; +float tempF4; +float tempF5; +float tempF6; +float tempF7; +float tempF8; +float tempF9; +float tempF0; +float4 ScreenSize; +float ENightDayFactor; +float EInteriorFactor; +float4 Timer; +float FieldOfView; +/* samplers and textures (some not yet used) */ +texture2D texColor; +texture2D texDepth; +texture2D texPalette; +sampler2D SamplerColor = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerDepth = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerPalette = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +texture2D texNoise1 +< + string ResourceName = "menbnoise1.png"; +>; +texture2D texNoise2 +< + string ResourceName = "menbnoise2.png"; +>; +texture2D texNoise3 +< + string ResourceName = "menbnoise3.png"; +>; +sampler2D SamplerNoise1 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Wrap; + AddressV = Wrap; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerNoise2 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Wrap; + AddressV = Wrap; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerNoise3 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Wrap; + AddressV = Wrap; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +/* whatever */ +struct VS_OUTPUT_POST +{ + float4 vpos : POSITION; + float2 txcoord : TEXCOORD0; +}; +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord : TEXCOORD0; +}; diff --git a/menblens.png b/menblens.png new file mode 100644 index 0000000..3c654c0 Binary files /dev/null and b/menblens.png differ diff --git a/menblensbump.png b/menblensbump.png new file mode 100644 index 0000000..a503834 Binary files /dev/null and b/menblensbump.png differ diff --git a/menbprepassfilters.fx b/menbprepassfilters.fx new file mode 100644 index 0000000..72804ce --- /dev/null +++ b/menbprepassfilters.fx @@ -0,0 +1,340 @@ +/* + menbeffectfilters.fx : MariENB base shader routines. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) +{ + VS_OUTPUT_POST OUT; + OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); + OUT.txcoord.xy = IN.txcoord.xy; + return OUT; +} +/* Focus */ +float4 PS_ReadFocus( VS_OUTPUT_POST IN ) : COLOR +{ + float cfocus = tex2D(SamplerDepth,0.5).x; + if ( !focuscircle || (focusslice <= 0) || (focuscircles <= 0) ) + return cfocus; + int i, j; + float step = (1.0/focusslice); + float mfocus; + float2 coord; + float2 bof = float2(1.0,ScreenSize.w)*focusradius*0.01; + for ( i=0; i= celtrim ) + mud = 0.0; + mud *= saturate(depth*celfade); + if ( celmode == 1 ) + res.rgb = (1.0-saturate(tex2D(SamplerDepth,coord).x)) + *(1.0-saturate(mud*celblend)); + else if ( celmode == 2 ) + res.rgb *= saturate(mud*celblend); + else if ( celmode == 3 ) + res.rgb = saturate(mud*celblend); + else + res.rgb *= 1.0-saturate(mud*celblend); + return res; +} +/* SSAO */ +float3 pseudonormal( float dep, float2 coord ) +{ + float2 ofs1 = float2(ssaonoff1*0.01,ssaonoff2*0.01); + float2 ofs2 = float2(ssaonoff3*0.01,ssaonoff4*0.01); + float dep1 = tex2D(SamplerDepth,coord+ofs1).x; + float dep2 = tex2D(SamplerDepth,coord+ofs2).x; + float3 p1 = float3(ofs1,dep1-dep); + float3 p2 = float3(ofs2,dep2-dep); + float3 normal = cross(p1,p2); + normal.z = -normal.z; + return normalize(normal); +} +float4 PS_SSAO( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord.xy; + float4 res = tex2D(SamplerColor,coord); + if ( !ssaoenable ) + return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaoradius; + float depth = tex2D(SamplerDepth,coord).x; + float3 normal = pseudonormal(depth,coord); + float2 nc = tex2D(SamplerNoise,coord).xy; + normal += ssaonoise*normalize(tex2D(SamplerNoise, + float2(1.0,ScreenSize.w)*nc*ssaonoisesize).xyz*2.0-1.0); + normal = normalize(normal); + float occ = 0.0; + int i; + for( i=0; i<16; i++ ) + { + float3 cs = ssao_samples[i]; + cs = reflect(cs,normal); + float2 tc = float2(coord+i*cs.xy*bof); + float nd = tex2D(SamplerDepth,tc).x; + float dif = nd-depth; + float fall; + if ( nd > depth ) + occ += 1.0/(1.0+(pow(dif,2))); + } + float uocc = 1.0-(occ/16.0); + uocc = saturate(pow(uocc+ssaobump,ssaopow)*ssaomult); + uocc *= saturate(depth*ssaofade); + if ( depth >= ssaotrim ) + uocc = 0.0; + if ( ssaodebug == 1 ) + return uocc; + else if ( ssaodebug == 2 ) + return (float4(normal.x,normal.y,normal.z,1.0)+1.0)*0.5; + res.a = (1.0-(uocc*ssaoblend)); + return res; +} +float4 PS_SSAO_Post( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord.xy; + float4 res = tex2D(SamplerColor,coord); + if ( !ssaoenable ) + return res; + if ( !ssaobenable || (ssaodebug != 0) ) + return res*res.a; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaobradius; + int i,j; + res.a *= 0; + if ( ssaoblevel == 1 ) + { + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + res.a += gauss5[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j) + *bof).a; + } + else if ( ssaoblevel == 2 ) + { + for ( i=-3; i<=3; i++ ) + for ( j=-3; j<=3; j++ ) + res.a += gauss7[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j) + *bof).a; + } + else + { + for ( i=-1; i<=1; i++ ) + for ( j=-1; j<=1; j++ ) + res.a += gauss3[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j) + *bof).a; + } + res *= res.a; + return res; +} +/* Depth of Field */ +float4 PS_DoF( VS_OUTPUT_POST IN, float2 vPos : VPOS, uniform int p ) : COLOR +{ + float2 coord = IN.txcoord.xy; + if ( !dofenable ) + return tex2D(SamplerColor,coord); + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*dofradius + *pow(clamp(doflevel+1,1,3),p); + float dep = tex2D(SamplerDepth,coord).x; + float foc = tex2D(SamplerFocus,coord).x; + float dfc = abs(dep-foc); + dfc = saturate(pow(dfc+dofbump,dofpow)*dofmult); + if ( dep >= doftrim ) + dfc = 0.0; + int i,j; + float4 res = 0.0; + if ( doflevel == 1 ) + { + for ( i=-2; i<=2; i++ ) + for ( j=-2; j<=2; j++ ) + res += gauss5[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j) + *bof*dfc); + } + else if ( doflevel == 2 ) + { + for ( i=-3; i<=3; i++ ) + for ( j=-3; j<=3; j++ ) + res += gauss7[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j) + *bof*dfc); + } + else + { + for ( i=-1; i<=1; i++ ) + for ( j=-1; j<=1; j++ ) + res += gauss3[abs(i)][abs(j)] + *tex2D(SamplerColor,coord+float2(i,j) + *bof*dfc); + } + if ( dofdebug == 1 ) + return dfc; + else if ( dofdebug == 2 ) + return dep; + return (1.0-dofblend)*tex2D(SamplerColor,coord)+dofblend*res; +} +technique ReadFocus +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_ReadFocus(); + ZENABLE = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique WriteFocus +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_WriteFocus(); + ZENABLE = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_Border(); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess2 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_SSAO(); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess3 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_SSAO_Post(); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess4 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_DoF(0); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} +technique PostProcess5 +{ + pass p0 + { + VertexShader = compile vs_3_0 VS_Pass(); + PixelShader = compile ps_3_0 PS_DoF(1); + DitherEnable = FALSE; + ZEnable = FALSE; + CullMode = NONE; + ALPHATESTENABLE = FALSE; + SEPARATEALPHABLENDENABLE = FALSE; + AlphaBlendEnable = FALSE; + StencilEnable = FALSE; + FogEnable = FALSE; + SRGBWRITEENABLE = FALSE; + } +} diff --git a/menbprepassinternals.fx b/menbprepassinternals.fx new file mode 100644 index 0000000..40739f1 --- /dev/null +++ b/menbprepassinternals.fx @@ -0,0 +1,137 @@ +/* + menbprepassinternals.fx : MariENB prepass internal variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* mathematical constants */ +static const float pi = 3.1415926535898; +/* gaussian blur matrices */ +static const float2x2 gauss3 = +{ + 0.16,0.12, + 0.12,0.09 +}; +static const float3x3 gauss5 = +{ + 0.0865051903114,0.0692041522491,0.0346020761246, + 0.0692041522491,0.0553633217993,0.0276816609, + 0.0346020761246,0.0276816609,0.01384083045 +}; +static const float4x4 gauss7 = +{ + 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, + 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, + 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, + 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 +}; +/* SSAO sample sphere */ +static const float3 ssao_samples[16] = +{ + float3( 0.5381, 0.1856,-0.4319),float3( 0.1379, 0.2486, 0.4430), + float3( 0.3371, 0.5679,-0.0057),float3(-0.6999,-0.0451,-0.0019), + float3( 0.0689,-0.1598,-0.8547),float3( 0.0560, 0.0069,-0.1843), + float3(-0.0146, 0.1402, 0.0762),float3( 0.0100,-0.1924,-0.0344), + float3(-0.3577,-0.5301,-0.4358),float3(-0.3169, 0.1063, 0.0158), + float3( 0.0103,-0.5869, 0.0046),float3(-0.0897,-0.4940, 0.3287), + float3( 0.7119,-0.0154,-0.0918),float3(-0.0533, 0.0596,-0.5411), + float3( 0.0352,-0.0631, 0.5460),float3(-0.4776, 0.2847,-0.0271) +}; +/* standard stuff (not all used) */ +float4 tempF1; +float4 tempF2; +float4 tempF3; +float4 Timer; +float4 ScreenSize; +float FadeFactor; +extern float fWaterLevel = 1.0; +/* samplers and textures (some unused) */ +texture2D texColor; +texture2D texDepth; +texture2D texNoise; +texture2D texFocus; +texture2D texCurr; +texture2D texPrev; +sampler2D SamplerColor = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Mirror; + AddressV = Mirror; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerDepth = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerNoise = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Wrap; + AddressV = Wrap; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerFocus = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerCurr = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = LINEAR; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerPrev = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Clamp; + AddressV = Clamp; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +/* whatever */ +struct VS_OUTPUT_POST +{ + float4 vpos : POSITION; + float2 txcoord : TEXCOORD0; +}; +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord : TEXCOORD0; +}; diff --git a/menbprepasssettings.fx b/menbprepasssettings.fx new file mode 100644 index 0000000..88b79ab --- /dev/null +++ b/menbprepasssettings.fx @@ -0,0 +1,215 @@ +/* + menbprepasssettings.fx : MariENB prepass user-tweakable variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* circle average focus */ +bool focuscircle +< + string UIName = "FocusCircleEnable"; + string UIWidget = "Checkbox"; +> = {false}; +int focusslice +< + string UIName = "FocusCircleSlices"; + string UIWidget = "Spinner"; +> = {4}; +int focuscircles +< + string UIName = "FocusCircleCircles"; + string UIWidget = "Spinner"; +> = {1}; +float focusradius +< + string UIName = "FocusCircleRadius"; + string UIWidget = "Spinner"; +> = {12.5}; +float focusmix +< + string UIName = "FocusCircleMix"; + string UIWidget = "Spinner"; +> = {0.25}; +/* cel filter */ +bool celenable +< + string UIName = "CelEnable"; + string UIWidget = "Checkbox"; +> = {false}; +int celmode +< + string UIName = "CelMode"; + string UIWidget = "Spinner"; +> = {0}; +float celradius +< + string UIName = "CelRadius"; + string UIWidget = "Spinner"; +> = {1.0}; +float celpower +< + string UIName = "CelPower"; + string UIWidget = "Spinner"; +> = {1.0}; +float celbump +< + string UIName = "CelBump"; + string UIWidget = "Spinner"; +> = {0.0}; +float celmult +< + string UIName = "CelMult"; + string UIWidget = "Spinner"; +> = {1.0}; +float celblend +< + string UIName = "CelBlend"; + string UIWidget = "Spinner"; +> = {1.0}; +float celtrim +< + string UIName = "CelTrim"; + string UIWidget = "Spinner"; +> = {1.0}; +float celfade +< + string UIName = "CelFade"; + string UIWidget = "Spinner"; +> = {0.5}; +/* ssao filter */ +bool ssaoenable +< + string UIName = "SSAOEnable"; + string UIWidget = "Checkbox"; +> = {true}; +int ssaodebug +< + string UIName = "SSAODebug"; + string UIWidget = "Spinner"; +> = 0; +float ssaonoff1 +< + string UIName = "SSAONormalOffset1"; + string UIWidget = "Spinner"; +> = {0.0}; +float ssaonoff2 +< + string UIName = "SSAONormalOffset2"; + string UIWidget = "Spinner"; +> = {0.1}; +float ssaonoff3 +< + string UIName = "SSAONormalOffset3"; + string UIWidget = "Spinner"; +> = {0.1}; +float ssaonoff4 +< + string UIName = "SSAONormalOffset4"; + string UIWidget = "Spinner"; +> = {0.0}; +float ssaoradius +< + string UIName = "SSAORadius"; + string UIWidget = "Spinner"; +> = {1.0}; +float ssaonoise +< + string UIName = "SSAONoise"; + string UIWidget = "Spinner"; +> = {0.1}; +float ssaonoisesize +< + string UIName = "SSAONoiseSize"; + string UIWidget = "Spinner"; +> = {64.0}; +float ssaotrim +< + string UIName = "SSAOTrim"; + string UIWidget = "Spinner"; +> = {1.0}; +float ssaofade +< + string UIName = "SSAOFade"; + string UIWidget = "Spinner"; +> = {0.5}; +float ssaobump +< + string UIName = "SSAOBump"; + string UIWidget = "Spinner"; +> = {0.0}; +float ssaomult +< + string UIName = "SSAOMult"; + string UIWidget = "Spinner"; +> = {1.0}; +float ssaopow +< + string UIName = "SSAOPower"; + string UIWidget = "Spinner"; +> = {1.0}; +float ssaoblend +< + string UIName = "SSAOBlend"; + string UIWidget = "Spinner"; +> = {1.0}; +bool ssaobenable +< + string UIName = "SSAOBlurEnable"; + string UIWidget = "Spinner"; +> = {true}; +float ssaobradius +< + string UIName = "SSAOBlurRadius"; + string UIWidget = "Spinner"; +> = {1.0}; +int ssaoblevel +< + string UIName = "SSAOBlurLevel"; + string UIWidget = "Spinner"; +> = {2}; +/* dof filter */ +bool dofenable +< + string UIName = "DoFEnable"; + string UIWidget = "Checkbox"; +> = {true}; +int dofdebug +< + string UIName = "DoFDebug"; + string UIWidget = "Spinner"; +> = {0}; +float dofradius +< + string UIName = "DoFRadius"; + string UIWidget = "Spinner"; +> = {1.0}; +int doflevel +< + string UIName = "DoFLevel"; + string UIWidget = "Spinner"; +> = {2}; +float dofbump +< + string UIName = "DoFBump"; + string UIWidget = "Spinner"; +> = {0.0}; +float dofmult +< + string UIName = "DoFMult"; + string UIWidget = "Spinner"; +> = {1.0}; +float dofpow +< + string UIName = "DoFPow"; + string UIWidget = "Spinner"; +> = {1.0}; +float dofblend +< + string UIName = "DoFBlend"; + string UIWidget = "Spinner"; +> = {1.0}; +float doftrim +< + string UIName = "DoFTrim"; + string UIWidget = "Spinner"; +> = {1.0}; \ No newline at end of file diff --git a/menbsettings.fx b/menbsettings.fx new file mode 100644 index 0000000..aba1f74 --- /dev/null +++ b/menbsettings.fx @@ -0,0 +1,872 @@ +/* + menbsettings.fx : MariENB user-tweakable variables. + (C)2013-2014 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + Released under the MIT License. +*/ +/* FXAA */ +bool fxaaenable +< + string UIName = "EnableFXAA"; + string UIWidget = "Checkbox"; +> = {false}; +float fxaaspanmax +< + string UIName = "FXAASpanMax"; + string UIWidget = "Checkbox"; +> = {4.0}; +float fxaareducemul +< + string UIName = "FXAAReduceMul"; + string UIWidget = "Checkbox"; +> = {16.0}; +float fxaareducemin +< + string UIName = "FXAAReduceMin"; + string UIWidget = "Checkbox"; +> = {128.0}; +/* border blurring */ +bool bbenable +< + string UIName = "BlurEnable"; + string UIWidget = "Checkbox"; +> = {true}; +/* border blur sampling range */ +float bbsamp_n +< + string UIName = "BlurSampleNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float bbsamp_d +< + string UIName = "BlurSampleDay"; + string UIWidget = "Spinner"; +> = {1.0}; +float bbsamp_in +< + string UIName = "BlurSampleInteriorNight"; + string UIWidget = "Spinner"; +> = {1.0}; +float bbsamp_id +< + string UIName = "BlurSampleInteriorDay"; + string UIWidget = "Spinner"; +> = {1.0}; +/* border blur level */ +int bblevel +< + string UIName = "BlurLevel"; + string UIWidget = "Spinner"; +> = {1}; +/* blend power of blur */ +float bbpow_n +< + string UIName = "BlurPowerNight"; + string UIWidget = "Spinner"; +> = {15.46}; +float bbpow_d +< + string UIName = "BlurPowerDay"; + string UIWidget = "Spinner"; +> = {15.46}; +float bbpow_in +< + string UIName = "BlurPowerInteriorNight"; + string UIWidget = "Spinner"; +> = {15.46}; +float bbpow_id +< + string UIName = "BlurPowerInteriorDay"; + string UIWidget = "Spinner"; +> = {15.46}; +/* falloff curve of blur towards center of screen */ +float bbcurve_n +< + string UIName = "BlurCurveNight"; + string UIWidget = "Spinner"; +> = {1.2}; +float bbcurve_d +< + string UIName = "BlurCurveDay"; + string UIWidget = "Spinner"; +> = {1.2}; +float bbcurve_in +< + string UIName = "BlurCurveInteriorNight"; + string UIWidget = "Spinner"; +> = {1.2}; +float bbcurve_id +< + string UIName = "BlurCurveInteriorDay"; + string UIWidget = "Spinner"; +> = {1.2}; +/* blur falloff radius */ +float bbradius_n +< + string UIName = "BlurRadiusNight"; + string UIWidget = "Spinner"; +> = {0.69}; +float bbradius_d +< + string UIName = "BlurRadiusDay"; + string UIWidget = "Spinner"; +> = {0.69}; +float bbradius_in +< + string UIName = "BlurRadiusInteriorNight"; + string UIWidget = "Spinner"; +> = {0.69}; +float bbradius_id +< + string UIName = "BlurRadiusInteriorDay"; + string UIWidget = "Spinner"; +> = {0.69}; +/* border darkening */ +bool dkenable +< + string UIName = "DarkEnable"; + string UIWidget = "Checkbox"; +> = {true}; +/* radius of darkening (relative to screen width) */ +float dkradius_n +< + string UIName = "DarkRadiusNight"; + string UIWidget = "Spinner"; +> = {0.37}; +float dkradius_d +< + string UIName = "DarkRadiusDay"; + string UIWidget = "Spinner"; +> = {0.37}; +float dkradius_in +< + string UIName = "DarkRadiusInteriorNight"; + string UIWidget = "Spinner"; +> = {0.37}; +float dkradius_id +< + string UIName = "DarkRadiusInteriorDay"; + string UIWidget = "Spinner"; +> = {0.37}; +/* falloff of darkening */ +float dkcurve_n +< + string UIName = "DarkCurveNight"; + string UIWidget = "Spinner"; +> = {1.94}; +float dkcurve_d +< + string UIName = "DarkCurveDay"; + string UIWidget = "Spinner"; +> = {1.94}; +float dkcurve_in +< + string UIName = "DarkCurveInteriorNight"; + string UIWidget = "Spinner"; +> = {1.94}; +float dkcurve_id +< + string UIName = "DarkCurveInteriorDay"; + string UIWidget = "Spinner"; +> = {1.94}; +/* bump of darkening */ +float dkbump_n +< + string UIName = "DarkBumpNight"; + string UIWidget = "Spinner"; +> = {0.79}; +float dkbump_d +< + string UIName = "DarkBumpDay"; + string UIWidget = "Spinner"; +> = {0.79}; +float dkbump_in +< + string UIName = "DarkBumpInteriorNight"; + string UIWidget = "Spinner"; +> = {0.79}; +float dkbump_id +< + string UIName = "DarkBumpInteriorDay"; + string UIWidget = "Spinner"; +> = {0.79}; +/* shine/bloom compensation */ +bool compenable +< + string UIName = "EnableCompensate"; + string UIWidget = "Checkbox"; +> = {true}; +/* compensation factor */ +float compfactor_n +< + string UIName = "CompensateFactorNight"; + string UIWidget = "Spinner"; +> = {0.19}; +float compfactor_d +< + string UIName = "CompensateFactorDay"; + string UIWidget = "Spinner"; +> = {0.19}; +float compfactor_in +< + string UIName = "CompensateFactorInteriorNight"; + string UIWidget = "Spinner"; +> = {0.19}; +float compfactor_id +< + string UIName = "CompensateFactorInteriorDay"; + string UIWidget = "Spinner"; +> = {0.19}; +/* compensation power */ +float comppow_n +< + string UIName = "CompensatePowerNight"; + string UIWidget = "Spinner"; +> = {1.05}; +float comppow_d +< + string UIName = "CompensatePowerDay"; + string UIWidget = "Spinner"; +> = {1.05}; +float comppow_in +< + string UIName = "CompensatePowerInteriorNight"; + string UIWidget = "Spinner"; +> = {1.05}; +float comppow_id +< + string UIName = "CompensatePowerInteriorDay"; + string UIWidget = "Spinner"; +> = {1.05}; +/* compensation saturation */ +float compsat_n +< + string UIName = "CompensateSaturationNight"; + string UIWidget = "Spinner"; +> = {0.3}; +float compsat_d +< + string UIName = "CompensateSaturationDay"; + string UIWidget = "Spinner"; +> = {0.3}; +float compsat_in +< + string UIName = "CompensateSaturationInteriorNight"; + string UIWidget = "Spinner"; +> = {0.3}; +float compsat_id +< + string UIName = "CompensateSaturationInteriorDay"; + string UIWidget = "Spinner"; +> = {0.3}; +/* brightness bump for compensation */ +float compbump_n +< + string UIName = "CompensateBumpNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float compbump_d +< + string UIName = "CompensateBumpDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float compbump_in +< + string UIName = "CompensateBumpInteriorNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float compbump_id +< + string UIName = "CompensateBumpInteriorDay"; + string UIWidget = "Spinner"; +> = {0.0}; +bool gradeenable +< + string UIName = "EnableGrading"; + string UIWidget = "Checkbox"; +> = {true}; +/* miscellaneous color grading parameters */ +float gradeadd_r_n +< + string UIName = "GradingAddRNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_g_n +< + string UIName = "GradingAddGNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_b_n +< + string UIName = "GradingAddBNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_r_d +< + string UIName = "GradingAddRDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_g_d +< + string UIName = "GradingAddGDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_b_d +< + string UIName = "GradingAddBDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_r_in +< + string UIName = "GradingAddRInteriorNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_g_in +< + string UIName = "GradingAddGInteriorNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_b_in +< + string UIName = "GradingAddBInteriorNight"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_r_id +< + string UIName = "GradingAddRInteriorDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_g_id +< + string UIName = "GradingAddGInteriorDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float gradeadd_b_id +< + string UIName = "GradingAddBInteriorDay"; + string UIWidget = "Spinner"; +> = {0.0}; +float grademul_r_n +< + string UIName = "GradingMulRNight"; + string UIWidget = "Spinner"; +> = {1.02}; +float grademul_g_n +< + string UIName = "GradingMulGNight"; + string UIWidget = "Spinner"; +> = {1.08}; +float grademul_b_n +< + string UIName = "GradingMulBNight"; + string UIWidget = "Spinner"; +> = {1.04}; +float grademul_r_d +< + string UIName = "GradingMulRDay"; + string UIWidget = "Spinner"; +> = {1.02}; +float grademul_g_d +< + string UIName = "GradingMulGDay"; + string UIWidget = "Spinner"; +> = {1.08}; +float grademul_b_d +< + string UIName = "GradingMulBDay"; + string UIWidget = "Spinner"; +> = {1.04}; +float grademul_r_in +< + string UIName = "GradingMulRInteriorNight"; + string UIWidget = "Spinner"; +> = {1.02}; +float grademul_g_in +< + string UIName = "GradingMulGInteriorNight"; + string UIWidget = "Spinner"; +> = {1.08}; +float grademul_b_in +< + string UIName = "GradingMulBInteriorNight"; + string UIWidget = "Spinner"; +> = {1.04}; +float grademul_r_id +< + string UIName = "GradingMulRInteriorDay"; + string UIWidget = "Spinner"; +> = {1.02}; +float grademul_g_id +< + string UIName = "GradingMulGInteriorDay"; + string UIWidget = "Spinner"; +> = {1.08}; +float grademul_b_id +< + string UIName = "GradingMulBInteriorDay"; + string UIWidget = "Spinner"; +> = {1.04}; +float gradepow_r_n +< + string UIName = "GradingPowRNight"; + string UIWidget = "Spinner"; +> = {1.07}; +float gradepow_g_n +< + string UIName = "GradingPowGNight"; + string UIWidget = "Spinner"; +> = {1.12}; +float gradepow_b_n +< + string UIName = "GradingPowBNight"; + string UIWidget = "Spinner"; +> = {1.08}; +float gradepow_r_d +< + string UIName = "GradingPowRDay"; + string UIWidget = "Spinner"; +> = {1.07}; +float gradepow_g_d +< + string UIName = "GradingPowGDay"; + string UIWidget = "Spinner"; +> = {1.12}; +float gradepow_b_d +< + string UIName = "GradingPowBDay"; + string UIWidget = "Spinner"; +> = {1.08}; +float gradepow_r_in +< + string UIName = "GradingPowRInteriorNight"; + string UIWidget = "Spinner"; +> = {1.07}; +float gradepow_g_in +< + string UIName = "GradingPowGInteriorNight"; + string UIWidget = "Spinner"; +> = {1.12}; +float gradepow_b_in +< + string UIName = "GradingPowBInteriorNight"; + string UIWidget = "Spinner"; +> = {1.08}; +float gradepow_r_id +< + string UIName = "GradingPowRInteriorDay"; + string UIWidget = "Spinner"; +> = {1.07}; +float gradepow_g_id +< + string UIName = "GradingPowGInteriorDay"; + string UIWidget = "Spinner"; +> = {1.12}; +float gradepow_b_id +< + string UIName = "GradingPowBInteriorDay"; + string UIWidget = "Spinner"; +> = {1.08}; +float gradecol_r_n +< + string UIName = "GradingColRNight"; + string UIWidget = "Spinner"; +> = {0.04}; +float gradecol_g_n +< + string UIName = "GradingColGNight"; + string UIWidget = "Spinner"; +> = {0.07}; +float gradecol_b_n +< + string UIName = "GradingColBNight"; + string UIWidget = "Spinner"; +> = {0.59}; +float gradecol_r_d +< + string UIName = "GradingColRDay"; + string UIWidget = "Spinner"; +> = {0.04}; +float gradecol_g_d +< + string UIName = "GradingColGDay"; + string UIWidget = "Spinner"; +> = {0.07}; +float gradecol_b_d +< + string UIName = "GradingColBDay"; + string UIWidget = "Spinner"; +> = {0.59}; +float gradecol_r_in +< + string UIName = "GradingColRInteriorNight"; + string UIWidget = "Spinner"; +> = {0.04}; +float gradecol_g_in +< + string UIName = "GradingColGInteriorNight"; + string UIWidget = "Spinner"; +> = {0.07}; +float gradecol_b_in +< + string UIName = "GradingColBInteriorNight"; + string UIWidget = "Spinner"; +> = {0.59}; +float gradecol_r_id +< + string UIName = "GradingColRInteriorDay"; + string UIWidget = "Spinner"; +> = {0.04}; +float gradecol_g_id +< + string UIName = "GradingColGInteriorDay"; + string UIWidget = "Spinner"; +> = {0.07}; +float gradecol_b_id +< + string UIName = "GradingColBInteriorDay"; + string UIWidget = "Spinner"; +> = {0.59}; +float gradecolfact_n +< + string UIName = "GradingColFactorNight"; + string UIWidget = "Spinner"; +> = {-0.24}; +float gradecolfact_d +< + string UIName = "GradingColFactorDay"; + string UIWidget = "Spinner"; +> = {-0.24}; +float gradecolfact_in +< + string UIName = "GradingColFactorInteriorNight"; + string UIWidget = "Spinner"; +> = {-0.24}; +float gradecolfact_id +< + string UIName = "GradingColFactorInteriorDay"; + string UIWidget = "Spinner"; +> = {-0.24}; +/* Soft grain */ +bool ne +< + string UIName = "EnableSoftGrain"; + string UIWidget = "Checkbox"; +> = {true}; +/* soft grain speed */ +float nf_n +< + string UIName = "SoftGrainSpeedNight"; + string UIWidget = "Spinner"; +> = {2.68}; +float nf_d +< + string UIName = "SoftGrainSpeedDay"; + string UIWidget = "Spinner"; +> = {2.68}; +float nf_in +< + string UIName = "SoftGrainSpeedInteriorNight"; + string UIWidget = "Spinner"; +> = {2.68}; +float nf_id +< + string UIName = "SoftGrainSpeedInteriorDay"; + string UIWidget = "Spinner"; +> = {2.68}; +/* soft grain intensity */ +float ni_n +< + string UIName = "SoftGrainIntensityNight"; + string UIWidget = "Spinner"; +> = {0.04}; +float ni_d +< + string UIName = "SoftGrainIntensityDay"; + string UIWidget = "Spinner"; +> = {0.04}; +float ni_in +< + string UIName = "SoftGrainIntensityInteriorNight"; + string UIWidget = "Spinner"; +> = {0.04}; +float ni_id +< + string UIName = "SoftGrainIntensityInteriorDay"; + string UIWidget = "Spinner"; +> = {0.04}; +/* soft grain saturation */ +float ns_n +< + string UIName = "SoftGrainSaturationNight"; + string UIWidget = "Spinner"; +> = {0.09}; +float ns_d +< + string UIName = "SoftGrainSaturationDay"; + string UIWidget = "Spinner"; +> = {0.09}; +float ns_in +< + string UIName = "SoftGrainSaturationInteriorNight"; + string UIWidget = "Spinner"; +> = {0.09}; +float ns_id +< + string UIName = "SoftGrainSaturationInteriorDay"; + string UIWidget = "Spinner"; +> = {0.09}; +/* Two-pass noise */ +bool np +< + string UIName = "SoftGrainTwopass"; + string UIWidget = "Checkbox"; +> = {true}; +/* grain blend function: 0 normal, 1 add, 2 overlay, 3 multiply */ +int nb +< + string UIName = "SoftGrainBlendfunc"; + string UIWidget = "Spinner"; +> = {1}; +/* grain deviation */ +float nk +< + string UIName = "SoftGrainDeviation"; + string UIWidget = "Spinner"; +> = {0.05}; +/* grain magnification */ +float nm1 +< + string UIName = "SoftGrainMagnification1"; + string UIWidget = "Spinner"; +> = {1.25}; +float nm2 +< + string UIName = "SoftGrainMagnification2"; + string UIWidget = "Spinner"; +> = {0.64}; +float nm3 +< + string UIName = "SoftGrainMagnification3"; + string UIWidget = "Spinner"; +> = {0.35}; +/* grain magnification pass 1 */ +float nm11 +< + string UIName = "SoftGrainMagnification11"; + string UIWidget = "Spinner"; +> = {2.05}; +float nm12 +< + string UIName = "SoftGrainMagnification12"; + string UIWidget = "Spinner"; +> = {3.11}; +float nm13 +< + string UIName = "SoftGrainMagnification13"; + string UIWidget = "Spinner"; +> = {2.22}; +/* grain magnification pass 2 */ +float nm21 +< + string UIName = "SoftGrainMagnification21"; + string UIWidget = "Spinner"; +> = {4.25}; +float nm22 +< + string UIName = "SoftGrainMagnification22"; + string UIWidget = "Spinner"; +> = {0.42}; +float nm23 +< + string UIName = "SoftGrainMagnification23"; + string UIWidget = "Spinner"; +> = {6.29}; +/* grain power */ +float nj_n +< + string UIName = "SoftGrainPowerNight"; + string UIWidget = "Spinner"; +> = {2.93}; +float nj_d +< + string UIName = "SoftGrainPowerDay"; + string UIWidget = "Spinner"; +> = {2.93}; +float nj_in +< + string UIName = "SoftGrainPowerInteriorNight"; + string UIWidget = "Spinner"; +> = {2.93}; +float nj_id +< + string UIName = "SoftGrainPowerInteriorDay"; + string UIWidget = "Spinner"; +> = {2.93}; +/* Block graphics filter with palette reduction */ +bool benable +< + string UIName = "EnableBlockGFX"; + string UIWidget = "Checkbox"; +> = {false}; +/* emulated resolution for block graphics (0 or less for real resolution) */ +float bresw +< + string UIName = "BlockGFXResolutionW"; + string UIWidget = "Spinner"; +> = {1.0}; +float bresh +< + string UIName = "BlockGFXResolutionH"; + string UIWidget = "Spinner"; +> = {1.0}; +/* palette type for block graphics */ +int bpaltype +< + string UIName = "BlockGFXpalette"; + string UIWidget = "Spinner"; +> = {5}; +/* CGA subpalette */ +int bcganum +< + string UIName = "BlockGFXcgamode"; + string UIWidget = "Spinner"; +> = {0}; +/* EGA subpalette */ +int beganum +< + string UIName = "BlockGFXegamode"; + string UIWidget = "Spinner"; +> = {0}; +/* Dithering method */ +int bdither +< + string UIName= "BlockGFXDither"; + string UIWidget = "Spinner"; +> = {4}; +/* Gamma modifier */ +float bgamma +< + string UIName= "BlockGFXPrepassGamma"; + string UIWidget = "Spinner"; +> = {1.0}; +/* dither bump */ +float bdbump +< + string UIName= "BlockGFXDitherBump"; + string UIWidget = "Spinner"; +> = {-0.01}; +/* dither multiplier */ +float bdmult +< + string UIName= "BlockGFXDitherMultiplier"; + string UIWidget = "Spinner"; +> = {0.02}; +/* dither saturation */ +float bsaturation +< + string UIName= "BlockGFXPrepassSaturation"; + string UIWidget = "Spinner"; +> = {1.0}; +/* Dirty screen effect (static noise) */ +bool dirtenable +< + string UIName = "EnableDirt"; + string UIWidget = "Checkbox"; +> = {true}; +/* dirt amount */ +float dirtcfactor +< + string UIName = "DirtCoordFactor"; + string UIWidget = "Spinner"; +> = {0.09}; +float dirtlfactor +< + string UIName = "DirtLuminanceFactor"; + string UIWidget = "Spinner"; +> = {0.0}; +float dirtmc +< + string UIName = "DirtCoordMagnification"; + string UIWidget = "Spinner"; +> = {3.04}; +float dirtml +< + string UIName = "DirtLuminanceMagnification"; + string UIWidget = "Spinner"; +> = {1.0}; +/* Letterbox */ +bool boxe +< + string UIName = "EnableBox"; + string UIWidget = "Checkbox"; +> = {true}; +/* horizontal factor */ +float boxh +< + string UIName = "BoxHorizontal"; + string UIWidget = "Spinner"; +> = {1.5}; +/* vertical factor */ +float boxv +< + string UIName = "BoxVertical"; + string UIWidget = "Spinner"; +> = {1.0}; +/* softening */ +float boxb +< + string UIName = "BoxSoften"; + string UIWidget = "Spinner"; +> = {0.02}; +/* box alpha */ +float boxa +< + string UIName = "BoxAlpha"; + string UIWidget = "Spinner"; +> = {6.07}; +/* Use CRT curvature shader */ +bool crtenable +< + string UIName = "EnableCurvature"; + string UIWidget = "Checkbox"; +> = {false}; +/* chromatic aberration on CRT: fancy effect that isn't really realistic */ +float chromaab +< + string UIName = "CurveChromaticAberration"; + string UIWidget = "Spinner"; +> = {0.93}; +/* curvature lens zoom (0.5 = none) */ +float lenszoom +< + string UIName = "CurveZoom"; + string UIWidget = "Spinner"; +> = {50.0}; +/* curvature lens distortion */ +float lensdist +< + string UIName = "CurveLens"; + string UIWidget = "Spinner"; +> = {0.0}; +/* curvature CUBIC lens distortion */ +float lensdistc +< + string UIName = "CurveLensCubic"; + string UIWidget = "Spinner"; +> = {0.0}; +/* Use sharpening filter */ +bool shenable +< + string UIName = "EnableSharpen"; + string UIWidget = "Checkbox"; +> = {false}; +float shsamp +< + string UIName = "SharpenSample"; + string UIWidget = "Spinner"; +> = {0.6}; +float shblend +< + string UIName = "SharpenBlend"; + string UIWidget = "Spinner"; +> = {0.2};