From 8b64feccc8547b6856c8658211048d64fafa18b1 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Sun, 7 Apr 2019 17:10:34 +0200 Subject: [PATCH] Alpha 6 for Fallout 3 --- MariENB_LICENSE.txt | 13 - enbseries.ini | 983 ++++-------------------------- enbseries/COPYING | 674 ++++++++++++++++++++ enbseries/effect.txt | 24 +- enbseries/effect.txt.ini | 66 +- enbseries/enbbloom.fx | 24 +- enbseries/enbbloom.fx.ini | 96 +-- enbseries/enbeffect.fx | 24 +- enbseries/enbeffect.fx.ini | 240 ++++---- enbseries/enbeffectprepass.fx | 24 +- enbseries/enbeffectprepass.fx.ini | 108 ++-- enbseries/enblens.fx | 152 ++--- enbseries/enbsunsprite.fx | 98 +-- enbseries/menbbloomfilters.fx | 362 ++++++----- enbseries/menbbloominternals.fx | 276 +++++---- enbseries/menbbloomsettings.fx | 494 +++++++++++---- enbseries/menbcgafont.png | Bin 0 -> 4000 bytes enbseries/menbdrawutil.fx | 162 +++++ enbseries/menbeffectfilters.fx | 608 +++++++++++------- enbseries/menbeffectinternals.fx | 209 +++---- enbseries/menbeffectsettings.fx | 935 ++++++++++++++-------------- enbseries/menbextrafilters.fx | 764 ++++++++++++----------- enbseries/menbextrainternals.fx | 402 ++++++------ enbseries/menbextrasettings.fx | 631 ++++++++++--------- enbseries/menbprepassfilters.fx | 978 +++++++++++++++-------------- enbseries/menbprepassinternals.fx | 335 +++++----- enbseries/menbprepasssettings.fx | 972 ++++++++++++++++------------- 27 files changed, 5285 insertions(+), 4369 deletions(-) delete mode 100644 MariENB_LICENSE.txt create mode 100644 enbseries/COPYING create mode 100644 enbseries/menbcgafont.png create mode 100644 enbseries/menbdrawutil.fx diff --git a/MariENB_LICENSE.txt b/MariENB_LICENSE.txt deleted file mode 100644 index 9042c25..0000000 --- a/MariENB_LICENSE.txt +++ /dev/null @@ -1,13 +0,0 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/enbseries.ini b/enbseries.ini index 3d2c85b..5283e37 100644 --- a/enbseries.ini +++ b/enbseries.ini @@ -1,899 +1,162 @@ -; enbseries.ini : ENB configuration file. -; (C)2013-2015 Marisa Kirisame, UnSX Team. -; Part of MariENB, the personal ENB of Marisa. -; Released under the WTFPL. - [GLOBAL] -AdditionalConfigFile= UseEffect=true [EFFECT] UseOriginalPostProcessing=false UseOriginalObjectsProcessing=false EnableBloom=true -EnableAdaptation=false -EnableAmbientOcclusion=true -EnableDepthOfField=true -EnableDetailedShadow=true -EnableSunRays=true -EnableSkyLighting=false -EnableImageBasedLighting=false -EnableReflection=true -EnableSoftParticles=true -EnableParticleLights=true -EnableSunGlare=false -EnableSubSurfaceScattering=true EnableLens=false -EnableWater=true -EnableUnderwater=true -EnableCloudShadows=true -EnableVolumetricRays=true -EnableProceduralSun=true -EnableMist=true +EnableAdaptation=false +EnableDepthOfField=true +EnableAmbientOcclusion=true +EnableDetailedShadow=false +EnableSunRays=true +EnableSunGlare=false + +[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 -BlueShiftAmountDay=1.0 -BlueShiftAmountNight=1.0 -AmountSunrise=1.0 -AmountSunset=1.0 -AmountInteriorDay=1.0 -AmountInteriorNight=1.0 -BlueShiftAmountSunrise=1.0 -BlueShiftAmountSunset=1.0 -BlueShiftAmountInteriorDay=1.0 -BlueShiftAmountInteriorNight=1.0 -IgnoreWeatherSystem=true +AmountInterior=1.0 +BlueShiftAmountDay=0.0 +BlueShiftAmountNight=0.0 +BlueShiftAmountInterior=0.0 -[CAMERAFX] -LenzReflectionIntensityDay=0.0 -LenzReflectionIntensityNight=0.0 -LenzReflectionIntensityInterior=0.0 -LenzReflectionPowerDay=0.0 -LenzReflectionPowerNight=0.0 -LenzReflectionPowerInterior=0.0 -LenzReflectionIntensitySunrise=0.0 -LenzReflectionIntensitySunset=0.0 -LenzReflectionIntensityInteriorDay=0.0 -LenzReflectionIntensityInteriorNight=0.0 -LenzReflectionPowerSunrise=1.0 -LenzReflectionPowerSunset=1.0 -LenzReflectionPowerInteriorDay=1.0 -LenzReflectionPowerInteriorNight=1.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 -UseComplexIndirectLighting=true SamplingQuality=1 +SamplingPrecision=1 SamplingRange=0.3 -FadeFogRangeDay=0.0 -FadeFogRangeNight=3.0 -FadeFogRangeInterior=0.0 +FadeFogRangeDay=2.5 +FadeFogRangeNight=3.5 SizeScale=0.5 SourceTexturesScale=0.5 FilterQuality=1 -AOAmount=1.13 -ILAmount=0.59 -UseComplexAmbientOcclusion=true -UseAmbientIndirectLighting=true -SamplingPrecision=1 -FadeFogRange=6.85 -FilterType=0 -AOAmountInterior=1.13 -ILAmountInterior=0.58 -AOIntensity=1.14 -AOIntensityInterior=1.16 +AOAmount=1.0 +AOAmountInterior=1.0 +ILAmount=1.0 +ILAmountInterior=1.0 +AOIntensity=1.0 +AOIntensityInterior=1.0 AOType=0 AOMixingType=0 AOMixingTypeInterior=0 -UseOldType=false EnableDenoiser=true -EnableSupersampling=false -EnableComplexFilter=true -ILType=0 - -[NIGHTDAY] -DetectorDefaultDay=false -DetectorLevelDay=0.75 -DetectorLevelNight=0.25 -DetectorLevelCurve=1.0 -DetectorOldVersion=false - -[ADAPTATION] -ForceMinMaxValues=true -AdaptationSensitivity=0.87 -AdaptationTime=2.01 -AdaptationMin=1.0 -AdaptationMax=9.0 [ENVIRONMENT] -DirectLightingIntensityDay=2.05 -DirectLightingIntensityNight=1.3 -DirectLightingIntensityInterior=1.014688 -DirectLightingCurveDay=1.19 -DirectLightingCurveNight=2.15 -DirectLightingCurveInterior=1.25 -DirectLightingDesaturationDay=0.04 -DirectLightingDesaturationNight=0.3 -DirectLightingDesaturationInterior=0.0 -SpecularAmountMultiplierDay=1.08 -SpecularAmountMultiplierNight=1.28 -SpecularAmountMultiplierInterior=1.0 -SpecularPowerMultiplierDay=1.011 -SpecularPowerMultiplierNight=1.241 -SpecularPowerMultiplierInterior=1.0 -SpecularFromLightDay=0.0 -SpecularFromLightNight=0.0 -SpecularFromLightInterior=0.0 -AmbientLightingIntensityDay=0.36 -AmbientLightingIntensityNight=0.33 -AmbientLightingIntensityInterior=0.914 -AmbientLightingCurveDay=2.3 -AmbientLightingCurveNight=2.59 -AmbientLightingCurveInterior=0.75 -AmbientLightingDesaturationDay=0.58 -AmbientLightingDesaturationNight=0.26 +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 -PointLightingIntensityDay=1.44 -PointLightingIntensityNight=1.97 -PointLightingIntensityInterior=0.825 -PointLightingCurveDay=0.51875 -PointLightingCurveNight=0.83 -PointLightingCurveInterior=0.825 -PointLightingDesaturationDay=0.0 -PointLightingDesaturationNight=0.0 -PointLightingDesaturationInterior=0.0 -FogColorMultiplierDay=0.6 -FogColorMultiplierNight=0.16 -FogColorMultiplierInterior=0.5 -FogColorCurveDay=0.83 -FogColorCurveNight=1.06 -FogColorCurveInterior=1.0 -ColorPowDay=1.0 -ColorPowNight=1.0 -ColorPowInterior=0.9 -DirectLightingIntensitySunrise=2.3 -DirectLightingIntensitySunset=2.4 -DirectLightingIntensityInteriorDay=1.47 -DirectLightingIntensityInteriorNight=1.05 -DirectLightingCurveSunrise=1.71 -DirectLightingCurveSunset=1.910001 -DirectLightingCurveInteriorDay=1.27 -DirectLightingCurveInteriorNight=2.23 -DirectLightingDesaturationSunrise=0.02 -DirectLightingDesaturationSunset=0.02 -DirectLightingDesaturationInteriorDay=0.08 -DirectLightingDesaturationInteriorNight=0.24 -SpecularAmountMultiplierSunrise=1.15 -SpecularAmountMultiplierSunset=1.22 -SpecularAmountMultiplierInteriorDay=1.12 -SpecularAmountMultiplierInteriorNight=1.19 -SpecularPowerMultiplierSunrise=0.961 -SpecularPowerMultiplierSunset=0.891 -SpecularPowerMultiplierInteriorDay=0.951 -SpecularPowerMultiplierInteriorNight=1.141 -SpecularFromLightSunrise=0.0 -SpecularFromLightSunset=0.0 -SpecularFromLightInteriorDay=0.0 -SpecularFromLightInteriorNight=0.0 -AmbientLightingIntensitySunrise=0.55 -AmbientLightingIntensitySunset=0.67 -AmbientLightingIntensityInteriorDay=0.39 -AmbientLightingIntensityInteriorNight=0.28 -AmbientLightingCurveSunrise=2.51 -AmbientLightingCurveSunset=2.69 -AmbientLightingCurveInteriorDay=2.37 -AmbientLightingCurveInteriorNight=2.55 -AmbientLightingDesaturationSunrise=0.42 -AmbientLightingDesaturationSunset=0.34 -AmbientLightingDesaturationInteriorDay=0.56 -AmbientLightingDesaturationInteriorNight=0.42 -AmbientColorFilterAmountSunrise=0.24 -AmbientColorFilterAmountDay=0.13 -AmbientColorFilterAmountSunset=0.26 -AmbientColorFilterAmountNight=0.22 -AmbientColorFilterAmountInteriorDay=0.11 -AmbientColorFilterAmountInteriorNight=0.05 -AmbientColorFilterTopSunrise=0.804, 0.675, 0.098 -AmbientColorFilterTopDay=0.745, 0.702, 0.369 -AmbientColorFilterTopSunset=0.788, 0.294, 0.0275 -AmbientColorFilterTopNight=0.00784, 0.447, 0.737 -AmbientColorFilterTopInteriorDay=0.373, 0.396, 0.451 -AmbientColorFilterTopInteriorNight=0.369, 0.435, 0.565 -AmbientColorFilterMiddleSunrise=0.227, 0.137, 0.0471 -AmbientColorFilterMiddleDay=0.235, 0.224, 0.141 -AmbientColorFilterMiddleSunset=0.278, 0.102, 0.0353 -AmbientColorFilterMiddleNight=0.0314, 0.0706, 0.11 -AmbientColorFilterMiddleInteriorDay=0.051, 0.0627, 0.0745 -AmbientColorFilterMiddleInteriorNight=0.0275, 0.0392, 0.051 -AmbientColorFilterBottomSunrise=0.0392, 0.0157, 0 -AmbientColorFilterBottomDay=0.0235, 0.0235, 0.00784 -AmbientColorFilterBottomSunset=0.0431, 0.0118, 0.00392 -AmbientColorFilterBottomNight=0, 0.00392, 0.0157 -AmbientColorFilterBottomInteriorDay=0.0118, 0.0118, 0.0196 -AmbientColorFilterBottomInteriorNight=0.00392, 0.00784, 0.0196 -PointLightingIntensitySunrise=1.65 -PointLightingIntensitySunset=1.8 -PointLightingIntensityInteriorDay=1.54 -PointLightingIntensityInteriorNight=1.74 -PointLightingCurveSunrise=0.63 -PointLightingCurveSunset=0.69 -PointLightingCurveInteriorDay=0.69 -PointLightingCurveInteriorNight=0.79 -PointLightingDesaturationSunrise=0.0 -PointLightingDesaturationSunset=0.0 -PointLightingDesaturationInteriorDay=0.0 -PointLightingDesaturationInteriorNight=0.0 -ParticleLightsIntensitySunrise=1.02 -ParticleLightsIntensityDay=0.84 -ParticleLightsIntensitySunset=1.1 -ParticleLightsIntensityNight=0.98 -ParticleLightsIntensityInteriorDay=0.93 -ParticleLightsIntensityInteriorNight=1.12 -FogColorMultiplierSunrise=0.43 -FogColorMultiplierSunset=0.41 -FogColorMultiplierInteriorDay=0.39 -FogColorMultiplierInteriorNight=0.14 -FogColorCurveSunrise=1.05 -FogColorCurveSunset=1.35 -FogColorCurveInteriorDay=0.75 -FogColorCurveInteriorNight=1.07 -ColorPowSunrise=1.0 -ColorPowSunset=1.0 -ColorPowInteriorDay=1.0 -ColorPowInteriorNight=1.0 -IgnoreWeatherSystem=true + +FogColorMultiplierDay=0.95 +FogColorMultiplierNight=0.6 +FogColorMultiplierInterior=0.4 +FogColorCurveDay=1.2 +FogColorCurveNight=1.6 +FogColorCurveInterior=1.35 [SKY] Enable=true -StarsIntensity=1.88 -StarsCurve=1.23 -AuroraBorealisIntensity=0.44 -AuroraBorealisCurve=0.23 -CloudsIntensityDay=1.040001 -CloudsIntensityNight=0.220001 -CloudsIntensityInterior=1.49 -CloudsCurveDay=1.18 -CloudsCurveNight=1.4 -CloudsCurveInterior=1.5 -CloudsDesaturationDay=0.16 -CloudsDesaturationNight=0.05 -CloudsDesaturationInterior=0.14 -CloudsEdgeClamp=0.38 -CloudsEdgeIntensity=1.4 -GradientIntensityDay=1.370001 -GradientIntensityNight=0.890001 -GradientIntensityInterior=0.85 -GradientDesaturationDay=0.34 -GradientDesaturationNight=0.05 -GradientDesaturationInterior=0.325 -GradientTopIntensityDay=1.510001 -GradientTopIntensityNight=1.550001 -GradientTopIntensityInterior=5.6125 -GradientTopCurveDay=1.36 -GradientTopCurveNight=1.57 -GradientTopCurveInterior=2.15 -GradientMiddleIntensityDay=1.430001 -GradientMiddleIntensityNight=1.020001 -GradientMiddleIntensityInterior=2.4 -GradientMiddleCurveDay=1.18 -GradientMiddleCurveNight=1.41 -GradientMiddleCurveInterior=1.65 -GradientHorizonIntensityDay=1.26 -GradientHorizonIntensityNight=1.840001 -GradientHorizonIntensityInterior=2.33 -GradientHorizonCurveDay=1.5 -GradientHorizonCurveNight=1.37 -GradientHorizonCurveInterior=1.25 -SunIntensity=3.0 + +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.071 -SunCoronaCurve=1.47 -SunCoronaDesaturation=0.09 -MoonIntensity=1.6 +SunCoronaIntensity=1.0 +SunCoronaCurve=0.5 +SunCoronaDesaturation=0.0 +MoonIntensity=1.1 MoonCurve=1.0 -MoonDesaturation=0.2 -DisableWrongSkyMath=true -CloudsIntensitySunrise=0.880001 -CloudsIntensitySunset=0.620001 -CloudsIntensityInteriorDay=0.98 -CloudsIntensityInteriorNight=0.23 -CloudsCurveSunrise=1.27 -CloudsCurveSunset=1.54 -CloudsCurveInteriorDay=1.12 -CloudsCurveInteriorNight=1.35 -CloudsDesaturationSunrise=0.04 -CloudsDesaturationSunset=0.02 -CloudsDesaturationInteriorDay=0.13 -CloudsDesaturationInteriorNight=0.04 -GradientIntensitySunrise=1.460001 -GradientIntensitySunset=1.640001 -GradientIntensityInteriorDay=1.19 -GradientIntensityInteriorNight=0.870001 -GradientDesaturationSunrise=0.45 -GradientDesaturationSunset=0.1 -GradientDesaturationInteriorDay=0.29 -GradientDesaturationInteriorNight=0.04 -GradientTopIntensitySunrise=1.620001 -GradientTopIntensitySunset=1.69 -GradientTopIntensityInteriorDay=2.7 -GradientTopIntensityInteriorNight=1.48 -GradientTopCurveSunrise=1.66 -GradientTopCurveSunset=1.89 -GradientTopCurveInteriorDay=2.47 -GradientTopCurveInteriorNight=1.59 -GradientMiddleIntensitySunrise=1.380001 -GradientMiddleIntensitySunset=1.44 -GradientMiddleIntensityInteriorDay=2.6 -GradientMiddleIntensityInteriorNight=1.09 -GradientMiddleCurveSunrise=1.58 -GradientMiddleCurveSunset=1.91 -GradientMiddleCurveInteriorDay=2.2 -GradientMiddleCurveInteriorNight=1.4 -GradientHorizonIntensitySunrise=2.05 -GradientHorizonIntensitySunset=2.21 -GradientHorizonIntensityInteriorDay=1.91 -GradientHorizonIntensityInteriorNight=1.82 -GradientHorizonCurveSunrise=1.13 -GradientHorizonCurveSunset=1.13 -GradientHorizonCurveInteriorDay=1.44 -GradientHorizonCurveInteriorNight=1.34 -SunIntensitySunrise=2.4 -SunIntensityDay=2.32 -SunIntensitySunset=2.6 -SunIntensityNight=0.0 -SunIntensityInteriorDay=2.49 -SunIntensityInteriorNight=0.0 -SunDesaturationSunrise=0.0 -SunDesaturationDay=0.0 -SunDesaturationSunset=0.0 -SunDesaturationNight=0.0 -SunDesaturationInteriorDay=0.0 -SunDesaturationInteriorNight=0.0 -SunColorFilterSunrise=0.867, 0.769, 0.522 -SunColorFilterDay=0.984, 0.941, 0.906 -SunColorFilterSunset=0.937, 0.471, 0.161 -SunColorFilterNight=0, 0, 0 -SunColorFilterInteriorDay=1, 1, 1 -SunColorFilterInteriorNight=0, 0, 0 -SunGlowIntensitySunrise=1.11 -SunGlowIntensityDay=1.05 -SunGlowIntensitySunset=1.32 -SunGlowIntensityNight=1.02 -SunGlowIntensityInteriorDay=1.28 -SunGlowIntensityInteriorNight=1.01 -SunGlowHazinessSunrise=0.05 -SunGlowHazinessDay=0.36 -SunGlowHazinessSunset=0.09 -SunGlowHazinessNight=0.17 -SunGlowHazinessInteriorDay=0.28 -SunGlowHazinessInteriorNight=0.11 -MoonIntensitySunrise=0.78 -MoonIntensityDay=0.53 -MoonIntensitySunset=0.81 -MoonIntensityNight=1.95 -MoonIntensityInteriorDay=0.69 -MoonIntensityInteriorNight=2.14 -MoonCurveSunrise=0.89 -MoonCurveDay=0.61 -MoonCurveSunset=0.84 -MoonCurveNight=1.07 -MoonCurveInteriorDay=0.59 -MoonCurveInteriorNight=1.04 -MoonDesaturationSunrise=0.55 -MoonDesaturationDay=0.81 -MoonDesaturationSunset=0.58 -MoonDesaturationNight=0.42 -MoonDesaturationInteriorDay=0.83 -MoonDesaturationInteriorNight=0.45 -CloudsOpacitySunrise=1.31 -CloudsOpacityDay=1.13 -CloudsOpacitySunset=1.49 -CloudsOpacityNight=1.22 -CloudsOpacityInteriorDay=1.23 -CloudsOpacityInteriorNight=1.42 -CloudsEdgeFadeRange=0.84 -CloudsEdgeMoonMultiplier=2.78 -IgnoreWeatherSystem=true - -[OBJECT] -SubSurfaceScatteringMultiplierDay=0.11 -SubSurfaceScatteringMultiplierNight=0.09 -SubSurfaceScatteringMultiplierInterior=0.0 -SubSurfaceScatteringPowerDay=0.94 -SubSurfaceScatteringPowerNight=1.03 -SubSurfaceScatteringPowerInterior=1.1 -SubSurfaceScatteringMultiplierSunrise=0.2 -SubSurfaceScatteringMultiplierSunset=0.23 -SubSurfaceScatteringMultiplierInteriorDay=0.13 -SubSurfaceScatteringMultiplierInteriorNight=0.11 -SubSurfaceScatteringPowerSunrise=0.84 -SubSurfaceScatteringPowerSunset=0.73 -SubSurfaceScatteringPowerInteriorDay=0.82 -SubSurfaceScatteringPowerInteriorNight=0.93 -IgnoreWeatherSystem=true -SpecularAmountMultiplierSunrise=1.41 -SpecularAmountMultiplierDay=1.3 -SpecularAmountMultiplierSunset=1.51 -SpecularAmountMultiplierNight=1.66 -SpecularAmountMultiplierInteriorDay=1.3 -SpecularAmountMultiplierInteriorNight=1.5 -SpecularPowerMultiplierSunrise=0.82 -SpecularPowerMultiplierDay=1.07 -SpecularPowerMultiplierSunset=0.77 -SpecularPowerMultiplierNight=0.6 -SpecularPowerMultiplierInteriorDay=0.94 -SpecularPowerMultiplierInteriorNight=0.66 - -[LIGHTSPRITE] -IntensityDay=0.53 -IntensityNight=1.56 -IntensityInterior=0.5 -CurveDay=0.93 -CurveNight=1.305 -CurveInterior=0.925 -IntensitySunrise=0.92 -IntensitySunset=0.99 -IntensityInteriorDay=1.82 -IntensityInteriorNight=1.75 -CurveSunrise=1.16 -CurveSunset=0.93 -CurveInteriorDay=1.21 -CurveInteriorNight=1.34 -IgnoreWeatherSystem=true - -[WINDOWLIGHT] -Intensity=2.625 -Curve=1.0 -IntensitySunrise=1.02 -IntensityDay=0.89 -IntensitySunset=1.53 -IntensityNight=1.88 -IntensityInteriorDay=0.98 -IntensityInteriorNight=1.72 -CurveSunrise=1.07 -CurveDay=1.14 -CurveSunset=1.33 -CurveNight=1.14 -CurveInteriorDay=0.88 -CurveInteriorNight=1.32 -IgnoreWeatherSystem=true - -[VOLUMETRICFOG] -IntensityDay=1.106 -IntensityNight=0.89 -IntensityInterior=0.265 -CurveDay=1.11 -CurveNight=0.8 -CurveInterior=1.0 -IntensitySunrise=0.73 -IntensitySunset=0.74 -IntensityInteriorDay=1.17 -IntensityInteriorNight=0.85 -CurveSunrise=0.98 -CurveSunset=1.15 -CurveInteriorDay=1.16 -CurveInteriorNight=0.86 -LightingInfluenceSunrise=0.89 -LightingInfluenceDay=0.58 -LightingInfluenceSunset=0.96 -LightingInfluenceNight=0.85 -LightingInfluenceInteriorDay=0.58 -LightingInfluenceInteriorNight=0.9 -EnableShadows=true -IgnoreWeatherSystem=true -OpacitySunrise=0.29 -OpacityDay=0.47 -OpacitySunset=0.33 -OpacityNight=0.25 -OpacityInteriorDay=0.35 -OpacityInteriorNight=0.2 - -[FIRE] -IntensityDay=1.64 -IntensityNight=1.84 -IntensityInterior=1.65 -CurveDay=0.67 -CurveNight=0.63 -CurveInterior=1.0 -IntensitySunrise=1.75 -IntensitySunset=1.73 -IntensityInteriorDay=2.23 -IntensityInteriorNight=1.88 -CurveSunrise=0.71 -CurveSunset=0.73 -CurveInteriorDay=0.78 -CurveInteriorNight=0.75 -AdditiveBlending=true -IgnoreWeatherSystem=true - -[COLORCORRECTION] -UsePaletteTexture=false -Brightness=1.0 -GammaCurve=1.0 -UseProceduralCorrection=false - -[SHADOW] -ShadowCastersFix=false -ShadowQualityFix=true -DetailedShadowQuality=0 -UseBilateralShadowFilter=true -UseShadowFilter=true -ShadowFilterQuality=1 -ShadowBlurRange=4.42 -ShadowBlurRangeInterior=5.26 -IgnoreWeatherSystem=true +MoonDesaturation=0.0 +MoonCoronaIntensity=1.0 [DEPTHOFFIELD] FadeTime=0.4 -Quality=1 -IgnoreWeatherSystem=true + +[SHADOW] +DetailedShadowQuality=1 [RAYS] -SunRaysMultiplier=0.75 -SunRaysMultiplierSunrise=0.48 -SunRaysMultiplierDay=0.39 -SunRaysMultiplierSunset=0.58 -SunRaysMultiplierNight=0.0 -SunRaysMultiplierInteriorDay=0.46 -SunRaysMultiplierInteriorNight=0.0 -IgnoreWeatherSystem=true - -[SKYLIGHTING] -Quality=1 -FilterQuality=1 -AmbientMinLevel=0.39375 -AmbientMinLevelSunrise=0.33 -AmbientMinLevelDay=0.64 -AmbientMinLevelSunset=0.4 -AmbientMinLevelNight=0.26 -AmbientMinLevelInteriorDay=0.2 -AmbientMinLevelInteriorNight=0.18 -IgnoreWeatherSystem=true - -[WEATHER] -EnableMultipleWeathers=false - -[TIMEOFDAY] -Enable=true -DawnDuration=1.0 -SunriseTime=8.0 -DayTime=12.0 -SunsetTime=18.0 -DuskDuration=1.0 -NightTime=0.0 - -[VEGETATION] -SubSurfaceScatteringMultiplierSunrise=0.87 -SubSurfaceScatteringMultiplierDay=0.78 -SubSurfaceScatteringMultiplierSunset=0.97 -SubSurfaceScatteringMultiplierNight=0.84 -SubSurfaceScatteringMultiplierInteriorDay=0.86 -SubSurfaceScatteringMultiplierInteriorNight=0.88 -SubSurfaceScatteringPowerSunrise=2.12 -SubSurfaceScatteringPowerDay=2.36 -SubSurfaceScatteringPowerSunset=1.94 -SubSurfaceScatteringPowerNight=1.9 -SubSurfaceScatteringPowerInteriorDay=2.17 -SubSurfaceScatteringPowerInteriorNight=1.85 -IgnoreWeatherSystem=true -SpecularAmountMultiplierSunrise=1.5 -SpecularAmountMultiplierDay=1.31 -SpecularAmountMultiplierSunset=1.67 -SpecularAmountMultiplierNight=1.85 -SpecularAmountMultiplierInteriorDay=1.3 -SpecularAmountMultiplierInteriorNight=1.42 -SpecularPowerMultiplierSunrise=0.9 -SpecularPowerMultiplierDay=1.15 -SpecularPowerMultiplierSunset=0.82 -SpecularPowerMultiplierNight=0.67 -SpecularPowerMultiplierInteriorDay=1.18 -SpecularPowerMultiplierInteriorNight=0.84 - -[PARTICLE] -IntensitySunrise=1.09 -IntensityDay=1.06 -IntensitySunset=1.14 -IntensityNight=0.95 -IntensityInteriorDay=0.97 -IntensityInteriorNight=0.91 -LightingInfluenceSunrise=1.23 -LightingInfluenceDay=0.96 -LightingInfluenceSunset=1.35 -LightingInfluenceNight=1.43 -LightingInfluenceInteriorDay=0.97 -LightingInfluenceInteriorNight=1.27 -IgnoreWeatherSystem=true - -[REFLECTION] -Quality=1 -FilterQuality=1 -FilterBluriness=0.5 -SizeScale=0.5 -SourceTexturesScale=0.5 -Amount=0.76 -Power=1.12 -GlosinessMin=0.11 -GlosinessMax=0.93 -EnableDenoiser=true -DenoiserType=0 -EnableSupersampling=false -ExteriorEnable=true -InteriorEnable=true -IgnoreWeatherSystem=true -AmountInterior=0.83 -PowerInterior=0.94 - -[IMAGEBASEDLIGHTING] -AdditiveAmountSunrise=0.02 -AdditiveAmountDay=0.03 -AdditiveAmountSunset=0.02 -AdditiveAmountNight=0.01 -AdditiveAmountInteriorDay=0.02 -AdditiveAmountInteriorNight=0.01 -MultiplicativeAmountSunrise=0.09 -MultiplicativeAmountDay=0.06 -MultiplicativeAmountSunset=0.1 -MultiplicativeAmountNight=0.03 -MultiplicativeAmountInteriorDay=0.05 -MultiplicativeAmountInteriorNight=0.02 -ReflectiveAmountSunrise=0.15 -ReflectiveAmountDay=0.12 -ReflectiveAmountSunset=0.17 -ReflectiveAmountNight=0.06 -ReflectiveAmountInteriorDay=0.11 -ReflectiveAmountInteriorNight=0.04 -IgnoreWeatherSystem=true - -[RAIN] -Enable=false -EnableAntialiasing=true -EnableSupersampling=false -MotionStretch=0.38 -MotionTransparency=0.84 -IgnoreWeatherSystem=true - -[EYES] -SubSurfaceScatteringMultiplierSunrise=0.21 -SubSurfaceScatteringMultiplierDay=0.12 -SubSurfaceScatteringMultiplierSunset=0.29 -SubSurfaceScatteringMultiplierNight=0.08 -SubSurfaceScatteringMultiplierInteriorDay=0.15 -SubSurfaceScatteringMultiplierInteriorNight=0.1 -SubSurfaceScatteringPowerSunrise=0.62 -SubSurfaceScatteringPowerDay=0.91 -SubSurfaceScatteringPowerSunset=0.64 -SubSurfaceScatteringPowerNight=0.52 -SubSurfaceScatteringPowerInteriorDay=0.79 -SubSurfaceScatteringPowerInteriorNight=0.55 -IgnoreWeatherSystem=true -SpecularAmountMultiplierSunrise=1.52 -SpecularAmountMultiplierDay=1.3 -SpecularAmountMultiplierSunset=1.74 -SpecularAmountMultiplierNight=1.93 -SpecularAmountMultiplierInteriorDay=1.53 -SpecularAmountMultiplierInteriorNight=1.73 -SpecularPowerMultiplierSunrise=0.92 -SpecularPowerMultiplierDay=1.18 -SpecularPowerMultiplierSunset=0.82 -SpecularPowerMultiplierNight=0.73 -SpecularPowerMultiplierInteriorDay=1.12 -SpecularPowerMultiplierInteriorNight=0.82 - -[SUBSURFACESCATTERING] -Quality=1 -Radius=1.98 -Amount=0.66 -EpidermalAmount=0.93 -SubdermalAmount=0.87 -EpidermalDiffuseSaturation=-0.6 -SubdermalDiffuseSaturation=0.13 -EpidermalMix=0.22 -SubdermalMix=0.29 -SubdermalTranslucency=0.89 -SubdermalPhase=0.71 -IgnoreWeatherSystem=true -EnableTextureAlpha=true - -[LENS] -ReflectionIntensitySunrise=1.049999 -ReflectionIntensityDay=0.99 -ReflectionIntensitySunset=1.16 -ReflectionIntensityNight=1.4 -ReflectionIntensityInteriorDay=0.88 -ReflectionIntensityInteriorNight=1.120001 -ReflectionPowerSunrise=1.68 -ReflectionPowerDay=2.05 -ReflectionPowerSunset=1.5 -ReflectionPowerNight=1.11 -ReflectionPowerInteriorDay=1.43 -ReflectionPowerInteriorNight=1.22 -DirtIntensitySunrise=1.79 -DirtIntensityDay=1.51 -DirtIntensitySunset=1.84 -DirtIntensityNight=1.08 -DirtIntensityInteriorDay=1.44 -DirtIntensityInteriorNight=1.22 -DirtPowerSunrise=1.16 -DirtPowerDay=1.33 -DirtPowerSunset=1.06 -DirtPowerNight=1.5 -DirtPowerInteriorDay=1.39 -DirtPowerInteriorNight=1.49 -IgnoreWeatherSystem=true - -[WATER] -EnableDispersion=true -EnableCaustics=true -ReflectionAmount=0.86 -FrennelMultiplier=0.83 -FrennelMin=0.0 -FrennelMax=1.0 -DispersionAmount=0.93 -CausticsAmount=0.34 -EnableParallax=true -EnableShadow=true -EnableSelfReflection=true -EnableLighting=true -EnableDisplacement=true -DisplacementQuality=1 -SunSpecularMultiplier=1.43 -SunScatteringMultiplier=2.04 -WavesAmplitudeSunrise=0.64 -WavesAmplitudeDay=0.7 -WavesAmplitudeSunset=0.64 -WavesAmplitudeNight=0.51 -WavesAmplitudeInteriorDay=0.55 -WavesAmplitudeInteriorNight=0.42 -ShadowQuality=1 -EnableShadowNoise=true -SunLightingMultiplier=0.84 -WetMultiplier=0.85 -Muddiness=0.25 -EnablePreCache=true -EnableVolumetricShadow=true -DisplacementFilterQuality=1 -IgnoreWeatherSystem=true -[UNDERWATER] -EnableDispersion=true -EnableParallax=true -EnableDisplacement=true -EnableSilhouette=true -EnableBlurring=true -EnableReflection=true -EnableShadow=true -ShadowQuality=1 -DispersionAmount=0.93 -ReflectionAmount=0.64 -TransparencyFade=1.88 -TransparencyCurve=1.32 -DeepnessFade=3.88 -DeepnessDarkening=0.93 -TintAmount=3.31 -TintFade=4.66 -SunScatteringMultiplier=1.68 -IgnoreWeatherSystem=true -[CLOUDSHADOWS] -EnableAtNight=true -OpacitySunrise=0.85 -OpacityDay=0.57 -OpacitySunset=0.86 -OpacityNight=0.96 -OpacityInteriorDay=0.62 -OpacityInteriorNight=0.98 -IgnoreWeatherSystem=true -[VOLUMETRICRAYS] -Quality=1 -IntensitySunrise=0.36 -IntensityDay=0.19 -IntensitySunset=0.45 -IntensityNight=0.1 -IntensityInteriorDay=0.53 -IntensityInteriorNight=0.2 -DensitySunrise=4.35 -DensityDay=3.66 -DensitySunset=4.72 -DensityNight=3.63 -DensityInteriorDay=1.44 -DensityInteriorNight=0.51 -SkyColorAmountSunrise=0.53 -SkyColorAmountDay=0.32 -SkyColorAmountSunset=0.67 -SkyColorAmountNight=0.16 -SkyColorAmountInteriorDay=0.4 -SkyColorAmountInteriorNight=0.3 -IgnoreWeatherSystem=true -[PROCEDURALSUN] -Size=0.36 -EdgeSoftness=0.62 -GlowIntensitySunrise=1.21 -GlowIntensityDay=1.13 -GlowIntensitySunset=0.9 -GlowIntensityNight=0.0 -GlowIntensityInteriorDay=0.94 -GlowIntensityInteriorNight=0.0 -GlowCurveSunrise=2.16 -GlowCurveDay=1.28 -GlowCurveSunset=2.36 -GlowCurveNight=1.0 -GlowCurveInteriorDay=1.950001 -GlowCurveInteriorNight=1.0 -IgnoreWeatherSystem=true -[MIST] -ColorFromEnvironmentFog=0.75 -SkyLightingAmountSunrise=0.55 -SkyLightingAmountDay=0.37 -SkyLightingAmountSunset=0.36 -SkyLightingAmountNight=0.39 -SkyLightingAmountInteriorDay=0.88 -SkyLightingAmountInteriorNight=0.48 -SunLightingAmountSunrise=1.18 -SunLightingAmountDay=0.92 -SunLightingAmountSunset=1.19 -SunLightingAmountNight=0.19 -SunLightingAmountInteriorDay=0.87 -SunLightingAmountInteriorNight=0.05 -DesaturationSunrise=0.0 -DesaturationDay=0.0 -DesaturationSunset=0.0 -DesaturationNight=0.0 -DesaturationInteriorDay=0.0 -DesaturationInteriorNight=0.0 -ColorFilterSunrise=1, 0.957, 0.863 -ColorFilterDay=0.925, 0.984, 1 -ColorFilterSunset=1, 0.714, 0.58 -ColorFilterNight=0.396, 0.494, 0.663 -ColorFilterInteriorDay=0.922, 0.988, 1 -ColorFilterInteriorNight=0.443, 0.506, 0.69 -RelativeToCameraSunrise=0.12 -RelativeToCameraDay=0.51 -RelativeToCameraSunset=0.17 -RelativeToCameraNight=0.25 -RelativeToCameraInteriorDay=0.58 -RelativeToCameraInteriorNight=0.21 -VerticalOffsetSunrise=-9.31 -VerticalOffsetDay=-10.97 -VerticalOffsetSunset=-9.04 -VerticalOffsetNight=-11.14 -VerticalOffsetInteriorDay=-10.44 -VerticalOffsetInteriorNight=-11.26 -DensitySunrise=1.41 -DensityDay=1.25 -DensitySunset=1.28 -DensityNight=1.17 -DensityInteriorDay=1.29 -DensityInteriorNight=1.17 -VerticalFadeSunrise=4.93 -VerticalFadeDay=4.46 -VerticalFadeSunset=5.07 -VerticalFadeNight=4.83 -VerticalFadeInteriorDay=4.39 -VerticalFadeInteriorNight=4.78 -BottomTopSunrise=0.17 -BottomTopDay=0.0 -BottomTopSunset=0.09 -BottomTopNight=0.05 -BottomTopInteriorDay=0.0 -BottomTopInteriorNight=0.01 -ExponentialFadeSunrise=0.89 -ExponentialFadeDay=0.95 -ExponentialFadeSunset=0.83 -ExponentialFadeNight=1.14 -ExponentialFadeInteriorDay=0.96 -ExponentialFadeInteriorNight=1.09 -IgnoreWeatherSystem=true -EnableAnchors=false -DistanceFadeSunrise=0.0 -DistanceFadeDay=0.0 -DistanceFadeSunset=0.0 -DistanceFadeNight=0.0 -DistanceFadeInteriorDay=0.0 -DistanceFadeInteriorNight=0.0 -AnchorsAmountSunrise=1.0 -AnchorsAmountDay=1.0 -AnchorsAmountSunset=1.0 -AnchorsAmountNight=1.0 -AnchorsAmountInteriorDay=1.0 -AnchorsAmountInteriorNight=1.0 +SunRaysMultiplier=0.4 diff --git a/enbseries/COPYING b/enbseries/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/enbseries/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/enbseries/effect.txt b/enbseries/effect.txt index 8f59081..13ab03a 100644 --- a/enbseries/effect.txt +++ b/enbseries/effect.txt @@ -1,12 +1,12 @@ -/* - effect.txt : MariENB extra shader. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* do not touch this! */ -#define E_SHADER_3_0 -/* separate for easier maintenance */ -#include "menbextrasettings.fx" -#include "menbextrainternals.fx" -#include "menbextrafilters.fx" +/* + 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 index 96332ad..86e95c3 100644 --- a/enbseries/effect.txt.ini +++ b/enbseries/effect.txt.ini @@ -1,60 +1,62 @@ [EFFECT.TXT] TECHNIQUE=0 UseBlockGFX=false -EmulatedResX=0.0 -EmulatedResY=0.0 +EmulatedResX=960.0 +EmulatedResY=540.0 PaletteType=2 CGAPalette=1 -EGAPalette=0 +EGAPalette=1 DitherMode=4 -GammaMod=0.8 -DitherBump=0.0 +GammaMod=0.65 +DitherBump=-0.1 DitherMultiplier=0.25 -SaturationMod=1.0 +SaturationMod=1.5 UseCurve=false -CurveChromaAberration=0.1 +CurveChromaAberration=0.05 CurveLensZoom=50.249985 CurveLensDistortion=0.0 CurveLensDistortionCubic=0.0 CurveLensClamp=true UseGrain=true GrainFrequency=2500.0 -GrainIntensity=0.04 +GrainIntensity=0.05 GrainSaturation=0.0 GrainTwoPass=true GrainBlend=3 -GrainTwoPassFactor=0.04 -GrainMagnification1=13.25 -GrainMagnification2=19.639999 -GrainMagnification3=17.35 -GrainPass1Magnification1=2.05 -GrainPass1Magnification2=3.11 -GrainPass1Magnification3=2.22 -GrainPass2Magnification1=4.25 -GrainPass2Magnification2=0.42 -GrainPass2Magnification3=6.29 -GrainPower=3.81 +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.46 +GrainDarkMaskPower=2.0 GrainDarkMaskMultiplier=1.0 +UseNVGrain=false +UseNVCurve=false UseDark=false -DarkRadiusNight=0.24 -DarkRadiusDay=0.13 -DarkRadiusInteriorNight=0.21 -DarkRadiusInteriorDay=0.19 -DarkCurveNight=1.08 -DarkCurveDay=1.25 -DarkCurveInteriorNight=1.11 -DarkCurveInteriorDay=1.28 -DarkBumpNight=-0.74 -DarkBumpDay=-0.82 -DarkBumpInteriorNight=-0.78 -DarkBumpInteriorDay=-0.92 +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 diff --git a/enbseries/enbbloom.fx b/enbseries/enbbloom.fx index c27d6b5..8f92d2f 100644 --- a/enbseries/enbbloom.fx +++ b/enbseries/enbbloom.fx @@ -1,12 +1,12 @@ -/* - enbbloom.fx : MariENB bloom filter. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* do not touch this! */ -#define E_SHADER_3_0 -/* separate for easier maintenance */ -#include "menbbloomsettings.fx" -#include "menbbloominternals.fx" -#include "menbbloomfilters.fx" +/* + 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 index 9a8f995..d995f9f 100644 --- a/enbseries/enbbloom.fx.ini +++ b/enbseries/enbbloom.fx.ini @@ -1,29 +1,29 @@ [ENBBLOOM.FX] TECHNIQUE=0 -BloomIntensityNight=1.21 -BloomIntensityDay=1.09 -BloomIntensityInteriorNight=1.24 -BloomIntensityInteriorDay=1.14 -BloomBumpNight=-0.35 -BloomBumpDay=-0.48 -BloomBumpInteriorNight=-0.32 -BloomBumpInteriorDay=-0.37 -BloomPowerNight=0.9 -BloomPowerDay=0.98 -BloomPowerInteriorNight=0.88 -BloomPowerInteriorDay=0.97 -BloomSaturationNight=0.64 -BloomSaturationDay=0.55 -BloomSaturationInteriorNight=0.68 -BloomSaturationInteriorDay=0.59 -_FixedResolutionX=1920 -_FixedResolutionY=1080 -BloomMix1=0.63 -BloomMix2=0.86 -BloomMix3=1.02 -BloomMix4=1.18 -BloomMix7=1.42 -BloomMix8=1.82 +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 @@ -38,36 +38,36 @@ BlueShiftColorInteriorNightBlue=1.0 BlueShiftColorInteriorDayRed=0.3 BlueShiftColorInteriorDayGreen=0.7 BlueShiftColorInteriorDayBlue=1.0 -BlueShiftIntensityNight=0.39 -BlueShiftIntensityDay=0.27 -BlueShiftIntensityInteriorNight=0.46 -BlueShiftIntensityInteriorDay=0.29 +BlueShiftIntensityNight=0.5 +BlueShiftIntensityDay=0.4 +BlueShiftIntensityInteriorNight=0.6 +BlueShiftIntensityInteriorDay=0.5 EnableAnamorphicLensFlare=true -FlareBlendNight=0.39 -FlareBlendDay=0.28 -FlareBlendInteriorNight=0.41 -FlareBlendInteriorDay=0.35 +FlareBlendNight=0.9 +FlareBlendDay=0.8 +FlareBlendInteriorNight=0.95 +FlareBlendInteriorDay=0.85 FlareBlueShiftColorNightRed=0.35 -FlareBlueShiftColorNightGreen=0.08 +FlareBlueShiftColorNightGreen=0.2 FlareBlueShiftColorNightBlue=1.0 FlareBlueShiftColorDayRed=0.35 -FlareBlueShiftColorDayGreen=0.57 +FlareBlueShiftColorDayGreen=0.55 FlareBlueShiftColorDayBlue=1.0 -FlareBlueShiftColorInteriorNightRed=0.42 -FlareBlueShiftColorInteriorNightGreen=0.21 +FlareBlueShiftColorInteriorNightRed=0.4 +FlareBlueShiftColorInteriorNightGreen=0.2 FlareBlueShiftColorInteriorNightBlue=1.0 -FlareBlueShiftColorInteriorDayRed=0.21 -FlareBlueShiftColorInteriorDayGreen=0.42 +FlareBlueShiftColorInteriorDayRed=0.2 +FlareBlueShiftColorInteriorDayGreen=0.4 FlareBlueShiftColorInteriorDayBlue=1.0 -FlareBlueShiftIntensityNight=0.31 -FlareBlueShiftIntensityDay=0.24 -FlareBlueShiftIntensityInteriorNight=0.36 -FlareBlueShiftIntensityInteriorDay=0.28 +FlareBlueShiftIntensityNight=0.7 +FlareBlueShiftIntensityDay=0.45 +FlareBlueShiftIntensityInteriorNight=0.8 +FlareBlueShiftIntensityInteriorDay=0.55 BloomCapNight=100.0 -BloomCapDay=25.0 +BloomCapDay=30.0 BloomCapInteriorNight=80.0 -BloomCapInteriorDay=35.0 -FlarePowerNight=0.98 -FlarePowerDay=1.08 -FlarePowerInteriorNight=0.96 -FlarePowerInteriorDay=1.05 +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 7bc0841..97a242f 100644 --- a/enbseries/enbeffect.fx +++ b/enbseries/enbeffect.fx @@ -1,12 +1,12 @@ -/* - enbeffect.fx : MariENB base shader. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* 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 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" diff --git a/enbseries/enbeffect.fx.ini b/enbseries/enbeffect.fx.ini index 6debaa5..f372926 100644 --- a/enbseries/enbeffect.fx.ini +++ b/enbseries/enbeffect.fx.ini @@ -1,145 +1,157 @@ [ENBEFFECT.FX] TECHNIQUE=0 -CompensateFactorNight=0.2 -CompensateFactorDay=0.24 -CompensateFactorInteriorNight=0.2 -CompensateFactorInteriorDay=0.22 -CompensatePowerNight=1.19 -CompensatePowerDay=1.14 -CompensatePowerInteriorNight=1.18 -CompensatePowerInteriorDay=1.15 -CompensateSaturationNight=1.0 -CompensateSaturationDay=1.01 -CompensateSaturationInteriorNight=1.02 -CompensateSaturationInteriorDay=1.04 -GradingMulRNight=1.04 -GradingMulGNight=1.04 -GradingMulBNight=1.07 -GradingMulRDay=1.06 -GradingMulGDay=1.05 -GradingMulBDay=1.07 +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.03 -GradingMulBInteriorNight=1.04 -GradingMulRInteriorDay=1.06 -GradingMulGInteriorDay=1.04 -GradingMulBInteriorDay=1.07 -GradingPowRNight=0.92 -GradingPowGNight=0.95 -GradingPowBNight=0.93 -GradingPowRDay=0.93 -GradingPowGDay=0.98 -GradingPowBDay=0.96 -GradingPowRInteriorNight=0.92 -GradingPowGInteriorNight=0.95 -GradingPowBInteriorNight=0.9 -GradingPowRInteriorDay=0.96 -GradingPowGInteriorDay=0.98 -GradingPowBInteriorDay=0.94 -GradingColRNight=0.56 -GradingColGNight=0.81 -GradingColBNight=1.0 -GradingColRDay=1.0 -GradingColGDay=0.85 -GradingColBDay=0.7 -GradingColRInteriorNight=0.79 -GradingColGInteriorNight=0.65 -GradingColBInteriorNight=1.0 -GradingColRInteriorDay=1.0 -GradingColGInteriorDay=0.91 -GradingColBInteriorDay=0.62 -GradingColFactorNight=0.2 -GradingColFactorDay=0.18 -GradingColFactorInteriorNight=0.14 -GradingColFactorInteriorDay=0.12 -DarkRadiusNight=0.24 -DarkRadiusDay=0.13 -DarkRadiusInteriorNight=0.21 -DarkRadiusInteriorDay=0.19 -DarkCurveNight=1.13 -DarkCurveDay=1.38 +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.31 -DarkBumpNight=-0.83 -DarkBumpDay=-1.04 +DarkCurveInteriorDay=1.2 +DarkBumpNight=-0.85 +DarkBumpDay=-0.95 DarkBumpInteriorNight=-0.8 -DarkBumpInteriorDay=-0.97 +DarkBumpInteriorDay=-0.9 BoxVertical=0.8 -BoxSoften=0.02 -BoxAlpha=3.0 +BoxSoften=0.05 +BoxAlpha=1.0 AdaptationMinNight=0.15 -AdaptationMinDay=0.19 -AdaptationMinInteriorNight=0.17 -AdaptationMinInteriorDay=0.22 -AdaptationMaxNight=1.03 -AdaptationMaxDay=1.11 -AdaptationMaxInteriorNight=1.08 -AdaptationMaxInteriorDay=1.02 +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.29 -GradingSatMulInteriorNight=1.27 +GradingSatMulDay=1.2 +GradingSatMulInteriorNight=1.2 GradingSat 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)*pow(4,TempParameters.w); - /* loop unrolled for speeding up compilation (this is retarded) */ - float4 res; - res = gauss7[3][3]*tex2D(SamplerBloom1,coord+float2(-3,-3)*bof); - res += gauss7[2][3]*tex2D(SamplerBloom1,coord+float2(-2,-3)*bof); - res += gauss7[1][3]*tex2D(SamplerBloom1,coord+float2(-1,-3)*bof); - res += gauss7[0][3]*tex2D(SamplerBloom1,coord+float2(0,-3)*bof); - res += gauss7[1][3]*tex2D(SamplerBloom1,coord+float2(1,-3)*bof); - res += gauss7[2][3]*tex2D(SamplerBloom1,coord+float2(2,-3)*bof); - res += gauss7[3][3]*tex2D(SamplerBloom1,coord+float2(3,-3)*bof); - res += gauss7[3][2]*tex2D(SamplerBloom1,coord+float2(-3,-2)*bof); - res += gauss7[2][2]*tex2D(SamplerBloom1,coord+float2(-2,-2)*bof); - res += gauss7[1][2]*tex2D(SamplerBloom1,coord+float2(-1,-2)*bof); - res += gauss7[0][2]*tex2D(SamplerBloom1,coord+float2(0,-2)*bof); - res += gauss7[1][2]*tex2D(SamplerBloom1,coord+float2(1,-2)*bof); - res += gauss7[2][2]*tex2D(SamplerBloom1,coord+float2(2,-2)*bof); - res += gauss7[3][2]*tex2D(SamplerBloom1,coord+float2(3,-2)*bof); - res += gauss7[3][1]*tex2D(SamplerBloom1,coord+float2(-3,-1)*bof); - res += gauss7[2][1]*tex2D(SamplerBloom1,coord+float2(-2,-1)*bof); - res += gauss7[1][1]*tex2D(SamplerBloom1,coord+float2(-1,-1)*bof); - res += gauss7[0][1]*tex2D(SamplerBloom1,coord+float2(0,-1)*bof); - res += gauss7[1][1]*tex2D(SamplerBloom1,coord+float2(1,-1)*bof); - res += gauss7[2][1]*tex2D(SamplerBloom1,coord+float2(2,-1)*bof); - res += gauss7[3][1]*tex2D(SamplerBloom1,coord+float2(3,-1)*bof); - res += gauss7[3][0]*tex2D(SamplerBloom1,coord+float2(-3,0)*bof); - res += gauss7[2][0]*tex2D(SamplerBloom1,coord+float2(-2,0)*bof); - res += gauss7[1][0]*tex2D(SamplerBloom1,coord+float2(-1,0)*bof); - res += gauss7[0][0]*tex2D(SamplerBloom1,coord+float2(0,0)*bof); - res += gauss7[1][0]*tex2D(SamplerBloom1,coord+float2(1,0)*bof); - res += gauss7[2][0]*tex2D(SamplerBloom1,coord+float2(2,0)*bof); - res += gauss7[3][0]*tex2D(SamplerBloom1,coord+float2(3,0)*bof); - res += gauss7[3][1]*tex2D(SamplerBloom1,coord+float2(-3,1)*bof); - res += gauss7[2][1]*tex2D(SamplerBloom1,coord+float2(-2,1)*bof); - res += gauss7[1][1]*tex2D(SamplerBloom1,coord+float2(-1,1)*bof); - res += gauss7[0][1]*tex2D(SamplerBloom1,coord+float2(0,1)*bof); - res += gauss7[1][1]*tex2D(SamplerBloom1,coord+float2(1,1)*bof); - res += gauss7[2][1]*tex2D(SamplerBloom1,coord+float2(2,1)*bof); - res += gauss7[3][1]*tex2D(SamplerBloom1,coord+float2(3,1)*bof); - res += gauss7[3][2]*tex2D(SamplerBloom1,coord+float2(-3,2)*bof); - res += gauss7[2][2]*tex2D(SamplerBloom1,coord+float2(-2,2)*bof); - res += gauss7[1][2]*tex2D(SamplerBloom1,coord+float2(-1,2)*bof); - res += gauss7[0][2]*tex2D(SamplerBloom1,coord+float2(0,2)*bof); - res += gauss7[1][2]*tex2D(SamplerBloom1,coord+float2(1,2)*bof); - res += gauss7[2][2]*tex2D(SamplerBloom1,coord+float2(2,2)*bof); - res += gauss7[3][2]*tex2D(SamplerBloom1,coord+float2(3,2)*bof); - res += gauss7[3][3]*tex2D(SamplerBloom1,coord+float2(-3,3)*bof); - res += gauss7[2][3]*tex2D(SamplerBloom1,coord+float2(-2,3)*bof); - res += gauss7[1][3]*tex2D(SamplerBloom1,coord+float2(-1,3)*bof); - res += gauss7[0][3]*tex2D(SamplerBloom1,coord+float2(0,3)*bof); - res += gauss7[1][3]*tex2D(SamplerBloom1,coord+float2(1,3)*bof); - res += gauss7[2][3]*tex2D(SamplerBloom1,coord+float2(2,3)*bof); - res += gauss7[3][3]*tex2D(SamplerBloom1,coord+float2(3,3)*bof); - return res; -} -/* end pass */ -float4 PS_BloomPostPass(VS_OUTPUT_POST In) : COLOR -{ - float2 coord = In.txcoord0.xy; - float4 res = (tex2D(SamplerBloom1,coord)+tex2D(SamplerBloom2,coord) - +tex2D(SamplerBloom3,coord)+tex2D(SamplerBloom4,coord) - +tex2D(SamplerBloom5,coord)+tex2D(SamplerBloom6,coord) - +tex2D(SamplerBloom7,coord)+tex2D(SamplerBloom8,coord))*0.125; - return res; -} -/* techniques */ -technique BloomPrePass -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Bloom(); - PixelShader = compile ps_3_0 PS_BloomPrePass(); - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - CullMode = NONE; - AlphaBlendEnable = FALSE; - AlphaTestEnable = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique BloomTexture1 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Bloom(); - PixelShader = compile ps_3_0 PS_BloomTexture(); - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - CullMode = NONE; - AlphaBlendEnable = FALSE; - AlphaTestEnable = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique 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; - } -} +/* + menbbloomfilters.fx : MariENB bloom 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_Bloom(VS_INPUT_POST IN) +{ + VS_OUTPUT_POST OUT; + float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1); + OUT.vpos = pos; + OUT.txcoord0.xy = IN.txcoord0.xy+TempParameters.xy; + return OUT; +} +/* 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 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 index b9fe351..45f9161 100644 --- a/enbseries/menbbloominternals.fx +++ b/enbseries/menbbloominternals.fx @@ -1,135 +1,141 @@ -/* - menbbloominternals.fx : MariENB bloom internal variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* gaussian blur matrices */ -static const float4x4 gauss7 = -{ - 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, - 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, - 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, - 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 -}; -/* standard stuff */ -float4 ScreenSize; -float4 TempParameters; -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 = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom4 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom5 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom6 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom7 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerBloom8 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -/* whatever */ -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord0 : TEXCOORD0; -}; +/* + 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 index 7ce06fa..0fab2e0 100644 --- a/enbseries/menbbloomsettings.fx +++ b/enbseries/menbbloomsettings.fx @@ -1,111 +1,383 @@ -/* - menbbloomsettings.fx : MariENB bloom user-tweakable variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* fixed resolution, keeps blur filters at a consistent internal resolution */ -int fixedx -< - string UIName = "_FixedResolutionX"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {0}; -int fixedy -< - string UIName = "_FixedResolutionY"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {0}; -/* bloom intensity */ -float bloomintensity_n -< - string UIName = "BloomIntensityNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float bloomintensity_d -< - string UIName = "BloomIntensityDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float bloomintensity_in -< - string UIName = "BloomIntensityInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -float bloomintensity_id -< - string UIName = "BloomIntensityInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.25}; -/* bloom power (contrast) */ -float bloompower_n -< - string UIName = "BloomPowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.4}; -float bloompower_d -< - string UIName = "BloomPowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.4}; -float bloompower_in -< - string UIName = "BloomPowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.4}; -float bloompower_id -< - string UIName = "BloomPowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.4}; -/* bloom saturation */ -float bloomsaturation_n -< - string UIName = "BloomSaturationNight"; - string UIWidget = "Spinner"; -> = {0.3}; -float bloomsaturation_d -< - string UIName = "BloomSaturationDay"; - string UIWidget = "Spinner"; -> = {0.3}; -float bloomsaturation_in -< - string UIName = "BloomSaturationInteriorNight"; - string UIWidget = "Spinner"; -> = {0.3}; -float bloomsaturation_id -< - string UIName = "BloomSaturationInteriorDay"; - string UIWidget = "Spinner"; -> = {0.3}; -/* bloom offset (negative values keep dark areas from muddying up) */ -float bloombump_n -< - string UIName = "BloomBumpNight"; - string UIWidget = "Spinner"; -> = {-0.10}; -float bloombump_d -< - string UIName = "BloomBumpDay"; - string UIWidget = "Spinner"; -> = {-0.10}; -float bloombump_in -< - string UIName = "BloomBumpInteriorNight"; - string UIWidget = "Spinner"; -> = {-0.10}; -float bloombump_id -< - string UIName = "BloomBumpInteriorDay"; - string UIWidget = "Spinner"; -> = {-0.10}; +/* + 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 new file mode 100644 index 0000000000000000000000000000000000000000..82e3da35cbe611650a1f2c5037ee29022fdd5118 GIT binary patch literal 4000 zcmeAS@N?(olHy`uVBq!ia0y~yU}RumU})d~kq7U+xW>T1pYG}67*cWTZS32!Cp)-8 zp8oh7zw;e`w2+9x%H5OC+%>+uIr4a3{RyF_MGh=$>u*G5^QLi|ZMi0O(Z8b3F}o=8 z|Ec%IcLYu{OG!UT`+l!R$1v|l%yap-w;$)1{@8hEar*Dd|95l~^8bGl{OkHO^?mol zUrS6ky)W7)^85eU;&*up^WJT`-}7%$+E>1uB8l^zb98fl6zN~Ej%>fNFFJYujK6As zD|akyd3@1m&z|)PC)qZbGJUpt@`m-;zrF9d^{eK*El!X6IpK5q@4YN%#Fy`Wcv)*h zxt6c|w?@{pWgLDrtj5+=;a?3G=k9yC{UdAYzMjto=I?&q+cLfE)R%Ryo*6S}@AUq9bglh%BPeaY*x4!=3Qk3U;KKa*^8f3JT?Qa$V+!R$G)4>KBl>GJiIsK+NN)U1_e&%{l5m*_}k9E%(v6>?-|7+nZ?p9Y{q$Y zxA*@s@#lHA)?A^|$D;pWo6+?h|E^?TG?UVtQOiEF>T~s-u!+x$EK@R~qSAHNa=uf( zw*KJC3zl!&E(S~qc9=N1OX-DAk9)3Zk#EWAIhiHvomc1Fk+^Vo`}u(6v<;L0UtJ?w zeY)??tW)CMt6wa;RK|6|W7gE%a`!CjkSjZk8**#l1>pZwE$ zsr*if!@rnU4PpU1W&|GIk}OrixY}=?P1LRP^#vKFQAbSPYV3YjxMBCoy}G6R9QhwE z-f}N{&1?K!-7fun>(;}Iyd}=8VfUI7^)s;EV8Y7k-&@Mxt2BT7{qkmW&3^vHj_psc zakB|Fge?2D!tCb%kmJR_XPYQ0_0O|ZAz9ekkX+b*V8jx#43{$Jh4zL39pHq(K} z)0l60{F+v2b8~~C@&hL?2hq@|;An2K74P3$Pr0x<+?ZD`*?L7}6l26*sWl9}+wC+Y zF5bJx6*2!$nd*zR!OvvNx{W&hs#Ys*3O%E-W&fAMt^5<_?6qh;v$v`9{?Fdr+P6;I zjvQC;HmH9QP;j+=Y5#}cvIn*(rse#IV651_>A`|K|7J|iGg{nr^UKVd^O0PanAL@O zciSgv`?;%fOjyZx+o3zb*5^UPyp@TU|El@$37L!j|QSI~ux;TuOA$EKfQmI-`=8qt)6r zM0)Cz@OxX`n}lSZIC(su?;W>7xy0hXv`WwY+zGRS4F#J_Q;wIm$XYE<+@Zce_|gqQ6W3qs6l-fk-~Y?aSA-?%lTHnC~P#BF_Pn=SMMvKsFvu^P{_ z4!a`l{d#Ud=CrWonSK|Zop~V0Up+7SneoM=tWHUn)D-{S2s$+3>gLP}hFfwe&T|%= z+NitD?zy9~$*dI*jP09VlnFGLpWHPs@KMtw0oGXt&ORNYPkT4(-qv%P+}@`%FF+~N zM>6P>=A#hnTT#>EB3?h&4BxWd=FYam@3n*C_Bcs@SgvHhx%O+b<%P)?cU_JwnC;lY zBP{-G<+g%K<4B+E#$pW?pKeKo=lT}$CP9gtAD`JS=6>Qf8xzCVvR{9e@_pdjpFWYf ztbR`G!<+9*dZxxqRq555{o?c8i_X6vrtaSRobP`_dcBC)_bGe3^H;@kg}pXBy=qF> zWV^-3P77OR6mOcS7B?+#wYt&Yc@w?tOAlneS$4Ckd!vH#8`F2LGYo#&rZ|}Wi(`+; z>+?D@$4s1S>4E71`>n-FF78bK*L+~{>wouHwtVAuu^E>X zLmB5>uDRd*gQIwQ24mW>>Dz@2SRX_%MYPq;kn>kj=vlt&;Q0xu&-ymmUy#3eIp%JM zo$`HE#mNn9LhczXdGg#R6PoTXSkaf;yXA(4@?E7*pMK1?J^qlrgrPa_VUYNeqW=nx zlS^ZcKAgIwQD({$kE9(^T?GmMtgkWt_k1;%{ic!pi-!D(4Z;)d^GRRwQVpHCGnkF)qkJPf3sI<_L85ng$;H6k@8=$gnHeH#J5T2Pq;JOgg6eT9swtv+ zV)b=x$Nk(*fByOE^{Vcqt6>!+JXZT9c)dHVBf_tRgkcd9fz_wr7d z@Nc@!hudc!$t|m?JHvYJXN}Q?!xJZeJ27F}iic{>j=>z>uavCpuRQPDuv67~6GJy= z$QkRC)op#glP_mSom~I$MtQ^M+q!%bKYu-XIYVK6{NWTeex2E~8)VOYBeEKct zig^rng-VD0O<`t zlp7MIr(NUk$TqtFfvtW?okM?l(G%U?a{G1i7bdrheP!MvUjCJNjr-TdUzul|ezJGk zPwUt09(h~V${$!#=a77g{g2Dv1`~Zb<;gEs)HPVDua;MME`OCj!~a}(_K%&v7;QJo z++h#2Un&1URW$u8^Q{wAzyJPXjGh1P6+6ROU5|jx^MeG_KFMFVlP2#%9m9nVSIE{BRrm*|zsR_=spde;){Obx;Y-f^j@e?Ta%!dd@+SWU7mi*w z65SDK_{-*;>$*cr0!tR2kx0F^>J#Hv!>)r#({wrJK5;Bvtygfh=A0W_*fJOIEbBRi z85^7Vst(w`Sas*f#NNEpkn$IQJ6rBeU!$u1%15Q@V5b!`M@0F`?DLoRW!M&4u;w&d z?@87>{r1GFjh=gX3Y}bcr~9b}HLgx@+?dm_f69~N_EX**xcrMTseNX}=Uoby`6jOZ zz~X-VaE67Z{Dpv`$8JAn)Mgdnmmo()v!VRd$5o^wUf;qLVA8E^_)V{Ui=eILz7-sI_zg^e$P6&-I4XL&*C=|*FSM>Ffw&;xE1@2 z&$avj`|b-9e(T4kt=w}`?|7%Cx6FoJ^H+ZGE&IxRDD=xBe)mV86H*z1B|2P6-tMZo z!|fAjoP74N<29vyuTSZlylM)Hn)&F;&64gY#ZC58G-OrMOx>4#d>|oZRo7UTsr1ra zYID^R|2;k3n*z>X*}t!jK}eo~Rd~|7TTMa%b{lp)T%B9HKR}U5ak0m@*A6NhjFdmT zO8wK8KY8Q#)9e;rg`XJCIq#dZy&%Gl;nL)N-NifJPM9@~|Hbv_MHd_b_Vuv%J9U*G zc%IE8%Mi_<&#-vnwFeBzySPynyMN}quMIu^Hs)-Ha+Z$e z(nmJcYg2^wPCFGcC3(+>iFyC#ePXlbDetE zl=$E3o6s_EnedF~($C)7$Jiw#{=dAX%J2B;XIm0~J4xx^m}%S_vuInj#LO$jZwtPe zOU{@zQDqjl;qKKf?b_!as@3y4+bGPc+^W4c`&@5})AoSB&;MON@olzt`udFRd(E1E zd|q!+E4A#)5eCL{*Z(i6bJ#Y;NBcq8_nmJ4R9`d%wDc*f&+<1iG2N{CV%fxBuNVvb zw=n#;vU#S^0k@RK&gRsbi_;8k&uK8eiam9TW7e;{talo}b2!~LGZ4E|T_ zJEV^5U+2%rcx$zNZvwaTUQeG7Cp*`%`;|JxSiIb{^KhZ6@+vL&zq_P4?be7Hemr8a z&UOK-@`)ej6QjIkb)>}%87J9C**}OXotT@q^8NJFLNS-p5?Rid9PqE*)N|TvulTne zn|9y+>%4p4$JyQA(mCgN=p5Yti&6e)jLe+V|G)WcTr|6Ce(Edj>tC7e9G_mlEv$a? z|H@yC+U~;gY1Xv?_6Z?P7{>q)~q@EAn0@6ufk~i1us6nsn}$p@bz-R5q0aO zGfoKWoZJ{N=|{NzgCC#Q*BuaixItTfLfFEyIjx-+k9=bE($9FXAZ7n+nX7;07d2J! z2QA_0IlbvYaGJk()E1SV*2$s z30HV`2ijD*?K>Y-H*NLC2pc=k(}j2WQucSun5t24)o^U1|K}TN)iZQ2&61ryW!JL^ zdDA<0Tz@v0oVFGYiMBiNet5p9KYwe#?2aGuw7S MUHx3vIVCg!08H%H; +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 4e36967..4b92e2d 100644 --- a/enbseries/menbeffectfilters.fx +++ b/enbseries/menbeffectfilters.fx @@ -1,224 +1,384 @@ -/* - menbeffectfilters.fx : MariENB base shader routines. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN ) -{ - VS_OUTPUT_POST OUT; - OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0); - OUT.txcoord0.xy = IN.txcoord0.xy; - return OUT; -} -/* MariENB shader */ -float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord0.xy; - float4 res = tex2D(_s0,coord); - float tod = ENightDayFactor; - float ind = EInteriorFactor; - /* Border darken, commonly known as "vignette" */ - float2 bresl = float2(1.0,ScreenSize.w); - float dkradius = lerp(lerp(dkradius_n,dkradius_d,tod),lerp(dkradius_in, - dkradius_id,tod),ind); - float dkbump = lerp(lerp(dkbump_n,dkbump_d,tod),lerp(dkbump_in, - dkbump_id,tod),ind); - float dkcurve = lerp(lerp(dkcurve_n,dkcurve_d,tod),lerp(dkcurve_in, - dkcurve_id,tod),ind); - float2 bof = bresl*dkradius; - float val = 0.0; - if ( coord.x < bof.x ) - val = lerp(val,1,1.0-coord.x/bof.x); - if ( coord.y < bof.y ) - val = lerp(val,1,1.0-coord.y/bof.y); - if ( 1.0-coord.x < bof.x ) - val = lerp(val,1,1.0-(1.0-coord.x)/bof.x); - if ( 1.0-coord.y < bof.y ) - val = lerp(val,1,1.0-(1.0-coord.y)/bof.y); - val = clamp(val*dkbump,0,1); - res.rgb = lerp(res.rgb,float3(0,0,0),pow(val,dkcurve)); - /* adaptation */ - float4 adapt = tex2D(_s4,0.5); - float adapts = clamp((adapt.r+adapt.g+adapt.b)/3.0,0.0,50.0); - float amin = lerp(lerp(amin_n,amin_d,tod),lerp(amin_in,amin_id,tod), - ind); - float amax = lerp(lerp(amax_n,amax_d,tod),lerp(amax_in,amax_id,tod), - ind); - res.rgb = res.rgb/(adapts*amax+amin); - /* color grading prepass overbright/oversaturation compensation */ - float comppow = lerp(lerp(comppow_n,comppow_d,tod),lerp(comppow_in, - comppow_id,tod),ind); - float compsat = lerp(lerp(compsat_n,compsat_d,tod),lerp(compsat_in, - compsat_id,tod),ind); - float compfactor = lerp(lerp(compfactor_n,compfactor_d,tod), - lerp(compfactor_in,compfactor_id,tod),ind); - float4 ovr = pow(res,comppow); - float ovrs = (ovr.r+ovr.g+ovr.b)/3.0; - ovr = ovr*compsat+ovrs*(1.0-compsat); - res.rgb -= ovr.rgb*compfactor; - /* screen mud goes here */ - if ( softbloom ) - { - if ( (fixedx > 0) && (fixedy > 0) ) - bresl = float2(fixedx,fixedy); - else - bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - bof = float2(1.0/bresl.x,1.0/bresl.y); - res += gauss5[2][2]*tex2D(_s3,coord+float2(-2,-2)*bof); - res += gauss5[1][2]*tex2D(_s3,coord+float2(-1,-2)*bof); - res += gauss5[0][2]*tex2D(_s3,coord+float2(0,-2)*bof); - res += gauss5[1][2]*tex2D(_s3,coord+float2(1,-2)*bof); - res += gauss5[2][2]*tex2D(_s3,coord+float2(2,-2)*bof); - res += gauss5[2][1]*tex2D(_s3,coord+float2(-2,-1)*bof); - res += gauss5[1][1]*tex2D(_s3,coord+float2(-1,-1)*bof); - res += gauss5[0][1]*tex2D(_s3,coord+float2(0,-1)*bof); - res += gauss5[1][1]*tex2D(_s3,coord+float2(1,-1)*bof); - res += gauss5[2][1]*tex2D(_s3,coord+float2(2,-1)*bof); - res += gauss5[2][0]*tex2D(_s3,coord+float2(-2,0)*bof); - res += gauss5[1][0]*tex2D(_s3,coord+float2(-1,0)*bof); - res += gauss5[0][0]*tex2D(_s3,coord+float2(0,0)*bof); - res += gauss5[1][0]*tex2D(_s3,coord+float2(1,0)*bof); - res += gauss5[2][0]*tex2D(_s3,coord+float2(2,0)*bof); - res += gauss5[2][1]*tex2D(_s3,coord+float2(-2,1)*bof); - res += gauss5[1][1]*tex2D(_s3,coord+float2(-1,1)*bof); - res += gauss5[0][1]*tex2D(_s3,coord+float2(0,1)*bof); - res += gauss5[1][1]*tex2D(_s3,coord+float2(1,1)*bof); - res += gauss5[2][1]*tex2D(_s3,coord+float2(2,1)*bof); - res += gauss5[2][2]*tex2D(_s3,coord+float2(-2,2)*bof); - res += gauss5[1][2]*tex2D(_s3,coord+float2(-1,2)*bof); - res += gauss5[0][2]*tex2D(_s3,coord+float2(0,2)*bof); - res += gauss5[1][2]*tex2D(_s3,coord+float2(1,2)*bof); - res += gauss5[2][2]*tex2D(_s3,coord+float2(2,2)*bof); - res *= EBloomAmount; - } - else - res += tex2D(_s3,coord)*EBloomAmount; - /* - color grading (brightness, contrast, gamma, tinting, everything you - could ever need) - */ - float grademul_r = lerp(lerp(grademul_r_n,grademul_r_d,tod), - lerp(grademul_r_in,grademul_r_id,tod),ind); - float grademul_g = lerp(lerp(grademul_g_n,grademul_g_d,tod), - lerp(grademul_g_in,grademul_g_id,tod),ind); - float grademul_b = lerp(lerp(grademul_b_n,grademul_b_d,tod), - lerp(grademul_b_in,grademul_b_id,tod),ind); - float gradepow_r = lerp(lerp(gradepow_r_n,gradepow_r_d,tod), - lerp(gradepow_r_in,gradepow_r_id,tod),ind); - float gradepow_g = lerp(lerp(gradepow_g_n,gradepow_g_d,tod), - lerp(gradepow_g_in,gradepow_g_id,tod),ind); - float gradepow_b = lerp(lerp(gradepow_b_n,gradepow_b_d,tod), - lerp(gradepow_b_in,gradepow_b_id,tod),ind); - float gradecol_r = lerp(lerp(gradecol_r_n,gradecol_r_d,tod), - lerp(gradecol_r_in,gradecol_r_id,tod),ind); - float gradecol_g = lerp(lerp(gradecol_g_n,gradecol_g_d,tod), - lerp(gradecol_g_in,gradecol_g_id,tod),ind); - float gradecol_b = lerp(lerp(gradecol_b_n,gradecol_b_d,tod), - lerp(gradecol_b_in,gradecol_b_id,tod),ind); - float gradecolfact = lerp(lerp(gradecolfact_n,gradecolfact_d, - tod),lerp(gradecolfact_in,gradecolfact_id,tod),ind); - float3 grademul = float3(grademul_r,grademul_g,grademul_b); - float3 gradepow = float3(gradepow_r,gradepow_g,gradepow_b); - float3 gradecol = float3(gradecol_r,gradecol_g,gradecol_b); - res.rgb = saturate(pow(res.rgb,gradepow)); - res.rgb = saturate(res.rgb*grademul); - float tonev = (res.r+res.g+res.b)/3.0; - float3 tonecolor = gradecol*tonev; - res.rgb = res.rgb*(1.0-gradecolfact)+tonecolor*gradecolfact; - /* letterbox filter */ - res.rgb = saturate(res.rgb); - float boxf = pow(clamp(boxv-abs(2.0*coord.y-1.0),0.0,1.0),boxb); - res.rgb = lerp(res.rgb*(1.0-boxa),res.rgb,boxf); - res.a = 1.0; - return res; -} -/* - So... let me get this straight... rather than simply switching techniques, - Boris just compiles the program twice with and without this macro, then - toggling "UseEffect" switches between each variation? What the fuck? -*/ -#ifndef ENB_FLIPTECHNIQUE -technique Shader_D6EC7DD1 -#else -technique Shader_ORIGINALPOSTPROCESS -#endif -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_Mari(); - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - ZEnable = FALSE; - ZWriteEnable = FALSE; - CullMode = NONE; - AlphaTestEnable = FALSE; - AlphaBlendEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -#ifndef ENB_FLIPTECHNIQUE -technique Shader_ORIGINALPOSTPROCESS -#else -technique Shader_D6EC7DD1 -#endif -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - /* - >2014 - >inline assembly - Have to keep this part intact, sadly - Boris what the fuck have you done - */ - PixelShader = asm - { - ps_3_0 - def c6,0,0,0,0 - def c7,0.212500006,0.715399981,0.0720999986,1 - dcl_texcoord v0.xy - dcl_2d s0 - dcl_2d s1 - dcl_2d s2 - rcp r0.x,c2.y - texld r1,v0,s2 - mul r0.yz,r1.xxyw,c1.y - rcp r0.w,r0.y - mul r0.z,r0.w,r0.z - texld r1,v0,s1 - mul r1.xyz,r1,c1.y - dp3 r0.w,c7,r1 - mul r1.w,r0.w,r0.z - mad r0.z,r0.z,r0.w,c7.w - rcp r0.z,r0.z - mad r0.x,r1.w,r0.x,c7.w - mul r0.x,r0.x,r1.w - mul r0.x,r0.z,r0.x - cmp r0.x,-r0.w,c6.x,r0.x - rcp r0.z,r0.w - mul r0.z,r0.z,r0.x - add_sat r0.x,-r0.x,c2.x - texld r2,v0,s0 - mul r2.xyz,r2,c1.y - mul r2.xyz,r0.x,r2 - mad r1.xyz,r1,r0.z,r2 - dp3 r0.x,r1,c7 - mov r1.w,c7.w - lrp r2,c3.x,r1,r0.x - mad r1,r0.x,c4,-r2 - mad r1,c4.w,r1,r2 - mad r1,c3.w,r1,-r0.y - mad r0,c3.z,r1,r0.y - add r1,-r0,c5 - mad oC0,c5.w,r1,r0 - }; - ColorWriteEnable = ALPHA|RED|GREEN|BLUE; - ZEnable = FALSE; - ZWriteEnable = FALSE; - CullMode = NONE; - AlphaTestEnable = FALSE; - AlphaBlendEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} +/* + 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; + } +} diff --git a/enbseries/menbeffectinternals.fx b/enbseries/menbeffectinternals.fx index 3a89549..5363fd7 100644 --- a/enbseries/menbeffectinternals.fx +++ b/enbseries/menbeffectinternals.fx @@ -1,108 +1,101 @@ -/* - menbeffectinternals.fx : MariENB base internal variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* gaussian blur matrices */ -static const float3x3 gauss5 = -{ - 0.0865051903114,0.0692041522491,0.0346020761246, - 0.0692041522491,0.0553633217993,0.0276816609, - 0.0346020761246,0.0276816609,0.01384083045 -}; -/* 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 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; +}; diff --git a/enbseries/menbeffectsettings.fx b/enbseries/menbeffectsettings.fx index 3ab9922..3f2de30 100644 --- a/enbseries/menbeffectsettings.fx +++ b/enbseries/menbeffectsettings.fx @@ -1,444 +1,491 @@ -/* - menbeffectsettings.fx : MariENB base user-tweakable variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* fixed resolution, keeps blur filters at a consistent internal resolution */ -int fixedx -< - string UIName = "_FixedResolutionX"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {0}; -int fixedy -< - string UIName = "_FixedResolutionY"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {0}; -/* Border darkening */ -/* radius of darkening (relative to screen width) */ -float dkradius_n -< - string UIName = "DarkRadiusNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.40}; -float dkradius_d -< - string UIName = "DarkRadiusDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.29}; -float dkradius_in -< - string UIName = "DarkRadiusInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.50}; -float dkradius_id -< - string UIName = "DarkRadiusInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.39}; -/* falloff of darkening */ -float dkcurve_n -< - string UIName = "DarkCurveNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.70}; -float dkcurve_d -< - string UIName = "DarkCurveDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {2.30}; -float dkcurve_in -< - string UIName = "DarkCurveInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.35}; -float dkcurve_id -< - string UIName = "DarkCurveInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.67}; -/* bump of darkening */ -float dkbump_n -< - string UIName = "DarkBumpNight"; - string UIWidget = "Spinner"; -> = {0.74}; -float dkbump_d -< - string UIName = "DarkBumpDay"; - string UIWidget = "Spinner"; -> = {0.33}; -float dkbump_in -< - string UIName = "DarkBumpInteriorNight"; - string UIWidget = "Spinner"; -> = {0.82}; -float dkbump_id -< - string UIName = "DarkBumpInteriorDay"; - string UIWidget = "Spinner"; -> = {0.61}; -/* "adaptation" factors */ -float amin_n -< - string UIName = "AdaptationMinNight"; - string UIWidget = "Spinner"; -> = {0.20}; -float amin_d -< - string UIName = "AdaptationMinDay"; - string UIWidget = "Spinner"; -> = {0.09}; -float amin_in -< - string UIName = "AdaptationMinInteriorNight"; - string UIWidget = "Spinner"; -> = {0.17}; -float amin_id -< - string UIName = "AdaptationMinInteriorDay"; - string UIWidget = "Spinner"; -> = {0.10}; -float amax_n -< - string UIName = "AdaptationMaxNight"; - string UIWidget = "Spinner"; -> = {1.21}; -float amax_d -< - string UIName = "AdaptationMaxDay"; - string UIWidget = "Spinner"; -> = {0.94}; -float amax_in -< - string UIName = "AdaptationMaxInteriorNight"; - string UIWidget = "Spinner"; -> = {1.26}; -float amax_id -< - string UIName = "AdaptationMaxInteriorDay"; - string UIWidget = "Spinner"; -> = {0.91}; -/* overshine/bloom compensation */ -/* compensation factor */ -float compfactor_n -< - string UIName = "CompensateFactorNight"; - string UIWidget = "Spinner"; -> = {0.23}; -float compfactor_d -< - string UIName = "CompensateFactorDay"; - string UIWidget = "Spinner"; -> = {0.46}; -float compfactor_in -< - string UIName = "CompensateFactorInteriorNight"; - string UIWidget = "Spinner"; -> = {0.30}; -float compfactor_id -< - string UIName = "CompensateFactorInteriorDay"; - string UIWidget = "Spinner"; -> = {0.39}; -/* compensation power (contrast) */ -float comppow_n -< - string UIName = "CompensatePowerNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.08}; -float comppow_d -< - string UIName = "CompensatePowerDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.11}; -float comppow_in -< - string UIName = "CompensatePowerInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.05}; -float comppow_id -< - string UIName = "CompensatePowerInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.14}; -/* compensation saturation (higher values desaturate highlights) */ -float compsat_n -< - string UIName = "CompensateSaturationNight"; - string UIWidget = "Spinner"; -> = {0.97}; -float compsat_d -< - string UIName = "CompensateSaturationDay"; - string UIWidget = "Spinner"; -> = {0.85}; -float compsat_in -< - string UIName = "CompensateSaturationInteriorNight"; - string UIWidget = "Spinner"; -> = {0.89}; -float compsat_id -< - string UIName = "CompensateSaturationInteriorDay"; - string UIWidget = "Spinner"; -> = {0.74}; -/* Color grading */ -/* color component multipliers */ -float grademul_r_n -< - string UIName = "GradingMulRNight"; - string UIWidget = "Spinner"; -> = {1.04}; -float grademul_g_n -< - string UIName = "GradingMulGNight"; - string UIWidget = "Spinner"; -> = {1.08}; -float grademul_b_n -< - string UIName = "GradingMulBNight"; - string UIWidget = "Spinner"; -> = {1.15}; -float grademul_r_d -< - string UIName = "GradingMulRDay"; - string UIWidget = "Spinner"; -> = {1.66}; -float grademul_g_d -< - string UIName = "GradingMulGDay"; - string UIWidget = "Spinner"; -> = {1.45}; -float grademul_b_d -< - string UIName = "GradingMulBDay"; - string UIWidget = "Spinner"; -> = {1.29}; -float grademul_r_in -< - string UIName = "GradingMulRInteriorNight"; - string UIWidget = "Spinner"; -> = {1.35}; -float grademul_g_in -< - string UIName = "GradingMulGInteriorNight"; - string UIWidget = "Spinner"; -> = {1.18}; -float grademul_b_in -< - string UIName = "GradingMulBInteriorNight"; - string UIWidget = "Spinner"; -> = {1.22}; -float grademul_r_id -< - string UIName = "GradingMulRInteriorDay"; - string UIWidget = "Spinner"; -> = {1.71}; -float grademul_g_id -< - string UIName = "GradingMulGInteriorDay"; - string UIWidget = "Spinner"; -> = {1.60}; -float grademul_b_id -< - string UIName = "GradingMulBInteriorDay"; - string UIWidget = "Spinner"; -> = {1.41}; -/* color component contrasts */ -float gradepow_r_n -< - string UIName = "GradingPowRNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.02}; -float gradepow_g_n -< - string UIName = "GradingPowGNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.06}; -float gradepow_b_n -< - string UIName = "GradingPowBNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.03}; -float gradepow_r_d -< - string UIName = "GradingPowRDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.09}; -float gradepow_g_d -< - string UIName = "GradingPowGDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.08}; -float gradepow_b_d -< - string UIName = "GradingPowBDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.05}; -float gradepow_r_in -< - string UIName = "GradingPowRInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.08}; -float gradepow_g_in -< - string UIName = "GradingPowGInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.11}; -float gradepow_b_in -< - string UIName = "GradingPowBInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.06}; -float gradepow_r_id -< - string UIName = "GradingPowRInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.05}; -float gradepow_g_id -< - string UIName = "GradingPowGInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.04}; -float gradepow_b_id -< - string UIName = "GradingPowBInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.04}; -/* colorization factors */ -float gradecol_r_n -< - string UIName = "GradingColRNight"; - string UIWidget = "Spinner"; -> = {-0.59}; -float gradecol_g_n -< - string UIName = "GradingColGNight"; - string UIWidget = "Spinner"; -> = {-0.26}; -float gradecol_b_n -< - string UIName = "GradingColBNight"; - string UIWidget = "Spinner"; -> = {-0.73}; -float gradecol_r_d -< - string UIName = "GradingColRDay"; - string UIWidget = "Spinner"; -> = {-0.62}; -float gradecol_g_d -< - string UIName = "GradingColGDay"; - string UIWidget = "Spinner"; -> = {-0.10}; -float gradecol_b_d -< - string UIName = "GradingColBDay"; - string UIWidget = "Spinner"; -> = {-0.81}; -float gradecol_r_in -< - string UIName = "GradingColRInteriorNight"; - string UIWidget = "Spinner"; -> = {-0.41}; -float gradecol_g_in -< - string UIName = "GradingColGInteriorNight"; - string UIWidget = "Spinner"; -> = {-0.18}; -float gradecol_b_in -< - string UIName = "GradingColBInteriorNight"; - string UIWidget = "Spinner"; -> = {-1.69}; -float gradecol_r_id -< - string UIName = "GradingColRInteriorDay"; - string UIWidget = "Spinner"; -> = {-0.60}; -float gradecol_g_id -< - string UIName = "GradingColGInteriorDay"; - string UIWidget = "Spinner"; -> = {-0.45}; -float gradecol_b_id -< - string UIName = "GradingColBInteriorDay"; - string UIWidget = "Spinner"; -> = {-0.85}; -/* blend factor for colorization (negative values are quite fancy) */ -float gradecolfact_n -< - string UIName = "GradingColFactorNight"; - string UIWidget = "Spinner"; -> = {-0.11}; -float gradecolfact_d -< - string UIName = "GradingColFactorDay"; - string UIWidget = "Spinner"; -> = {-0.14}; -float gradecolfact_in -< - string UIName = "GradingColFactorInteriorNight"; - string UIWidget = "Spinner"; -> = {-0.14}; -float gradecolfact_id -< - string UIName = "GradingColFactorInteriorDay"; - string UIWidget = "Spinner"; -> = {-0.20}; -/* Letterbox */ -/* vertical factor */ -float boxv -< - string UIName = "BoxVertical"; - string UIWidget = "Spinner"; - float UIMin = 0.0; - float UIMax = 1.0; -> = {0.90}; -/* softening (0 = disable) */ -float boxb -< - string UIName = "BoxSoften"; - string UIWidget = "Spinner"; -> = {0.01}; -/* box alpha */ -float boxa -< - string UIName = "BoxAlpha"; - string UIWidget = "Spinner"; -> = {12.00}; -/* soften bloom texture (remove blocky artifacts from downscaled bloom) */ -bool softbloom -< - string UIName = "BloomSoften"; - string UIWidget = "Checkbox"; -> = {false}; +/* + 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 diff --git a/enbseries/menbextrafilters.fx b/enbseries/menbextrafilters.fx index eccc42c..ed627e1 100644 --- a/enbseries/menbextrafilters.fx +++ b/enbseries/menbextrafilters.fx @@ -1,389 +1,377 @@ -/* - menbextrafilters.fx : MariENB extra shader routines. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -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; -} -/* prepass */ -float4 ReducePrepass( in float4 color, in float2 coord ) -{ - float3 bgamma = float3(bgammar,bgammag,bgammab); - float3 bsaturation = float3(bsaturationr,bsaturationg,bsaturationb); - color.rgb = pow(max(color.rgb,0.0),bgamma); - float4 dac; - dac.a = (color.r+color.g+color.b)/3.0; - dac.rgb = dac.a+(color.rgb-dac.a)*bsaturation; - if ( dither == 0 ) - dac += bdbump+checkers[int(coord.x%2)+2*int(coord.y%2)]*bdmult; - else if ( dither == 1 ) - dac += bdbump+ordered2[int(coord.x%2)+2*int(coord.y%2)]*bdmult; - else if ( dither == 2 ) - dac += bdbump+ordered3[int(coord.x%3)+3*int(coord.y%3)]*bdmult; - else if ( dither == 3 ) - dac += bdbump+ordered4[int(coord.x%4)+4*int(coord.y%4)]*bdmult; - else if ( dither == 4 ) - dac += bdbump+ordered8[int(coord.x%8)+8*int(coord.y%8)]*bdmult; - dac.a = 1.0; - dac = saturate(dac); - return dac; -} -float4 ReduceCGA( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - if ( cgapal == 0 ) - { - dac.a = (dac.r+dac.g+dac.b)/3.0; - return (dac.a>0.5); - } - float dist = 2.0; - int idx = 0; - if ( cgapal == 1 ) - { - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cga1l[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cga1l[i]); - } - } - color.rgb = cga1l[idx]; - } - else if ( cgapal == 2 ) - { - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cga1h[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cga1h[i]); - } - } - color.rgb = cga1h[idx]; - } - else if ( cgapal == 3 ) - { - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cga2l[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cga2l[i]); - } - } - color.rgb = cga2l[idx]; - } - else if ( cgapal == 4 ) - { - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cga2h[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cga2h[i]); - } - } - color.rgb = cga2h[idx]; - } - else if ( cgapal == 5 ) - { - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cga3l[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cga3l[i]); - } - } - color.rgb = cga3l[idx]; - } - else if ( cgapal == 6 ) - { - for ( int i=0; i<4; i++ ) - { - if ( distance(dac.rgb,cga3h[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,cga3h[i]); - } - } - color.rgb = cga3h[idx]; - } - return color; -} -float4 ReduceEGA( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - float dist = 2.0; - int idx = 0; - if ( egapal == 0 ) - { - for ( int i=0; i<16; i++ ) - { - if ( distance(dac.rgb,stdega[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,stdega[i]); - } - } - color.rgb = stdega[idx]; - } - else - { - for ( int i=0; i<16; i++ ) - { - if ( distance(dac.rgb,aosega[i]) < dist ) - { - idx = i; - dist = distance(dac.rgb,aosega[i]); - } - } - color.rgb = aosega[idx]; - } - return color; -} -float4 ReduceRGB2( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - color.rgb = trunc(dac.rgb*4.0)/4.0; - return color; -} -float4 ReduceRGB323( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - color.rgb = trunc(dac.rgb*float3(8.0,4.0,8.0))/float3(8.0,4.0,8.0); - return color; -} -float4 ReduceRGB4( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - color.rgb = trunc(dac.rgb*16.0)/16.0; - return color; -} -float4 ReduceRGB565( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - color.rgb = trunc(dac.rgb*float3(32.0,64.0,32.0)) - /float3(32.0,64.0,32.0); - return color; -} -float4 ReduceRGB6( in float4 color, in float2 coord ) -{ - float4 dac = ReducePrepass(color,coord); - color.rgb = trunc(dac.rgb*64.0)/64.0; - return color; -} -/* Fuzzy */ -float4 PS_Grain( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( !ne ) - return res; - 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 ) - res.rgb += nt*ni; - else if ( nb == 2 ) - { - res.r = (res.r<0.5)?(2.0*res.r*(0.5+(nt.r*ni))) - :(1.0-2.0*(1.0-res.r)*(1.0-((0.5+(nt.r*ni))))); - res.g = (res.g<0.5)?(2.0*res.g*(0.5+(nt.g*ni))) - :(1.0-2.0*(1.0-res.g)*(1.0-((0.5+(nt.g*ni))))); - res.b = (res.b<0.5)?(2.0*res.b*(0.5+(nt.b*ni))) - :(1.0-2.0*(1.0-res.b)*(1.0-((0.5+(nt.b*ni))))); - } - else if ( nb == 3 ) - { - float bn = 1.0-saturate((res.r+res.g+res.b)/3.0); - bn = pow(bn,bnp); - float3 nn = saturate(nt*bn); - res.r = (res.r>0.5)?(2.0*res.r*(0.5+(nn.r*ni))) - :(1.0-2.0*(1.0-res.r)*(1.0-((0.5+(nn.r*ni))))); - res.g = (res.g>0.5)?(2.0*res.g*(0.5+(nn.g*ni))) - :(1.0-2.0*(1.0-res.g)*(1.0-((0.5+(nn.g*ni))))); - res.b = (res.b>0.5)?(2.0*res.b*(0.5+(nn.b*ni))) - :(1.0-2.0*(1.0-res.b)*(1.0-((0.5+(nn.b*ni))))); - } - else - res.rgb = lerp(res.rgb,nt,ni); - return res; -} -/* Curveshit */ -float4 PS_Curve( 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 center = float2(coord.x-0.5,coord.y-0.5); - float zfact = 100.0/lenszoom; - float r2 = center.x*center.x+center.y*center.y; - float f = 0; - if( lensdistc == 0.0) - f = 1+r2*lensdist; - else - f = 1+r2*(lensdist+lensdistc*sqrt(r2)); - float x = f*zfact*center.x+0.5; - float y = f*zfact*center.y+0.5; - float2 rcoord = (f*eta.r)*zfact*(center.xy*0.5)+0.5; - float2 gcoord = (f*eta.g)*zfact*(center.xy*0.5)+0.5; - float2 bcoord = (f*eta.b)*zfact*(center.xy*0.5)+0.5; - float4 idist = float4(tex2D(SamplerColor,rcoord).r, - tex2D(SamplerColor,gcoord).g, - tex2D(SamplerColor,bcoord).b,1.0); - if ( lensclamp ) - { - if ( (rcoord.x < 0.0) || (rcoord.x >= 1.0) ) - idist.r *= 0.0; - if ( (rcoord.y < 0.0) || (rcoord.y >= 1.0) ) - idist.r *= 0.0; - if ( (gcoord.x < 0.0) || (gcoord.x >= 1.0) ) - idist.g *= 0.0; - if ( (gcoord.y < 0.0) || (gcoord.y >= 1.0) ) - idist.g *= 0.0; - if ( (bcoord.x < 0.0) || (bcoord.x >= 1.0) ) - idist.b *= 0.0; - if ( (bcoord.y < 0.0) || (bcoord.y >= 1.0) ) - idist.b *= 0.0; - } - res.rgb = idist.rgb; - res.a = 1.0; - return res; -} -/* Retro rockets */ -float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( !useblock ) - return res; - float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float4 tcol; - float2 bresl = rresl; - if ( bresx <= 0 || bresy <= 0 ) - bresl = rresl; - else - { - if ( bresx <= 1.0 ) - bresl.x = rresl.x*bresx; - else - bresl.x = bresx; - if ( bresy <= 1.0 ) - bresl.y = rresl.y*bresy; - else - bresl.y = bresy; - } - float2 ncoord = coord; - ncoord = (coord-float2(0.5,0.5))+float2(0.5,0.5); - ncoord = floor(ncoord*bresl)/bresl; - if ( bresx <= 0 || bresy <= 0 ) - ncoord = coord; - tcol = tex2D(SamplerColor,ncoord); - if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 ) - tcol *= 0; - if ( paltype == 0 ) - res = ReduceCGA(tcol,coord*bresl); - else if ( paltype == 1 ) - res = ReduceEGA(tcol,coord*bresl); - else if ( paltype == 2 ) - res = ReduceRGB2(tcol,coord*bresl); - else if ( paltype == 3 ) - res = ReduceRGB323(tcol,coord*bresl); - else if ( paltype == 4 ) - res = ReduceRGB4(tcol,coord*bresl); - else if ( paltype == 5 ) - res = ReduceRGB565(tcol,coord*bresl); - else if ( paltype == 6 ) - res = ReduceRGB6(tcol,coord*bresl); - else - res = tcol; - res.a = 1.0; - return res; -} -technique PostProcess -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_Grain(); - 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_Curve(); - 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_Retro(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } +/* + menbextrafilters.fx : MariENB extra 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; +} +/* helpers */ +float3 rgb2hsv( float3 c ) +{ + float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0); + float4 p = (c.g0.5); + } + float dist = 2.0; + int idx = 0; + if ( cgapal == 1 ) + { + for ( int i=0; i<4; i++ ) + if ( distance(dac.rgb,cga1l[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga1l[i]); + } + color.rgb = cga1l[idx]; + } + else if ( cgapal == 2 ) + { + for ( int i=0; i<4; i++ ) + if ( distance(dac.rgb,cga1h[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga1h[i]); + } + color.rgb = cga1h[idx]; + } + else if ( cgapal == 3 ) + { + for ( int i=0; i<4; i++ ) + if ( distance(dac.rgb,cga2l[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga2l[i]); + } + color.rgb = cga2l[idx]; + } + else if ( cgapal == 4 ) + { + for ( int i=0; i<4; i++ ) + if ( distance(dac.rgb,cga2h[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga2h[i]); + } + color.rgb = cga2h[idx]; + } + else if ( cgapal == 5 ) + { + for ( int i=0; i<4; i++ ) + if ( distance(dac.rgb,cga3l[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga3l[i]); + } + color.rgb = cga3l[idx]; + } + else if ( cgapal == 6 ) + { + for ( int i=0; i<4; i++ ) + if ( distance(dac.rgb,cga3h[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,cga3h[i]); + } + color.rgb = cga3h[idx]; + } + return color; +} +float4 ReduceEGA( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + float dist = 2.0; + int idx = 0; + if ( egapal == 0 ) + { + for ( int i=0; i<16; i++ ) + if ( distance(dac.rgb,stdega[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,stdega[i]); + } + color.rgb = stdega[idx]; + } + else + { + for ( int i=0; i<16; i++ ) + if ( distance(dac.rgb,aosega[i]) < dist ) + { + idx = i; + dist = distance(dac.rgb,aosega[i]); + } + color.rgb = aosega[idx]; + } + return color; +} +float4 ReduceRGB2( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*4.0)/4.0; + return color; +} +float4 ReduceRGB323( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*float3(8.0,4.0,8.0))/float3(8.0,4.0,8.0); + return color; +} +float4 ReduceRGB4( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*16.0)/16.0; + return color; +} +float4 ReduceRGB565( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*float3(32.0,64.0,32.0)) + /float3(32.0,64.0,32.0); + return color; +} +float4 ReduceRGB6( in float4 color, in float2 coord ) +{ + float4 dac = ReducePrepass(color,coord); + color.rgb = trunc(dac.rgb*64.0)/64.0; + return color; +} +/* darken borders */ +float3 Vignette( float3 res, 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)); +} +/* letterbox filter */ +float3 Letterbox( float3 res, float2 coord ) +{ + if ( abs(2.0*coord.y-1.0) > boxv ) return float3(0,0,0); + return res; +} +/* Fuzzy */ +float3 FilmGrain( float3 res, 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; +} +/* Retro rockets */ +float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR +{ + float2 coord = IN.txcoord.xy; + float4 res = tex2D(SamplerColor,coord); + if ( !useblock ) return res; + float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float4 tcol; + float2 bresl = rresl; + float2 sresl = float2(sresx,sresy); + if ( bresx <= 0 || bresy <= 0 ) bresl = rresl; + else + { + if ( bresx <= 1.0 ) bresl.x = rresl.x*bresx; + else bresl.x = bresx; + if ( bresy <= 1.0 ) bresl.y = rresl.y*bresy; + else bresl.y = bresy; + } + if ( sresl.x <= 0 ) sresl.x = rresl.x/bresl.x; + if ( sresl.y <= 0 ) sresl.y = rresl.y/bresl.y; + float2 ncoord = coord*(rresl/bresl); + 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); + 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 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 +{ + 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; + } +} +technique PostProcess2 +{ + 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; + } +} +technique PostProcess3 +{ + 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; + } } \ No newline at end of file diff --git a/enbseries/menbextrainternals.fx b/enbseries/menbextrainternals.fx index 0ac0335..7b87dc9 100644 --- a/enbseries/menbextrainternals.fx +++ b/enbseries/menbextrainternals.fx @@ -1,200 +1,202 @@ -/* - menbextrainternals.fx : MariENB extra internal variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* - 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 -/* - palettes - don't touch unless you know what you're doing -*/ -#define d(x) x/3.0 -static const float3 cga1l[4] = -{ - float3(d(0),d(0),d(0)), - float3(d(0),d(2),d(2)), - float3(d(2),d(0),d(2)), - float3(d(2),d(2),d(2)) -}; -static const float3 cga1h[4] = -{ - float3(d(0),d(0),d(0)), - float3(d(1),d(3),d(3)), - float3(d(3),d(1),d(3)), - float3(d(3),d(3),d(3)) -}; -static const float3 cga2l[4] = -{ - float3(d(0),d(0),d(0)), - float3(d(0),d(2),d(0)), - float3(d(2),d(0),d(0)), - float3(d(2),d(1),d(0)) -}; -static const float3 cga2h[4] = -{ - float3(d(0),d(0),d(0)), - float3(d(1),d(3),d(1)), - float3(d(3),d(1),d(1)), - float3(d(3),d(2),d(1)) -}; -static const float3 cga3l[4] = -{ - float3(d(0),d(0),d(0)), - float3(d(0),d(2),d(2)), - float3(d(2),d(0),d(0)), - float3(d(2),d(2),d(2)) -}; -static const float3 cga3h[4] = -{ - float3(d(0),d(0),d(0)), - float3(d(1),d(3),d(3)), - float3(d(3),d(1),d(1)), - float3(d(3),d(3),d(3)) -}; -static const float3 stdega[16] = -{ - float3(d(0),d(0),d(0)), - float3(d(2),d(0),d(0)), - float3(d(0),d(2),d(0)), - float3(d(2),d(1),d(0)), - float3(d(0),d(0),d(2)), - float3(d(2),d(0),d(2)), - float3(d(0),d(2),d(2)), - float3(d(2),d(2),d(2)), - float3(d(1),d(1),d(1)), - float3(d(3),d(1),d(1)), - float3(d(1),d(3),d(1)), - float3(d(3),d(3),d(1)), - float3(d(1),d(1),d(3)), - float3(d(3),d(1),d(3)), - float3(d(1),d(3),d(3)), - float3(d(3),d(3),d(3)) -}; -#undef d -#define d(x) x/256.0 -static const float3 aosega[16] = -{ - float3(d( 0),d( 0),d( 0)), - float3(d(128),d( 0),d( 0)), - float3(d( 32),d(128),d( 0)), - float3(d(160),d( 64),d( 32)), - float3(d( 0),d( 32),d( 88)), - float3(d( 60),d( 0),d( 88)), - float3(d( 16),d(160),d(208)), - float3(d( 88),d( 88),d( 88)), - float3(d( 32),d( 32),d( 32)), - float3(d(256),d( 64),d( 64)), - float3(d( 72),d(256),d( 64)), - float3(d(256),d(224),d( 60)), - float3(d( 48),d(128),d(256)), - float3(d(192),d( 48),d(256)), - float3(d( 72),d(224),d(256)), - float3(d(256),d(256),d(256)), -}; -#undef d -/* standard stuff */ -float4 ScreenSize; -float4 Timer; -/* samplers and textures */ -texture2D texColor; -texture2D texNoise2 -< - string ResourceName = "menbnoise1.png"; ->; -texture2D texNoise3 -< - string ResourceName = "menbnoise2.png"; ->; -sampler2D SamplerColor = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Mirror; - AddressV = Mirror; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerNoise2 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = POINT; - MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerNoise3 = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Wrap; - AddressV = Wrap; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -/* whatever */ -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord : TEXCOORD0; -}; +/* + menbextrainternals.fx : MariENB extra internal variables. + (C)2013-2015 Marisa Kirisame, UnSX Team. + Part of MariENB, the personal ENB of Marisa. + 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 +/* + palettes + don't touch unless you know what you're doing +*/ +#define d(x) x/3.0 +static const float3 cga1l[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(0),d(2),d(2)), + float3(d(2),d(0),d(2)), + float3(d(2),d(2),d(2)) +}; +static const float3 cga1h[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(1),d(3),d(3)), + float3(d(3),d(1),d(3)), + float3(d(3),d(3),d(3)) +}; +static const float3 cga2l[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(0),d(2),d(0)), + float3(d(2),d(0),d(0)), + float3(d(2),d(1),d(0)) +}; +static const float3 cga2h[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(1),d(3),d(1)), + float3(d(3),d(1),d(1)), + float3(d(3),d(2),d(1)) +}; +static const float3 cga3l[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(0),d(2),d(2)), + float3(d(2),d(0),d(0)), + float3(d(2),d(2),d(2)) +}; +static const float3 cga3h[4] = +{ + float3(d(0),d(0),d(0)), + float3(d(1),d(3),d(3)), + float3(d(3),d(1),d(1)), + float3(d(3),d(3),d(3)) +}; +static const float3 stdega[16] = +{ + float3(d(0),d(0),d(0)), + float3(d(2),d(0),d(0)), + float3(d(0),d(2),d(0)), + float3(d(2),d(1),d(0)), + float3(d(0),d(0),d(2)), + float3(d(2),d(0),d(2)), + float3(d(0),d(2),d(2)), + float3(d(2),d(2),d(2)), + float3(d(1),d(1),d(1)), + float3(d(3),d(1),d(1)), + float3(d(1),d(3),d(1)), + float3(d(3),d(3),d(1)), + float3(d(1),d(1),d(3)), + float3(d(3),d(1),d(3)), + float3(d(1),d(3),d(3)), + float3(d(3),d(3),d(3)) +}; +#undef d +#define d(x) x/256.0 +static const float3 aosega[16] = +{ + float3(d( 0),d( 0),d( 0)), + float3(d(128),d( 0),d( 0)), + float3(d( 32),d(128),d( 0)), + float3(d(160),d( 64),d( 32)), + float3(d( 0),d( 32),d( 88)), + float3(d( 60),d( 0),d( 88)), + float3(d( 16),d(160),d(208)), + float3(d( 88),d( 88),d( 88)), + float3(d( 32),d( 32),d( 32)), + float3(d(256),d( 64),d( 64)), + float3(d( 72),d(256),d( 64)), + float3(d(256),d(224),d( 60)), + float3(d( 48),d(128),d(256)), + float3(d(192),d( 48),d(256)), + float3(d( 72),d(224),d(256)), + float3(d(256),d(256),d(256)), +}; +#undef d +/* standard stuff */ +float4 ScreenSize; +float4 Timer; +float ENightDayFactor; +float EInteriorFactor; +/* samplers and textures */ +texture2D texColor; +texture2D texNoise2 +< + string ResourceName = "menbnoise1.png"; +>; +texture2D texNoise3 +< + string ResourceName = "menbnoise2.png"; +>; +sampler2D SamplerColor = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Mirror; + AddressV = Mirror; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerNoise2 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = POINT; + MipFilter = NONE; + AddressU = Wrap; + AddressV = Wrap; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +sampler2D SamplerNoise3 = sampler_state +{ + Texture = ; + MinFilter = LINEAR; + MagFilter = LINEAR; + MipFilter = NONE; + AddressU = Wrap; + AddressV = Wrap; + SRGBTexture = FALSE; + MaxMipLevel = 0; + MipMapLodBias = 0; +}; +/* whatever */ +struct VS_OUTPUT_POST +{ + float4 vpos : POSITION; + float2 txcoord : TEXCOORD0; +}; +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord : TEXCOORD0; +}; diff --git a/enbseries/menbextrasettings.fx b/enbseries/menbextrasettings.fx index 52c9a3f..754ea97 100644 --- a/enbseries/menbextrasettings.fx +++ b/enbseries/menbextrasettings.fx @@ -1,286 +1,345 @@ -/* - menbextrasettings.fx : MariENB extra user-tweakable variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* film grain */ -bool ne -< - string UIName = "UseGrain"; - string UIWidget = "Checkbox"; -> = {false}; -/* speed of grain */ -float nf -< - string UIName = "GrainFrequency"; - string UIWidget = "Spinner"; -> = {0.25}; -/* intensity of grain */ -float ni -< - string UIName = "GrainIntensity"; - string UIWidget = "Spinner"; -> = {0.15}; -/* 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"; -> = {false}; -/* - 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; -> = {0}; -/* 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; -> = {4.33}; -/* 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.07}; -/* zoom factor for curve lens (50.0 = no zoom) */ -float lenszoom -< - string UIName = "CurveLensZoom"; - string UIWidget = "Spinner"; -> = {50.25}; -/* distortion factors for lens */ -float lensdist -< - string UIName = "CurveLensDistortion"; - string UIWidget = "Spinner"; -> = {0.0}; -float lensdistc -< - string UIName = "CurveLensDistortionCubic"; - string UIWidget = "Spinner"; -> = {0.0}; -/* clamp borders of lens with black */ -bool lensclamp -< - string UIName = "CurveLensClamp"; - string UIWidget = "Checkbox"; -> = {true}; -/* BlockGFX filter, I'm proud of it */ -bool useblock -< - string UIName = "UseBlockGFX"; - string UIWidget = "Checkbox"; -> = {false}; -/* - emulated resolution: - 0 or 1 : real resolution - <1 and >0 : multiple of real resolution (e.g.: 0.5 is half resolution) - >1 : this resolution (e.g.: 320x200 is good ol' Mode 13h) -*/ -float bresx -< - string UIName = "EmulatedResX"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.5}; -float bresy -< - string UIName = "EmulatedResY"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.5}; -/* - palette type: - -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) -*/ -int paltype -< - string UIName = "PaletteType"; - string UIWidget = "Spinner"; - int UIMin = -1; - int UIMax = 6; -> = {2}; -/* - CGA palette to use: - 0 : black, white. - 1 : black, cyan, magenta, white. low contrast - 2 : black, cyan, magenta, white. high contrast - 3 : black, green, red, brown. low contrast - 4 : black, green, red, brown. high contrast - 5 : black, cyan, red, white. low contrast - 6 : black, cyan, red, white. high contrast -*/ -int cgapal -< - string UIName = "CGAPalette"; - string UIWidget = "Spinner"; - int UIMin = 0; - int UIMax = 6; -> = {1}; -/* - EGA palette to use: - 0 : Standard EGA - 1 : AOS EGA (it's designed for text, but looks well on images too) -*/ -int egapal -< - string UIName = "EGAPalette"; - string UIWidget = "Spinner"; - int UIMin = 0; - int UIMax = 1; -> = {0}; -/* - Dithering mode: - -1 : No dithering, just raw banding - 0 : 2x2 checkerboard dithering, looks like ass - 1 : 2x2 ordered dithering - 2 : 3x3 ordered dithering - 3 : 4x4 ordered dithering - 4 : 8x8 ordered dithering -*/ -int dither -< - string UIName = "DitherMode"; - string UIWidget = "Spinner"; - int UIMin = -1; - int UIMax = 4; -> = {4}; -/* gamma modifiers for base color, lower values raise midtones and viceversa */ -float bgammar -< - string UIName = "GammaModR"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.65}; -float bgammag -< - string UIName = "GammaModG"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.65}; -float bgammab -< - string UIName = "GammaModB"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.65}; -/* base brightness bump for the dither grid */ -float bdbump -< - string UIName = "DitherBump"; - string UIWidget = "Spinner"; -> = {-0.1}; -/* range multiplier for the dither grid */ -float bdmult -< - string UIName = "DitherMultiplier"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {0.3}; -/* saturation modifiers for base color, helps with limited palettes */ -float bsaturationr -< - string UIName = "SaturationModR"; - string UIWidget = "Spinner"; -> = {1.0}; -float bsaturationg -< - string UIName = "SaturationModG"; - string UIWidget = "Spinner"; -> = {1.0}; -float bsaturationb -< - string UIName = "SaturationModB"; - string UIWidget = "Spinner"; -> = {1.0}; +/* + menbextrasettings.fx : MariENB extra 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). +*/ +/* 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 */ +bool useblock +< + string UIName = "UseBlockGFX"; + string UIWidget = "Checkbox"; +> = {false}; +/* + emulated resolution: + 0 or 1 : real resolution + <1 and >0 : multiple of real resolution (e.g.: 0.5 is half resolution) + >1 : this resolution (e.g.: 320x200 is good ol' Mode 13h) +*/ +float bresx +< + string UIName = "EmulatedResX"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.5}; +float bresy +< + string UIName = "EmulatedResY"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.5}; +/* zooming factors (<=0 for stretch) */ +float sresx +< + string UIName = "ZoomedResX"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float sresy +< + string UIName = "ZoomedResY"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +/* + palette type: + -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) +*/ +int paltype +< + string UIName = "PaletteType"; + string UIWidget = "Spinner"; + int UIMin = -1; + int UIMax = 6; +> = {2}; +/* + CGA palette to use: + 0 : black, white. + 1 : black, cyan, magenta, white. low contrast + 2 : black, cyan, magenta, white. high contrast + 3 : black, green, red, brown. low contrast + 4 : black, green, red, brown. high contrast + 5 : black, cyan, red, white. low contrast + 6 : black, cyan, red, white. high contrast +*/ +int cgapal +< + string UIName = "CGAPalette"; + string UIWidget = "Spinner"; + int UIMin = 0; + int UIMax = 6; +> = {1}; +/* + EGA palette to use: + 0 : Standard EGA + 1 : AOS EGA (it's designed for text, but looks well on images too) +*/ +int egapal +< + string UIName = "EGAPalette"; + string UIWidget = "Spinner"; + int UIMin = 0; + int UIMax = 1; +> = {0}; +/* + Dithering mode: + -1 : No dithering, just raw banding + 0 : 2x2 checkerboard dithering, looks like ass + 1 : 2x2 ordered dithering + 2 : 3x3 ordered dithering + 3 : 4x4 ordered dithering + 4 : 8x8 ordered dithering +*/ +int dither +< + string UIName = "DitherMode"; + string UIWidget = "Spinner"; + int UIMin = -1; + int UIMax = 4; +> = {4}; +/* gamma modifier for base color, lower values raise midtones and viceversa */ +float bgamma +< + string UIName = "GammaMod"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.65}; +/* base brightness bump for the dither grid */ +float bdbump +< + string UIName = "DitherBump"; + string UIWidget = "Spinner"; +> = {-0.1}; +/* range multiplier for the dither grid */ +float bdmult +< + string UIName = "DitherMultiplier"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.3}; +/* saturation modifier for base color, helps with limited palettes */ +float bsaturation +< + string UIName = "SaturationMod"; + string UIWidget = "Spinner"; +> = {1.0}; diff --git a/enbseries/menbprepassfilters.fx b/enbseries/menbprepassfilters.fx index 829118d..601e4e6 100644 --- a/enbseries/menbprepassfilters.fx +++ b/enbseries/menbprepassfilters.fx @@ -1,459 +1,519 @@ -/* - menbprepassfilters.fx : MariENB prepass shader routines. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -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; -} -/* - Whoever wrote this shit deserves to die a slow, painful death for - commiting a crime against good programming. I'm leaving the algorithm - itself unaltered so you can see for yourself just how fucking disgusting it - is (yes, it says "linearlize"). -*/ -float linearlizeDepth( float nonlinearDepth ) -{ - float2 dofProj = float2(0.0509804,3098.0392); - float2 dofDist = float2(0.0,0.0509804); - float4 depth = nonlinearDepth; - depth.y = -dofProj.x+dofProj.y; - depth.y = 1.0/depth.y; - depth.z = depth.y*dofProj.y; - depth.z = depth.z*-dofProj.x; - depth.x = dofProj.y*-depth.y+depth.x; - depth.x = 1.0/depth.x; - depth.y = depth.z*depth.x; - depth.x = depth.z*depth.x-dofDist.y; - depth.x += dofDist.x*-0.5; - depth.x = max(depth.x,0.0); - return depth.x; -} -#define depthlinear(x) linearlizeDepth(tex2D(SamplerDepth,x).r) -/* New and improved edge detection, generally useful for contour shading */ -float4 PS_Edge( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - if ( noedge ) - return tex2D(SamplerColor,coord); - 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 mdx, mdy, mud; - /* this reduces texture fetches by half, big difference */ - float3x3 depths; - depths[0][0] = depthlinear(coord+float2(-1,-1)*bof); - depths[1][0] = depthlinear(coord+float2(0,-1)*bof); - depths[2][0] = depthlinear(coord+float2(1,-1)*bof); - depths[0][1] = depthlinear(coord+float2(-1,0)*bof); - depths[1][1] = depthlinear(coord); - depths[2][1] = depthlinear(coord+float2(1,0)*bof); - depths[0][2] = depthlinear(coord+float2(-1,1)*bof); - depths[1][2] = depthlinear(coord+float2(0,1)*bof); - depths[2][2] = depthlinear(coord+float2(1,1)*bof); - mdx = GX[0][0]*depths[0][0]; - mdx += GX[1][0]*depths[1][0]; - mdx += GX[2][0]*depths[2][0]; - mdx += GX[0][1]*depths[0][1]; - mdx += GX[1][1]*depths[1][1]; - mdx += GX[2][1]*depths[2][1]; - mdx += GX[0][2]*depths[0][2]; - mdx += GX[1][2]*depths[1][2]; - mdx += GX[2][2]*depths[2][2]; - mdy = GY[0][0]*depths[0][0]; - mdy += GY[1][0]*depths[1][0]; - mdy += GY[2][0]*depths[2][0]; - mdy += GY[0][1]*depths[0][1]; - mdy += GY[1][1]*depths[1][1]; - mdy += GY[2][1]*depths[2][1]; - mdy += GY[0][2]*depths[0][2]; - mdy += GY[1][2]*depths[1][2]; - mdy += GY[2][2]*depths[2][2]; - 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); - float4 res = tex2D(SamplerColor,coord); - if ( edgeview ) - res.rgb = mud; - else - res.rgb -= mud; - res.a = 1.0; - return saturate(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_SSAO( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( !ssaoenable ) - return res; - float2 bresl; - if ( (fixedx > 0) && (fixedy > 0) ) - bresl = float2(fixedx,fixedy); - else - bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); - float depth = tex2D(SamplerDepth,coord).x; - float3 normal = pseudonormal(depth,coord); - float2 nc = coord*(bresl/256.0); - float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaoradius; - float3 rnormal = tex2D(SamplerNoise3,nc).xyz*2.0-1.0; - normal = normalize(normal+rnormal*ssaonoise); - float occ = 0.0; - int i; - float ldepth = depthlinear(coord); - for ( i=0; i<16; i++ ) - { - float3 sample = reflect(ssao_samples[i],normal); - float sampledepth = depthlinear(coord+sample.xy*bof); - float diff = sampledepth-ldepth; - if ( ldepth < sampledepth ) - occ += 1.0/(1.0+pow(diff,2)); - } - float uocc = saturate(1.0-occ/16.0); - float fade = 1.0-depth; - uocc *= saturate(pow(fade,ssaofadepow)*ssaofademult); - uocc = saturate(pow(uocc,ssaopow)*ssaomult); - if ( depth >= 0.999999 ) - uocc = 0.0; - if ( ssaodebug == 1 ) - return saturate(1.0-(uocc*ssaoblend)); - if ( ssaodebug == 2 ) - return (float4(normal.x,normal.y,normal.z,1.0)+1.0)*0.5; - res.a = saturate(1.0-(uocc*ssaoblend)); - return res; -} -float4 PS_SSAO_Post( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR -{ - float2 coord = IN.txcoord.xy; - float4 res = tex2D(SamplerColor,coord); - if ( !ssaoenable ) - return res; - if ( !ssaobenable || (ssaodebug == 2) ) - return res*res.a; - 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); - res.a = gauss7[3][3]*tex2D(SamplerColor,coord+float2(-3,-3)*bof).a; - res.a += gauss7[2][3]*tex2D(SamplerColor,coord+float2(-2,-3)*bof).a; - res.a += gauss7[1][3]*tex2D(SamplerColor,coord+float2(-1,-3)*bof).a; - res.a += gauss7[0][3]*tex2D(SamplerColor,coord+float2(0,-3)*bof).a; - res.a += gauss7[1][3]*tex2D(SamplerColor,coord+float2(1,-3)*bof).a; - res.a += gauss7[2][3]*tex2D(SamplerColor,coord+float2(2,-3)*bof).a; - res.a += gauss7[3][3]*tex2D(SamplerColor,coord+float2(3,-3)*bof).a; - res.a += gauss7[3][2]*tex2D(SamplerColor,coord+float2(-3,-2)*bof).a; - res.a += gauss7[2][2]*tex2D(SamplerColor,coord+float2(-2,-2)*bof).a; - res.a += gauss7[1][2]*tex2D(SamplerColor,coord+float2(-1,-2)*bof).a; - res.a += gauss7[0][2]*tex2D(SamplerColor,coord+float2(0,-2)*bof).a; - res.a += gauss7[1][2]*tex2D(SamplerColor,coord+float2(1,-2)*bof).a; - res.a += gauss7[2][2]*tex2D(SamplerColor,coord+float2(2,-2)*bof).a; - res.a += gauss7[3][2]*tex2D(SamplerColor,coord+float2(3,-2)*bof).a; - res.a += gauss7[3][1]*tex2D(SamplerColor,coord+float2(-3,-1)*bof).a; - res.a += gauss7[2][1]*tex2D(SamplerColor,coord+float2(-2,-1)*bof).a; - res.a += gauss7[1][1]*tex2D(SamplerColor,coord+float2(-1,-1)*bof).a; - res.a += gauss7[0][1]*tex2D(SamplerColor,coord+float2(0,-1)*bof).a; - res.a += gauss7[1][1]*tex2D(SamplerColor,coord+float2(1,-1)*bof).a; - res.a += gauss7[2][1]*tex2D(SamplerColor,coord+float2(2,-1)*bof).a; - res.a += gauss7[3][1]*tex2D(SamplerColor,coord+float2(3,-1)*bof).a; - res.a += gauss7[3][0]*tex2D(SamplerColor,coord+float2(-3,0)*bof).a; - res.a += gauss7[2][0]*tex2D(SamplerColor,coord+float2(-2,0)*bof).a; - res.a += gauss7[1][0]*tex2D(SamplerColor,coord+float2(-1,0)*bof).a; - res.a += gauss7[0][0]*tex2D(SamplerColor,coord+float2(0,0)*bof).a; - res.a += gauss7[1][0]*tex2D(SamplerColor,coord+float2(1,0)*bof).a; - res.a += gauss7[2][0]*tex2D(SamplerColor,coord+float2(2,0)*bof).a; - res.a += gauss7[3][0]*tex2D(SamplerColor,coord+float2(3,0)*bof).a; - res.a += gauss7[3][1]*tex2D(SamplerColor,coord+float2(-3,1)*bof).a; - res.a += gauss7[2][1]*tex2D(SamplerColor,coord+float2(-2,1)*bof).a; - res.a += gauss7[1][1]*tex2D(SamplerColor,coord+float2(-1,1)*bof).a; - res.a += gauss7[0][1]*tex2D(SamplerColor,coord+float2(0,1)*bof).a; - res.a += gauss7[1][1]*tex2D(SamplerColor,coord+float2(1,1)*bof).a; - res.a += gauss7[2][1]*tex2D(SamplerColor,coord+float2(2,1)*bof).a; - res.a += gauss7[3][1]*tex2D(SamplerColor,coord+float2(3,1)*bof).a; - res.a += gauss7[3][2]*tex2D(SamplerColor,coord+float2(-3,2)*bof).a; - res.a += gauss7[2][2]*tex2D(SamplerColor,coord+float2(-2,2)*bof).a; - res.a += gauss7[1][2]*tex2D(SamplerColor,coord+float2(-1,2)*bof).a; - res.a += gauss7[0][2]*tex2D(SamplerColor,coord+float2(0,2)*bof).a; - res.a += gauss7[1][2]*tex2D(SamplerColor,coord+float2(1,2)*bof).a; - res.a += gauss7[2][2]*tex2D(SamplerColor,coord+float2(2,2)*bof).a; - res.a += gauss7[3][2]*tex2D(SamplerColor,coord+float2(3,2)*bof).a; - if ( ssaodebug == 1 ) - return res.a; - res *= res.a; - return res; -} -/* Focus */ -float4 PS_ReadFocus( VS_OUTPUT_POST IN ) : COLOR -{ - if ( dofdisable ) - return 0.0; - float tod = ENightDayFactor; - float ind = EInteriorFactor; - float focusmax = lerp(lerp(focusmax_n,focusmax_d,tod),lerp(focusmax_in, - focusmax_id,tod),ind); - float cfocus = min(tex2D(SamplerDepth,0.5),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; - /* unrolled this too... *sigh* */ - coord.x = 0.5+sin(0.0)*bof.x; - coord.y = 0.5+cos(0.0)*bof.y; - mfocus = step*min(tex2D(SamplerDepth,coord),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),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),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_DoF( VS_OUTPUT_POST IN, float2 vPos : VPOS, uniform int p ) : COLOR -{ - float2 coord = IN.txcoord.xy; - if ( dofdisable || (!doftwopass && (p != 0)) ) - return tex2D(SamplerColor,coord); - float tod = ENightDayFactor; - float ind = EInteriorFactor; - 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; - if ( dofsmooth ) - { - dep = gauss3[1][1]*tex2D(SamplerDepth,coord+float2(-1,-1)*bof); - dep += gauss3[0][1]*tex2D(SamplerDepth,coord+float2(0,-1)*bof); - dep += gauss3[1][1]*tex2D(SamplerDepth,coord+float2(1,-1)*bof); - dep += gauss3[1][0]*tex2D(SamplerDepth,coord+float2(-1,0)*bof); - dep += gauss3[0][0]*tex2D(SamplerDepth,coord+float2(0,0)*bof); - dep += gauss3[1][0]*tex2D(SamplerDepth,coord+float2(1,0)*bof); - dep += gauss3[1][1]*tex2D(SamplerDepth,coord+float2(-1,1)*bof); - dep += gauss3[0][1]*tex2D(SamplerDepth,coord+float2(0,1)*bof); - dep += gauss3[1][1]*tex2D(SamplerDepth,coord+float2(1,1)*bof); - } - else - dep = tex2D(SamplerDepth,coord); - float foc = tex2D(SamplerFocus,coord).x; - float dfc = abs(dep-foc); - float dff = abs(dep); - float dfu = dff; - 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); - if ( dofcutoff && (dep >= 0.999999) ) - dfc = 0.0; - dfc = saturate(dfc); - /* aaand another unrolled loop */ - float4 res; - bof *= pow(2,p); - res = gauss5[2][2]*tex2D(SamplerColor,coord+float2(-2,-2)*bof*dfc); - res += gauss5[1][2]*tex2D(SamplerColor,coord+float2(-1,-2)*bof*dfc); - res += gauss5[0][2]*tex2D(SamplerColor,coord+float2(0,-2)*bof*dfc); - res += gauss5[1][2]*tex2D(SamplerColor,coord+float2(1,-2)*bof*dfc); - res += gauss5[2][2]*tex2D(SamplerColor,coord+float2(2,-2)*bof*dfc); - res += gauss5[2][1]*tex2D(SamplerColor,coord+float2(-2,-1)*bof*dfc); - res += gauss5[1][1]*tex2D(SamplerColor,coord+float2(-1,-1)*bof*dfc); - res += gauss5[0][1]*tex2D(SamplerColor,coord+float2(0,-1)*bof*dfc); - res += gauss5[1][1]*tex2D(SamplerColor,coord+float2(1,-1)*bof*dfc); - res += gauss5[2][1]*tex2D(SamplerColor,coord+float2(2,-1)*bof*dfc); - res += gauss5[2][0]*tex2D(SamplerColor,coord+float2(-2,0)*bof*dfc); - res += gauss5[1][0]*tex2D(SamplerColor,coord+float2(-1,0)*bof*dfc); - res += gauss5[0][0]*tex2D(SamplerColor,coord+float2(0,0)*bof*dfc); - res += gauss5[1][0]*tex2D(SamplerColor,coord+float2(1,0)*bof*dfc); - res += gauss5[2][0]*tex2D(SamplerColor,coord+float2(2,0)*bof*dfc); - res += gauss5[2][1]*tex2D(SamplerColor,coord+float2(-2,1)*bof*dfc); - res += gauss5[1][1]*tex2D(SamplerColor,coord+float2(-1,1)*bof*dfc); - res += gauss5[0][1]*tex2D(SamplerColor,coord+float2(0,1)*bof*dfc); - res += gauss5[1][1]*tex2D(SamplerColor,coord+float2(1,1)*bof*dfc); - res += gauss5[2][1]*tex2D(SamplerColor,coord+float2(2,1)*bof*dfc); - res += gauss5[2][2]*tex2D(SamplerColor,coord+float2(-2,2)*bof*dfc); - res += gauss5[1][2]*tex2D(SamplerColor,coord+float2(-1,2)*bof*dfc); - res += gauss5[0][2]*tex2D(SamplerColor,coord+float2(0,2)*bof*dfc); - res += gauss5[1][2]*tex2D(SamplerColor,coord+float2(1,2)*bof*dfc); - res += gauss5[2][2]*tex2D(SamplerColor,coord+float2(2,2)*bof*dfc); - if ( dofdebug == 1 ) - return dfc; - else if ( dofdebug == 2 ) - return tex2D(SamplerDepth,coord); - 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_Edge(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess2 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_SSAO(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess3 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_SSAO_Post(); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess4 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_DoF(0); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} -technique PostProcess5 -{ - pass p0 - { - VertexShader = compile vs_3_0 VS_Pass(); - PixelShader = compile ps_3_0 PS_DoF(1); - DitherEnable = FALSE; - ZEnable = FALSE; - CullMode = NONE; - ALPHATESTENABLE = FALSE; - SEPARATEALPHABLENDENABLE = FALSE; - AlphaBlendEnable = FALSE; - StencilEnable = FALSE; - FogEnable = FALSE; - SRGBWRITEENABLE = FALSE; - } -} +/* + 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 index 1ae4305..39cfeb7 100644 --- a/enbseries/menbprepassinternals.fx +++ b/enbseries/menbprepassinternals.fx @@ -1,151 +1,184 @@ -/* - menbprepassinternals.fx : MariENB prepass internal variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* 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 blur matrices */ -static const float2x2 gauss3 = -{ - 0.16,0.12, - 0.12,0.09 -}; -static const float3x3 gauss5 = -{ - 0.0865051903114,0.0692041522491,0.0346020761246, - 0.0692041522491,0.0553633217993,0.0276816609, - 0.0346020761246,0.0276816609,0.01384083045 -}; -static const float4x4 gauss7 = -{ - 0.0632507440209,0.0527089533508,0.0301194019147,0.011294775718, - 0.0527089533508,0.0439241277923,0.0250995015956,0.00941231309835, - 0.0301194019147,0.0250995015956,0.01434257234,0.00537846462763, - 0.011294775718,0.00941231309835,0.00537846462763,0.00201692423536 -}; -/* SSAO sample sphere */ -static const float3 ssao_samples[16] = -{ - float3( 0.5381, 0.1856,-0.4319),float3( 0.1379, 0.2486, 0.4430), - float3( 0.3371, 0.5679,-0.0057),float3(-0.6999,-0.0451,-0.0019), - float3( 0.0689,-0.1598,-0.8547),float3( 0.0560, 0.0069,-0.1843), - float3(-0.0146, 0.1402, 0.0762),float3( 0.0100,-0.1924,-0.0344), - float3(-0.3577,-0.5301,-0.4358),float3(-0.3169, 0.1063, 0.0158), - float3( 0.0103,-0.5869, 0.0046),float3(-0.0897,-0.4940, 0.3287), - float3( 0.7119,-0.0154,-0.0918),float3(-0.0533, 0.0596,-0.5411), - float3( 0.0352,-0.0631, 0.5460),float3(-0.4776, 0.2847,-0.0271) -}; -/* standard stuff */ -float4 ScreenSize; -float ENightDayFactor; -float EInteriorFactor; -float FadeFactor; -float4 Timer; -/* 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 = Mirror; - AddressV = Mirror; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerDepth = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D 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 = LINEAR; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -sampler2D SamplerPrev = sampler_state -{ - Texture = ; - MinFilter = LINEAR; - MagFilter = LINEAR; - MipFilter = NONE; - AddressU = Clamp; - AddressV = Clamp; - SRGBTexture = FALSE; - MaxMipLevel = 0; - MipMapLodBias = 0; -}; -/* whatever */ -struct VS_OUTPUT_POST -{ - float4 vpos : POSITION; - float2 txcoord : TEXCOORD0; -}; -struct VS_INPUT_POST -{ - float3 pos : POSITION; - float2 txcoord : TEXCOORD0; -}; +/* + 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 index 4855ff0..466eb4e 100644 --- a/enbseries/menbprepasssettings.fx +++ b/enbseries/menbprepasssettings.fx @@ -1,411 +1,561 @@ -/* - menbprepasssettings.fx : MariENB prepass user-tweakable variables. - (C)2013-2014 Marisa Kirisame, UnSX Team. - Part of MariENB, the personal ENB of Marisa. - Released under the WTFPL. -*/ -/* fixed resolution, keeps blur filters at a consistent internal resolution */ -int fixedx -< - string UIName = "_FixedResolutionX"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {0}; -int fixedy -< - string UIName = "_FixedResolutionY"; - string UIWidget = "Spinner"; - int UIMin = 0; -> = {0}; -/* circle (triangle, actually) average focus */ -bool focuscircle -< - string UIName = "FocusCircleEnable"; - string UIWidget = "Checkbox"; -> = {false}; -/* 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; -> = {1.0}; -float dofmult_d -< - string UIName = "DoFMultDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dofmult_in -< - string UIName = "DoFMultInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dofmult_id -< - string UIName = "DoFMultInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -/* dof power (falloff, kinda) */ -float dofpow_n -< - string UIName = "DoFPowNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dofpow_d -< - string UIName = "DoFPowDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dofpow_in -< - string UIName = "DoFPowInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float dofpow_id -< - string UIName = "DoFPowInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.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; -> = {1.0}; -float doffixedunfocuspow_d -< - string UIName = "DoFFixedUnfocusedPowDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedunfocuspow_in -< - string UIName = "DoFFixedUnfocusedPowInteriorNight"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.0}; -float doffixedunfocuspow_id -< - string UIName = "DoFFixedUnfocusedPowInteriorDay"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.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}; -/* display dof factors per pixel, or just the whole depth buffer */ -int dofdebug -< - string UIName = "DoFDebug"; - string UIWidget = "Checkbox"; - int UIMin = 0; - int UIMax = 2; -> = 0; -/* two-pass blur, makes you shortsighted */ -bool doftwopass -< - string UIName = "DoFTwoPass"; - string UIWidget = "Checkbox"; -> = {false}; -/* disable depth of field, in case you want just the contour filter */ -bool dofdisable -< - string UIName = "DoFDisable"; - string UIWidget = "Checkbox"; -> = {false}; -/* enable depth of field smoothing (3x3 gaussian blur, slight fps loss) */ -bool dofsmooth -< - string UIName = "DoFSmoothing"; - string UIWidget = "Checkbox"; -> = {true}; -/* enable depth of field sky cutoff (keeps sky sharp, but may look weird) */ -bool dofcutoff -< - string UIName = "DoFCutoff"; - string UIWidget = "Checkbox"; -> = {false}; -/* disable edge detect filters */ -bool noedge -< - string UIName = "EdgeDisable"; - string UIWidget = "Checkbox"; -> = {true}; -/* use "edge vision" instead of contour filter (just because it looks fancy) */ -bool edgeview -< - string UIName = "EdgeView"; - string UIWidget = "Checkbox"; -> = {false}; -/* factors */ -float edgefadepow -< - string UIName = "EdgeFadePower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.6}; -float edgefademult -< - string UIName = "EdgeFadeMultiplier"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {16.0}; -float edgepow -< - string UIName = "EdgePower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float edgemult -< - string UIName = "EdgeMultiplier"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {32.0}; -/* ssao filter */ -bool ssaoenable -< - string UIName = "SSAOEnable"; - string UIWidget = "Checkbox"; -> = {false}; -int ssaodebug -< - string UIName = "SSAODebug"; - string UIWidget = "Spinner"; - int UIMin = 0; - int UIMax = 2; -> = 0; -float ssaoradius -< - string UIName = "SSAORadius"; - string UIWidget = "Spinner"; -> = {1.0}; -float ssaonoise -< - string UIName = "SSAONoise"; - string UIWidget = "Spinner"; -> = {0.5}; -float ssaofadepow -< - string UIName = "SSAOFadePower"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {1.5}; -float ssaofademult -< - string UIName = "SSAOFadeMultiplier"; - string UIWidget = "Spinner"; - float UIMin = 0.0; -> = {15.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; -> = {1.0}; -float ssaoblend -< - string UIName = "SSAOBlend"; - string UIWidget = "Spinner"; -> = {1.0}; -bool ssaobenable -< - string UIName = "SSAOBlurEnable"; - string UIWidget = "Spinner"; -> = {true}; +/* + 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