diff --git a/enbseries.ini b/enbseries.ini index 5283e37..f394031 100644 --- a/enbseries.ini +++ b/enbseries.ini @@ -2,161 +2,12 @@ UseEffect=true [EFFECT] -UseOriginalPostProcessing=false UseOriginalObjectsProcessing=false -EnableBloom=true -EnableLens=false -EnableAdaptation=false -EnableDepthOfField=true -EnableAmbientOcclusion=true -EnableDetailedShadow=false -EnableSunRays=true -EnableSunGlare=false +UseOriginalPostProcessing=false +UseOriginalColorFilter=true +UseOriginalBloom=true +UseOriginalAdaptation=true +EnablePostPassShader=true [COLORCORRECTION] -UsePaletteTexture=false UseProceduralCorrection=false -Brightness=1.0 -GammaCurve=1.0 - -[NIGHTDAY] -DetectorDefaultDay=false -DetectorLevelDay=0.5 -DetectorLevelNight=0.15 -DetectorLevelCurve=1.0 - -[ADAPTATION] -ForceMinMaxValues=false -AdaptationSensitivity=0.85 -AdaptationTime=6.0 -AdaptationMin=0.2 -AdaptationMax=1.5 - -[BLOOM] -Quality=1 -AmountDay=1.0 -AmountNight=1.0 -AmountInterior=1.0 -BlueShiftAmountDay=0.0 -BlueShiftAmountNight=0.0 -BlueShiftAmountInterior=0.0 - -[LENS] -LenzReflectionIntensityDay=1.0 -LenzReflectionIntensityNight=1.0 -LenzReflectionIntensityInterior=1.0 -LenzReflectionPowerDay=1.0 -LenzReflectionPowerNight=1.0 -LenzReflectionPowerInterior=1.0 -LenzDirtIntensityDay=1.0 -LenzDirtIntensityNight=1.0 -LenzDirtIntensityInterior=1.0 -LenzDirtPowerDay=1.0 -LenzDirtPowerNight=1.0 -LenzDirtPowerInterior=1.0 - -[SSAO_SSIL] -EnableSupersampling=true -UseIndirectLighting=true -SamplingQuality=1 -SamplingPrecision=1 -SamplingRange=0.3 -FadeFogRangeDay=2.5 -FadeFogRangeNight=3.5 -SizeScale=0.5 -SourceTexturesScale=0.5 -FilterQuality=1 -AOAmount=1.0 -AOAmountInterior=1.0 -ILAmount=1.0 -ILAmountInterior=1.0 -AOIntensity=1.0 -AOIntensityInterior=1.0 -AOType=0 -AOMixingType=0 -AOMixingTypeInterior=0 -EnableDenoiser=true - -[ENVIRONMENT] -LightingIntensityDay=2.0 -LightingIntensityNight=2.0 -LightingIntensityInterior=2.0 -LightingCurveDay=1.15 -LightingCurveNight=1.2 -LightingCurveInterior=1.25 -LightingDesaturationDay=0.0 -LightingDesaturationNight=0.0 -LightingDesaturationInterior=0.0 - -AmbientLightingIntensityDay=0.25 -AmbientLightingIntensityNight=0.25 -AmbientLightingIntensityInterior=0.25 -AmbientLightingCurveDay=2.0 -AmbientLightingCurveNight=2.0 -AmbientLightingCurveInterior=2.0 -AmbientLightingDesaturationDay=0.0 -AmbientLightingDesaturationNight=0.0 -AmbientLightingDesaturationInterior=0.0 - -FogColorMultiplierDay=0.95 -FogColorMultiplierNight=0.6 -FogColorMultiplierInterior=0.4 -FogColorCurveDay=1.2 -FogColorCurveNight=1.6 -FogColorCurveInterior=1.35 - -[SKY] -Enable=true - -StarsIntensity=2.0 -StarsCurve=2.0 - -CloudsIntensityDay=1.1 -CloudsIntensityNight=0.400001 -CloudsCurveDay=0.95 -CloudsCurveNight=1.05 -CloudsDesaturationDay=0.0 -CloudsDesaturationNight=0.0 - -CloudsEdgeClamp=0.25 -CloudsEdgeIntensity=0.7 - -GradientIntensityDay=0.9 -GradientIntensityNight=0.35 - -GradientDesaturationDay=0.55 -GradientDesaturationNight=0.2 - -GradientTopIntensityDay=1.05 -GradientTopIntensityNight=0.4 -GradientTopCurveDay=1.05 -GradientTopCurveNight=1.0 - -GradientMiddleIntensityDay=1.0 -GradientMiddleIntensityNight=0.8 -GradientMiddleCurveDay=1.2 -GradientMiddleCurveNight=1.3 - -GradientHorizonIntensityDay=1.2 -GradientHorizonIntensityNight=1.4 -GradientHorizonCurveDay=1.3 -GradientHorizonCurveNight=1.2 - -SunIntensity=2.5 -SunDesaturation=0.0 -SunCoronaIntensity=1.0 -SunCoronaCurve=0.5 -SunCoronaDesaturation=0.0 -MoonIntensity=1.1 -MoonCurve=1.0 -MoonDesaturation=0.0 -MoonCoronaIntensity=1.0 - -[DEPTHOFFIELD] -FadeTime=0.4 - -[SHADOW] -DetailedShadowQuality=1 - -[RAYS] -SunRaysMultiplier=0.4 diff --git a/enbseries/_weatherlist.ini b/enbseries/_weatherlist.ini index 0d26b7d..a95585a 100644 --- a/enbseries/_weatherlist.ini +++ b/enbseries/_weatherlist.ini @@ -1,297 +1,62 @@ [WEATHER001] FileName= -WeatherIDs= [WEATHER002] FileName= -WeatherIDs= [WEATHER003] FileName= -WeatherIDs= [WEATHER004] FileName= -WeatherIDs= [WEATHER005] FileName= -WeatherIDs= [WEATHER006] FileName= -WeatherIDs= [WEATHER007] FileName= -WeatherIDs= [WEATHER008] FileName= -WeatherIDs= [WEATHER009] FileName= -WeatherIDs= [WEATHER010] FileName= -WeatherIDs= [WEATHER011] FileName= -WeatherIDs= [WEATHER012] FileName= -WeatherIDs= [WEATHER013] FileName= -WeatherIDs= [WEATHER014] FileName= -WeatherIDs= [WEATHER015] FileName= -WeatherIDs= [WEATHER016] FileName= -WeatherIDs= [WEATHER017] FileName= -WeatherIDs= [WEATHER018] FileName= -WeatherIDs= [WEATHER019] FileName= -WeatherIDs= [WEATHER020] FileName= -WeatherIDs= [WEATHER021] FileName= -WeatherIDs= [WEATHER022] FileName= -WeatherIDs= [WEATHER023] FileName= -WeatherIDs= [WEATHER024] FileName= -WeatherIDs= [WEATHER025] FileName= -WeatherIDs= [WEATHER026] FileName= -WeatherIDs= [WEATHER027] FileName= -WeatherIDs= [WEATHER028] FileName= -WeatherIDs= [WEATHER029] FileName= -WeatherIDs= [WEATHER030] FileName= -WeatherIDs= [WEATHER031] FileName= -WeatherIDs= -[WEATHER032] -FileName= -WeatherIDs= -[WEATHER033] -FileName= -WeatherIDs= -[WEATHER034] -FileName= -WeatherIDs= -[WEATHER035] -FileName= -WeatherIDs= -[WEATHER036] -FileName= -WeatherIDs= -[WEATHER037] -FileName= -WeatherIDs= -[WEATHER038] -FileName= -WeatherIDs= -[WEATHER039] -FileName= -WeatherIDs= -[WEATHER040] -FileName= -WeatherIDs= -[WEATHER041] -FileName= -WeatherIDs= -[WEATHER042] -FileName= -WeatherIDs= -[WEATHER043] -FileName= -WeatherIDs= -[WEATHER044] -FileName= -WeatherIDs= -[WEATHER045] -FileName= -WeatherIDs= -[WEATHER046] -FileName= -WeatherIDs= -[WEATHER047] -FileName= -WeatherIDs= -[WEATHER048] -FileName= -WeatherIDs= -[WEATHER049] -FileName= -WeatherIDs= -[WEATHER050] -FileName= -WeatherIDs= -[WEATHER051] -FileName= -WeatherIDs= -[WEATHER052] -FileName= -WeatherIDs= -[WEATHER053] -FileName= -WeatherIDs= -[WEATHER054] -FileName= -WeatherIDs= -[WEATHER055] -FileName= -WeatherIDs= -[WEATHER056] -FileName= -WeatherIDs= -[WEATHER057] -FileName= -WeatherIDs= -[WEATHER058] -FileName= -WeatherIDs= -[WEATHER059] -FileName= -WeatherIDs= -[WEATHER060] -FileName= -WeatherIDs= -[WEATHER061] -FileName= -WeatherIDs= -[WEATHER062] -FileName= -WeatherIDs= -[WEATHER063] -FileName= -WeatherIDs= -[WEATHER064] -FileName= -WeatherIDs= -[WEATHER065] -FileName= -WeatherIDs= -[WEATHER066] -FileName= -WeatherIDs= -[WEATHER067] -FileName= -WeatherIDs= -[WEATHER068] -FileName= -WeatherIDs= -[WEATHER069] -FileName= -WeatherIDs= -[WEATHER070] -FileName= -WeatherIDs= -[WEATHER071] -FileName= -WeatherIDs= -[WEATHER072] -FileName= -WeatherIDs= -[WEATHER073] -FileName= -WeatherIDs= -[WEATHER074] -FileName= -WeatherIDs= -[WEATHER075] -FileName= -WeatherIDs= -[WEATHER076] -FileName= -WeatherIDs= -[WEATHER077] -FileName= -WeatherIDs= -[WEATHER078] -FileName= -WeatherIDs= -[WEATHER079] -FileName= -WeatherIDs= -[WEATHER080] -FileName= -WeatherIDs= -[WEATHER081] -FileName= -WeatherIDs= -[WEATHER082] -FileName= -WeatherIDs= -[WEATHER083] -FileName= -WeatherIDs= -[WEATHER084] -FileName= -WeatherIDs= -[WEATHER085] -FileName= -WeatherIDs= -[WEATHER086] -FileName= -WeatherIDs= -[WEATHER087] -FileName= -WeatherIDs= -[WEATHER088] -FileName= -WeatherIDs= -[WEATHER089] -FileName= -WeatherIDs= -[WEATHER090] -FileName= -WeatherIDs= -[WEATHER091] -FileName= -WeatherIDs= -[WEATHER092] -FileName= -WeatherIDs= -[WEATHER093] -FileName= -WeatherIDs= -[WEATHER094] -FileName= -WeatherIDs= -[WEATHER095] -FileName= -WeatherIDs= -[WEATHER096] -FileName= -WeatherIDs= -[WEATHER097] -FileName= -WeatherIDs= -[WEATHER098] -FileName= -WeatherIDs= -[WEATHER099] -FileName= -WeatherIDs= \ No newline at end of file diff --git a/enbseries/effect.txt b/enbseries/effect.txt deleted file mode 100644 index 13ab03a..0000000 --- a/enbseries/effect.txt +++ /dev/null @@ -1,12 +0,0 @@ -/* - effect.txt : MariENB extra shader. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* do not touch this! */ -#define E_SHADER_3_0 -/* separate for easier maintenance */ -#include "menbextrasettings.fx" -#include "menbextrainternals.fx" -#include "menbextrafilters.fx" diff --git a/enbseries/effect.txt.ini b/enbseries/effect.txt.ini deleted file mode 100644 index 86e95c3..0000000 --- a/enbseries/effect.txt.ini +++ /dev/null @@ -1,65 +0,0 @@ -[EFFECT.TXT] -TECHNIQUE=0 -UseBlockGFX=false -EmulatedResX=960.0 -EmulatedResY=540.0 -PaletteType=2 -CGAPalette=1 -EGAPalette=1 -DitherMode=4 -GammaMod=0.65 -DitherBump=-0.1 -DitherMultiplier=0.25 -SaturationMod=1.5 -UseCurve=false -CurveChromaAberration=0.05 -CurveLensZoom=50.249985 -CurveLensDistortion=0.0 -CurveLensDistortionCubic=0.0 -CurveLensClamp=true -UseGrain=true -GrainFrequency=2500.0 -GrainIntensity=0.05 -GrainSaturation=0.0 -GrainTwoPass=true -GrainBlend=3 -GrainTwoPassFactor=0.05 -GrainMagnification1=9.5 -GrainMagnification2=11.45 -GrainMagnification3=11.4 -GrainPass1Magnification1=3.1 -GrainPass1Magnification2=3.8 -GrainPass1Magnification3=3.65 -GrainPass2Magnification1=5.6 -GrainPass2Magnification2=0.5 -GrainPass2Magnification3=3.0 -GrainPower=4.0 -GammaModR=0.75 -GammaModG=0.75 -GammaModB=0.75 -SaturationModR=1.2 -SaturationModG=1.2 -SaturationModB=1.2 -GrainDarkMaskPower=2.0 -GrainDarkMaskMultiplier=1.0 -UseNVGrain=false -UseNVCurve=false -UseDark=false -DarkRadiusNight=0.25 -DarkRadiusDay=0.15 -DarkRadiusInteriorNight=0.3 -DarkRadiusInteriorDay=0.2 -DarkCurveNight=1.1 -DarkCurveDay=1.2 -DarkCurveInteriorNight=1.15 -DarkCurveInteriorDay=1.2 -DarkBumpNight=-0.85 -DarkBumpDay=-0.95 -DarkBumpInteriorNight=-0.8 -DarkBumpInteriorDay=-0.9 -UseBox=false -BoxVertical=0.8 -BoxSoften=0.01 -BoxAlpha=1.0 -ZoomedResX=0.0 -ZoomedResY=0.0 diff --git a/enbseries/enbbloom.fx b/enbseries/enbbloom.fx deleted file mode 100644 index 8f92d2f..0000000 --- a/enbseries/enbbloom.fx +++ /dev/null @@ -1,12 +0,0 @@ -/* - enbbloom.fx : MariENB bloom filter. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* 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/enbseries/enbbloom.fx.ini b/enbseries/enbbloom.fx.ini deleted file mode 100644 index d995f9f..0000000 --- a/enbseries/enbbloom.fx.ini +++ /dev/null @@ -1,73 +0,0 @@ -[ENBBLOOM.FX] -TECHNIQUE=0 -BloomIntensityNight=1.1 -BloomIntensityDay=1.05 -BloomIntensityInteriorNight=1.15 -BloomIntensityInteriorDay=1.1 -BloomBumpNight=-0.6 -BloomBumpDay=-0.75 -BloomBumpInteriorNight=-0.55 -BloomBumpInteriorDay=-0.65 -BloomPowerNight=1.0 -BloomPowerDay=1.0 -BloomPowerInteriorNight=1.0 -BloomPowerInteriorDay=1.0 -BloomSaturationNight=0.8 -BloomSaturationDay=0.75 -BloomSaturationInteriorNight=0.8 -BloomSaturationInteriorDay=0.75 -BloomMix1=1.5 -BloomMix2=1.2 -BloomMix3=1.0 -BloomMix4=0.7 -BloomMix5=0.0 -BloomMix6=0.0 -BloomMix7=0.4 -BloomMix8=0.3 -BloomMixNoBlur=0.0 -BloomMixBaseImage=0.0 -BlueShiftColorNightRed=0.7 -BlueShiftColorNightGreen=0.4 -BlueShiftColorNightBlue=1.0 -BlueShiftColorDayRed=0.2 -BlueShiftColorDayGreen=0.6 -BlueShiftColorDayBlue=1.0 -BlueShiftColorInteriorNightRed=0.6 -BlueShiftColorInteriorNightGreen=0.4 -BlueShiftColorInteriorNightBlue=1.0 -BlueShiftColorInteriorDayRed=0.3 -BlueShiftColorInteriorDayGreen=0.7 -BlueShiftColorInteriorDayBlue=1.0 -BlueShiftIntensityNight=0.5 -BlueShiftIntensityDay=0.4 -BlueShiftIntensityInteriorNight=0.6 -BlueShiftIntensityInteriorDay=0.5 -EnableAnamorphicLensFlare=true -FlareBlendNight=0.9 -FlareBlendDay=0.8 -FlareBlendInteriorNight=0.95 -FlareBlendInteriorDay=0.85 -FlareBlueShiftColorNightRed=0.35 -FlareBlueShiftColorNightGreen=0.2 -FlareBlueShiftColorNightBlue=1.0 -FlareBlueShiftColorDayRed=0.35 -FlareBlueShiftColorDayGreen=0.55 -FlareBlueShiftColorDayBlue=1.0 -FlareBlueShiftColorInteriorNightRed=0.4 -FlareBlueShiftColorInteriorNightGreen=0.2 -FlareBlueShiftColorInteriorNightBlue=1.0 -FlareBlueShiftColorInteriorDayRed=0.2 -FlareBlueShiftColorInteriorDayGreen=0.4 -FlareBlueShiftColorInteriorDayBlue=1.0 -FlareBlueShiftIntensityNight=0.7 -FlareBlueShiftIntensityDay=0.45 -FlareBlueShiftIntensityInteriorNight=0.8 -FlareBlueShiftIntensityInteriorDay=0.55 -BloomCapNight=100.0 -BloomCapDay=30.0 -BloomCapInteriorNight=80.0 -BloomCapInteriorDay=40.0 -FlarePowerNight=1.1 -FlarePowerDay=1.25 -FlarePowerInteriorNight=1.15 -FlarePowerInteriorDay=1.2 diff --git a/enbseries/enbeffect.fx b/enbseries/enbeffect.fx index 97a242f..e0f18b3 100644 --- a/enbseries/enbeffect.fx +++ b/enbseries/enbeffect.fx @@ -1,12 +1,10 @@ -/* - enbeffect.fx : MariENB base shader. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* do not touch this! */ -#define E_SHADER_3_0 -/* separate for easier maintenance */ -#include "menbeffectsettings.fx" -#include "menbeffectinternals.fx" -#include "menbeffectfilters.fx" +/* + enbeffect.fx : MariENB 3 base shader. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. + Released under the GNU GPLv3 (or later). +*/ +#include "menbglobaldefs.fx" +#include "menbeffectsettings.fx" +#include "menbeffectinternals.fx" +#include "menbeffectfilters.fx" diff --git a/enbseries/enbeffect.fx.ini b/enbseries/enbeffect.fx.ini index f372926..bb93cde 100644 --- a/enbseries/enbeffect.fx.ini +++ b/enbseries/enbeffect.fx.ini @@ -1,157 +1,63 @@ [ENBEFFECT.FX] -TECHNIQUE=0 -CompensateFactorNight=0.35 -CompensateFactorDay=0.4 -CompensateFactorInteriorNight=0.4 -CompensateFactorInteriorDay=0.45 -CompensatePowerNight=1.1 -CompensatePowerDay=1.15 -CompensatePowerInteriorNight=1.1 -CompensatePowerInteriorDay=1.05 -CompensateSaturationNight=1.05 -CompensateSaturationDay=1.0 -CompensateSaturationInteriorNight=1.05 -CompensateSaturationInteriorDay=1.0 -GradingMulRNight=1.05 -GradingMulGNight=1.15 -GradingMulBNight=1.1 -GradingMulRDay=1.0 -GradingMulGDay=1.1 -GradingMulBDay=1.05 -GradingMulRInteriorNight=1.05 -GradingMulGInteriorNight=1.1 -GradingMulBInteriorNight=1.1 -GradingMulRInteriorDay=1.05 -GradingMulGInteriorDay=1.1 -GradingMulBInteriorDay=1.05 -GradingPowRNight=0.95 -GradingPowGNight=1.0 -GradingPowBNight=0.85 -GradingPowRDay=0.9 -GradingPowGDay=1.0 -GradingPowBDay=0.85 -GradingPowRInteriorNight=0.9 -GradingPowGInteriorNight=1.0 -GradingPowBInteriorNight=0.85 -GradingPowRInteriorDay=1.0 -GradingPowGInteriorDay=1.0 -GradingPowBInteriorDay=0.95 -GradingColRNight=0.4 -GradingColGNight=1.0 -GradingColBNight=0.7 -GradingColRDay=0.6 -GradingColGDay=1.0 -GradingColBDay=0.45 -GradingColRInteriorNight=0.55 -GradingColGInteriorNight=1.0 -GradingColBInteriorNight=0.75 -GradingColRInteriorDay=0.65 -GradingColGInteriorDay=1.0 -GradingColBInteriorDay=0.5 -GradingColFactorNight=0.45 -GradingColFactorDay=0.4 -GradingColFactorInteriorNight=0.65 -GradingColFactorInteriorDay=0.6 -DarkRadiusNight=0.25 -DarkRadiusDay=0.15 -DarkRadiusInteriorNight=0.3 -DarkRadiusInteriorDay=0.2 -DarkCurveNight=1.1 -DarkCurveDay=1.2 -DarkCurveInteriorNight=1.15 -DarkCurveInteriorDay=1.2 -DarkBumpNight=-0.85 -DarkBumpDay=-0.95 -DarkBumpInteriorNight=-0.8 -DarkBumpInteriorDay=-0.9 -BoxVertical=0.8 -BoxSoften=0.05 -BoxAlpha=1.0 -AdaptationMinNight=0.15 -AdaptationMinDay=0.2 -AdaptationMinInteriorNight=0.1 -AdaptationMinInteriorDay=0.2 -AdaptationMaxNight=1.1 -AdaptationMaxDay=1.2 -AdaptationMaxInteriorNight=1.05 -AdaptationMaxInteriorDay=1.15 -BloomSoften=true -_FixedResolutionX=1920 -_FixedResolutionY=1080 -BloomDebug=false -GradingSatMulNight=1.25 -GradingSatMulDay=1.2 -GradingSatMulInteriorNight=1.2 -GradingSat bloomcap ) hsv.z = bloomcap; - res.rgb = hsv2rgb(hsv); - res = max(res+bloombump,0); - hsv = rgb2hsv(res.rgb); - hsv.y *= bloomsaturation; - hsv.z = pow(hsv.z,bloompower); - res.rgb = hsv2rgb(hsv)*bloomintensity; - res.a = 1.0; - return res; -} -/* Thankfully this allows for separate axis blur */ -float4 PS_BloomTexture1(VS_OUTPUT_POST In) : COLOR -{ - float2 coord = In.txcoord0.xy; - float4 res = float4(0,0,0,0); - int i; - for ( i=-2; i<=2; i++ ) - res += gauss3[abs(i)]*tex2D(SamplerBloom1,coord+float2(i,0) - *TempParameters.z); - res.a = 1.0; - return res; -} -float4 PS_BloomTexture2(VS_OUTPUT_POST In) : COLOR -{ - float2 coord = In.txcoord0.xy; - float4 res = float4(0,0,0,0), base = tex2D(SamplerBloom1,coord); - int i; - for ( i=-2; i<=2; i++ ) - res += gauss3[abs(i)]*tex2D(SamplerBloom1,coord+float2(0,i) - *TempParameters.z*ScreenSize.z); - /* blue shift */ - float3 blu_n = float3(blu_n_r,blu_n_g,blu_n_b); - float3 blu_d = float3(blu_d_r,blu_d_g,blu_d_b); - float3 blu_in = float3(blu_in_r,blu_in_g,blu_in_b); - float3 blu_id = float3(blu_id_r,blu_id_g,blu_id_b); - float3 blu = lerp(lerp(blu_n,blu_d,tod),lerp(blu_in,blu_id,tod),ind); - float bsi = lerp(lerp(bsi_n,bsi_d,tod),lerp(bsi_in,bsi_id,tod),ind); - float lm = max(0,dot(res.rgb,0.33)-dot(base.rgb,0.33))*10*bsi; - lm = lm/(1.0+lm); - lm *= 1.0-saturate((TempParameters.w-1.0)*0.22); - blu = saturate(blu+(TempParameters.w-1.0)*0.33); - res.rgb *= lerp(1.0,blu,lm); - res.a = 1.0; - return res; -} -/* Anamorphic lens flare */ -float4 PS_FlarePass(VS_OUTPUT_POST In) : COLOR -{ - if ( !alfenable ) return float4(0,0,0,1); - float2 coord = In.txcoord0.xy; - float4 res = float4(0,0,0,0), base = tex2D(SamplerBloom1,coord); - int i; - for ( i=-35; i<=35; i++ ) - res += gauss36[abs(i)]*tex2D(SamplerBloom1,coord+float2(i,0) - *TempParameters.z); - /* blue shift */ - float3 flu_n = float3(flu_n_r,flu_n_g,flu_n_b); - float3 flu_d = float3(flu_d_r,flu_d_g,flu_d_b); - float3 flu_in = float3(flu_in_r,flu_in_g,flu_in_b); - float3 flu_id = float3(flu_id_r,flu_id_g,flu_id_b); - float3 flu = lerp(lerp(flu_n,flu_d,tod),lerp(flu_in,flu_id,tod),ind); - float fsi = lerp(lerp(fsi_n,fsi_d,tod),lerp(fsi_in,fsi_id,tod),ind); - float lm = max(0,dot(res.rgb,0.33)-dot(base.rgb,0.33))*10*fsi; - lm = lm/(1.0+lm); - float fbl = lerp(lerp(fbl_n,fbl_d,tod),lerp(fbl_in,fbl_id,tod),ind); - float fpw = lerp(lerp(fpw_n,fpw_d,tod),lerp(fpw_in,fpw_id,tod),ind); - res.rgb *= lerp(1.0,flu,lm); - res.rgb = pow(res.rgb,fpw)*fbl; - res.a = 1.0; - return res; -} -/* end pass */ -float4 PS_BloomPostPass(VS_OUTPUT_POST In) : COLOR -{ - float2 coord = In.txcoord0.xy; - float4 res = float4(0,0,0,0); - res += bloommix1*tex2D(SamplerBloom1,coord); // P1 - res += bloommix2*tex2D(SamplerBloom2,coord); // P2 - res += bloommix3*tex2D(SamplerBloom3,coord); // P3 - res += bloommix4*tex2D(SamplerBloom4,coord); // P4 - res += bloommix5*tex2D(SamplerBloom5,coord); // Prepass - res += bloommix6*tex2D(SamplerBloom6,coord); // Base - res += bloommix7*tex2D(SamplerBloom7,coord); // P5 - res += bloommix8*tex2D(SamplerBloom8,coord); // P6 - res.rgb /= 6.0; - if ( alfenable ) res.rgb *= 0.5; - res.a = 1.0; - 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_BloomTexture1(); - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - CullMode = NONE; - AlphaBlendEnable = FALSE; - AlphaTestEnable = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } - pass p1 - { - AlphaBlendEnable = true; - SrcBlend = One; - DestBlend = One; - PixelShader = compile ps_3_0 PS_FlarePass(); - } -} -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; - } -} diff --git a/enbseries/menbbloominternals.fx b/enbseries/menbbloominternals.fx deleted file mode 100644 index 45f9161..0000000 --- a/enbseries/menbbloominternals.fx +++ /dev/null @@ -1,141 +0,0 @@ -/* - menbbloominternals.fx : MariENB bloom internal variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* gaussian blur matrices */ -/* radius: 3, std dev: 0.7014 */ -static const float gauss3[3] = {0.568780, 0.205851, 0.009759}; -/* radius: 36, std dev: 32 */ -static const float gauss36[36] = -{ - 0.017014, 0.017006, 0.016981, 0.016939, 0.016881, 0.016807, - 0.016717, 0.016612, 0.016490, 0.016354, 0.016203, 0.016038, - 0.015859, 0.015666, 0.015461, 0.015244, 0.015015, 0.014775, - 0.014524, 0.014264, 0.013995, 0.013718, 0.013433, 0.013141, - 0.012843, 0.012539, 0.012231, 0.011918, 0.011602, 0.011284, - 0.010964, 0.010642, 0.010319, 0.009997, 0.009675, 0.009355 -}; -/* standard stuff */ -float4 ScreenSize; -float4 TempParameters; -float4 BloomParameters; -float ENightDayFactor; -float EInteriorFactor; -/* samplers and textures */ -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 = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom4 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom5 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom6 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom7 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom8 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Border; - AddressV = Border; - 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/enbseries/menbbloomsettings.fx b/enbseries/menbbloomsettings.fx deleted file mode 100644 index 0fab2e0..0000000 --- a/enbseries/menbbloomsettings.fx +++ /dev/null @@ -1,383 +0,0 @@ -/* - menbbloomsettings.fx : MariENB bloom user-tweakable variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* bloom mix factors */ -float bloommix1 -< - string UIName = "BloomMix1"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloommix2 -< - string UIName = "BloomMix2"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloommix3 -< - string UIName = "BloomMix3"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloommix4 -< - string UIName = "BloomMix4"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloommix7 -< - string UIName = "BloomMix7"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloommix8 -< - string UIName = "BloomMix8"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloommix5 -< - string UIName = "BloomMixNoBlur"; - string UIWidget = "Spinner"; -> = {0.0}; -float bloommix6 -< - string UIName = "BloomMixBaseImage"; - string UIWidget = "Spinner"; -> = {0.0}; -/* bloom intensity */ -float bloomintensity_n -< - string UIName = "BloomIntensityNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bloomintensity_d -< - string UIName = "BloomIntensityDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bloomintensity_in -< - string UIName = "BloomIntensityInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bloomintensity_id -< - string UIName = "BloomIntensityInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* bloom power (contrast) */ -float bloompower_n -< - string UIName = "BloomPowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bloompower_d -< - string UIName = "BloomPowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bloompower_in -< - string UIName = "BloomPowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bloompower_id -< - string UIName = "BloomPowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* bloom saturation */ -float bloomsaturation_n -< - string UIName = "BloomSaturationNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloomsaturation_d -< - string UIName = "BloomSaturationDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloomsaturation_in -< - string UIName = "BloomSaturationInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float bloomsaturation_id -< - string UIName = "BloomSaturationInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* bloom offset (negative values keep dark areas from muddying up) */ -float bloombump_n -< - string UIName = "BloomBumpNight"; - string UIWidget = "Spinner"; -> = {-0.5}; -float bloombump_d -< - string UIName = "BloomBumpDay"; - string UIWidget = "Spinner"; -> = {-0.5}; -float bloombump_in -< - string UIName = "BloomBumpInteriorNight"; - string UIWidget = "Spinner"; -> = {-0.5}; -float bloombump_id -< - string UIName = "BloomBumpInteriorDay"; - string UIWidget = "Spinner"; -> = {-0.5}; -/* bloom cap (maximum brightness samples can have) */ -float bloomcap_n -< - string UIName = "BloomCapNight"; - string UIWidget = "Spinner"; -> = {10.0}; -float bloomcap_d -< - string UIName = "BloomCapDay"; - string UIWidget = "Spinner"; -> = {10.0}; -float bloomcap_in -< - string UIName = "BloomCapInteriorNight"; - string UIWidget = "Spinner"; -> = {10.0}; -float bloomcap_id -< - string UIName = "BloomCapInteriorDay"; - string UIWidget = "Spinner"; -> = {10.0}; -/* bloom tint/blueshift parameters */ -float blu_n_r -< - string UIName = "BlueShiftColorNightRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float blu_n_g -< - string UIName = "BlueShiftColorNightGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float blu_n_b -< - string UIName = "BlueShiftColorNightBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float blu_d_r -< - string UIName = "BlueShiftColorDayRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float blu_d_g -< - string UIName = "BlueShiftColorDayGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float blu_d_b -< - string UIName = "BlueShiftColorDayBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float blu_in_r -< - string UIName = "BlueShiftColorInteriorNightRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float blu_in_g -< - string UIName = "BlueShiftColorInteriorNightGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float blu_in_b -< - string UIName = "BlueShiftColorInteriorNightBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float blu_id_r -< - string UIName = "BlueShiftColorInteriorDayRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float blu_id_g -< - string UIName = "BlueShiftColorInteriorDayGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float blu_id_b -< - string UIName = "BlueShiftColorInteriorDayBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float bsi_n -< - string UIName = "BlueShiftIntensityNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bsi_d -< - string UIName = "BlueShiftIntensityDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bsi_in -< - string UIName = "BlueShiftIntensityInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float bsi_id -< - string UIName = "BlueShiftIntensityInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* anamorphic lens flare (very intensive) */ -bool alfenable -< - string UIName = "EnableAnamorphicLensFlare"; - string UIWidget = "Checkbox"; -> = {true}; -float fbl_n -< - string UIName = "FlareBlendNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fbl_d -< - string UIName = "FlareBlendDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fbl_in -< - string UIName = "FlareBlendInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fbl_id -< - string UIName = "FlareBlendInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float flu_n_r -< - string UIName = "FlareBlueShiftColorNightRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float flu_n_g -< - string UIName = "FlareBlueShiftColorNightGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float flu_n_b -< - string UIName = "FlareBlueShiftColorNightBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float flu_d_r -< - string UIName = "FlareBlueShiftColorDayRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float flu_d_g -< - string UIName = "FlareBlueShiftColorDayGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float flu_d_b -< - string UIName = "FlareBlueShiftColorDayBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float flu_in_r -< - string UIName = "FlareBlueShiftColorInteriorNightRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float flu_in_g -< - string UIName = "FlareBlueShiftColorInteriorNightGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float flu_in_b -< - string UIName = "FlareBlueShiftColorInteriorNightBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float flu_id_r -< - string UIName = "FlareBlueShiftColorInteriorDayRed"; - string UIWidget = "Spinner"; -> = {0.65}; -float flu_id_g -< - string UIName = "FlareBlueShiftColorInteriorDayGreen"; - string UIWidget = "Spinner"; -> = {0.37}; -float flu_id_b -< - string UIName = "FlareBlueShiftColorInteriorDayBlue"; - string UIWidget = "Spinner"; -> = {1.0}; -float fsi_n -< - string UIName = "FlareBlueShiftIntensityNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fsi_d -< - string UIName = "FlareBlueShiftIntensityDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fsi_in -< - string UIName = "FlareBlueShiftIntensityInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fsi_id -< - string UIName = "FlareBlueShiftIntensityInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fpw_n -< - string UIName = "FlarePowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fpw_d -< - string UIName = "FlarePowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fpw_in -< - string UIName = "FlarePowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float fpw_id -< - string UIName = "FlarePowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; \ No newline at end of file diff --git a/enbseries/menbcgafont.png b/enbseries/menbcgafont.png deleted file mode 100644 index 82e3da3..0000000 Binary files a/enbseries/menbcgafont.png and /dev/null differ diff --git a/enbseries/menbdoomlut.png b/enbseries/menbdoomlut.png new file mode 100644 index 0000000..b2c3c45 Binary files /dev/null and b/enbseries/menbdoomlut.png differ diff --git a/enbseries/menbdots.png b/enbseries/menbdots.png new file mode 100644 index 0000000..2027ba1 Binary files /dev/null and b/enbseries/menbdots.png differ diff --git a/enbseries/menbdrawutil.fx b/enbseries/menbdrawutil.fx deleted file mode 100644 index c49c893..0000000 --- a/enbseries/menbdrawutil.fx +++ /dev/null @@ -1,162 +0,0 @@ -/* - menbdrawutil.fx : MariENB drawing utilities. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* - This code is unused for now due to the fact ENB just shits itself and - whitescreens (sometimes goes black for a split second, then back to white) - when drawing too much text. For no known reason whatsoever, so likely it's - just because ENB is shit, period. -*/ -texture2D tfnt -< - string ResourceName = "menbcgafont.png"; ->; -sampler2D sfnt = sampler_state -{ - Texture = ; - MinFilter = POINT; - MagFilter = POINT; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -/* Get a glyph */ -float GetChar( in float2 coord, in int chr, in bool bold ) -{ - float2 siz = float2(1./32.,1./16.); - float cv = float(chr)*siz.x; - float2 ccoord = float2(frac(cv),siz.y*floor(cv)); - if ( bold ) ccoord.y += 0.5; - return tex2D(sfnt,ccoord+coord*siz).x; -} -/* Draw a single glyph */ -float DrawChar( in float2 coord, inout float2 of, in int chr, in bool bold ) -{ - if ( chr == 0 ) return 0.; - float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 bresl = rresl/8.; - float2 cc = coord*bresl-of; - of.x += 1.; - if ( (cc.x >= 0.) && (cc.y >= 0.) && (cc.x < 1.) && (cc.y < 1.) ) - return GetChar(cc,chr,bold); - return 0.; -} -/* Draw a string */ -float DrawText1( in float2 coord, inout float2 of, in int4 ta, in bool bold ) -{ - float res = DrawChar(coord,of,ta.x,bold); - res += DrawChar(coord,of,ta.y,bold); - res += DrawChar(coord,of,ta.z,bold); - res += DrawChar(coord,of,ta.w,bold); - return res; -} -float DrawText2( in float2 coord, inout float2 of, in int4 ta, in int4 tb, - in bool bold ) -{ - float res = DrawChar(coord,of,ta.x,bold); - res += DrawChar(coord,of,ta.y,bold); - res += DrawChar(coord,of,ta.z,bold); - res += DrawChar(coord,of,ta.w,bold); - res += DrawChar(coord,of,tb.x,bold); - res += DrawChar(coord,of,tb.y,bold); - res += DrawChar(coord,of,tb.z,bold); - res += DrawChar(coord,of,tb.w,bold); - return res; -} -float DrawText3( in float2 coord, inout float2 of, in int4 ta, in int4 tb, - in int4 tc, in bool bold ) -{ - float res = DrawChar(coord,of,ta.x,bold); - res += DrawChar(coord,of,ta.y,bold); - res += DrawChar(coord,of,ta.z,bold); - res += DrawChar(coord,of,ta.w,bold); - res += DrawChar(coord,of,tb.x,bold); - res += DrawChar(coord,of,tb.y,bold); - res += DrawChar(coord,of,tb.z,bold); - res += DrawChar(coord,of,tb.w,bold); - res += DrawChar(coord,of,tc.x,bold); - res += DrawChar(coord,of,tc.y,bold); - res += DrawChar(coord,of,tc.z,bold); - res += DrawChar(coord,of,tc.w,bold); - return res; -} -float DrawText4( in float2 coord, inout float2 of, in int4 ta, in int4 tb, - in int4 tc, in int4 td, in bool bold ) -{ - float res = DrawChar(coord,of,ta.x,bold); - res += DrawChar(coord,of,ta.y,bold); - res += DrawChar(coord,of,ta.z,bold); - res += DrawChar(coord,of,ta.w,bold); - res += DrawChar(coord,of,tb.x,bold); - res += DrawChar(coord,of,tb.y,bold); - res += DrawChar(coord,of,tb.z,bold); - res += DrawChar(coord,of,tb.w,bold); - res += DrawChar(coord,of,tc.x,bold); - res += DrawChar(coord,of,tc.y,bold); - res += DrawChar(coord,of,tc.z,bold); - res += DrawChar(coord,of,tc.w,bold); - res += DrawChar(coord,of,td.x,bold); - res += DrawChar(coord,of,td.y,bold); - res += DrawChar(coord,of,td.z,bold); - res += DrawChar(coord,of,td.w,bold); - return res; -} -/* Draw a float */ -float DrawFloat( in float2 coord, inout float2 of, in float f, in bool bold ) -{ - float res = 0.; - if ( f < 0. ) res += DrawChar(coord,of,45,bold); - int fi = abs(floor(f)); - int nn = fi, i = 0; - do - { - nn /= 10; - i++; - } while ( nn > 0 ); - do - { - i--; - res += DrawChar(coord,of,(fi/pow(10,i))%10+48,bold); - } while ( i > 0 ); - res += DrawChar(coord,of,46,bold); - float fd = abs(frac(f)); - for ( i=1; i<7; i++ ) - res += DrawChar(coord,of,floor(fd*pow(10,i))%10+48,bold); - return res; -} -float DrawFloat2( in float2 coord, inout float2 of, in float2 f, in bool bold ) -{ - float res = 0.; - res += DrawFloat(coord,of,f.x,bold); - res += DrawText1(coord,of,int4(44,32,0,0),bold); - res += DrawFloat(coord,of,f.y,bold); - return res; -} -float DrawFloat3( in float2 coord, inout float2 of, in float3 f, in bool bold ) -{ - float res = 0.; - res += DrawFloat(coord,of,f.x,bold); - res += DrawText1(coord,of,int4(44,32,0,0),bold); - res += DrawFloat(coord,of,f.y,bold); - res += DrawText1(coord,of,int4(44,32,0,0),bold); - res += DrawFloat(coord,of,f.z,bold); - return res; -} -float DrawFloat4( in float2 coord, inout float2 of, in float4 f, in bool bold ) -{ - float res = 0.; - res += DrawFloat(coord,of,f.x,bold); - res += DrawText1(coord,of,int4(44,32,0,0),bold); - res += DrawFloat(coord,of,f.y,bold); - res += DrawText1(coord,of,int4(44,32,0,0),bold); - res += DrawFloat(coord,of,f.z,bold); - res += DrawText1(coord,of,int4(44,32,0,0),bold); - res += DrawFloat(coord,of,f.w,bold); - return res; -} diff --git a/enbseries/menbeffectfilters.fx b/enbseries/menbeffectfilters.fx index 4b92e2d..4e0d93a 100644 --- a/enbseries/menbeffectfilters.fx +++ b/enbseries/menbeffectfilters.fx @@ -1,384 +1,320 @@ -/* - menbeffectfilters.fx : MariENB base shader routines. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* If defined, this is for Fallout 3 and New Vegas */ -#define FALLOUT -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; -} -#ifdef FALLOUT -float4 _c1 : register(c1); -float4 _c2 : register(c2); -float4 _c19 : register(c19); -float4 _c20 : register(c20); -float4 _c22 : register(c22); -#define _r1 _c1 -#define _r2 _c2 -#define _r3 _c19 -#define _r4 _c20 -#define _r5 _c22 -/* - FALLOUT REGISTERS - - r1 (c1): r2 (c2): r3 (c19): - x -> adapt max x -> unused x -> vibrance - y -> unused y -> unused y -> balancer - z -> unused z -> bloom mix z -> multiplier 1 - w -> unused w -> unused w -> multiplier 2 - - r4 (c20): r5 (c22): - x -> tint red x -> fade red - y -> tint green y -> fade green - z -> tint blue z -> fade blue - w -> tint value w -> fade value -*/ -#else -float4 _c1 : register(c1); -float4 _c2 : register(c2); -float4 _c3 : register(c3); -float4 _c4 : register(c4); -float4 _c5 : register(c5); -#define _r1 _c1 -#define _r2 _c2 -#define _r3 _c3 -#define _r4 _c4 -#define _r5 _c5 -/* - SKYRIM REGISTERS - - r1 (c1): r2 (c2): r3 (c3): - x -> adapt max x -> bloom bump (?) x -> vibrance - y -> adapt min y -> bloom mult (?) y -> unused - z -> unused z -> unused z -> multiplier 1 - w -> unused w -> unused w -> multiplier 2 - - r4 (c4): r5 (c5): - x -> tint red x -> fade red - y -> tint green y -> fade green - z -> tint blue z -> fade blue - w -> tint value w -> fade value -*/ -#endif -#define tod ENightDayFactor -#define ind EInteriorFactor -/* helper functions */ -float3 rgb2hsv( float3 c ) -{ - float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0); - float4 p = (c.g (p+1)*0.05-0.01) ) return 0.0; - float posy = (coord.y-0.5)*2.0*regdebugscale; - if ( r < 0.0 ) - { - if ( posy > 0.0 ) return 0.0; - if ( posy < r ) return 0.0; - return 1.0; - } - if ( posy < 0.0 ) return 0.0; - if ( posy > r ) return 0.0; - return 1.0; -} -/* MariENB shader */ -float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord0.xy; - float4 res = tex2D(_s0,coord); - if ( aenable ) res.rgb = Adaptation(res.rgb); - if ( compenable ) res.rgb = Compensate(res.rgb); - res += tex2D(_s3,coord)*EBloomAmount; - if ( tintbeforegrade && tintenable ) res.rgb = Tint(res.rgb); - if ( vgradeenable ) res.rgb = GradingGame(res.rgb); - if ( gradeenable1 ) res.rgb = GradingRGB(res.rgb); - if ( colorizeafterhsv ) - { - if ( gradeenable3 ) res.rgb = GradingHSV(res.rgb); - if ( gradeenable2 ) res.rgb = GradingColorize(res.rgb); - } - else - { - if ( gradeenable2 ) res.rgb = GradingColorize(res.rgb); - if ( gradeenable3 ) res.rgb = GradingHSV(res.rgb); - } - if ( !tintbeforegrade && tintenable ) res.rgb = Tint(res.rgb); - res.rgb = _r5.rgb*_r5.a + res.rgb*(1.0-_r5.a); /* fade */ - if ( regdebug ) - { - res.rgb += debugreg(_r1.x,coord,0); - res.rgb += debugreg(_r1.y,coord,1); - res.rgb += debugreg(_r1.z,coord,2); - res.rgb += debugreg(_r1.w,coord,3); - res.rgb += debugreg(_r2.x,coord,4); - res.rgb += debugreg(_r2.y,coord,5); - res.rgb += debugreg(_r2.z,coord,6); - res.rgb += debugreg(_r2.w,coord,7); - res.rgb += debugreg(_r3.x,coord,8); - res.rgb += debugreg(_r3.y,coord,9); - res.rgb += debugreg(_r3.z,coord,10); - res.rgb += debugreg(_r3.w,coord,11); - res.rgb += debugreg(_r4.x,coord,12); - res.rgb += debugreg(_r4.y,coord,13); - res.rgb += debugreg(_r4.z,coord,14); - res.rgb += debugreg(_r4.w,coord,15); - res.rgb += debugreg(_r5.x,coord,16); - res.rgb += debugreg(_r5.y,coord,17); - res.rgb += debugreg(_r5.z,coord,18); - res.rgb += debugreg(_r5.w,coord,19); - } - res.rgb = saturate(res.rgb); - 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 -#ifdef FALLOUT -technique Shader_C1DAE3F7 -#else -technique Shader_D6EC7DD1 -#endif -#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 -#ifdef FALLOUT -technique Shader_C1DAE3F7 -#else -technique Shader_D6EC7DD1 -#endif -#endif -{ - pass p0 - { -#ifdef FALLOUT - VertexShader = asm - { - vs_1_1 - def c3,2,-2,0,0 - dcl_position v0 - dcl_texcoord v1 - mov r0.xy,c0 - mad oPos.xy,r0,-c3,v0 - add oT0.xy,v1,c1 - add oT1.xy,v1,c2 - mov oPos.zw,v0 - }; -#else - VertexShader = compile vs_3_0 VS_Pass(); -#endif - /* - >inline assembly - Have to keep this part intact, sadly - Boris what the fuck have you done - */ - PixelShader = asm - { -#ifdef FALLOUT - ps_2_x - def c0,0.5,0,0,0 - def c3,0.298999995,0.587000012,0.114,0 - dcl t0.xy - dcl t1.xy - dcl_2d s0 - dcl_2d s1 - texld r0,t1,s1 - texld r1,t0,s0 - max r0.w,r1.w,c1.x - rcp r0.w,r0.w - mul r1.w,r0.w,c0.x - mul r0.w,r0.w,c1.x - mul r1.xyz,r1,r1.w - max r2.xyz,r1,c0.y - mad r0.xyz,r0.w,r0,r2 - dp3 r0.w,r0,c3 - lrp r1.xyz,c19.x,r0,r0.w - mad r0.xyz,r0.w,c20,-r1 - mad r0.xyz,c20.w,r0,r1 - mad r0.xyz,c19.w,r0,-c19.y - mad r0.xyz,c19.z,r0,c19.y - lrp r1.xyz,c22.w,c22,r0 - mov r1.w,c2.z - mov oC0,r1 -#else - 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 -#endif - }; - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - ZEnable = FALSE; - ZWriteEnable = FALSE; - CullMode = NONE; - AlphaTestEnable = FALSE; - AlphaBlendEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} +/* + menbeffectfilters.fx : MariENB 3 base shader routines. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. + Released under the GNU GPLv3 (or later). +*/ +VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) +{ + VS_OUTPUT_POST OUT; + OUT.pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); + OUT.txcoord0.xy = IN.txcoord0.xy; + return OUT; +} +/* helper functions */ +/* photometric */ +#define luminance(x) dot(x,float3(0.2126,0.7152,0.0722)) +/* CCIR601 */ +//#define luminance(x) dot(x,float3(0.299,0.587,0.114)) +/* overlay blend */ +#define overlay(a,b) (a<0.5)?(2.0*a*b):(1.0-(2.0*(1.0-a)*(1.0-b))) +/* "dark mask" blending is something I came up with and can't really explain */ +#define darkmask(a,b) (a>0.5)?(2.0*a*(0.5+b)):(1.0-2.0*(1.0-a)*(1.0-((0.5+b)))) +float3 rgb2hsv( float3 c ) +{ + float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0); + float4 p = (c.g +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_MariENB())); + } +} +/* cool, no more inline assembly */ +technique11 ORIGINALPOSTPROCESS +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_Vanilla())); + } +} diff --git a/enbseries/menbeffectinternals.fx b/enbseries/menbeffectinternals.fx index 5363fd7..d234c73 100644 --- a/enbseries/menbeffectinternals.fx +++ b/enbseries/menbeffectinternals.fx @@ -1,101 +1,165 @@ -/* - menbeffectinternals.fx : MariENB base internal variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* standard stuff */ -float4 ScreenSize; -float ENightDayFactor; -float EInteriorFactor; -float EBloomAmount; -/* samplers and textures */ -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 = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D _s2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D _s3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D _s4 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - 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; -}; -/* whatever */ -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; +/* + menbeffectinternals.fx : MariENB 3 base internal variables. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. + Released under the GNU GPLv3 (or later). +*/ +/* + dithering threshold maps + don't touch unless you know what you're doing +*/ +static const float checkers[4] = +{ + 1.0,0.0, + 0.0,1.0 +}; +#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 +/* standard stuff */ +float4 Timer; +float4 ScreenSize; +float AdaptiveQuality; +float4 Weather; +float4 TimeOfDay1; +float4 TimeOfDay2; +float4 tempF1; +float4 tempF2; +float4 tempF3; +float4 tempInfo1; +float4 Params01[6]; +/* + attempting to figure what each param does: + 0 unused + x unused + y unused + z unused + w unused + 1 bloom/adaptation related + x ? + y ? + z ? + w ? + 2 imagespace grading + x vibrance? + y unused + z multiplier 1? + w multiplier 2? + 3 imagespace tint + x tint r + y tint g + z tint b + w tint value + 4 coord multipliers for low quality texture sampling, I guess + x unused + y unused + z bloom coord multiplier x + w bloom coord multiplier y + 5 imagespace fade + x fade r + y fade g + z fade b + w fade value +*/ +/* samplers and textures */ +Texture2D TextureColor; +Texture2D TextureBloom; +Texture2D TextureAdaptation; +Texture2D TextureDepth; +Texture2D TextureNoise2 +< + string ResourceName = "menbnoise1.png"; +>; +Texture2D TextureNoise3 +< + string ResourceName = "menbnoise2.png"; +>; +Texture2D TextureLUT +< +#ifdef LUTMODE_LEGACY + string ResourceName = "menblutpreset.png"; +#endif +#ifdef LUTMODE_16 + string ResourceName = "menblut16.png"; +#endif +#ifdef LUTMODE_64 + string ResourceName = "menblut64.png"; +#endif +>; +SamplerState Nearest +{ + Filter = MIN_MAG_MIP_POINT; + AddressU = Clamp; + AddressV = Clamp; + MaxLod = 0; + MipLodBias = 0; +}; +SamplerState Linear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Clamp; + AddressV = Clamp; + MaxLod = 0; + MipLodBias = 0; +}; +SamplerState Noise2 +{ + Filter = MIN_LINEAR_MAG_MIP_POINT; + AddressU = Wrap; + AddressV = Wrap; + MaxLod = 0; + MipLodBias = 0; +}; +SamplerState Noise3 +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; + MaxLod = 0; + MipLodBias = 0; +}; +/* whatever */ +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord0 : TEXCOORD0; +}; +struct VS_OUTPUT_POST +{ + float4 pos : SV_POSITION; + float2 txcoord0 : TEXCOORD0; +}; diff --git a/enbseries/menbeffectsettings.fx b/enbseries/menbeffectsettings.fx index 3f2de30..5bcc441 100644 --- a/enbseries/menbeffectsettings.fx +++ b/enbseries/menbeffectsettings.fx @@ -1,491 +1,342 @@ -/* - menbeffectsettings.fx : MariENB base user-tweakable variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* "adaptation" factors */ -bool aenable -< - string UIName = "UseAdaptation"; - string UIWidget = "Checkbox"; -> = {false}; -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}; -/* overshine/bloom compensation */ -bool compenable -< - string UIName = "UseCompensate"; - string UIWidget = "Checkbox"; -> = {false}; -/* compensation factor */ -float compfactor_n -< - string UIName = "CompensateFactorNight"; - string UIWidget = "Spinner"; -> = {0.0}; -float compfactor_d -< - string UIName = "CompensateFactorDay"; - string UIWidget = "Spinner"; -> = {0.0}; -float compfactor_in -< - string UIName = "CompensateFactorInteriorNight"; - string UIWidget = "Spinner"; -> = {0.0}; -float compfactor_id -< - string UIName = "CompensateFactorInteriorDay"; - string UIWidget = "Spinner"; -> = {0.0}; -/* compensation power (contrast) */ -float comppow_n -< - string UIName = "CompensatePowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float comppow_d -< - string UIName = "CompensatePowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float comppow_in -< - string UIName = "CompensatePowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float comppow_id -< - string UIName = "CompensatePowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* compensation saturation (higher values desaturate highlights) */ -float compsat_n -< - string UIName = "CompensateSaturationNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float compsat_d -< - string UIName = "CompensateSaturationDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float compsat_in -< - string UIName = "CompensateSaturationInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float compsat_id -< - string UIName = "CompensateSaturationInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* Color grading */ -bool gradeenable1 -< - string UIName = "UseRGBGrading"; - string UIWidget = "Checkbox"; -> = {false}; -/* color component multipliers */ -float grademul_r_n -< - string UIName = "GradingMulRNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_g_n -< - string UIName = "GradingMulGNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_b_n -< - string UIName = "GradingMulBNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_r_d -< - string UIName = "GradingMulRDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_g_d -< - string UIName = "GradingMulGDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_b_d -< - string UIName = "GradingMulBDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_r_in -< - string UIName = "GradingMulRInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_g_in -< - string UIName = "GradingMulGInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_b_in -< - string UIName = "GradingMulBInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_r_id -< - string UIName = "GradingMulRInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_g_id -< - string UIName = "GradingMulGInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float grademul_b_id -< - string UIName = "GradingMulBInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* color component contrasts */ -float gradepow_r_n -< - string UIName = "GradingPowRNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_g_n -< - string UIName = "GradingPowGNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_b_n -< - string UIName = "GradingPowBNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_r_d -< - string UIName = "GradingPowRDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_g_d -< - string UIName = "GradingPowGDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_b_d -< - string UIName = "GradingPowBDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_r_in -< - string UIName = "GradingPowRInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_g_in -< - string UIName = "GradingPowGInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_b_in -< - string UIName = "GradingPowBInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_r_id -< - string UIName = "GradingPowRInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_g_id -< - string UIName = "GradingPowGInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float gradepow_b_id -< - string UIName = "GradingPowBInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* colorization factors */ -bool gradeenable2 -< - string UIName = "UseColorizeGrading"; - string UIWidget = "Checkbox"; -> = {false}; -float gradecol_r_n -< - string UIName = "GradingColRNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_g_n -< - string UIName = "GradingColGNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_b_n -< - string UIName = "GradingColBNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_r_d -< - string UIName = "GradingColRDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_g_d -< - string UIName = "GradingColGDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_b_d -< - string UIName = "GradingColBDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_r_in -< - string UIName = "GradingColRInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_g_in -< - string UIName = "GradingColGInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_b_in -< - string UIName = "GradingColBInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_r_id -< - string UIName = "GradingColRInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_g_id -< - string UIName = "GradingColGInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradecol_b_id -< - string UIName = "GradingColBInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* blend factor for colorization (negative values are quite fancy) */ -float gradecolfact_n -< - string UIName = "GradingColFactorNight"; - string UIWidget = "Spinner"; -> = {0.0}; -float gradecolfact_d -< - string UIName = "GradingColFactorDay"; - string UIWidget = "Spinner"; -> = {0.0}; -float gradecolfact_in -< - string UIName = "GradingColFactorInteriorNight"; - string UIWidget = "Spinner"; -> = {0.0}; -float gradecolfact_id -< - string UIName = "GradingColFactorInteriorDay"; - string UIWidget = "Spinner"; -> = {0.0}; -/* HSV grading */ -bool gradeenable3 -< - string UIName = "UseHSVGrading"; - string UIWidget = "Checkbox"; -> = {false}; -/* saturation multiplier */ -float gradesatmul_n -< - string UIName = "GradingSatMulNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradesatmul_d -< - string UIName = "GradingSatMulDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradesatmul_in -< - string UIName = "GradingSatMulInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradesatmul_id -< - string UIName = "GradingSatMulInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* saturation power */ -float gradesatpow_n -< - string UIName = "GradingSatPowNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradesatpow_d -< - string UIName = "GradingSatPowDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradesatpow_in -< - string UIName = "GradingSatPowInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradesatpow_id -< - string UIName = "GradingSatPowInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* value multiplier */ -float gradevalmul_n -< - string UIName = "GradingValMulNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradevalmul_d -< - string UIName = "GradingValMulDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradevalmul_in -< - string UIName = "GradingValMulInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradevalmul_id -< - string UIName = "GradingValMulInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* value power */ -float gradevalpow_n -< - string UIName = "GradingValPowNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradevalpow_d -< - string UIName = "GradingValPowDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradevalpow_in -< - string UIName = "GradingValPowInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float gradevalpow_id -< - string UIName = "GradingValPowInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -bool colorizeafterhsv -< - string UIName = "ColorizeAfterHSV"; - string UIWidget = "Checkbox"; -> = {false}; -/* game tinting support */ -bool tintenable -< - string UIName = "UseTint"; - string UIWidget = "Checkbox"; -> = {true}; -float tintblend -< - string UIName = "TintingBlend"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {1.0}; -bool tintbeforegrade -< - string UIName = "TintingBeforeGrading"; - string UIWidget = "Checkbox"; -> = {false}; -/* vanilla grading */ -bool vgradeenable -< - string UIName = "EnableVanillaGrading"; - string UIWidget = "Checkbox"; -> = {true}; -float vgradeblend -< - string UIName = "VanillaGradingBlend"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {1.0}; -/* debug vanilla shader registers */ -bool regdebug -< - string UIName = "DebugRegisters"; - string UIWidget = "Checkbox"; -> = {false}; -/* scale of register bars */ -float regdebugscale -< - string UIName = "DebugRegistersScale"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; \ No newline at end of file +/* + menbeffectsettings.fx : MariENB 3 base user-tweakable variables. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. + Released under the GNU GPLv3 (or later). +*/ +/* film grain */ +string str_noise = "Film Grain"; +bool ne +< + string UIName = "Enable Grain"; + string UIWidget = "Checkbox"; +> = {false}; +/* speed of grain */ +float nf +< + string UIName = "Grain Speed"; + string UIWidget = "Spinner"; +> = {2500.0}; +/* intensity of grain */ +float ni +< + string UIName = "Grain Intensity"; + string UIWidget = "Spinner"; +> = {0.05}; +/* saturation of grain */ +float ns +< + string UIName = "Grain Saturation"; + string UIWidget = "Spinner"; +> = {0.0}; +/* use two-pass grain (double the texture fetches, but looks less uniform) */ +bool np +< + string UIName = "Grain Two-Pass"; + string UIWidget = "Checkbox"; +> = {true}; +/* + blending mode for grain: + 0 -> normal + 1 -> add + 2 -> overlay + 3 -> "dark mask", a personal invention +*/ +int nb +< + string UIName = "Grain Blending Mode"; + string UIWidget = "Spinner"; + int UIMin = 0; + int UIMax = 3; +> = {1}; +/* dark mask blend mode contrast for mask image */ +float bnp +< + string UIName = "Grain Dark Mask Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.5}; +/* two-pass distortion factor (0 = look just like one-pass grain) */ +float nk +< + string UIName = "Grain Two-Pass Factor"; + string UIWidget = "Spinner"; +> = {0.04}; +/* zoom factors for each component of each noise texture */ +float nm1 +< + string UIName = "Grain Magnification 1"; + string UIWidget = "Spinner"; +> = {13.25}; +float nm2 +< + string UIName = "Grain Magnification 2"; + string UIWidget = "Spinner"; +> = {19.64}; +float nm3 +< + string UIName = "Grain Magnification 3"; + string UIWidget = "Spinner"; +> = {17.35}; +float nm11 +< + string UIName = "Grain Pass 1 Magnification 1"; + string UIWidget = "Spinner"; +> = {2.05}; +float nm12 +< + string UIName = "Grain Pass 1 Magnification 2"; + string UIWidget = "Spinner"; +> = {3.11}; +float nm13 +< + string UIName = "Grain Pass 1 Magnification 3"; + string UIWidget = "Spinner"; +> = {2.22}; +float nm21 +< + string UIName = "Grain Pass 2 Magnification 1"; + string UIWidget = "Spinner"; +> = {4.25}; +float nm22 +< + string UIName = "Grain Pass 2 Magnification 2"; + string UIWidget = "Spinner"; +> = {0.42}; +float nm23 +< + string UIName = "Grain Pass 2 Magnification 3"; + string UIWidget = "Spinner"; +> = {6.29}; +/* contrast of grain */ +float nj +< + string UIName = "Grain Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +/* tone mapping */ +string str_tonemap = "Filmic Tone Mapping"; +bool tmapenable +< + string UIName = "Enable Tonemapping"; + string UIWidget = "Checkbox"; +> = {false}; +float unA +< + string UIName = "Tonemap Shoulder Strength"; + string UIWidget = "Spinner"; +> = {0.5}; +float unB +< + string UIName = "Tonemap Linear Strengtht"; + string UIWidget = "Spinner"; +> = {1.0}; +float unC +< + string UIName = "Tonemap Linear Angle"; + string UIWidget = "Spinner"; +> = {0.2}; +float unD +< + string UIName = "Tonemap Toe Strengtht"; + string UIWidget = "Spinner"; +> = {0.75}; +float unE +< + string UIName = "Tonemap Toe Numerator"; + string UIWidget = "Spinner"; +> = {0.02}; +float unF +< + string UIName = "Tonemap Toe Denominator"; + string UIWidget = "Spinner"; +> = {0.30}; +float unW +< + string UIName = "Tonemap Linear Whitet"; + string UIWidget = "Spinner"; +> = {10.0}; +bool tmapbeforecomp +< + string UIName = "Tonemap Before Compensate"; + string UIWidget = "Checkbox"; +> = {false}; +/* overshine/bloom compensation */ +string str_comp = "Overbright Compensation"; +bool compenable +< + string UIName = "Enable Compensate"; + string UIWidget = "Checkbox"; +> = {false}; +/* compensation factor */ +float compfactor +< + string UIName = "Compensate Factor"; + string UIWidget = "Spinner"; +> = {0.0}; +/* compensation power (contrast) */ +float comppow +< + string UIName = "Compensate Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +/* compensation saturation (higher values desaturate highlights) */ +float compsat +< + string UIName = "Compensate Saturationt"; + string UIWidget = "Spinner"; +> = {1.0}; +/* Color grading */ +string str_grade = "Color Grading Suite"; +bool gradeenable1 +< + string UIName = "Enable RGB Grading"; + string UIWidget = "Checkbox"; +> = {false}; +/* color component multipliers */ +float grademul_r +< + string UIName = "Grading Intensity Red"; + string UIWidget = "Spinner"; +> = {1.0}; +float grademul_g +< + string UIName = "Grading Intensity Green"; + string UIWidget = "Spinner"; +> = {1.0}; +float grademul_b +< + string UIName = "Grading Intensity Blue"; + string UIWidget = "Spinner"; +> = {1.0}; +/* color component contrasts */ +float gradepow_r +< + string UIName = "Grading Contrast Red"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float gradepow_g +< + string UIName = "Grading Contrast Green"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float gradepow_b +< + string UIName = "Grading Contrast Blue"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +/* colorization factors */ +bool gradeenable2 +< + string UIName = "Enable Vibrance Grading"; + string UIWidget = "Checkbox"; +> = {false}; +float gradecol_r +< + string UIName = "Grading Color Red"; + string UIWidget = "Spinner"; +> = {1.0}; +float gradecol_g +< + string UIName = "Grading Color Green"; + string UIWidget = "Spinner"; +> = {1.0}; +float gradecol_b +< + string UIName = "Grading Color Blue"; + string UIWidget = "Spinner"; +> = {1.0}; +/* blend factor for colorization (negative values are quite fancy) */ +float gradecolfact +< + string UIName = "Grading Color Factor"; + string UIWidget = "Spinner"; +> = {0.0}; +/* HSV grading */ +bool gradeenable3 +< + string UIName = "Enable HSV Grading"; + string UIWidget = "Checkbox"; +> = {false}; +/* saturation multiplier */ +float gradesatmul +< + string UIName = "Grading Saturation Intensity"; + string UIWidget = "Spinner"; +> = {1.0}; +/* saturation power */ +float gradesatpow +< + string UIName = "Grading Saturation Contrast"; + string UIWidget = "Spinner"; +> = {1.0}; +/* value multiplier */ +float gradevalmul +< + string UIName = "Grading Value Intensity"; + string UIWidget = "Spinner"; +> = {1.0}; +/* value power */ +float gradevalpow +< + string UIName = "Grading Value Contrast"; + string UIWidget = "Spinner"; +> = {1.0}; +bool colorizeafterhsv +< + string UIName = "Colorize After HSV"; + string UIWidget = "Checkbox"; +> = {true}; +/* vanilla imagespace support */ +string str_vanilla = "Vanilla Processing"; +bool vanillaenable +< + string UIName = "Enable Vanilla Processing"; + string UIWidget = "Checkbox"; +> = {true}; +float vanillablend +< + string UIName = "Vanilla Blend"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {1.0}; +/* LUT grading */ +string str_lut = "RGB Lookup Table Grading"; +bool lutenable +< + string UIName = "Enable LUT Grading"; + string UIWidget = "Checkbox"; +> = {false}; +float lutblend +< + string UIName = "LUT Blend"; + string UIWidget = "Spinner"; +> = {1.0}; +#ifdef LUTMODE_LEGACY +int clut +< + string UIName = "LUT Preset"; + string UIWidget = "Spinner"; + int UIMin = 0; + int UIMax = 63; +> = {1}; +#endif +string str_dither = "Dithering"; +bool dodither +< + string UIName = "Enable Post Dither"; + string UIWidget = "Checkbox"; +> = {true}; +int dither +< + string UIName = "Dither Pattern"; + string UIWidget = "Spinner"; + int UIMin = 0; + int UIMax = 4; +> = {4}; diff --git a/enbseries/menbextrafilters.fx b/enbseries/menbextrafilters.fx index ed627e1..295933a 100644 --- a/enbseries/menbextrafilters.fx +++ b/enbseries/menbextrafilters.fx @@ -1,11 +1,9 @@ /* - menbextrafilters.fx : MariENB extra shader routines. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. + menbextrafilters.fx : MariENB 3 extra shader routines. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. Released under the GNU GPLv3 (or later). */ -#define tod ENightDayFactor -#define ind EInteriorFactor VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) { VS_OUTPUT_POST OUT; @@ -14,6 +12,10 @@ VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) return OUT; } /* helpers */ +/* photometric */ +#define luminance(x) dot(x,float3(0.2126,0.7152,0.0722)) +/* CCIR601 */ +//#define luminance(x) dot(x,float3(0.299,0.587,0.114)) float3 rgb2hsv( float3 c ) { float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0); @@ -32,8 +34,8 @@ float3 hsv2rgb( float3 c ) /* prepass */ float4 ReducePrepass( in float4 col, in float2 coord ) { - float3 hsv = rgb2hsv(col); - hsv.y *= bsaturation; + float3 hsv = rgb2hsv(col.rgb); + hsv.y = clamp(hsv.y*bsaturation,0.0,1.0); hsv.z = pow(hsv.z,bgamma); col.rgb = hsv2rgb(saturate(hsv)); if ( dither == 0 ) @@ -49,6 +51,14 @@ float4 ReducePrepass( in float4 col, in float2 coord ) col = saturate(col); return col; } +/* + CGA had seven graphic modes (320x200 modes have low/high contrast versions): + - 640x200 monochrome, which doesn't really need a palette here, as it can + be done procedurally with minimum effort. + - 320x200 black/cyan/magenta/white + - 320x200 black/green/red/brown + - 320x200 black/cyan/red/white +*/ float4 ReduceCGA( in float4 color, in float2 coord ) { float4 dac = ReducePrepass(color,coord); @@ -61,7 +71,7 @@ float4 ReduceCGA( in float4 color, in float2 coord ) int idx = 0; if ( cgapal == 1 ) { - for ( int i=0; i<4; i++ ) + [unroll] for ( int i=0; i<4; i++ ) if ( distance(dac.rgb,cga1l[i]) < dist ) { idx = i; @@ -71,7 +81,7 @@ float4 ReduceCGA( in float4 color, in float2 coord ) } else if ( cgapal == 2 ) { - for ( int i=0; i<4; i++ ) + [unroll] for ( int i=0; i<4; i++ ) if ( distance(dac.rgb,cga1h[i]) < dist ) { idx = i; @@ -81,7 +91,7 @@ float4 ReduceCGA( in float4 color, in float2 coord ) } else if ( cgapal == 3 ) { - for ( int i=0; i<4; i++ ) + [unroll] for ( int i=0; i<4; i++ ) if ( distance(dac.rgb,cga2l[i]) < dist ) { idx = i; @@ -91,7 +101,7 @@ float4 ReduceCGA( in float4 color, in float2 coord ) } else if ( cgapal == 4 ) { - for ( int i=0; i<4; i++ ) + [unroll] for ( int i=0; i<4; i++ ) if ( distance(dac.rgb,cga2h[i]) < dist ) { idx = i; @@ -101,7 +111,7 @@ float4 ReduceCGA( in float4 color, in float2 coord ) } else if ( cgapal == 5 ) { - for ( int i=0; i<4; i++ ) + [unroll] for ( int i=0; i<4; i++ ) if ( distance(dac.rgb,cga3l[i]) < dist ) { idx = i; @@ -111,7 +121,7 @@ float4 ReduceCGA( in float4 color, in float2 coord ) } else if ( cgapal == 6 ) { - for ( int i=0; i<4; i++ ) + [unroll] for ( int i=0; i<4; i++ ) if ( distance(dac.rgb,cga3h[i]) < dist ) { idx = i; @@ -121,6 +131,12 @@ float4 ReduceCGA( in float4 color, in float2 coord ) } return color; } +/* + EGA technically only had the 320x200 16-colour graphic mode, but when VGA + came out, it was possible to tweak the DAC, allowing for custom palettes. + AOS EGA is a palette based on my terminal colour scheme on Linux, which I + also use for AliceOS. +*/ float4 ReduceEGA( in float4 color, in float2 coord ) { float4 dac = ReducePrepass(color,coord); @@ -128,7 +144,7 @@ float4 ReduceEGA( in float4 color, in float2 coord ) int idx = 0; if ( egapal == 0 ) { - for ( int i=0; i<16; i++ ) + [unroll] for ( int i=0; i<16; i++ ) if ( distance(dac.rgb,stdega[i]) < dist ) { idx = i; @@ -138,7 +154,7 @@ float4 ReduceEGA( in float4 color, in float2 coord ) } else { - for ( int i=0; i<16; i++ ) + [unroll] for ( int i=0; i<16; i++ ) if ( distance(dac.rgb,aosega[i]) < dist ) { idx = i; @@ -148,24 +164,32 @@ float4 ReduceEGA( in float4 color, in float2 coord ) } return color; } +/* A two bits per channel mode that can usually fit VGA mode 13h and mode x */ float4 ReduceRGB2( in float4 color, in float2 coord ) { float4 dac = ReducePrepass(color,coord); color.rgb = trunc(dac.rgb*4.0)/4.0; return color; } +/* Effectively has 256 colours, with a magenta tint due to precision loss */ 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; } +/* 4096 colours, no actual graphics hardware existed that used 4bpc, though */ float4 ReduceRGB4( in float4 color, in float2 coord ) { float4 dac = ReducePrepass(color,coord); color.rgb = trunc(dac.rgb*16.0)/16.0; return color; } +/* + The classic 16-bit colour mode everyone from my generation would remember, + especially that subtle green tint and the banding due to lack of dithering + in most games and GPUs at that time. +*/ float4 ReduceRGB565( in float4 color, in float2 coord ) { float4 dac = ReducePrepass(color,coord); @@ -173,124 +197,45 @@ float4 ReduceRGB565( in float4 color, in float2 coord ) /float3(32.0,64.0,32.0); return color; } +/* + If you see no difference when using this, then it could be because your + own screen is already 6bpc. This is the case for a lot of LCDs, both old + and modern. 8bpc tends to be the norm on IPS, though. 10bpc is the next + step, but for now it's only used internally in video codecs for more + efficient compression with lower quality loss. I seem to recall that in + most *nix systems such as Linux it's possible to have 10bpc already with + NVIDIA, but it causes compatibility issues with a lot of programs. +*/ float4 ReduceRGB6( in float4 color, in float2 coord ) { float4 dac = ReducePrepass(color,coord); color.rgb = trunc(dac.rgb*64.0)/64.0; return color; } -/* darken borders */ -float3 Vignette( float3 res, float2 coord ) +/* Various VGA 256-colour palettes: Doom, Quake I, and the standard. */ +float4 ReduceDoom( in float4 color, in float2 coord ) { - 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); - float val = distance(coord,0.5)*2.0+dkradius; - val = saturate(val+dkbump); - return lerp(res,float3(0,0,0),pow(val,dkcurve)); + float4 dac = ReducePrepass(color,coord); + float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); + return TextureDoom.Sample(Nearest,lc); } -/* letterbox filter */ -float3 Letterbox( float3 res, float2 coord ) +float4 ReduceQuake( in float4 color, in float2 coord ) { - if ( abs(2.0*coord.y-1.0) > boxv ) return float3(0,0,0); - return res; + float4 dac = ReducePrepass(color,coord); + float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); + return TextureQuake.Sample(Nearest,lc); } -/* Fuzzy */ -float3 FilmGrain( float3 res, float2 coord ) +float4 ReduceVGA( in float4 color, in float2 coord ) { - float ts = Timer.x*nf; - float2 tcs = coord.xy; - 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)/256.0; - 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 ) return res+nt*ni; - if ( nb == 2 ) - { - float3 tcol = res; - tcol.r = (tcol.r<0.5)?(2.0*tcol.r*(0.5+(nt.r*ni))) - :(1.0-2.0*(1.0-tcol.r)*(1.0-((0.5+(nt.r*ni))))); - tcol.g = (tcol.g<0.5)?(2.0*tcol.g*(0.5+(nt.g*ni))) - :(1.0-2.0*(1.0-tcol.g)*(1.0-((0.5+(nt.g*ni))))); - tcol.b = (tcol.b<0.5)?(2.0*tcol.b*(0.5+(nt.b*ni))) - :(1.0-2.0*(1.0-tcol.b)*(1.0-((0.5+(nt.b*ni))))); - return tcol; - } - if ( nb == 3 ) - { - float bn = 1.0-saturate((res.r+res.g+res.b)/3.0); - bn = pow(bn,bnp); - float3 nn = saturate(nt*bn); - float3 tcol = res; - tcol.r = (tcol.r>0.5)?(2.0*tcol.r*(0.5+(nn.r*ni))) - :(1.0-2.0*(1.0-tcol.r)*(1.0-((0.5+(nn.r*ni))))); - tcol.g = (tcol.g>0.5)?(2.0*tcol.g*(0.5+(nn.g*ni))) - :(1.0-2.0*(1.0-tcol.g)*(1.0-((0.5+(nn.g*ni))))); - tcol.b = (tcol.b>0.5)?(2.0*tcol.b*(0.5+(nn.b*ni))) - :(1.0-2.0*(1.0-tcol.b)*(1.0-((0.5+(nn.b*ni))))); - return tcol; - } - return lerp(res,nt,ni); -} -/* CINEMATIC!!! */ -float4 PS_PoopyFilm( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( ne ) res.rgb = FilmGrain(res.rgb,coord); - if ( dkenable ) res.rgb = Vignette(res.rgb,coord); - if ( boxenable ) res.rgb = Letterbox(res.rgb,coord); - res.a = 1.0; - return res; -} -/* REVOLUTIONARY ULTRA-AWESOME FILTER */ -float4 PS_Aberration( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( !usecurve ) return res; - float3 eta = float3(1+chromaab*0.09,1+chromaab*0.06,1+chromaab*0.03); - float2 mid = coord-0.5; - float2 rc = eta.r*(1.0-chromaab*0.1)*mid+0.5; - float2 gc = eta.g*(1.0-chromaab*0.1)*mid+0.5; - float2 bc = eta.b*(1.0-chromaab*0.1)*mid+0.5; - float3 ab = float3(tex2D(SamplerColor,rc).r,tex2D(SamplerColor,gc).g, - tex2D(SamplerColor,bc).b); - res.rgb = ab; - res.a = 1.0; - return res; + float4 dac = ReducePrepass(color,coord); + float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); + return TextureVGA.Sample(Nearest,lc); } /* Retro rockets */ -float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +float4 PS_Retro( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target { float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); + float4 res = TextureColor.Sample(Linear,coord); if ( !useblock ) return res; float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); float4 tcol; @@ -310,68 +255,275 @@ float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR ncoord = (-0.5/sresl)*(rresl/bresl)+ncoord/sresl+0.5; ncoord = floor(ncoord*bresl)/bresl; if ( bresx <= 0 || bresy <= 0 ) ncoord = coord; - tcol = tex2D(SamplerColor,ncoord); + tcol = TextureColor.Sample(sBorder,ncoord); if ( paltype == 0 ) res = ReduceCGA(tcol,(coord*rresl)/sresl); else if ( paltype == 1 ) res = ReduceEGA(tcol,(coord*rresl)/sresl); else if ( paltype == 2 ) res = ReduceRGB2(tcol,(coord*rresl)/sresl); else if ( paltype == 3 ) res = ReduceRGB323(tcol,(coord*rresl)/sresl); - else if ( paltype == 4 ) res = ReduceRGB4(tcol,(coord*rresl)/sresl); - else if ( paltype == 5 ) res = ReduceRGB565(tcol,(coord*rresl)/sresl); - else if ( paltype == 6 ) res = ReduceRGB6(tcol,(coord*rresl)/sresl); + else if ( paltype == 4 ) res = ReduceVGA(tcol,(coord*rresl)/sresl); + else if ( paltype == 5 ) res = ReduceDoom(tcol,(coord*rresl)/sresl); + else if ( paltype == 6 ) res = ReduceQuake(tcol,(coord*rresl)/sresl); + else if ( paltype == 7 ) res = ReduceRGB4(tcol,(coord*rresl)/sresl); + else if ( paltype == 8 ) res = ReduceRGB565(tcol,(coord*rresl)/sresl); + else if ( paltype == 9 ) res = ReduceRGB6(tcol,(coord*rresl)/sresl); else res = tcol; - if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 ) - res *= 0; res.a = 1.0; return res; } -technique PostProcess +/* ASCII art (more like CP437 art) */ +float4 PS_ASCII( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !asciienable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 fresl = float2(FONT_WIDTH,FONT_HEIGHT); + float2 cresl = float2(GLYPH_WIDTH,GLYPH_HEIGHT); + float2 bscl = floor(bresl/cresl); + /* + Here I use the "cheap" method, based on the overall luminance of each + glyph, rather than attempt to search for the best fitting glyph for + each cell. If you want to know why, take a look at the ASCII filter + bundled with the Dolphin emulator, and be prepared for the resulting + seconds per frame it runs at. The calculations needed for such a filter + are completely insane even for the highest-end GPUs. + */ + float3 col = TextureColor.Sample(Linear, + floor(bscl*coord)/bscl).rgb; + int lum = clamp(luminance(col)*FONT_LEVELS,0,FONT_LEVELS); + float2 itx = floor(coord*bresl); + float2 blk = floor(itx/cresl)*cresl; + float2 ofs = itx-blk; + ofs.y += lum*cresl.y; + ofs /= fresl; + float gch = TextureFont.Sample(Font,ofs).x; + if ( gch < 0.5 ) res.rgb = res.rgb*asciiblend; + else + { + if ( asciimono ) res.rgb = 1.0; + else res.rgb = col; + } + return res; +} +float4 PS_ChromaKey( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !maskenable ) return res; + if ( TextureDepth.Sample(Linear,coord).x > maskd ) + return float4(maskr,maskg,maskb,1.0); + return res; +} +/* 2x2 RGBI dot matrix, not even close to anything that exists IRL but meh */ +float4 PS_DotMatrix( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !dotenable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + bresl.xy *= 1.0/(dotsize*2.0); + float4 dac = float4(res.r*0.5,res.g*0.5,res.b*0.5, + (res.r+res.g+res.b)/6.0); + /* + There are two types of CRTs: aperture grille and shadow mask. + The former is blurry and has scanlines (rather big ones, even), but + is cheap to emulate; while the latter is the one most known for its + crisp, square pixels with minimal distortion. Most individuals into + this whole "retro graphics" stuff prefer aperture grille, which + looks like shit, then again, that's the sort of visual quality they + want. The main issue with shadow mask CRTs is that it's impossible + to accurately emulate them unless done on a screen with a HUGE + resolution. After all, the subpixels need to be clearly visible, and + if on top of it you add curvature distortion, you need to reduce + moire patterns that will inevitably show up at low resolutions. + + It would be more desirable to eventually have flat panels that can + display arbitrary resolutions using a form of scaling that preserves + square pixels with unnoticeable distortion (typically, with nearest + neighbour you'd get some pixels that are bigger/smaller than others + if the upscale resolution isn't an integer multiple of the real + resolution. + + This 2x2 RGBI thing is a rather naïve filter I made many years ago, + it looks unlike any real CRT, but scales well. Its only problem is + moire patterns when using the default size of 2x2. + */ + float4 dots = TextureDots.Sample(sWrap,coord*bresl)*dac; + float3 tcol = pow((dots.rgb+dots.a),dotpow)*dotmult; + res.rgb = res.rgb*(1-dotblend)+tcol*dotblend; + return res; +} +/* that's right, CRT curvature */ +float4 PS_Curvature( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !curveenable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*curvesoft; + float3 eta = float3(1+chromaab*0.009,1+chromaab*0.006,1+chromaab + *0.003); + 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 = 1+r2*lensdist*0.01; + 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; + int i,j; + float4 idist = float4(0,0,0,0); + /* + sticking a 5x5 gaussian blur with a tweakable radius in here to + attempt to reduce moire patterns in some cases. Supersampling would + be more useful for that, but ENB sucks ass through a crazy straw in + that aspect, so it would be more desirable to use GeDoSaTo (I sure + hope I can port all my stuff to it one day, at least the damn thing + is FOSS). + */ + [unroll] for ( i=-2; i<=2; i++ ) [unroll] for ( j=-2; j<=2; j++ ) + { + idist += gauss3[abs(i)]*gauss3[abs(j)] + *float4(TextureColor.Sample(sBorder, + rcoord+bof*float2(i,j)).r,TextureColor.Sample(sBorder, + gcoord+bof*float2(i,j)).g,TextureColor.Sample(sBorder, + bcoord+bof*float2(i,j)).b,TextureColor.Sample(sBorder, + float2(x,y)+bof*float2(i,j)).a); + } + res.rgb = idist.rgb; + return res; +} +/* Why am I doing this */ +float4 PS_Blur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !bssblurenable ) return res; + float2 ofs[16] = + { + float2(1.0,1.0), float2(-1.0,-1.0), + float2(-1.0,1.0), float2(1.0,-1.0), + + float2(1.0,0.0), float2(-1.0,0.0), + float2(0.0,1.0), float2(0.0,-1.0), + + float2(1.41,0.0), float2(-1.41,0.0), + float2(0.0,1.41), float2(0.0,-1.41), + + float2(1.41,1.41), float2(-1.41,-1.41), + float2(-1.41,1.41), float2(1.41,-1.41) + }; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bssblurradius; + int i; + [unroll] for ( i=0; i<16; i++ ) + res += TextureColor.Sample(Linear,coord+ofs[i]*bof); + res /= 17.0; + res.a = 1.0; + return res; +} +float4 PS_Sharp( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !bsssharpenable ) return res; + float2 ofs[8] = + { + float2(1.0,1.0), float2(-1.0,-1.0), + float2(-1.0,1.0), float2(1.0,-1.0), + + float2(1.41,1.41), float2(-1.41,-1.41), + float2(-1.41,1.41), float2(1.41,-1.41) + }; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bsssharpradius; + float4 tcol = res; + int i; + [unroll] for ( i=0; i<8; i++ ) + tcol += TextureColor.Sample(Linear,coord+ofs[i]*bof); + tcol /= 9.0; + float4 orig = res; + res = orig*(1.0+dot(orig.rgb-tcol.rgb,0.333333)*bsssharpamount); + float rg = clamp(pow(orig.b,3.0),0.0,1.0); + res = lerp(res,orig,rg); + res.a = 1.0; + return res; +} +float4 PS_Shift( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Linear,coord); + if ( !bssshiftenable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bssshiftradius; + res.g = TextureColor.Sample(Linear,coord).g; + res.r = TextureColor.Sample(Linear,coord+float2(0,-bof.y)).r; + res.b = TextureColor.Sample(Linear,coord+float2(0,bof.y)).b; + res.a = 1.0; + return res; +} +technique11 MariENB { pass p0 { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_Aberration(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_Blur())); } } -technique PostProcess2 +technique11 MariENB1 { pass p0 { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_PoopyFilm(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_Sharp())); } } -technique PostProcess3 +technique11 MariENB2 { pass p0 { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_Retro(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_Shift())); } -} \ No newline at end of file +} +technique11 MariENB3 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_ChromaKey())); + } +} +technique11 MariENB4 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_Retro())); + } +} +technique11 MariENB5 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_ASCII())); + } +} +technique11 MariENB6 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_DotMatrix())); + } +} +technique11 MariENB7 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Pass())); + SetPixelShader(CompileShader(ps_5_0,PS_Curvature())); + } +} diff --git a/enbseries/menbextrainternals.fx b/enbseries/menbextrainternals.fx index 7b87dc9..b46c496 100644 --- a/enbseries/menbextrainternals.fx +++ b/enbseries/menbextrainternals.fx @@ -1,7 +1,7 @@ /* - menbextrainternals.fx : MariENB extra internal variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. + menbextrainternals.fx : MariENB 3 extra internal variables. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. Released under the GNU GPLv3 (or later). */ /* @@ -138,61 +138,84 @@ static const float3 aosega[16] = float3(d(256),d(256),d(256)), }; #undef d +/* gauss stuff */ +float gauss3[3] = +{ + 0.444814, 0.239936, 0.037657 +}; /* standard stuff */ float4 ScreenSize; -float4 Timer; -float ENightDayFactor; -float EInteriorFactor; +float4 Weather; +float4 TimeOfDay1; +float4 TimeOfDay2; /* samplers and textures */ -texture2D texColor; -texture2D texNoise2 +Texture2D TextureColor; +Texture2D TextureDepth; +Texture2D TextureFont < - string ResourceName = "menbnoise1.png"; + string ResourceName = "menbvgaluma.png"; >; -texture2D texNoise3 +Texture2D TextureDots < - string ResourceName = "menbnoise2.png"; + string ResourceName = "menbdots.png"; >; -sampler2D SamplerColor = sampler_state +Texture2D TextureDoom +< + string ResourceName = "menbdoomlut.png"; +>; +Texture2D TextureQuake +< + string ResourceName = "menbquakelut.png"; +>; +Texture2D TextureVGA +< + string ResourceName = "menbvgalut.png"; +>; +SamplerState Nearest { - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Mirror; - AddressV = Mirror; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; + Filter = MIN_MAG_MIP_POINT; + AddressU = Clamp; + AddressV = Clamp; + MaxLod = 0; + MipLodBias = 0; }; -sampler2D SamplerNoise2 = sampler_state +SamplerState Linear { - Texture = ; - MinFilter = LINEAR; - MagFilter = POINT; - MipFilter = NONE; + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Clamp; + AddressV = Clamp; + MaxLod = 0; + MipLodBias = 0; +}; +SamplerState sBorder +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Border; + AddressV = Border; + BorderColor = float4(0.0,0.0,0.0,1.0); + MaxLod = 0; + MipLodBias = 0; +}; +SamplerState sWrap +{ + Filter = MIN_MAG_MIP_LINEAR; AddressU = Wrap; AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; + MaxLod = 0; + MipLodBias = 0; }; -sampler2D SamplerNoise3 = sampler_state +SamplerState Font { - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; + Filter = MIN_LINEAR_MAG_MIP_POINT; AddressU = Wrap; AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; + MaxLod = 0; + MipLodBias = 0; }; /* whatever */ struct VS_OUTPUT_POST { - float4 vpos : POSITION; + float4 vpos : SV_POSITION; float2 txcoord : TEXCOORD0; }; struct VS_INPUT_POST diff --git a/enbseries/menbextrasettings.fx b/enbseries/menbextrasettings.fx index 754ea97..0e32fbb 100644 --- a/enbseries/menbextrasettings.fx +++ b/enbseries/menbextrasettings.fx @@ -1,226 +1,14 @@ /* - menbextrasettings.fx : MariENB extra user-tweakable variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. + menbextrasettings.fx : MariENB 3 extra user-tweakable variables. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa for Fallout 4. Released under the GNU GPLv3 (or later). */ -/* Border darkening */ -bool dkenable -< - string UIName = "UseDark"; - string UIWidget = "Checkbox"; -> = {false}; -/* radius of darkening (relative to screen width) */ -float dkradius_n -< - string UIName = "DarkRadiusNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float dkradius_d -< - string UIName = "DarkRadiusDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float dkradius_in -< - string UIName = "DarkRadiusInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float dkradius_id -< - string UIName = "DarkRadiusInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -/* falloff of darkening */ -float dkcurve_n -< - string UIName = "DarkCurveNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dkcurve_d -< - string UIName = "DarkCurveDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dkcurve_in -< - string UIName = "DarkCurveInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dkcurve_id -< - string UIName = "DarkCurveInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* bump of darkening */ -float dkbump_n -< - string UIName = "DarkBumpNight"; - string UIWidget = "Spinner"; -> = {-1.0}; -float dkbump_d -< - string UIName = "DarkBumpDay"; - string UIWidget = "Spinner"; -> = {-1.0}; -float dkbump_in -< - string UIName = "DarkBumpInteriorNight"; - string UIWidget = "Spinner"; -> = {-1.0}; -float dkbump_id -< - string UIName = "DarkBumpInteriorDay"; - string UIWidget = "Spinner"; -> = {-1.0}; -/* Letterbox */ -bool boxenable -< - string UIName = "UseBox"; - string UIWidget = "Checkbox"; -> = {false}; -/* vertical factor */ -float boxv -< - string UIName = "BoxVertical"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.80}; -/* film grain */ -bool ne -< - string UIName = "UseGrain"; - string UIWidget = "Checkbox"; -> = {false}; -/* speed of grain */ -float nf -< - string UIName = "GrainFrequency"; - string UIWidget = "Spinner"; -> = {2500.0}; -/* intensity of grain */ -float ni -< - string UIName = "GrainIntensity"; - string UIWidget = "Spinner"; -> = {0.05}; -/* saturation of grain */ -float ns -< - string UIName = "GrainSaturation"; - string UIWidget = "Spinner"; -> = {0.0}; -/* use two-pass grain (double the texture fetches, but looks less uniform) */ -bool np -< - string UIName = "GrainTwoPass"; - string UIWidget = "Checkbox"; -> = {true}; -/* - blending mode for grain: - 0 -> normal - 1 -> add - 2 -> overlay - 3 -> "dark mask", a personal invention -*/ -int nb -< - string UIName = "GrainBlend"; - string UIWidget = "Spinner"; - int UIMin = 0; - int UIMax = 3; -> = {1}; -/* dark mask blend mode contrast for mask image */ -float bnp -< - string UIName = "GrainDarkMaskPower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* two-pass distortion factor (0 = look just like one-pass grain) */ -float nk -< - string UIName = "GrainTwoPassFactor"; - string UIWidget = "Spinner"; -> = {0.04}; -/* zoom factors for each component of each noise texture */ -float nm1 -< - string UIName = "GrainMagnification1"; - string UIWidget = "Spinner"; -> = {13.25}; -float nm2 -< - string UIName = "GrainMagnification2"; - string UIWidget = "Spinner"; -> = {19.64}; -float nm3 -< - string UIName = "GrainMagnification3"; - string UIWidget = "Spinner"; -> = {17.35}; -float nm11 -< - string UIName = "GrainPass1Magnification1"; - string UIWidget = "Spinner"; -> = {2.05}; -float nm12 -< - string UIName = "GrainPass1Magnification2"; - string UIWidget = "Spinner"; -> = {3.11}; -float nm13 -< - string UIName = "GrainPass1Magnification3"; - string UIWidget = "Spinner"; -> = {2.22}; -float nm21 -< - string UIName = "GrainPass2Magnification1"; - string UIWidget = "Spinner"; -> = {4.25}; -float nm22 -< - string UIName = "GrainPass2Magnification2"; - string UIWidget = "Spinner"; -> = {0.42}; -float nm23 -< - string UIName = "GrainPass2Magnification3"; - string UIWidget = "Spinner"; -> = {6.29}; -/* contrast of grain */ -float nj -< - string UIName = "GrainPower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {2.5}; -/* use curvature + chromatic aberration filter */ -bool usecurve -< - string UIName = "UseCurve"; - string UIWidget = "Checkbox"; -> = {false}; -/* this is a stupid filter and you should feel bad for using it */ -float chromaab -< - string UIName = "CurveChromaAberration"; - string UIWidget = "Spinner"; -> = {0.05}; /* BlockGFX filter, I'm proud of it */ +string str_block = "BlockGFX Suite"; bool useblock < - string UIName = "UseBlockGFX"; + string UIName = "Enable Block GFX"; string UIWidget = "Checkbox"; > = {false}; /* @@ -231,47 +19,51 @@ bool useblock */ float bresx < - string UIName = "EmulatedResX"; + string UIName = "Emulated Resolution Width"; string UIWidget = "Spinner"; float UIMin = 0.0; > = {0.5}; float bresy < - string UIName = "EmulatedResY"; + string UIName = "Emulated Resolution Height"; string UIWidget = "Spinner"; float UIMin = 0.0; > = {0.5}; /* zooming factors (<=0 for stretch) */ float sresx < - string UIName = "ZoomedResX"; + string UIName = "Zoom Factor X"; string UIWidget = "Spinner"; float UIMin = 0.0; > = {0.0}; float sresy < - string UIName = "ZoomedResY"; + string UIName = "Zoom Factor Y"; string UIWidget = "Spinner"; float UIMin = 0.0; > = {0.0}; /* palette type: + -2 : Standard VGA 256-color palette -1 : disable 0 : CGA (320x200 4-color, or 640x200 monochrome) 1 : EGA (320x200, 16 colors) 2 : RGB2 (64-color quarter VGA palette, used in AOS) 3 : RGB323 (8-bit RGB, I don't think this was a real thing) - 4 : RGB4 (4bpc, I also don't think this was ever used in real hardware) - 5 : RGB565 (ol' 16-bit "true color") - 6 : RGB6 (typical screens incapable of 8bpc) + 4 : VGA (256 colors, standard palette) + 5 : Doom (256 colors, does not cover a lot) + 6 : Quake I (256 colors, covers even less) + 7 : RGB4 (4bpc, I also don't think this was ever used in real hardware) + 8 : RGB565 (ol' 16-bit "true color") + 9 : RGB6 (typical screens incapable of 8bpc) */ int paltype < - string UIName = "PaletteType"; + string UIName = "Palette Type"; string UIWidget = "Spinner"; int UIMin = -1; - int UIMax = 6; -> = {2}; + int UIMax = 9; +> = {1}; /* CGA palette to use: 0 : black, white. @@ -284,7 +76,7 @@ int paltype */ int cgapal < - string UIName = "CGAPalette"; + string UIName = "CGA Palette"; string UIWidget = "Spinner"; int UIMin = 0; int UIMax = 6; @@ -296,7 +88,7 @@ int cgapal */ int egapal < - string UIName = "EGAPalette"; + string UIName = "EGA Palette"; string UIWidget = "Spinner"; int UIMin = 0; int UIMax = 1; @@ -312,7 +104,7 @@ int egapal */ int dither < - string UIName = "DitherMode"; + string UIName = "Dithering Pattern"; string UIWidget = "Spinner"; int UIMin = -1; int UIMax = 4; @@ -320,26 +112,178 @@ int dither /* gamma modifier for base color, lower values raise midtones and viceversa */ float bgamma < - string UIName = "GammaMod"; + string UIName = "Contrast Modifier"; string UIWidget = "Spinner"; float UIMin = 0.0; -> = {0.65}; +> = {0.35}; +/* saturation modifier for base color, helps with limited palettes */ +float bsaturation +< + string UIName = "Saturation Modifier"; + string UIWidget = "Spinner"; +> = {1.1}; /* base brightness bump for the dither grid */ float bdbump < - string UIName = "DitherBump"; + string UIName = "Dither Offset"; string UIWidget = "Spinner"; > = {-0.1}; /* range multiplier for the dither grid */ float bdmult < - string UIName = "DitherMultiplier"; + string UIName = "Dither Range"; string UIWidget = "Spinner"; float UIMin = 0.0; -> = {0.3}; -/* saturation modifier for base color, helps with limited palettes */ -float bsaturation +> = {0.25}; +/* ASCII art filter */ +string str_ascii = "Luma ASCII Art Filter"; +bool asciienable < - string UIName = "SaturationMod"; + string UIName = "Enable ASCII"; + string UIWidget = "Checkbox"; +> = {false}; +bool asciimono +< + string UIName = "ASCII Monochrome"; + string UIWidget = "Checkbox"; +> = {true}; +float asciiblend +< + string UIName = "ASCII Blend"; string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.0}; +string str_mask = "Depth Chroma Key"; +bool maskenable +< + string UIName = "Enable Chroma Key"; + string UIWidget = "Checkbox"; +> = {false}; +float maskr +< + string UIName = "Chroma Key Red"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.0}; +float maskg +< + string UIName = "Chroma Key Green"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; > = {1.0}; +float maskb +< + string UIName = "Chroma Key Blue"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.0}; +float maskd +< + string UIName = "Chroma Key Depth"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.5}; +string str_dot = "RGBI Dot Matrix"; +bool dotenable +< + string UIName = "Enable Dot Matrix"; + string UIWidget = "Checkbox"; +> = {false}; +int dotsize +< + string UIName = "Dot Size"; + string UIWidget = "Spinner"; + int UIMin = 1; +> = {1}; +float dotblend +< + string UIName = "Dot Blend"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.4}; +float dotmult +< + string UIName = "Dot Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float dotpow +< + string UIName = "Dot Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +string str_curve = "Lens Curvature"; +bool curveenable +< + string UIName = "Enable Curvature"; + string UIWidget = "Checkbox"; +> = {false}; +float chromaab +< + string UIName = "Curve Chromatic Aberration"; + string UIWidget = "Spinner"; +> = {0.0}; +float lenszoom +< + string UIName = "Curve Zooming"; + string UIWidget = "Spinner"; +> = {50.0}; +float lensdist +< + string UIName = "Curve Distortion"; + string UIWidget = "Spinner"; +> = {0.0}; +float curvesoft +< + string UIName = "Curve Sampling Soften"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +/* BlurSharpShift, some people are obsessed with this nonsense */ +string str_bss = "BlurSharpShift"; +bool bssblurenable +< + string UIName = "Enable Blur"; + string UIWidget = "Checkbox"; +> = {false}; +float bssblurradius +< + string UIName = "Blur Sampling Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.25}; +bool bsssharpenable +< + string UIName = "Enable Sharp"; + string UIWidget = "Checkbox"; +> = {false}; +float bsssharpradius +< + string UIName = "Sharp Sampling Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float bsssharpamount +< + string UIName = "Sharpening Amount"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {6.0}; +bool bssshiftenable +< + string UIName = "Enable Shift"; + string UIWidget = "Checkbox"; +> = {false}; +float bssshiftradius +< + string UIName = "Shift Sampling Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.75}; diff --git a/enbseries/menbfrost.png b/enbseries/menbfrost.png new file mode 100644 index 0000000..9cf9f2b Binary files /dev/null and b/enbseries/menbfrost.png differ diff --git a/enbseries/menbfrostbump.png b/enbseries/menbfrostbump.png new file mode 100644 index 0000000..7ee8022 Binary files /dev/null and b/enbseries/menbfrostbump.png differ diff --git a/enbseries/menbglobaldefs.fx b/enbseries/menbglobaldefs.fx new file mode 100644 index 0000000..1d0c585 --- /dev/null +++ b/enbseries/menbglobaldefs.fx @@ -0,0 +1,50 @@ +/* + menbglobaldefs.fx : MariENB 3 global shared code. + (C)2015 Marisa Kirisame, UnSX Team. + Part of MariENB 3, the personal ENB of Marisa for Fallout 4. + Released under the GNU GPLv3 (or later). +*/ +/* + TODO time of day interpolation + guessed formula, not used yet since it's a lot of work to make separate + variables for now. +*/ +//#define tod(x) (x##_dw*TimeOfDay1.x+x##_sr*TimeOfDay1.y+x##_dy*TimeOfDay1.z\ +// +x##_ss*TimeOfDay1.w+x##_ds*TimeOfDay2.x+x##_nt*TimeOfDay2.y) +#define tod(x) x +/* weather macros */ +#define WT_TEMPERATE 0.0 +#define WT_HOT 1.0 +#define WT_COLD 2.0 +#define weatherfactor(id) ((Weather.x==id)?(Weather.y==id)\ + ?(1.0):(Weather.z):(Weather.y==id)\ + ?(1.0-Weather.z):(0.0)) +/* asset definitions */ +/* ascii art font */ +#define FONT_WIDTH 8 +#define FONT_HEIGHT 4096 +#define GLYPH_WIDTH 8 +#define GLYPH_HEIGHT 16 +#define FONT_LEVELS 255 +/* + aspect correction for certain overlays + uncommented : the textures are 1:1 and must be corrected + commented : the textures are 16:9 or whatever ratio you use +*/ +#define ASPECT_LENSDIRT +/* texture sizes */ +#define NOISESIZE 256.0 +#define HEATSIZE 1024.0 +#define FROSTSIZE 1024.0 +/* LUT mode (use only one) - The 256px option was discarded for size reasons */ +//#define LUTMODE_LEGACY +//#define LUTMODE_16 +#define LUTMODE_64 +/* some textures can be provided as DDS rather than PNG to save space */ +//#define HEAT_DDS +#define LENSDIRT_DDS +//#define FROST_DDS +//#define FROSTBUMP_DDS +/* experimental features (TODO) */ +//#define USE_BOKEH +//#define MULTIPASS_RMAO \ No newline at end of file diff --git a/enbseries/menbheat.png b/enbseries/menbheat.png new file mode 100644 index 0000000..aa29697 Binary files /dev/null and b/enbseries/menbheat.png differ diff --git a/enbseries/menblens.dds b/enbseries/menblens.dds new file mode 100644 index 0000000..d79494b Binary files /dev/null and b/enbseries/menblens.dds differ diff --git a/enbseries/menblut16.png b/enbseries/menblut16.png new file mode 100644 index 0000000..3ac426d Binary files /dev/null and b/enbseries/menblut16.png differ diff --git a/enbseries/menblut64.png b/enbseries/menblut64.png new file mode 100644 index 0000000..1c58d5f Binary files /dev/null and b/enbseries/menblut64.png differ diff --git a/enbseries/menblutpreset.png b/enbseries/menblutpreset.png new file mode 100644 index 0000000..0f54c92 Binary files /dev/null and b/enbseries/menblutpreset.png differ diff --git a/enbseries/menblutpresetnames.txt b/enbseries/menblutpresetnames.txt new file mode 100644 index 0000000..dfc15ec --- /dev/null +++ b/enbseries/menblutpresetnames.txt @@ -0,0 +1,69 @@ +sikkmod + +00 adrenaline +01 base +02 c2_alienvesselgreenblue +03 c2_alnvsl_streets +04 c2_battery_park_ab1_pier +05 c2_battery_park_ab2_park +06 c2_battery_park_spear +07 c2_battery_park_streets +08 c2_black_control +09 c2_centralpark +10 c2_centralstation_streets +11 c2_collided_buildings +12 c2_collided_hotel +13 c2_convoy +14 c2_cxp_360 +15 c2_cxp_pc +16 c2_desaturate +17 c2_downtown2 +18 c2_downtown_streets +19 c2_flash_blindness +20 c2_hive_ab3_crater +21 c2_liberty_test11 +22 c2_madisonsquare_rapids +23 c2_pier_2 +24 c2_pier_3 +25 c2_pier_sunset +26 c2_pier +27 c2_pipeline +28 c2_rooftops_inside +29 c2_rooftops_outside +30 c2_rooftops +31 c2_roosevelt_park +32 c2_spear_streets_spore2 +33 c2_spear_streets_spore +34 c2_spear_streets +35 c2_terminal_5 +36 c2_timesquare_blackout +37 c2_timesquare_global +38 cold +39 dry +40 neutral +41 riddick2 +42 sepia +43 udk_ce2 +44 udk_dawn02 +45 udk_day05 +46 udk_dm_deck01 +47 udk_dm_deck02 +48 udk_dm_deck03 +49 udk_necropolis01 +50 udk_night03 +51 udk_stormy +52 warm + +marienb + +53 mk_dust_1 +54 mk_dust_2 +55 mk_red +56 mk_blue +57 mk_brown +58 mk_flame +59 mk_golden +60 mk_dust_3 +61 mk_dust_4 +62 mk_desat_1 +63 mk_desat_2 \ No newline at end of file diff --git a/enbseries/menbnoise1.png b/enbseries/menbnoise1.png index fb4bedf..3e915eb 100644 Binary files a/enbseries/menbnoise1.png and b/enbseries/menbnoise1.png differ diff --git a/enbseries/menbnoise2.png b/enbseries/menbnoise2.png index 3e57ebb..450769f 100644 Binary files a/enbseries/menbnoise2.png and b/enbseries/menbnoise2.png differ diff --git a/enbseries/menbprepassfilters.fx b/enbseries/menbprepassfilters.fx deleted file mode 100644 index 601e4e6..0000000 --- a/enbseries/menbprepassfilters.fx +++ /dev/null @@ -1,519 +0,0 @@ -/* - menbprepassfilters.fx : MariENB prepass shader routines. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -#define tod ENightDayFactor -#define ind EInteriorFactor -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; -} -/* these are znear/zfar values for Skyrim, but MAY match Fallout too */ -float depthlinear( float2 coord ) -{ - float zNear = 0.0509804; - float zFar = 3098.0392; - float z = tex2D(SamplerDepth,coord).x; - return (2*zNear)/(zFar+zNear-z*(zFar-zNear)); -} -/* That "luma sharpen" thingy, added just because someone might want it */ -float3 Sharpen( float3 res, float2 coord ) -{ - float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - if ( fixedx>0 ) bresl.x = fixedx; - if ( fixedy>0 ) bresl.y = fixedy; - float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*sharpradius; - float4 crawling = tex2D(SamplerColor,coord+float2(0,-1)*bof); - crawling += tex2D(SamplerColor,coord+float2(-1,0)*bof); - crawling += tex2D(SamplerColor,coord+float2(1,0)*bof); - crawling += tex2D(SamplerColor,coord+float2(0,1)*bof); - crawling *= 0.25; - float3 inmyskin = res-crawling.rgb; - float thesewounds = dot(inmyskin,0.33); - thesewounds = clamp(thesewounds,-sharpclamp,sharpclamp); - float3 theywillnotheal = res+thesewounds*sharpblend; - return theywillnotheal; -} -/* New and improved edge detection, generally useful for contour shading */ -float3 Edge( float3 res, float2 coord ) -{ - float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - if ( fixedx>0 ) bresl.x = fixedx; - if ( fixedy>0 ) bresl.y = fixedy; - float edgefadepow = lerp(lerp(edgefadepow_n,edgefadepow_d,tod), - lerp(edgefadepow_in,edgefadepow_id,tod),ind); - float edgefademult = lerp(lerp(edgefademult_n,edgefademult_d,tod), - lerp(edgefademult_in,edgefademult_id,tod),ind); - float2 bof = float2(1.0/bresl.x,1.0/bresl.y); - float mdx = 0, mdy = 0, mud = 0; - /* this reduces texture fetches by half, big difference */ - float3x3 depths; - int i, j; - for ( i=-1; i<=1; i++ ) for ( j=-1; j<=1; j++ ) - depths[i+1][j+1] = depthlinear(coord+float2(i,j)*bof); - for ( i=0; i<=2; i++ ) for ( j=0; j<=2; j++ ) - mdx += GX[i][j]*depths[i][j]; - for ( i=0; i<=2; i++ ) for ( j=0; j<=2; j++ ) - mdy += GY[i][j]*depths[i][j]; - mud = pow(mdx*mdx+mdy*mdy,0.5); - float fade = 1.0-tex2D(SamplerDepth,coord).x; - mud *= saturate(pow(fade,edgefadepow)*edgefademult); - mud = saturate(pow(mud,edgepow)*edgemult); - if ( edgeview ) return mud; - return res-mud; -} -/* the pass that happens before everything else */ -float4 PS_FirstPass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( sharpenable ) res.rgb = Sharpen(res.rgb,coord); - if ( edgeenable ) res.rgb = Edge(res.rgb,coord); - return res; -} -/* Crappy SSAO */ -float3 pseudonormal( float dep, float2 coord ) -{ - float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 ofs1 = float2(0,1.0/bresl.y); - float2 ofs2 = float2(1.0/bresl.x,0); - 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_SSAOPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - float ssaofadepow = lerp(lerp(ssaofadepow_n,ssaofadepow_d,tod), - lerp(ssaofadepow_in,ssaofadepow_id,tod),ind); - float ssaofademult = lerp(lerp(ssaofademult_n,ssaofademult_d,tod), - lerp(ssaofademult_in,ssaofademult_id,tod),ind); - if ( !ssaoenable ) return res; - float depth = tex2D(SamplerDepth,coord).x; - float ldepth = depthlinear(coord); - if ( depth >= cutoff*0.000001 ) - { - res.a = 1.0; - return res; - } - float2 bresl; - if ( (fixedx > 0) && (fixedy > 0) ) bresl = float2(fixedx,fixedy); - else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float3 normal = pseudonormal(depth,coord); - float2 nc = coord*(bresl/256.0); - float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaoradius; - float2 nc2 = tex2D(SamplerNoise3,nc+48000.0*Timer.x).xy; - float3 rnormal = tex2D(SamplerNoise3,nc2).xyz*2.0-1.0; - rnormal.z = -abs(rnormal.z); - normal = normalize(normal+rnormal*ssaonoise); - float occ = 0.0; - int i; - float3 sample; - float sdepth, rangecheck; - float sclamp = ssaocfact/1000.0; - int maxsmp; - if ( ssaohq ) maxsmp = 64; - else maxsmp = 16; - for ( i=0; i0)?fixedx:ScreenSize.x; - float bof = (1.0/bresl)*ssaobradius; - float isd, sd, ds, sw, tw = 0; - res.a = 0.0; - int i; - isd = tex2D(SamplerDepth,coord).x; - for ( i=-15; i<=15; i++ ) - { - sd = tex2D(SamplerDepth,coord+float2(i,0)*bof).x; - ds = abs(isd-sd)*ssaobfact+0.5; - sw = 1.0/(ds+1.0); - sw *= gauss16[abs(i)]; - tw += sw; - res.a += sw*tex2D(SamplerColor,coord+float2(i,0)*bof).a; - } - res.a /= tw; - return res; -} -float4 PS_SSAOBlurV( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( !ssaoenable ) return res; - if ( !ssaobenable ) - { - if ( ssaodebug ) return saturate(res.a); - return res*res.a; - } - float bresl = (fixedy>0)?fixedy:(ScreenSize.x*ScreenSize.w); - float bof = (1.0/bresl)*ssaobradius; - float isd, sd, ds, sw, tw = 0; - res.a = 0.0; - int i; - isd = tex2D(SamplerDepth,coord).x; - for ( i=-15; i<=15; i++ ) - { - sd = tex2D(SamplerDepth,coord+float2(0,i)*bof).x; - ds = abs(isd-sd)*ssaobfact+0.5; - sw = 1.0/(ds+1.0); - sw *= gauss16[abs(i)]; - tw += sw; - res.a += sw*tex2D(SamplerColor,coord+float2(0,i)*bof).a; - } - res.a /= tw; - if ( ssaodebug ) return saturate(res.a); - res *= res.a; - return res; -} -/* Focus */ -float4 PS_ReadFocus( VS_OUTPUT_POST IN ) : COLOR -{ - if ( dofdisable ) return 0.0; - float focusmax = lerp(lerp(focusmax_n,focusmax_d,tod),lerp(focusmax_in, - focusmax_id,tod),ind); - float cfocus = min(tex2D(SamplerDepth,0.5).x,focusmax*0.001); - if ( !focuscircle ) return cfocus; - float focusradius = lerp(lerp(focusradius_n,focusradius_d,tod), - lerp(focusradius_in,focusradius_id,tod),ind); - float focusmix = lerp(lerp(focusmix_n,focusmix_d,tod),lerp(focusmix_in, - focusmix_id,tod),ind); - float step = (1.0/3.0); - float mfocus; - float2 coord; - float2 bof = float2(1.0,ScreenSize.w)*focusradius*0.001; - coord.x = 0.5+sin(0.0)*bof.x; - coord.y = 0.5+cos(0.0)*bof.y; - mfocus = step*min(tex2D(SamplerDepth,coord).x,focusmax*0.001); - coord.x = 0.5+sin(2.0*pi*step)*bof.x; - coord.y = 0.5+cos(2.0*pi*step)*bof.y; - mfocus += step*min(tex2D(SamplerDepth,coord).x,focusmax*0.001); - coord.x = 0.5+sin(4.0*pi*step)*bof.x; - coord.y = 0.5+cos(4.0*pi*step)*bof.y; - mfocus += step*min(tex2D(SamplerDepth,coord).x,focusmax*0.001); - cfocus = (1.0-focusmix)*cfocus+focusmix*mfocus; - return cfocus; -} -float4 PS_WriteFocus( VS_OUTPUT_POST IN ) : COLOR -{ - if ( dofdisable ) return 0.0; - return max(lerp(tex2D(SamplerPrev,0.5).x,tex2D(SamplerCurr,0.5).x, - saturate(FadeFactor)),0.0); -} -/* Depth of Field */ -float4 PS_DoFPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - if ( dofdisable ) return tex2D(SamplerColor,coord); - float dofpow = lerp(lerp(dofpow_n,dofpow_d,tod),lerp(dofpow_in, - dofpow_id,tod),ind); - float dofmult = lerp(lerp(dofmult_n,dofmult_d,tod),lerp(dofmult_in, - dofmult_id,tod),ind); - float doffixedfocuspow = lerp(lerp(doffixedfocuspow_n, - doffixedfocuspow_d,tod),lerp(doffixedfocuspow_in, - doffixedfocuspow_id,tod),ind); - float doffixedfocusmult = lerp(lerp(doffixedfocusmult_n, - doffixedfocusmult_d,tod),lerp(doffixedfocusmult_in, - doffixedfocusmult_id,tod),ind); - float doffixedfocusblend = lerp(lerp(doffixedfocusblend_n, - doffixedfocusblend_d,tod),lerp(doffixedfocusblend_in, - doffixedfocusblend_id,tod),ind); - float doffixedunfocuspow = lerp(lerp(doffixedunfocuspow_n, - doffixedunfocuspow_d,tod),lerp(doffixedunfocuspow_in, - doffixedunfocuspow_id,tod),ind); - float doffixedunfocusmult = lerp(lerp(doffixedunfocusmult_n, - doffixedunfocusmult_d,tod),lerp(doffixedunfocusmult_in, - doffixedunfocusmult_id,tod),ind); - float doffixedunfocusblend = lerp(lerp(doffixedunfocusblend_n, - doffixedunfocusblend_d,tod),lerp(doffixedunfocusblend_in, - doffixedunfocusblend_id,tod),ind); - float2 bresl; - if ( (fixedx > 0) && (fixedy > 0) ) bresl = float2(fixedx,fixedy); - else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float2 bof = float2(1.0/bresl.x,1.0/bresl.y); - float dep = tex2D(SamplerDepth,coord).x; - float foc = tex2D(SamplerFocus,coord).x; - float dfc = abs(dep-foc); - float dff = abs(dep); - float dfu = dff; - /* - Change power of dof based on field of view. Works only in Skyrim, - Boris is just such a fucking assbutt that he doesn't update the - FO3/FNV version to be feature-equal to this, inventing pathetic - excuses. - */ - if ( dofrelfov ) - { - float relfovfactor = lerp(lerp(relfovfactor_n,relfovfactor_d, - tod),lerp(relfovfactor_in,relfovfactor_id,tod),ind); - float relfov = (FieldOfView-fovdefault)/fovdefault; - dofpow = max(0,dofpow+relfov*relfovfactor); - } - dfc = saturate(pow(dfc,dofpow)*dofmult); - dff = saturate(pow(dff,doffixedfocuspow)*doffixedfocusmult); - dfu = saturate(pow(dfu,doffixedunfocuspow)*doffixedunfocusmult); - dfc *= lerp(1.0,dff,doffixedfocusblend); - dfc += lerp(0.0,dfu,doffixedunfocusblend); - dfc = saturate(dfc); - float4 res = tex2D(SamplerColor,coord); - res.a = dfc; - return res; -} -float4 PS_DoFBlurH( VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = IN.txcoord.xy; - if ( dofdisable ) return tex2D(SamplerColor,coord); - float dfc = tex2D(SamplerColor,coord).a; - if ( dofdebug ) return dfc; - float bresl = (fixedx>0)?fixedx:ScreenSize.x; - float bof = (1.0/bresl)*dofbradius; - float4 res = float4(0,0,0,0); - if ( dfc <= 0.0 ) - { - res = tex2D(SamplerColor,coord); - res.a = dfc; - return res; - } - int i; - if ( dofbilateral ) - { - float isd, sd, ds, sw, tw = 0; - isd = dfc; - for ( i=-7; i<=7; i++ ) - { - sd = tex2D(SamplerColor,coord+float2(i,0)*bof*dfc).a; - ds = abs(isd-sd)*dofbfact+0.5; - sw = 1.0/(ds+1.0); - sw *= gauss8[abs(i)]; - tw += sw; - res += sw*tex2D(SamplerColor,coord+float2(i,0)*bof - *dfc); - } - res /= tw; - } - else - { - for ( i=-7; i<=7; i++ ) - res += gauss8[abs(i)]*tex2D(SamplerColor,coord - +float2(i,0)*bof*dfc); - } - res.a = dfc; - return res; -} -float4 PS_DoFBlurV( VS_OUTPUT_POST IN, float2 vPos : VPOS) : COLOR -{ - float2 coord = IN.txcoord.xy; - if ( dofdisable ) return tex2D(SamplerColor,coord); - float dfc = tex2D(SamplerColor,coord).a; - if ( dofdebug ) return dfc; - float bresl = (fixedy>0)?fixedy:(ScreenSize.x*ScreenSize.w); - float bof = (1.0/bresl)*dofbradius; - float4 res = float4(0,0,0,0); - if ( dfc <= 0.0 ) - { - res = tex2D(SamplerColor,coord); - res.a = dfc; - return res; - } - int i; - if ( dofbilateral ) - { - float isd, sd, ds, sw, tw = 0; - isd = dfc; - for ( i=-7; i<=7; i++ ) - { - sd = tex2D(SamplerColor,coord+float2(0,i)*bof*dfc).a; - ds = abs(isd-sd)*dofbfact+0.5; - sw = 1.0/(ds+1.0); - sw *= gauss8[abs(i)]; - tw += sw; - res += sw*tex2D(SamplerColor,coord+float2(0,i)*bof - *dfc); - } - res /= tw; - } - else - { - for ( i=-7; i<=7; i++ ) - res += gauss8[abs(i)]*tex2D(SamplerColor,coord - +float2(0,i)*bof*dfc); - } - res.a = 1.0; - return 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_FirstPass(); - 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_SSAOPrepass(); - 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_SSAOBlurH(); - 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_SSAOBlurV(); - 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_DoFPrepass(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess6 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_DoFBlurH(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess7 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_DoFBlurV(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} diff --git a/enbseries/menbprepassinternals.fx b/enbseries/menbprepassinternals.fx deleted file mode 100644 index 39cfeb7..0000000 --- a/enbseries/menbprepassinternals.fx +++ /dev/null @@ -1,184 +0,0 @@ -/* - menbprepassinternals.fx : MariENB prepass internal variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* mathematical constants */ -static const float pi = 3.1415926535898; -/* edge detect factors */ -static const float3x3 GX = -{ - -1, 0, 1, - -2, 0, 2, - -1, 0, 1 -}; -static const float3x3 GY = -{ - 1, 2, 1, - 0, 0, 0, - -1,-2,-1 -}; -/* gaussian kernels */ -/* radius: 8, std dev: 3 */ -static const float gauss8[8] = -{ - 0.134598, 0.127325, 0.107778, 0.081638, - 0.055335, 0.033562, 0.018216, 0.008847 -}; -/* radius: 16, std dev: 6 */ -static const float gauss16[16] = -{ - 0.067142, 0.066216, 0.063513, 0.059252, - 0.053763, 0.047446, 0.040723, 0.033996, - 0.027603, 0.021798, 0.016742, 0.012507, - 0.009087, 0.006421, 0.004413, 0.002950 - -}; -/* SSAO samples */ -static const float3 ssao_lq[16] = -{ - float3( 0.0174, 0.0599, 0.0037),float3(-0.0470,-0.1116,-0.0310), - float3(-0.1375, 0.0369,-0.1220),float3(-0.0373,-0.1082, 0.2222), - float3( 0.0731, 0.1548,-0.2614),float3(-0.3485, 0.0200, 0.1369), - float3( 0.2177,-0.2827,-0.2531),float3(-0.3315,-0.2890, 0.2379), - float3( 0.1429,-0.5418, 0.0491),float3(-0.4260,-0.3304,-0.3162), - float3( 0.3721,-0.4619, 0.3477),float3(-0.4609,-0.0396,-0.5903), - float3(-0.6294, 0.1593,-0.4885),float3(-0.8068,-0.1182, 0.3173), - float3( 0.6586, 0.6182,-0.2510),float3( 0.2338,-0.9721, 0.0167) -}; -static const float3 ssao_hq[64] = -{ - float3( 0.0000,-0.0002, 0.0002),float3(-0.0005, 0.0006, 0.0006), - float3(-0.0003,-0.0018,-0.0012),float3( 0.0025, 0.0001,-0.0030), - float3( 0.0032,-0.0031,-0.0042),float3(-0.0075, 0.0032, 0.0034), - float3(-0.0017, 0.0107, 0.0050),float3(-0.0113,-0.0022,-0.0106), - float3( 0.0113,-0.0000,-0.0162),float3(-0.0121,-0.0156,-0.0143), - float3( 0.0145,-0.0099, 0.0238),float3(-0.0041, 0.0258,-0.0236), - float3( 0.0261,-0.0282,-0.0150),float3(-0.0392, 0.0259, 0.0093), - float3( 0.0079, 0.0122,-0.0530),float3(-0.0173, 0.0024,-0.0600), - float3( 0.0164,-0.0483,-0.0487),float3( 0.0253, 0.0749, 0.0030), - float3( 0.0702,-0.0024, 0.0532),float3(-0.0587, 0.0343,-0.0701), - float3(-0.0284, 0.0949, 0.0422),float3(-0.0782,-0.0518, 0.0719), - float3( 0.0891,-0.0295, 0.0887),float3(-0.1176,-0.0770, 0.0034), - float3( 0.0911, 0.0979,-0.0736),float3(-0.0492,-0.1109,-0.1119), - float3( 0.0881,-0.1122,-0.1064),float3(-0.0978,-0.0594,-0.1534), - float3( 0.1226,-0.0478,-0.1577),float3( 0.1713, 0.1376,-0.0033), - float3(-0.1098, 0.1317,-0.1601),float3( 0.0153, 0.0431,-0.2458), - float3( 0.0413,-0.2602,-0.0358),float3( 0.1160, 0.2073,-0.1524), - float3(-0.0891,-0.2844,-0.0254),float3(-0.2356, 0.1856, 0.1007), - float3(-0.1331,-0.2241,-0.2093),float3(-0.0946,-0.0943, 0.3262), - float3(-0.2076, 0.2990,-0.0735),float3(-0.3388,-0.1854,-0.0584), - float3(-0.2950, 0.2562, 0.1256),float3( 0.1245, 0.3253, 0.2533), - float3(-0.3334, 0.0732, 0.2954),float3(-0.0878,-0.0338, 0.4632), - float3( 0.3257,-0.1494, 0.3406),float3( 0.1496, 0.4734, 0.1426), - float3(-0.4816,-0.1498,-0.1911),float3(-0.4407,-0.2691,-0.2231), - float3(-0.5739,-0.0862,-0.0829),float3(-0.1811,-0.4338, 0.3893), - float3(-0.4059, 0.2597,-0.4135),float3( 0.5669,-0.1450, 0.3057), - float3(-0.3459, 0.0907,-0.5852),float3(-0.0378,-0.4889,-0.5161), - float3(-0.1609,-0.1172, 0.7112),float3(-0.1584, 0.2215,-0.7156), - float3(-0.0601,-0.6410,-0.4634),float3(-0.1877,-0.4821, 0.6379), - float3(-0.5357, 0.6528, 0.0957),float3(-0.5073,-0.3124, 0.6462), - float3(-0.1505, 0.6792,-0.5842),float3( 0.1781,-0.9197, 0.0557), - float3(-0.5309,-0.3378,-0.7369),float3(-0.7460, 0.2721,-0.6078) -}; -/* standard stuff */ -float4 ScreenSize; -float ENightDayFactor; -float EInteriorFactor; -float FadeFactor; -float4 Timer; -float FieldOfView; -/* samplers and textures */ -texture2D texColor; -texture2D texDepth; -texture2D texNoise3 -< - string ResourceName = "menbnoise2.png"; ->; -texture2D texFocus; -texture2D texCurr; -texture2D texPrev; -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 SamplerNoise3 = 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 = NONE; - 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/enbseries/menbprepasssettings.fx b/enbseries/menbprepasssettings.fx deleted file mode 100644 index 466eb4e..0000000 --- a/enbseries/menbprepasssettings.fx +++ /dev/null @@ -1,561 +0,0 @@ -/* - menbprepasssettings.fx : MariENB prepass user-tweakable variables. - (C)2013-2015 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the GNU GPLv3 (or later). -*/ -/* fixed resolution, keeps blur filters at a consistent internal resolution */ -int fixedx -< - string UIName = "_FixedResolutionX"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {1920}; -int fixedy -< - string UIName = "_FixedResolutionY"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {1080}; -float cutoff -< - string UIName = "DepthCutoff"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1000000.0; -> = {999949.0}; -/* circle (triangle, actually) average focus */ -bool focuscircle -< - string UIName = "FocusCircleEnable"; - string UIWidget = "Checkbox"; -> = {true}; -/* radius of the focus point triangle */ -float focusradius_n -< - string UIName = "FocusCircleRadiusNight"; - string UIWidget = "Spinner"; -> = {12.5}; -float focusradius_d -< - string UIName = "FocusCircleRadiusDay"; - string UIWidget = "Spinner"; -> = {12.5}; -float focusradius_in -< - string UIName = "FocusCircleRadiusInteriorNight"; - string UIWidget = "Spinner"; -> = {12.5}; -float focusradius_id -< - string UIName = "FocusCircleRadiusInteriorDay"; - string UIWidget = "Spinner"; -> = {12.5}; -/* mix factor with sample at screen center */ -float focusmix_n -< - string UIName = "FocusCircleMixNight"; - string UIWidget = "Spinner"; -> = {0.25}; -float focusmix_d -< - string UIName = "FocusCircleMixDay"; - string UIWidget = "Spinner"; -> = {0.25}; -float focusmix_in -< - string UIName = "FocusCircleMixInteriorNight"; - string UIWidget = "Spinner"; -> = {0.25}; -float focusmix_id -< - string UIName = "FocusCircleMixInteriorDay"; - string UIWidget = "Spinner"; -> = {0.25}; -/* maximum focus depth */ -float focusmax_n -< - string UIName = "FocusMaxNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float focusmax_d -< - string UIName = "FocusMaxDay"; - string UIWidget = "Spinner"; -> = {1.0}; -float focusmax_in -< - string UIName = "FocusMaxInteriorNight"; - string UIWidget = "Spinner"; -> = {1.0}; -float focusmax_id -< - string UIName = "FocusMaxInteriorDay"; - string UIWidget = "Spinner"; -> = {1.0}; -/* dof filter */ -/* dof multiplier (makes unfocused depths more blurry) */ -float dofmult_n -< - string UIName = "DoFMultNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float dofmult_d -< - string UIName = "DoFMultDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float dofmult_in -< - string UIName = "DoFMultInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float dofmult_id -< - string UIName = "DoFMultInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -/* dof power (falloff, kinda) */ -float dofpow_n -< - string UIName = "DoFPowNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {4.0}; -float dofpow_d -< - string UIName = "DoFPowDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {4.0}; -float dofpow_in -< - string UIName = "DoFPowInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {4.0}; -float dofpow_id -< - string UIName = "DoFPowInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {4.0}; -/* fixed focused depth factors */ -float doffixedfocusmult_n -< - string UIName = "DoFFixedFocusedMultNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocusmult_d -< - string UIName = "DoFFixedFocusedMultDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocusmult_in -< - string UIName = "DoFFixedFocusedMultInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocusmult_id -< - string UIName = "DoFFixedFocusedMultInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocuspow_n -< - string UIName = "DoFFixedFocusedPowNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocuspow_d -< - string UIName = "DoFFixedFocusedPowDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocuspow_in -< - string UIName = "DoFFixedFocusedPowInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocuspow_id -< - string UIName = "DoFFixedFocusedPowInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedfocusblend_n -< - string UIName = "DoFFixedFocusedBlendNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float doffixedfocusblend_d -< - string UIName = "DoFFixedFocusedBlendDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float doffixedfocusblend_in -< - string UIName = "DoFFixedFocusedBlendInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float doffixedfocusblend_id -< - string UIName = "DoFFixedFocusedBlendInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -/* fixed unfocused depth factors */ -float doffixedunfocusmult_n -< - string UIName = "DoFFixedUnfocusedMultNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedunfocusmult_d -< - string UIName = "DoFFixedUnfocusedMultDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedunfocusmult_in -< - string UIName = "DoFFixedUnfocusedMultInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedunfocusmult_id -< - string UIName = "DoFFixedUnfocusedMultInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedunfocuspow_n -< - string UIName = "DoFFixedUnfocusedPowNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float doffixedunfocuspow_d -< - string UIName = "DoFFixedUnfocusedPowDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float doffixedunfocuspow_in -< - string UIName = "DoFFixedUnfocusedPowInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float doffixedunfocuspow_id -< - string UIName = "DoFFixedUnfocusedPowInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1000.0}; -float doffixedunfocusblend_n -< - string UIName = "DoFFixedUnfocusedBlendNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float doffixedunfocusblend_d -< - string UIName = "DoFFixedUnfocusedBlendDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float doffixedunfocusblend_in -< - string UIName = "DoFFixedUnfocusedBlendInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -float doffixedunfocusblend_id -< - string UIName = "DoFFixedUnfocusedBlendInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.0}; -/* disable depth of field */ -bool dofdisable -< - string UIName = "DoFDisable"; - string UIWidget = "Checkbox"; -> = {false}; -/* use bilateral filtering for sharper dof blurring */ -bool dofbilateral -< - string UIName = "DoFBilateral"; - string UIWidget = "Checkbox"; -> = {true}; -float dofbfact -< - string UIName = "DoFBilateralFactor"; - string UIWidget = "Spinner"; -> = {5.0}; -float dofbradius -< - string UIName = "DoFBlurRadius"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -bool dofrelfov -< - string UIName = "DoFRelativeToFoV"; - string UIWidget = "Checkbox"; -> = {false}; -float fovdefault -< - string UIName = "DoFRelativeDefaultFOV"; - string UIWidget = "Spinner"; - float UIMin = 1.0; - float UIMax = 180.0; -> = {75.0}; -float relfovfactor_n -< - string UIName = "DoFRelativeFactorNight"; - string UIWidget = "Spinner"; -> = {0.0}; -float relfovfactor_d -< - string UIName = "DoFRelativeFactorDay"; - string UIWidget = "Spinner"; -> = {0.0}; -float relfovfactor_in -< - string UIName = "DoFRelativeFactorInteriorNight"; - string UIWidget = "Spinner"; -> = {0.0}; -float relfovfactor_id -< - string UIName = "DoFRelativeFactorInteriorDay"; - string UIWidget = "Spinner"; -> = {0.0}; -bool dofdebug -< - string UIName = "DebugDepth"; - string UIWidget = "Checkbox"; -> = {false}; -/* enable edge detect filters */ -bool edgeenable -< - string UIName = "EdgeEnable"; - string UIWidget = "Checkbox"; -> = {false}; -/* use "edge vision" instead of contour filter (just because it looks fancy) */ -bool edgeview -< - string UIName = "EdgeView"; - string UIWidget = "Checkbox"; -> = {true}; -/* factors */ -float edgefadepow_n -< - string UIName = "EdgeFadePowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float edgefadepow_d -< - string UIName = "EdgeFadePowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float edgefadepow_in -< - string UIName = "EdgeFadePowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float edgefadepow_id -< - string UIName = "EdgeFadePowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float edgefademult_n -< - string UIName = "EdgeFadeMultiplierNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {5000.0}; -float edgefademult_d -< - string UIName = "EdgeFadeMultiplierDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {5000.0}; -float edgefademult_in -< - string UIName = "EdgeFadeMultiplierInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {5000.0}; -float edgefademult_id -< - string UIName = "EdgeFadeMultiplierInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {5000.0}; -float edgepow -< - string UIName = "EdgePower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float edgemult -< - string UIName = "EdgeMultiplier"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {2.0}; -/* ssao filter */ -bool ssaoenable -< - string UIName = "SSAOEnable"; - string UIWidget = "Checkbox"; -> = {false}; -float ssaoradius -< - string UIName = "SSAORadius"; - string UIWidget = "Spinner"; -> = {128.0}; -float ssaonoise -< - string UIName = "SSAONoise"; - string UIWidget = "Spinner"; -> = {1.0}; -float ssaofadepow_n -< - string UIName = "SSAOFadePowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float ssaofadepow_d -< - string UIName = "SSAOFadePowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float ssaofadepow_in -< - string UIName = "SSAOFadePowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float ssaofadepow_id -< - string UIName = "SSAOFadePowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float ssaofademult_n -< - string UIName = "SSAOFadeMultiplierNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {15000.0}; -float ssaofademult_d -< - string UIName = "SSAOFadeMultiplierDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {15000.0}; -float ssaofademult_in -< - string UIName = "SSAOFadeMultiplierInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {15000.0}; -float ssaofademult_id -< - string UIName = "SSAOFadeMultiplierInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {15000.0}; -float ssaomult -< - string UIName = "SSAOMultiplier"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float ssaopow -< - string UIName = "SSAOPower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {2.5}; -float ssaoblend -< - string UIName = "SSAOBlend"; - string UIWidget = "Spinner"; -> = {1.0}; -bool ssaobenable -< - string UIName = "SSAOBlurEnable"; - string UIWidget = "Checkbox"; -> = {true}; -float ssaobfact -< - string UIName = "SSAOBilateralFactor"; - string UIWidget = "Spinner"; -> = {800000.0}; -float ssaocfact -< - string UIName = "SSAOClampFactor"; - string UIWidget = "Spinner"; -> = {0.5}; -float ssaobradius -< - string UIName = "SSAOBlurRadius"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -bool ssaohq -< - string UIName = "SSAOHighQualitySampling"; - string UIWidget = "Checkbox"; -> = {false}; -bool ssaodebug -< - string UIName = "DebugSSAO"; - string UIWidget = "Checkbox"; -> = {false}; -/* luma sharpen because of reasons */ -bool sharpenable -< - string UIName = "SharpenEnable"; - string UIWidget = "Checkbox"; -> = {false}; -float sharpradius -< - string UIName = "SharpenRadius"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float sharpclamp -< - string UIName = "SharpenClamp"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float sharpblend -< - string UIName = "SharpenBlending"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; \ No newline at end of file diff --git a/enbseries/menbquakelut.png b/enbseries/menbquakelut.png new file mode 100644 index 0000000..44f172a Binary files /dev/null and b/enbseries/menbquakelut.png differ diff --git a/enbseries/menbvgaluma.png b/enbseries/menbvgaluma.png new file mode 100644 index 0000000..ff6cccf Binary files /dev/null and b/enbseries/menbvgaluma.png differ diff --git a/enbseries/menbvgalut.png b/enbseries/menbvgalut.png new file mode 100644 index 0000000..9e752b2 Binary files /dev/null and b/enbseries/menbvgalut.png differ