1
Fork 0

First MariENB 3 attempt for Fallout 4

This commit is contained in:
Marisa the Magician 2019-04-07 17:12:13 +02:00
commit 10d3fe13a2
49 changed files with 1638 additions and 4557 deletions

View file

@ -2,161 +2,12 @@
UseEffect=true
[EFFECT]
UseOriginalPostProcessing=false
UseOriginalObjectsProcessing=false
EnableBloom=true
EnableLens=false
EnableAdaptation=false
EnableDepthOfField=true
EnableAmbientOcclusion=true
EnableDetailedShadow=false
EnableSunRays=true
EnableSunGlare=false
UseOriginalPostProcessing=false
UseOriginalColorFilter=true
UseOriginalBloom=true
UseOriginalAdaptation=true
EnablePostPassShader=true
[COLORCORRECTION]
UsePaletteTexture=false
UseProceduralCorrection=false
Brightness=1.0
GammaCurve=1.0
[NIGHTDAY]
DetectorDefaultDay=false
DetectorLevelDay=0.5
DetectorLevelNight=0.15
DetectorLevelCurve=1.0
[ADAPTATION]
ForceMinMaxValues=false
AdaptationSensitivity=0.85
AdaptationTime=6.0
AdaptationMin=0.2
AdaptationMax=1.5
[BLOOM]
Quality=1
AmountDay=1.0
AmountNight=1.0
AmountInterior=1.0
BlueShiftAmountDay=0.0
BlueShiftAmountNight=0.0
BlueShiftAmountInterior=0.0
[LENS]
LenzReflectionIntensityDay=1.0
LenzReflectionIntensityNight=1.0
LenzReflectionIntensityInterior=1.0
LenzReflectionPowerDay=1.0
LenzReflectionPowerNight=1.0
LenzReflectionPowerInterior=1.0
LenzDirtIntensityDay=1.0
LenzDirtIntensityNight=1.0
LenzDirtIntensityInterior=1.0
LenzDirtPowerDay=1.0
LenzDirtPowerNight=1.0
LenzDirtPowerInterior=1.0
[SSAO_SSIL]
EnableSupersampling=true
UseIndirectLighting=true
SamplingQuality=1
SamplingPrecision=1
SamplingRange=0.3
FadeFogRangeDay=2.5
FadeFogRangeNight=3.5
SizeScale=0.5
SourceTexturesScale=0.5
FilterQuality=1
AOAmount=1.0
AOAmountInterior=1.0
ILAmount=1.0
ILAmountInterior=1.0
AOIntensity=1.0
AOIntensityInterior=1.0
AOType=0
AOMixingType=0
AOMixingTypeInterior=0
EnableDenoiser=true
[ENVIRONMENT]
LightingIntensityDay=2.0
LightingIntensityNight=2.0
LightingIntensityInterior=2.0
LightingCurveDay=1.15
LightingCurveNight=1.2
LightingCurveInterior=1.25
LightingDesaturationDay=0.0
LightingDesaturationNight=0.0
LightingDesaturationInterior=0.0
AmbientLightingIntensityDay=0.25
AmbientLightingIntensityNight=0.25
AmbientLightingIntensityInterior=0.25
AmbientLightingCurveDay=2.0
AmbientLightingCurveNight=2.0
AmbientLightingCurveInterior=2.0
AmbientLightingDesaturationDay=0.0
AmbientLightingDesaturationNight=0.0
AmbientLightingDesaturationInterior=0.0
FogColorMultiplierDay=0.95
FogColorMultiplierNight=0.6
FogColorMultiplierInterior=0.4
FogColorCurveDay=1.2
FogColorCurveNight=1.6
FogColorCurveInterior=1.35
[SKY]
Enable=true
StarsIntensity=2.0
StarsCurve=2.0
CloudsIntensityDay=1.1
CloudsIntensityNight=0.400001
CloudsCurveDay=0.95
CloudsCurveNight=1.05
CloudsDesaturationDay=0.0
CloudsDesaturationNight=0.0
CloudsEdgeClamp=0.25
CloudsEdgeIntensity=0.7
GradientIntensityDay=0.9
GradientIntensityNight=0.35
GradientDesaturationDay=0.55
GradientDesaturationNight=0.2
GradientTopIntensityDay=1.05
GradientTopIntensityNight=0.4
GradientTopCurveDay=1.05
GradientTopCurveNight=1.0
GradientMiddleIntensityDay=1.0
GradientMiddleIntensityNight=0.8
GradientMiddleCurveDay=1.2
GradientMiddleCurveNight=1.3
GradientHorizonIntensityDay=1.2
GradientHorizonIntensityNight=1.4
GradientHorizonCurveDay=1.3
GradientHorizonCurveNight=1.2
SunIntensity=2.5
SunDesaturation=0.0
SunCoronaIntensity=1.0
SunCoronaCurve=0.5
SunCoronaDesaturation=0.0
MoonIntensity=1.1
MoonCurve=1.0
MoonDesaturation=0.0
MoonCoronaIntensity=1.0
[DEPTHOFFIELD]
FadeTime=0.4
[SHADOW]
DetailedShadowQuality=1
[RAYS]
SunRaysMultiplier=0.4

View file

@ -1,297 +1,62 @@
[WEATHER001]
FileName=
WeatherIDs=
[WEATHER002]
FileName=
WeatherIDs=
[WEATHER003]
FileName=
WeatherIDs=
[WEATHER004]
FileName=
WeatherIDs=
[WEATHER005]
FileName=
WeatherIDs=
[WEATHER006]
FileName=
WeatherIDs=
[WEATHER007]
FileName=
WeatherIDs=
[WEATHER008]
FileName=
WeatherIDs=
[WEATHER009]
FileName=
WeatherIDs=
[WEATHER010]
FileName=
WeatherIDs=
[WEATHER011]
FileName=
WeatherIDs=
[WEATHER012]
FileName=
WeatherIDs=
[WEATHER013]
FileName=
WeatherIDs=
[WEATHER014]
FileName=
WeatherIDs=
[WEATHER015]
FileName=
WeatherIDs=
[WEATHER016]
FileName=
WeatherIDs=
[WEATHER017]
FileName=
WeatherIDs=
[WEATHER018]
FileName=
WeatherIDs=
[WEATHER019]
FileName=
WeatherIDs=
[WEATHER020]
FileName=
WeatherIDs=
[WEATHER021]
FileName=
WeatherIDs=
[WEATHER022]
FileName=
WeatherIDs=
[WEATHER023]
FileName=
WeatherIDs=
[WEATHER024]
FileName=
WeatherIDs=
[WEATHER025]
FileName=
WeatherIDs=
[WEATHER026]
FileName=
WeatherIDs=
[WEATHER027]
FileName=
WeatherIDs=
[WEATHER028]
FileName=
WeatherIDs=
[WEATHER029]
FileName=
WeatherIDs=
[WEATHER030]
FileName=
WeatherIDs=
[WEATHER031]
FileName=
WeatherIDs=
[WEATHER032]
FileName=
WeatherIDs=
[WEATHER033]
FileName=
WeatherIDs=
[WEATHER034]
FileName=
WeatherIDs=
[WEATHER035]
FileName=
WeatherIDs=
[WEATHER036]
FileName=
WeatherIDs=
[WEATHER037]
FileName=
WeatherIDs=
[WEATHER038]
FileName=
WeatherIDs=
[WEATHER039]
FileName=
WeatherIDs=
[WEATHER040]
FileName=
WeatherIDs=
[WEATHER041]
FileName=
WeatherIDs=
[WEATHER042]
FileName=
WeatherIDs=
[WEATHER043]
FileName=
WeatherIDs=
[WEATHER044]
FileName=
WeatherIDs=
[WEATHER045]
FileName=
WeatherIDs=
[WEATHER046]
FileName=
WeatherIDs=
[WEATHER047]
FileName=
WeatherIDs=
[WEATHER048]
FileName=
WeatherIDs=
[WEATHER049]
FileName=
WeatherIDs=
[WEATHER050]
FileName=
WeatherIDs=
[WEATHER051]
FileName=
WeatherIDs=
[WEATHER052]
FileName=
WeatherIDs=
[WEATHER053]
FileName=
WeatherIDs=
[WEATHER054]
FileName=
WeatherIDs=
[WEATHER055]
FileName=
WeatherIDs=
[WEATHER056]
FileName=
WeatherIDs=
[WEATHER057]
FileName=
WeatherIDs=
[WEATHER058]
FileName=
WeatherIDs=
[WEATHER059]
FileName=
WeatherIDs=
[WEATHER060]
FileName=
WeatherIDs=
[WEATHER061]
FileName=
WeatherIDs=
[WEATHER062]
FileName=
WeatherIDs=
[WEATHER063]
FileName=
WeatherIDs=
[WEATHER064]
FileName=
WeatherIDs=
[WEATHER065]
FileName=
WeatherIDs=
[WEATHER066]
FileName=
WeatherIDs=
[WEATHER067]
FileName=
WeatherIDs=
[WEATHER068]
FileName=
WeatherIDs=
[WEATHER069]
FileName=
WeatherIDs=
[WEATHER070]
FileName=
WeatherIDs=
[WEATHER071]
FileName=
WeatherIDs=
[WEATHER072]
FileName=
WeatherIDs=
[WEATHER073]
FileName=
WeatherIDs=
[WEATHER074]
FileName=
WeatherIDs=
[WEATHER075]
FileName=
WeatherIDs=
[WEATHER076]
FileName=
WeatherIDs=
[WEATHER077]
FileName=
WeatherIDs=
[WEATHER078]
FileName=
WeatherIDs=
[WEATHER079]
FileName=
WeatherIDs=
[WEATHER080]
FileName=
WeatherIDs=
[WEATHER081]
FileName=
WeatherIDs=
[WEATHER082]
FileName=
WeatherIDs=
[WEATHER083]
FileName=
WeatherIDs=
[WEATHER084]
FileName=
WeatherIDs=
[WEATHER085]
FileName=
WeatherIDs=
[WEATHER086]
FileName=
WeatherIDs=
[WEATHER087]
FileName=
WeatherIDs=
[WEATHER088]
FileName=
WeatherIDs=
[WEATHER089]
FileName=
WeatherIDs=
[WEATHER090]
FileName=
WeatherIDs=
[WEATHER091]
FileName=
WeatherIDs=
[WEATHER092]
FileName=
WeatherIDs=
[WEATHER093]
FileName=
WeatherIDs=
[WEATHER094]
FileName=
WeatherIDs=
[WEATHER095]
FileName=
WeatherIDs=
[WEATHER096]
FileName=
WeatherIDs=
[WEATHER097]
FileName=
WeatherIDs=
[WEATHER098]
FileName=
WeatherIDs=
[WEATHER099]
FileName=
WeatherIDs=

View file

@ -1,12 +0,0 @@
/*
effect.txt : MariENB extra shader.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* do not touch this! */
#define E_SHADER_3_0
/* separate for easier maintenance */
#include "menbextrasettings.fx"
#include "menbextrainternals.fx"
#include "menbextrafilters.fx"

View file

@ -1,65 +0,0 @@
[EFFECT.TXT]
TECHNIQUE=0
UseBlockGFX=false
EmulatedResX=960.0
EmulatedResY=540.0
PaletteType=2
CGAPalette=1
EGAPalette=1
DitherMode=4
GammaMod=0.65
DitherBump=-0.1
DitherMultiplier=0.25
SaturationMod=1.5
UseCurve=false
CurveChromaAberration=0.05
CurveLensZoom=50.249985
CurveLensDistortion=0.0
CurveLensDistortionCubic=0.0
CurveLensClamp=true
UseGrain=true
GrainFrequency=2500.0
GrainIntensity=0.05
GrainSaturation=0.0
GrainTwoPass=true
GrainBlend=3
GrainTwoPassFactor=0.05
GrainMagnification1=9.5
GrainMagnification2=11.45
GrainMagnification3=11.4
GrainPass1Magnification1=3.1
GrainPass1Magnification2=3.8
GrainPass1Magnification3=3.65
GrainPass2Magnification1=5.6
GrainPass2Magnification2=0.5
GrainPass2Magnification3=3.0
GrainPower=4.0
GammaModR=0.75
GammaModG=0.75
GammaModB=0.75
SaturationModR=1.2
SaturationModG=1.2
SaturationModB=1.2
GrainDarkMaskPower=2.0
GrainDarkMaskMultiplier=1.0
UseNVGrain=false
UseNVCurve=false
UseDark=false
DarkRadiusNight=0.25
DarkRadiusDay=0.15
DarkRadiusInteriorNight=0.3
DarkRadiusInteriorDay=0.2
DarkCurveNight=1.1
DarkCurveDay=1.2
DarkCurveInteriorNight=1.15
DarkCurveInteriorDay=1.2
DarkBumpNight=-0.85
DarkBumpDay=-0.95
DarkBumpInteriorNight=-0.8
DarkBumpInteriorDay=-0.9
UseBox=false
BoxVertical=0.8
BoxSoften=0.01
BoxAlpha=1.0
ZoomedResX=0.0
ZoomedResY=0.0

View file

@ -1,12 +0,0 @@
/*
enbbloom.fx : MariENB bloom filter.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* do not touch this! */
#define E_SHADER_3_0
/* separate for easier maintenance */
#include "menbbloomsettings.fx"
#include "menbbloominternals.fx"
#include "menbbloomfilters.fx"

View file

@ -1,73 +0,0 @@
[ENBBLOOM.FX]
TECHNIQUE=0
BloomIntensityNight=1.1
BloomIntensityDay=1.05
BloomIntensityInteriorNight=1.15
BloomIntensityInteriorDay=1.1
BloomBumpNight=-0.6
BloomBumpDay=-0.75
BloomBumpInteriorNight=-0.55
BloomBumpInteriorDay=-0.65
BloomPowerNight=1.0
BloomPowerDay=1.0
BloomPowerInteriorNight=1.0
BloomPowerInteriorDay=1.0
BloomSaturationNight=0.8
BloomSaturationDay=0.75
BloomSaturationInteriorNight=0.8
BloomSaturationInteriorDay=0.75
BloomMix1=1.5
BloomMix2=1.2
BloomMix3=1.0
BloomMix4=0.7
BloomMix5=0.0
BloomMix6=0.0
BloomMix7=0.4
BloomMix8=0.3
BloomMixNoBlur=0.0
BloomMixBaseImage=0.0
BlueShiftColorNightRed=0.7
BlueShiftColorNightGreen=0.4
BlueShiftColorNightBlue=1.0
BlueShiftColorDayRed=0.2
BlueShiftColorDayGreen=0.6
BlueShiftColorDayBlue=1.0
BlueShiftColorInteriorNightRed=0.6
BlueShiftColorInteriorNightGreen=0.4
BlueShiftColorInteriorNightBlue=1.0
BlueShiftColorInteriorDayRed=0.3
BlueShiftColorInteriorDayGreen=0.7
BlueShiftColorInteriorDayBlue=1.0
BlueShiftIntensityNight=0.5
BlueShiftIntensityDay=0.4
BlueShiftIntensityInteriorNight=0.6
BlueShiftIntensityInteriorDay=0.5
EnableAnamorphicLensFlare=true
FlareBlendNight=0.9
FlareBlendDay=0.8
FlareBlendInteriorNight=0.95
FlareBlendInteriorDay=0.85
FlareBlueShiftColorNightRed=0.35
FlareBlueShiftColorNightGreen=0.2
FlareBlueShiftColorNightBlue=1.0
FlareBlueShiftColorDayRed=0.35
FlareBlueShiftColorDayGreen=0.55
FlareBlueShiftColorDayBlue=1.0
FlareBlueShiftColorInteriorNightRed=0.4
FlareBlueShiftColorInteriorNightGreen=0.2
FlareBlueShiftColorInteriorNightBlue=1.0
FlareBlueShiftColorInteriorDayRed=0.2
FlareBlueShiftColorInteriorDayGreen=0.4
FlareBlueShiftColorInteriorDayBlue=1.0
FlareBlueShiftIntensityNight=0.7
FlareBlueShiftIntensityDay=0.45
FlareBlueShiftIntensityInteriorNight=0.8
FlareBlueShiftIntensityInteriorDay=0.55
BloomCapNight=100.0
BloomCapDay=30.0
BloomCapInteriorNight=80.0
BloomCapInteriorDay=40.0
FlarePowerNight=1.1
FlarePowerDay=1.25
FlarePowerInteriorNight=1.15
FlarePowerInteriorDay=1.2

View file

@ -1,12 +1,10 @@
/*
enbeffect.fx : MariENB base shader.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* do not touch this! */
#define E_SHADER_3_0
/* separate for easier maintenance */
#include "menbeffectsettings.fx"
#include "menbeffectinternals.fx"
#include "menbeffectfilters.fx"
/*
enbeffect.fx : MariENB 3 base shader.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
#include "menbglobaldefs.fx"
#include "menbeffectsettings.fx"
#include "menbeffectinternals.fx"
#include "menbeffectfilters.fx"

View file

@ -1,157 +1,63 @@
[ENBEFFECT.FX]
TECHNIQUE=0
CompensateFactorNight=0.35
CompensateFactorDay=0.4
CompensateFactorInteriorNight=0.4
CompensateFactorInteriorDay=0.45
CompensatePowerNight=1.1
CompensatePowerDay=1.15
CompensatePowerInteriorNight=1.1
CompensatePowerInteriorDay=1.05
CompensateSaturationNight=1.05
CompensateSaturationDay=1.0
CompensateSaturationInteriorNight=1.05
CompensateSaturationInteriorDay=1.0
GradingMulRNight=1.05
GradingMulGNight=1.15
GradingMulBNight=1.1
GradingMulRDay=1.0
GradingMulGDay=1.1
GradingMulBDay=1.05
GradingMulRInteriorNight=1.05
GradingMulGInteriorNight=1.1
GradingMulBInteriorNight=1.1
GradingMulRInteriorDay=1.05
GradingMulGInteriorDay=1.1
GradingMulBInteriorDay=1.05
GradingPowRNight=0.95
GradingPowGNight=1.0
GradingPowBNight=0.85
GradingPowRDay=0.9
GradingPowGDay=1.0
GradingPowBDay=0.85
GradingPowRInteriorNight=0.9
GradingPowGInteriorNight=1.0
GradingPowBInteriorNight=0.85
GradingPowRInteriorDay=1.0
GradingPowGInteriorDay=1.0
GradingPowBInteriorDay=0.95
GradingColRNight=0.4
GradingColGNight=1.0
GradingColBNight=0.7
GradingColRDay=0.6
GradingColGDay=1.0
GradingColBDay=0.45
GradingColRInteriorNight=0.55
GradingColGInteriorNight=1.0
GradingColBInteriorNight=0.75
GradingColRInteriorDay=0.65
GradingColGInteriorDay=1.0
GradingColBInteriorDay=0.5
GradingColFactorNight=0.45
GradingColFactorDay=0.4
GradingColFactorInteriorNight=0.65
GradingColFactorInteriorDay=0.6
DarkRadiusNight=0.25
DarkRadiusDay=0.15
DarkRadiusInteriorNight=0.3
DarkRadiusInteriorDay=0.2
DarkCurveNight=1.1
DarkCurveDay=1.2
DarkCurveInteriorNight=1.15
DarkCurveInteriorDay=1.2
DarkBumpNight=-0.85
DarkBumpDay=-0.95
DarkBumpInteriorNight=-0.8
DarkBumpInteriorDay=-0.9
BoxVertical=0.8
BoxSoften=0.05
BoxAlpha=1.0
AdaptationMinNight=0.15
AdaptationMinDay=0.2
AdaptationMinInteriorNight=0.1
AdaptationMinInteriorDay=0.2
AdaptationMaxNight=1.1
AdaptationMaxDay=1.2
AdaptationMaxInteriorNight=1.05
AdaptationMaxInteriorDay=1.15
BloomSoften=true
_FixedResolutionX=1920
_FixedResolutionY=1080
BloomDebug=false
GradingSatMulNight=1.25
GradingSatMulDay=1.2
GradingSatMulInteriorNight=1.2
GradingSat<mulInteriorDay=1.0
GradingSatPowNight=1.25
GradingSatPowDay=1.2
GradingSatPowInteriorNight=1.25
GradingSatPowInteriorDay=1.2
GradingValMulNight=1.4
GradingValMulDay=1.35
GradingValMulInteriorNight=1.45
GradingVal<mulInteriorDay=1.0
GradingValPowNight=1.25
GradingValPowDay=1.3
GradingValPowInteriorNight=1.2
GradingValPowInteriorDay=1.25
GradingSatMulInteriorDay=1.15
GradingValMulInteriorDay=1.4
UseDark=true
UseAdaptation=true
UseCompensate=true
UseRGBGrading=true
UseColorizeGrading=true
UseHSVGrading=true
UseBox=true
UseTint=true
TintCap=0.51
DebugRegisters=false
UseNVTint=true
NVTintCap=0.5
NVTintCapL=0.5
NVTintCapH=1.0
NVTintMult=30.0
FadeSatPow=0.95
FadeValPow=1.16
FadeAlphaPow=1.0
FadeValMul=1.08
FadeSatMul=1.44
FadeAlphaMul=1.0
TintSatPow=0.9
TintValPow=0.94
TintAlphaPow=1.71
TintSatMul=1.33
TintValMul=1.2
TintAlphaMul=1.16
TintNVMul=1.0
VanillaBloomIntensityNight=0.25
VanillaBloomIntensityDay=0.25
VanillaBloomIntensityInteriorNight=0.25
VanillaBloomIntensityInteriorDay=0.25
VanillaBloomPowerNight=1.0
VanillaBloomPowerDay=1.0
VanillaBloomPowerInteriorNight=1.0
VanillaBloomPowerInteriorDay=1.0
VanillaBloomSaturationNight=1.0
VanillaBloomSaturationDay=1.0
VanillaBloomSaturationInteriorNight=1.0
VanillaBloomSaturationInteriorDay=1.0
VanillaBloomBumpNight=0.0
VanillaBloomBumpDay=0.0
VanillaBloomBumpInteriorNight=0.0
VanillaBloomBumpInteriorDay=0.0
ColorizeAfterHSV=true
TintingBeforeGrading=false
UseVanillaBloom=false
TintingVanilla=true
EnableVanillaGrading=true
VanillaGradingSatMul=1.0
VanillaGradingSatPow=1.0
VanillaGradingPowMul=1.0
VanillaGradingPowPow=1.0
VanillaGradingValMul=1.0
VanillaGradingValPow=1.0
TintingBlend=0.5
VanillaGradingBlend=0.5
DebugRegistersScale=8.0
TECHNIQUE=1
Enable Grain=false
Grain Speed=2500.0
Grain Intensity=0.01
Grain Saturation=0.0
Grain Two-Pass=true
Grain Blending Mode=1
Grain Dark Mask Contrast=3.56
Grain Two-Pass Factor=0.04
Grain Magnification 1=13.25
Grain Magnification 2=19.639999
Grain Magnification 3=17.35
Grain Pass 1 Magnification 1=2.05
Grain Pass 1 Magnification 2=3.11
Grain Pass 1 Magnification 3=2.22
Grain Pass 2 Magnification 1=4.25
Grain Pass 2 Magnification 2=0.42
Grain Pass 2 Magnification 3=6.29
Grain Contrast=6.08
Enable Tonemapping=true
Tonemap Shoulder Strength=1.14
Tonemap Linear Strengtht=1.09
Tonemap Linear Angle=0.32
Tonemap Toe Strengtht=1.35
Tonemap Toe Numerator=5.12
Tonemap Toe Denominator=2.45
Tonemap Linear Whitet=11.950001
Tonemap Before Compensate=false
Enable Compensate=true
Compensate Factor=0.21
Compensate Contrast=1.43
Compensate Saturationt=1.01
Enable RGB Grading=true
Grading Intensity Red=1.03
Grading Intensity Green=1.04
Grading Intensity Blue=1.02
Grading Contrast Red=1.05
Grading Contrast Green=1.07
Grading Contrast Blue=1.04
Enable Vibrance Grading=true
Grading Color Red=-0.21
Grading Color Green=-0.43
Grading Color Blue=-0.6
Grading Color Factor=-0.43
Enable HSV Grading=true
Grading Saturation Intensity=1.02
Grading Saturation Contrast=0.63
Grading Value Intensity=1.13
Grading Value Contrast=1.2
Colorize After HSV=false
Enable Vanilla Tint=true
Vanilla Tint Blend=1.0
Enable Vanilla Grading=true
Vanilla Grading Blend=1.0
Fade Before Film Filters=false
Enable LUT Grading=false
LUT Blend=0.28
Enable Post Dither=true
Dither Pattern=4
Display Bloom=false
Enable Vanilla Processing=true
Vanilla Blend=1.0

View file

@ -0,0 +1,10 @@
/*
enbeffectpostpass.fx : MariENB 3 extra shader.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
#include "menbglobaldefs.fx"
#include "menbextrasettings.fx"
#include "menbextrainternals.fx"
#include "menbextrafilters.fx"

View file

@ -0,0 +1,40 @@
[ENBEFFECTPOSTPASS.FX]
TECHNIQUE=1
Enable Block GFX=false
Emulated Resolution Width=0.0
Emulated Resolution Height=0.0
Zoom Factor X=0.0
Zoom Factor Y=0.0
Palette Type=6
CGA Palette=1
EGA Palette=0
Dithering Pattern=4
Contrast Modifier=1.2
Saturation Modifier=1.5
Dither Offset=-0.05
Dither Range=0.1
Enable ASCII=false
ASCII Monochrome=false
ASCII Blend=0.0
Enable Chroma Key=false
Chroma Key Red=0.0
Chroma Key Green=1.0
Chroma Key Blue=0.0
Chroma Key Depth=0.96
Enable Dot Matrix=false
Dot Size=2
Dot Blend=0.2
Dot Intensity=1.2
Dot Contrast=0.65
Enable Curvature=false
Curve Chromatic Aberration=0.33
Curve Zooming=56.82
Curve Distortion=21.789999
Curve Sampling Soften=0.0
Enable Blur=false
Blur Sampling Range=0.25
Enable Sharp=false
Sharp Sampling Range=0.75
Sharpening Amount=4.0
Enable Shift=false
Shift Sampling Range=0.75

View file

@ -1,12 +0,0 @@
/*
enbeffectprepass.fx : MariENB pre-pass filters.
(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 "menbprepasssettings.fx"
#include "menbprepassinternals.fx"
#include "menbprepassfilters.fx"

View file

@ -1,126 +0,0 @@
[ENBEFFECTPREPASS.FX]
TECHNIQUE=0
DoFPowNight=2.8
DoFPowDay=3.3
DoFPowInteriorNight=2.9
DoFPowInteriorDay=3.4
DoFDebug=0
DoFMultNight=935.0
DoFMultDay=940.0
DoFMultInteriorNight=795.0
DoFMultInteriorDay=650.0
FocusCircleEnable=true
FocusCircleRadiusNight=20.0
FocusCircleRadiusDay=25.0
FocusCircleRadiusInteriorNight=15.0
FocusCircleRadiusInteriorDay=20.0
FocusCircleMixNight=0.4
FocusCircleMixDay=0.5
FocusCircleMixInteriorNight=0.35
FocusCircleMixInteriorDay=0.45
FocusMaxNight=1000.0
FocusMaxDay=1000.0
FocusMaxInteriorNight=1000.0
FocusMaxInteriorDay=1000.0
DoFFixedFocusedMultNight=1.0
DoFFixedFocusedMultDay=1.0
DoFFixedFocusedMultInteriorNight=1.0
DoFFixedFocusedMultInteriorDay=1.0
DoFFixedFocusedPowNight=1.0
DoFFixedFocusedPowDay=1.0
DoFFixedFocusedPowInteriorNight=1.0
DoFFixedFocusedPowInteriorDay=1.0
DoFFixedFocusedBlendNight=0.0
DoFFixedFocusedBlendDay=0.0
DoFFixedFocusedBlendInteriorNight=0.0
DoFFixedFocusedBlendInteriorDay=0.0
DoFFixedUnfocusedMultNight=1.0
DoFFixedUnfocusedMultDay=1.0
DoFFixedUnfocusedMultInteriorNight=1.0
DoFFixedUnfocusedMultInteriorDay=1.0
DoFFixedUnfocusedPowNight=780.0
DoFFixedUnfocusedPowDay=850.0
DoFFixedUnfocusedPowInteriorNight=795.0
DoFFixedUnfocusedPowInteriorDay=875.0
DoFFixedUnfocusedBlendNight=0.0
DoFFixedUnfocusedBlendDay=0.0
DoFFixedUnfocusedBlendInteriorNight=0.0
DoFFixedUnfocusedBlendInteriorDay=0.0
DoFTwoPass=true
EdgeDisable=true
EdgeView=true
EdgeFadePower=3.0
EdgeFadeMultiplier=600.0
EdgePower=0.25
EdgeMultiplier=4.0
DoFDisable=false
DoFSmoothing=false
DoFCutoff=false
SSAOEnable=false
SSAODebug=0
SSAONormalOffset1=0.0
SSAONormalOffset2=0.01
SSAONormalOffset3=0.01
SSAONormalOffset4=0.0
SSAORadius=64.0
SSAONoise=0.1
SSAONoiseSize=1.0
SSAOFade=0.5
SSAOBump=0.0
SSAOMult=1.0
SSAOPower=2.5
SSAOBlend=1.0
SSAOBlurEnable=true
SSAOFadePower=1.25
SSAOFadeMultiplier=500.0
_FixedResolutionX=1920
_FixedResolutionY=1080
SSAOFalloff=0.01
SSAOArea=7.5
SSAOBase=0.2
SSAOStrength=1.0
SSAOMultiplier=0.5
SSAORangeMax=1.0
FocusWidth=0.1
FocusHeight=0.15
SSAOBlurTwoPass=true
SSAOBlurBilateralMultiplier=4800.0
SSAOBilateralFactor=25000.0
SSAOClampFactor=0.5
EdgeFadePowerNight=1.8
EdgeFadePowerDay=1.5
EdgeFadePowerInteriorNight=1.7
EdgeFadePowerInteriorDay=1.4
EdgeFadeMultiplierNight=7000.0
EdgeFadeMultiplierDay=8000.0
EdgeFadeMultiplierInteriorNight=4000.0
EdgeFadeMultiplierInteriorDay=5000.0
SSAOFadePowerNight=0.9
SSAOFadePowerDay=1.0
SSAOFadePowerInteriorNight=0.8
SSAOFadePowerInteriorDay=0.9
SSAOFadeMultiplierNight=600.0
SSAOFadeMultiplierDay=750.0
SSAOFadeMultiplierInteriorNight=800.0
SSAOFadeMultiplierInteriorDay=650.0
SSAOFuzzFrequency=15000.0
DepthCutoff=999949.0
DoFBilateral=true
DoFBilateralFactor=5.0
UseLinearDepth=false
DebugDepth=false
DoFBlurRadius=1.0
SSAOBlurRadius=1.0
DebugSSAO=false
DoFRelativeToFoV=false
DoFRelativeDefaultFOV=75.0
DoFRelativeFactorNight=2.0
DoFRelativeFactorDay=2.0
DoFRelativeFactorInteriorNight=2.0
DoFRelativeFactorInteriorDay=2.0
SSAOHighQualitySampling=true
EdgeEnable=false
SharpenEnable=true
SharpenRadius=1.0
SharpenClamp=0.05
SharpenBlending=1.0

View file

@ -1,76 +0,0 @@
/*
enblens.fx : MariENB Lens filters.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/*
This shader left unimplemented. Development of the filter is a massive pain
in the ass thanks to the incompetence of a certain individual named Boris
Vorontsov and the major breakage of his ENB project.
Lots of blind debugging are necessary to get the goddamn thing to compile,
and from the looks of it the filter, which works flawlessly on MariEFX, is
completely unportable to this massive bag of dicks. After DAYS of
selectively commenting out code, the only way it can compile is if the
shader does NOTHING. For ever minor change to the code, five minutes of
waiting are needed so the entire thing recompiles! FIVE MINUTES! Just how
can you fuck up that badly? By comparison eFX takes mere seconds to reload
everything on the considerably more complex MariEFX project, but this... I
can't imagine what awful programming resulted in such a terrible bottleneck.
tl;dr: Fuck you, Boris.
-- Marisa
*/
struct VS_OUTPUT_POST
{
float4 vpos : POSITION;
float2 txcoord0 : TEXCOORD0;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord0 : TEXCOORD0;
};
VS_OUTPUT_POST VS_Dummy( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
OUT.txcoord0.xy = IN.txcoord0.xy;
return OUT;
}
float4 PS_Dummy( VS_OUTPUT_POST In ) : COLOR
{
return 0.0;
}
technique Draw
{
pass p0
{
VertexShader = compile vs_3_0 VS_Dummy();
PixelShader = compile ps_3_0 PS_Dummy();
ColorWriteEnable = ALPHA|RED|GREEN|BLUE;
CullMode = NONE;
AlphaBlendEnable = FALSE;
AlphaTestEnable = FALSE;
SeparateAlphaBlendEnable = FALSE;
SRGBWriteEnable = FALSE;
}
}
technique LensPostPass
{
pass p0
{
VertexShader = compile vs_3_0 VS_Dummy();
PixelShader = compile ps_3_0 PS_Dummy();
AlphaBlendEnable = TRUE;
SrcBlend = ONE;
DestBlend = ONE;
ColorWriteEnable = RED|GREEN|BLUE;
CullMode = NONE;
AlphaTestEnable = FALSE;
SeparateAlphaBlendEnable = FALSE;
SRGBWriteEnable = FALSE;
}
}

View file

@ -1,2 +0,0 @@
[ENBLENS.FX]
TECHNIQUE=0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4 KiB

View file

@ -1,49 +0,0 @@
/*
enbsunsprite.fx : MariENB sun sprite filters.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* This shader intentionally does nothing */
struct VS_OUTPUT_POST
{
float4 vpos : POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};
VS_OUTPUT_POST VS_Dummy( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
float4 pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
OUT.vpos = pos;
OUT.txcoord.xy = IN.txcoord.xy;
return OUT;
}
float4 PS_Dummy( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
return 0.0;
}
technique Draw
{
pass P0
{
VertexShader = compile vs_3_0 VS_Dummy();
PixelShader = compile ps_3_0 PS_Dummy();
AlphaBlendEnable = TRUE;
SrcBlend = ONE;
DestBlend = ONE;
ColorWriteEnable = ALPHA|RED|GREEN|BLUE;
DitherEnable = FALSE;
ZEnable = FALSE;
CullMode = NONE;
ALPHATESTENABLE = FALSE;
SEPARATEALPHABLENDENABLE = FALSE;
StencilEnable = FALSE;
FogEnable = FALSE;
SRGBWRITEENABLE = FALSE;
}
}

View file

@ -1,2 +0,0 @@
[ENBSUNSPRITE.FX]
TECHNIQUE=0

View file

@ -0,0 +1,6 @@
[INTLIGHTSPRITE.FX]
TECHNIQUE=0
Intensity=10.0
Size (performance penalty)=0.25
Glow:: size (performance penalty)=1.0
Glow:: amount=0.012

View file

@ -1,205 +0,0 @@
/*
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<c.b)?float4(c.bg,K.wz):float4(c.gb,K.xy);
float4 q = (c.r<p.x)?float4(p.xyw,c.r):float4(c.r,p.yzx);
float d = q.x-min(q.w,q.y);
float e = 1.0e-10;
return float3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);
}
float3 hsv2rgb( float3 c )
{
float4 K = float4(1.0,2.0/3.0,1.0/3.0,3.0);
float3 p = abs(frac(c.x+K.xyz)*6.0-K.w);
return c.z*lerp(K.x,saturate(p-K.x),c.y);
}
/* pre-pass bloom texture preparation, nothing is done */
float4 PS_BloomPrePass(VS_OUTPUT_POST In) : COLOR
{
float2 coord = In.txcoord0.xy;
float bloomcap = lerp(lerp(bloomcap_n,bloomcap_d,tod),lerp(bloomcap_in,
bloomcap_id,tod),ind);
float bloombump = lerp(lerp(bloombump_n,bloombump_d,tod),
lerp(bloombump_in,bloombump_id,tod),ind);
float bloompower = lerp(lerp(bloompower_n,bloompower_d,tod),
lerp(bloompower_in,bloompower_id,tod),ind);
float bloomsaturation = lerp(lerp(bloomsaturation_n,bloomsaturation_d,
tod),lerp(bloomsaturation_in,bloomsaturation_id,tod),ind);
float bloomintensity = lerp(lerp(bloomintensity_n,bloomintensity_d,
tod),lerp(bloomintensity_in,bloomintensity_id,tod),ind);
float4 res = tex2D(SamplerBloom1,coord);
float3 hsv = rgb2hsv(res.rgb);
if ( hsv.z > 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;
}
}

View file

@ -1,141 +0,0 @@
/*
menbbloominternals.fx : MariENB bloom internal variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* gaussian blur matrices */
/* radius: 3, std dev: 0.7014 */
static const float gauss3[3] = {0.568780, 0.205851, 0.009759};
/* radius: 36, std dev: 32 */
static const float gauss36[36] =
{
0.017014, 0.017006, 0.016981, 0.016939, 0.016881, 0.016807,
0.016717, 0.016612, 0.016490, 0.016354, 0.016203, 0.016038,
0.015859, 0.015666, 0.015461, 0.015244, 0.015015, 0.014775,
0.014524, 0.014264, 0.013995, 0.013718, 0.013433, 0.013141,
0.012843, 0.012539, 0.012231, 0.011918, 0.011602, 0.011284,
0.010964, 0.010642, 0.010319, 0.009997, 0.009675, 0.009355
};
/* standard stuff */
float4 ScreenSize;
float4 TempParameters;
float4 BloomParameters;
float ENightDayFactor;
float EInteriorFactor;
/* samplers and textures */
texture2D texBloom1;
texture2D texBloom2;
texture2D texBloom3;
texture2D texBloom4;
texture2D texBloom5;
texture2D texBloom6;
texture2D texBloom7;
texture2D texBloom8;
sampler2D SamplerBloom1 = sampler_state
{
Texture = <texBloom1>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom2 = sampler_state
{
Texture = <texBloom2>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom3 = sampler_state
{
Texture = <texBloom3>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom4 = sampler_state
{
Texture = <texBloom4>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom5 = sampler_state
{
Texture = <texBloom5>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom6 = sampler_state
{
Texture = <texBloom6>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom7 = sampler_state
{
Texture = <texBloom7>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Border;
AddressV = Border;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerBloom8 = sampler_state
{
Texture = <texBloom8>;
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;
};

View file

@ -1,383 +0,0 @@
/*
menbbloomsettings.fx : MariENB bloom user-tweakable variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* bloom mix factors */
float bloommix1
<
string UIName = "BloomMix1";
string UIWidget = "Spinner";
> = {1.0};
float bloommix2
<
string UIName = "BloomMix2";
string UIWidget = "Spinner";
> = {1.0};
float bloommix3
<
string UIName = "BloomMix3";
string UIWidget = "Spinner";
> = {1.0};
float bloommix4
<
string UIName = "BloomMix4";
string UIWidget = "Spinner";
> = {1.0};
float bloommix7
<
string UIName = "BloomMix7";
string UIWidget = "Spinner";
> = {1.0};
float bloommix8
<
string UIName = "BloomMix8";
string UIWidget = "Spinner";
> = {1.0};
float bloommix5
<
string UIName = "BloomMixNoBlur";
string UIWidget = "Spinner";
> = {0.0};
float bloommix6
<
string UIName = "BloomMixBaseImage";
string UIWidget = "Spinner";
> = {0.0};
/* bloom intensity */
float bloomintensity_n
<
string UIName = "BloomIntensityNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomintensity_d
<
string UIName = "BloomIntensityDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomintensity_in
<
string UIName = "BloomIntensityInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomintensity_id
<
string UIName = "BloomIntensityInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* bloom power (contrast) */
float bloompower_n
<
string UIName = "BloomPowerNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloompower_d
<
string UIName = "BloomPowerDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloompower_in
<
string UIName = "BloomPowerInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloompower_id
<
string UIName = "BloomPowerInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* bloom saturation */
float bloomsaturation_n
<
string UIName = "BloomSaturationNight";
string UIWidget = "Spinner";
> = {1.0};
float bloomsaturation_d
<
string UIName = "BloomSaturationDay";
string UIWidget = "Spinner";
> = {1.0};
float bloomsaturation_in
<
string UIName = "BloomSaturationInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float bloomsaturation_id
<
string UIName = "BloomSaturationInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* bloom offset (negative values keep dark areas from muddying up) */
float bloombump_n
<
string UIName = "BloomBumpNight";
string UIWidget = "Spinner";
> = {-0.5};
float bloombump_d
<
string UIName = "BloomBumpDay";
string UIWidget = "Spinner";
> = {-0.5};
float bloombump_in
<
string UIName = "BloomBumpInteriorNight";
string UIWidget = "Spinner";
> = {-0.5};
float bloombump_id
<
string UIName = "BloomBumpInteriorDay";
string UIWidget = "Spinner";
> = {-0.5};
/* bloom cap (maximum brightness samples can have) */
float bloomcap_n
<
string UIName = "BloomCapNight";
string UIWidget = "Spinner";
> = {10.0};
float bloomcap_d
<
string UIName = "BloomCapDay";
string UIWidget = "Spinner";
> = {10.0};
float bloomcap_in
<
string UIName = "BloomCapInteriorNight";
string UIWidget = "Spinner";
> = {10.0};
float bloomcap_id
<
string UIName = "BloomCapInteriorDay";
string UIWidget = "Spinner";
> = {10.0};
/* bloom tint/blueshift parameters */
float blu_n_r
<
string UIName = "BlueShiftColorNightRed";
string UIWidget = "Spinner";
> = {0.65};
float blu_n_g
<
string UIName = "BlueShiftColorNightGreen";
string UIWidget = "Spinner";
> = {0.37};
float blu_n_b
<
string UIName = "BlueShiftColorNightBlue";
string UIWidget = "Spinner";
> = {1.0};
float blu_d_r
<
string UIName = "BlueShiftColorDayRed";
string UIWidget = "Spinner";
> = {0.65};
float blu_d_g
<
string UIName = "BlueShiftColorDayGreen";
string UIWidget = "Spinner";
> = {0.37};
float blu_d_b
<
string UIName = "BlueShiftColorDayBlue";
string UIWidget = "Spinner";
> = {1.0};
float blu_in_r
<
string UIName = "BlueShiftColorInteriorNightRed";
string UIWidget = "Spinner";
> = {0.65};
float blu_in_g
<
string UIName = "BlueShiftColorInteriorNightGreen";
string UIWidget = "Spinner";
> = {0.37};
float blu_in_b
<
string UIName = "BlueShiftColorInteriorNightBlue";
string UIWidget = "Spinner";
> = {1.0};
float blu_id_r
<
string UIName = "BlueShiftColorInteriorDayRed";
string UIWidget = "Spinner";
> = {0.65};
float blu_id_g
<
string UIName = "BlueShiftColorInteriorDayGreen";
string UIWidget = "Spinner";
> = {0.37};
float blu_id_b
<
string UIName = "BlueShiftColorInteriorDayBlue";
string UIWidget = "Spinner";
> = {1.0};
float bsi_n
<
string UIName = "BlueShiftIntensityNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bsi_d
<
string UIName = "BlueShiftIntensityDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bsi_in
<
string UIName = "BlueShiftIntensityInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bsi_id
<
string UIName = "BlueShiftIntensityInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* anamorphic lens flare (very intensive) */
bool alfenable
<
string UIName = "EnableAnamorphicLensFlare";
string UIWidget = "Checkbox";
> = {true};
float fbl_n
<
string UIName = "FlareBlendNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fbl_d
<
string UIName = "FlareBlendDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fbl_in
<
string UIName = "FlareBlendInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fbl_id
<
string UIName = "FlareBlendInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float flu_n_r
<
string UIName = "FlareBlueShiftColorNightRed";
string UIWidget = "Spinner";
> = {0.65};
float flu_n_g
<
string UIName = "FlareBlueShiftColorNightGreen";
string UIWidget = "Spinner";
> = {0.37};
float flu_n_b
<
string UIName = "FlareBlueShiftColorNightBlue";
string UIWidget = "Spinner";
> = {1.0};
float flu_d_r
<
string UIName = "FlareBlueShiftColorDayRed";
string UIWidget = "Spinner";
> = {0.65};
float flu_d_g
<
string UIName = "FlareBlueShiftColorDayGreen";
string UIWidget = "Spinner";
> = {0.37};
float flu_d_b
<
string UIName = "FlareBlueShiftColorDayBlue";
string UIWidget = "Spinner";
> = {1.0};
float flu_in_r
<
string UIName = "FlareBlueShiftColorInteriorNightRed";
string UIWidget = "Spinner";
> = {0.65};
float flu_in_g
<
string UIName = "FlareBlueShiftColorInteriorNightGreen";
string UIWidget = "Spinner";
> = {0.37};
float flu_in_b
<
string UIName = "FlareBlueShiftColorInteriorNightBlue";
string UIWidget = "Spinner";
> = {1.0};
float flu_id_r
<
string UIName = "FlareBlueShiftColorInteriorDayRed";
string UIWidget = "Spinner";
> = {0.65};
float flu_id_g
<
string UIName = "FlareBlueShiftColorInteriorDayGreen";
string UIWidget = "Spinner";
> = {0.37};
float flu_id_b
<
string UIName = "FlareBlueShiftColorInteriorDayBlue";
string UIWidget = "Spinner";
> = {1.0};
float fsi_n
<
string UIName = "FlareBlueShiftIntensityNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fsi_d
<
string UIName = "FlareBlueShiftIntensityDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fsi_in
<
string UIName = "FlareBlueShiftIntensityInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fsi_id
<
string UIName = "FlareBlueShiftIntensityInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_n
<
string UIName = "FlarePowerNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_d
<
string UIName = "FlarePowerDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_in
<
string UIName = "FlarePowerInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_id
<
string UIName = "FlarePowerInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

BIN
enbseries/menbdoomlut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
enbseries/menbdots.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -1,162 +0,0 @@
/*
menbdrawutil.fx : MariENB drawing utilities.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/*
This code is unused for now due to the fact ENB just shits itself and
whitescreens (sometimes goes black for a split second, then back to white)
when drawing too much text. For no known reason whatsoever, so likely it's
just because ENB is shit, period.
*/
texture2D tfnt
<
string ResourceName = "menbcgafont.png";
>;
sampler2D sfnt = sampler_state
{
Texture = <tfnt>;
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;
}

View file

@ -1,384 +1,320 @@
/*
menbeffectfilters.fx : MariENB base shader routines.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* If defined, this is for Fallout 3 and New Vegas */
#define FALLOUT
VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
OUT.txcoord0.xy = IN.txcoord0.xy;
return OUT;
}
#ifdef FALLOUT
float4 _c1 : register(c1);
float4 _c2 : register(c2);
float4 _c19 : register(c19);
float4 _c20 : register(c20);
float4 _c22 : register(c22);
#define _r1 _c1
#define _r2 _c2
#define _r3 _c19
#define _r4 _c20
#define _r5 _c22
/*
FALLOUT REGISTERS
r1 (c1): r2 (c2): r3 (c19):
x -> adapt max x -> unused x -> vibrance
y -> unused y -> unused y -> balancer
z -> unused z -> bloom mix z -> multiplier 1
w -> unused w -> unused w -> multiplier 2
r4 (c20): r5 (c22):
x -> tint red x -> fade red
y -> tint green y -> fade green
z -> tint blue z -> fade blue
w -> tint value w -> fade value
*/
#else
float4 _c1 : register(c1);
float4 _c2 : register(c2);
float4 _c3 : register(c3);
float4 _c4 : register(c4);
float4 _c5 : register(c5);
#define _r1 _c1
#define _r2 _c2
#define _r3 _c3
#define _r4 _c4
#define _r5 _c5
/*
SKYRIM REGISTERS
r1 (c1): r2 (c2): r3 (c3):
x -> adapt max x -> bloom bump (?) x -> vibrance
y -> adapt min y -> bloom mult (?) y -> unused
z -> unused z -> unused z -> multiplier 1
w -> unused w -> unused w -> multiplier 2
r4 (c4): r5 (c5):
x -> tint red x -> fade red
y -> tint green y -> fade green
z -> tint blue z -> fade blue
w -> tint value w -> fade value
*/
#endif
#define tod ENightDayFactor
#define ind EInteriorFactor
/* helper functions */
float3 rgb2hsv( float3 c )
{
float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0);
float4 p = (c.g<c.b)?float4(c.bg,K.wz):float4(c.gb,K.xy);
float4 q = (c.r<p.x)?float4(p.xyw,c.r):float4(c.r,p.yzx);
float d = q.x-min(q.w,q.y);
float e = 1.0e-10;
return float3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);
}
float3 hsv2rgb( float3 c )
{
float4 K = float4(1.0,2.0/3.0,1.0/3.0,3.0);
float3 p = abs(frac(c.x+K.xyz)*6.0-K.w);
return c.z*lerp(K.x,saturate(p-K.x),c.y);
}
/* adaptation */
float3 Adaptation( float3 res )
{
float4 adapt = tex2D(_s4,0.5);
float adapts, amin, amax;
adapts = clamp((adapt.r+adapt.g+adapt.b)/3.0,0.0,50.0);
amin = lerp(lerp(amin_n,amin_d,tod),lerp(amin_in,amin_id,tod),ind);
amax = lerp(lerp(amax_n,amax_d,tod),lerp(amax_in,amax_id,tod),ind);
return res/(adapts*amax+amin);
}
/* overbright compensation pre-pass */
float3 Compensate( float3 res )
{
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);
float3 ovr = pow(res,comppow);
float ovrs = (ovr.r+ovr.g+ovr.b)/3.0;
ovr = ovr*compsat+ovrs*(1.0-compsat);
return res-ovr*compfactor;
}
/* color grading */
float3 GradingRGB( float3 res )
{
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);
float3 grademul = float3(grademul_r,grademul_g,grademul_b);
float3 gradepow = float3(gradepow_r,gradepow_g,gradepow_b);
return pow(res,gradepow)*grademul;
}
float3 GradingColorize( float3 res )
{
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 gradecol = float3(gradecol_r,gradecol_g,gradecol_b);
float tonev = (res.r+res.g+res.b)/3.0;
float3 tonecolor = gradecol*tonev;
return res*(1.0-gradecolfact)+tonecolor*gradecolfact;
}
float3 GradingHSV( float3 res )
{
float gradesatmul = lerp(lerp(gradesatmul_n,gradesatmul_d,tod),
lerp(gradesatmul_in,gradesatmul_id,tod),ind);
float gradesatpow = lerp(lerp(gradesatpow_n,gradesatpow_d,tod),
lerp(gradesatpow_in,gradesatpow_id,tod),ind);
float gradevalmul = lerp(lerp(gradevalmul_n,gradevalmul_d,tod),
lerp(gradevalmul_in,gradevalmul_id,tod),ind);
float gradevalpow = lerp(lerp(gradevalpow_n,gradevalpow_d,tod),
lerp(gradevalpow_in,gradevalpow_id,tod),ind);
float3 hsv = rgb2hsv(res);
hsv.y = pow(hsv.y,gradesatpow)*gradesatmul;
hsv.z = pow(hsv.z,gradevalpow)*gradevalmul;
return hsv2rgb(hsv);
}
/* game screen tinting filters */
float3 Tint( float3 res )
{
float3 tgray = dot(res,0.33);
float3 tintc = _r4.rgb*tgray;
float3 tcol = tintc*_r4.a + res*(1.0-_r4.a);
return lerp(res,tcol,tintblend);
}
/* game grading filters */
float3 GradingGame( float3 res )
{
/*
Skyrim method is slightly different, but it depends explicitly on
vanilla eye adaption which is ass.
*/
float3 tgray = dot(res,0.33);
float3 tcol = res*_r3.x + tgray*(1.0-_r3.x);
tcol = max(0,(tcol*_r3.w-_r3.y)*_r3.z+_r3.y);
return lerp(res,tcol,vgradeblend);
}
/* display debug register */
float debugreg( float r, float2 coord, int p )
{
if ( r == 0.0 ) return 0.0;
if ( (coord.x < p*0.05) || (coord.x > (p+1)*0.05-0.01) ) return 0.0;
float posy = (coord.y-0.5)*2.0*regdebugscale;
if ( r < 0.0 )
{
if ( posy > 0.0 ) return 0.0;
if ( posy < r ) return 0.0;
return 1.0;
}
if ( posy < 0.0 ) return 0.0;
if ( posy > r ) return 0.0;
return 1.0;
}
/* MariENB shader */
float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
float2 coord = IN.txcoord0.xy;
float4 res = tex2D(_s0,coord);
if ( aenable ) res.rgb = Adaptation(res.rgb);
if ( compenable ) res.rgb = Compensate(res.rgb);
res += tex2D(_s3,coord)*EBloomAmount;
if ( tintbeforegrade && tintenable ) res.rgb = Tint(res.rgb);
if ( vgradeenable ) res.rgb = GradingGame(res.rgb);
if ( gradeenable1 ) res.rgb = GradingRGB(res.rgb);
if ( colorizeafterhsv )
{
if ( gradeenable3 ) res.rgb = GradingHSV(res.rgb);
if ( gradeenable2 ) res.rgb = GradingColorize(res.rgb);
}
else
{
if ( gradeenable2 ) res.rgb = GradingColorize(res.rgb);
if ( gradeenable3 ) res.rgb = GradingHSV(res.rgb);
}
if ( !tintbeforegrade && tintenable ) res.rgb = Tint(res.rgb);
res.rgb = _r5.rgb*_r5.a + res.rgb*(1.0-_r5.a); /* fade */
if ( regdebug )
{
res.rgb += debugreg(_r1.x,coord,0);
res.rgb += debugreg(_r1.y,coord,1);
res.rgb += debugreg(_r1.z,coord,2);
res.rgb += debugreg(_r1.w,coord,3);
res.rgb += debugreg(_r2.x,coord,4);
res.rgb += debugreg(_r2.y,coord,5);
res.rgb += debugreg(_r2.z,coord,6);
res.rgb += debugreg(_r2.w,coord,7);
res.rgb += debugreg(_r3.x,coord,8);
res.rgb += debugreg(_r3.y,coord,9);
res.rgb += debugreg(_r3.z,coord,10);
res.rgb += debugreg(_r3.w,coord,11);
res.rgb += debugreg(_r4.x,coord,12);
res.rgb += debugreg(_r4.y,coord,13);
res.rgb += debugreg(_r4.z,coord,14);
res.rgb += debugreg(_r4.w,coord,15);
res.rgb += debugreg(_r5.x,coord,16);
res.rgb += debugreg(_r5.y,coord,17);
res.rgb += debugreg(_r5.z,coord,18);
res.rgb += debugreg(_r5.w,coord,19);
}
res.rgb = saturate(res.rgb);
res.a = 1.0;
return res;
}
/*
So... let me get this straight... rather than simply switching techniques,
Boris just compiles the program twice with and without this macro, then
toggling "UseEffect" switches between each variation? What the fuck?
*/
#ifndef ENB_FLIPTECHNIQUE
#ifdef FALLOUT
technique Shader_C1DAE3F7
#else
technique Shader_D6EC7DD1
#endif
#else
technique Shader_ORIGINALPOSTPROCESS
#endif
{
pass p0
{
VertexShader = compile vs_3_0 VS_Pass();
PixelShader = compile ps_3_0 PS_Mari();
ColorWriteEnable = ALPHA|RED|GREEN|BLUE;
ZEnable = FALSE;
ZWriteEnable = FALSE;
CullMode = NONE;
AlphaTestEnable = FALSE;
AlphaBlendEnable = FALSE;
SRGBWRITEENABLE = FALSE;
}
}
#ifndef ENB_FLIPTECHNIQUE
technique Shader_ORIGINALPOSTPROCESS
#else
#ifdef FALLOUT
technique Shader_C1DAE3F7
#else
technique Shader_D6EC7DD1
#endif
#endif
{
pass p0
{
#ifdef FALLOUT
VertexShader = asm
{
vs_1_1
def c3,2,-2,0,0
dcl_position v0
dcl_texcoord v1
mov r0.xy,c0
mad oPos.xy,r0,-c3,v0
add oT0.xy,v1,c1
add oT1.xy,v1,c2
mov oPos.zw,v0
};
#else
VertexShader = compile vs_3_0 VS_Pass();
#endif
/*
>inline assembly
Have to keep this part intact, sadly
Boris what the fuck have you done
*/
PixelShader = asm
{
#ifdef FALLOUT
ps_2_x
def c0,0.5,0,0,0
def c3,0.298999995,0.587000012,0.114,0
dcl t0.xy
dcl t1.xy
dcl_2d s0
dcl_2d s1
texld r0,t1,s1
texld r1,t0,s0
max r0.w,r1.w,c1.x
rcp r0.w,r0.w
mul r1.w,r0.w,c0.x
mul r0.w,r0.w,c1.x
mul r1.xyz,r1,r1.w
max r2.xyz,r1,c0.y
mad r0.xyz,r0.w,r0,r2
dp3 r0.w,r0,c3
lrp r1.xyz,c19.x,r0,r0.w
mad r0.xyz,r0.w,c20,-r1
mad r0.xyz,c20.w,r0,r1
mad r0.xyz,c19.w,r0,-c19.y
mad r0.xyz,c19.z,r0,c19.y
lrp r1.xyz,c22.w,c22,r0
mov r1.w,c2.z
mov oC0,r1
#else
ps_3_0
def c6,0,0,0,0
def c7,0.212500006,0.715399981,0.0720999986,1
dcl_texcoord v0.xy
dcl_2d s0
dcl_2d s1
dcl_2d s2
rcp r0.x,c2.y
texld r1,v0,s2
mul r0.yz,r1.xxyw,c1.y
rcp r0.w,r0.y
mul r0.z,r0.w,r0.z
texld r1,v0,s1
mul r1.xyz,r1,c1.y
dp3 r0.w,c7,r1
mul r1.w,r0.w,r0.z
mad r0.z,r0.z,r0.w,c7.w
rcp r0.z,r0.z
mad r0.x,r1.w,r0.x,c7.w
mul r0.x,r0.x,r1.w
mul r0.x,r0.z,r0.x
cmp r0.x,-r0.w,c6.x,r0.x
rcp r0.z,r0.w
mul r0.z,r0.z,r0.x
add_sat r0.x,-r0.x,c2.x
texld r2,v0,s0
mul r2.xyz,r2,c1.y
mul r2.xyz,r0.x,r2
mad r1.xyz,r1,r0.z,r2
dp3 r0.x,r1,c7
mov r1.w,c7.w
lrp r2,c3.x,r1,r0.x
mad r1,r0.x,c4,-r2
mad r1,c4.w,r1,r2
mad r1,c3.w,r1,-r0.y
mad r0,c3.z,r1,r0.y
add r1,-r0,c5
mad oC0,c5.w,r1,r0
#endif
};
ColorWriteEnable = ALPHA|RED|GREEN|BLUE;
ZEnable = FALSE;
ZWriteEnable = FALSE;
CullMode = NONE;
AlphaTestEnable = FALSE;
AlphaBlendEnable = FALSE;
SRGBWRITEENABLE = FALSE;
}
}
/*
menbeffectfilters.fx : MariENB 3 base shader routines.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
OUT.pos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
OUT.txcoord0.xy = IN.txcoord0.xy;
return OUT;
}
/* helper functions */
/* photometric */
#define luminance(x) dot(x,float3(0.2126,0.7152,0.0722))
/* CCIR601 */
//#define luminance(x) dot(x,float3(0.299,0.587,0.114))
/* overlay blend */
#define overlay(a,b) (a<0.5)?(2.0*a*b):(1.0-(2.0*(1.0-a)*(1.0-b)))
/* "dark mask" blending is something I came up with and can't really explain */
#define darkmask(a,b) (a>0.5)?(2.0*a*(0.5+b)):(1.0-2.0*(1.0-a)*(1.0-((0.5+b))))
float3 rgb2hsv( float3 c )
{
float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0);
float4 p = (c.g<c.b)?float4(c.bg,K.wz):float4(c.gb,K.xy);
float4 q = (c.r<p.x)?float4(p.xyw,c.r):float4(c.r,p.yzx);
float d = q.x-min(q.w,q.y);
float e = 1.0e-10;
return float3(abs(q.z+(q.w-q.y)/(6.0*d+e)),d/(q.x+e),q.x);
}
float3 hsv2rgb( float3 c )
{
float4 K = float4(1.0,2.0/3.0,1.0/3.0,3.0);
float3 p = abs(frac(c.x+K.xyz)*6.0-K.w);
return c.z*lerp(K.x,saturate(p-K.x),c.y);
}
/* "uncharted 2" filmic tone mapping */
float3 Uch( float3 res )
{
float A = tod(unA);
float B = tod(unB);
float C = tod(unC);
float D = tod(unD);
float E = tod(unE);
float F = tod(unF);
return ((res*(A*res+C*B)+D*E)/(res*(A*res+B)+D*F))-E/F;
}
float3 Tonemap( float3 res )
{
float W = tod(unW);
float3 ucol = Uch(res);
float3 uwhite = Uch(W);
return ucol/uwhite;
}
/* overbright compensation pre-pass, kinda pointless now that I have tonemap */
float3 Compensate( float3 res )
{
/*float comppow = tod(comppow);
float compsat = tod(compsat);
float compfactor = tod(compfactor);*/
float3 ovr = pow(res,comppow);
float ovrs = luminance(ovr);
ovr = ovr*compsat+ovrs*(1.0-compsat);
return res-ovr*compfactor;
}
/* colour grading passes */
float3 GradingRGB( float3 res )
{
/*float grademul_r = tod(grademul_r);
float grademul_g = tod(grademul_g);
float grademul_b = tod(grademul_b);
float gradepow_r = tod(gradepow_r);
float gradepow_g = tod(gradepow_g);
float gradepow_b = tod(gradepow_b);*/
float3 grademul = float3(grademul_r,grademul_g,grademul_b);
float3 gradepow = float3(gradepow_r,gradepow_g,gradepow_b);
return pow(res,gradepow)*grademul;
}
float3 GradingColorize( float3 res )
{
/*float gradecol_r = tod(gradecol_r);
float gradecol_g = tod(gradecol_g);
float gradecol_b = tod(gradecol_b);
float gradecolfact = tod(gradecolfact);*/
float3 gradecol = float3(gradecol_r,gradecol_g,gradecol_b);
float tonev = luminance(res);
float3 tonecolor = gradecol*tonev;
return res*(1.0-gradecolfact)+tonecolor*gradecolfact;
}
float3 GradingHSV( float3 res )
{
/*float gradesatmul = tod(gradesatmul);
float gradesatpow = tod(gradesatpow);
float gradevalmul = tod(gradevalmul);
float gradevalpow = tod(gradevalpow);*/
float3 hsv = rgb2hsv(res);
hsv.y = clamp(pow(hsv.y,gradesatpow)*gradesatmul,0.0,1.0);
hsv.z = pow(hsv.z,gradevalpow)*gradevalmul;
return hsv2rgb(hsv);
}
/* vanilla game stuff */
float3 GameProcessing( float3 res, float2 coord )
{
float3 tcol = res;
float4 r0,r1,r2,r3;
r0.xyz = tcol;
r1.xy = Params01[4].zw*coord;
r1.xyz = TextureBloom.Sample(Linear,r1.xy).xyz;
r0.w = TextureAdaptation.Sample(Nearest,coord).x;
r1.w = Params01[1].z/(0.001+r0.w);
r2.x = r1.w<Params01[1].y;
r1.w = r2.x?Params01[1].y:r1.w;
r2.x = Params01[1].x<r1.w;
r1.w = r2.x?Params01[1].x:r1.w;
r0.xyz = r1.xyz+r0.xyz;
r0.xyz = r0.xyz*r1.w;
r1.xyz = r0.xyz+r0.xyz;
r2.xyz = r0.xyz*0.3+0.05;
r3.xy = float2(0.2,3.333333)*Params01[1].w;
r2.xyz = r1.xyz*r2.xyz+r3.x;
r0.xyz = r0.xyz*0.3+0.5;
r0.xyz = r1.xyz*r0.xyz+0.06;
r0.xyz = r2.xyz/r0.xyz;
r0.xyz = -Params01[1].w*3.333333+r0.xyz;
r1.x = Params01[1].w*0.2+19.376;
r1.x = r1.x*0.0408564-r3.y;
r1.xyz = r0.xyz/r1.x;
r0.x = dot(r1.xyz,float3(0.2125,0.7154,0.0721));
r1.xyz = r1.xyz-r0.x;
r1.xyz = Params01[2].x*r1.xyz+r0.x;
r2.xyz = r0.x * Params01[3].xyz-r1.xyz;
r1.xyz = Params01[3].w*r2.xyz+r1.xyz;
r1.xyz = Params01[2].w*r1.xyz-r0.w;
r0.xyz = Params01[2].z*r1.xyz+r0.w;
tcol.xyz = lerp(r0.xyz,Params01[5].xyz,Params01[5].w);
tcol.xyz = pow(tcol.xyz,1.0/2.2);
return lerp(res,tcol,vanillablend);
}
/* LUT colour grading */
float3 GradingLUT( float3 res )
{
float3 tcol = clamp(res,0.0001,0.9999);
tcol.rg = tcol.rg*0.5+0.25;
#ifdef LUTMODE_LEGACY
float2 lc1 = float2(tcol.r/16.0+floor(tcol.b*16.0)/16.0,tcol.g/64.0
+clut/64.0);
float2 lc2 = float2(tcol.r/16.0+ceil(tcol.b*16.0)/16.0,tcol.g/64.0
+clut/64.0);
float dec = (ceil(tcol.b*16.0)==16.0)?(0.0):frac(tcol.b*16.0);
#endif
#ifdef LUTMODE_16
float2 lc1 = float2(tcol.r,tcol.g/16.0+floor(tcol.b*16.0)/16.0);
float2 lc2 = float2(tcol.r,tcol.g/16.0+ceil(tcol.b*16.0)/16.0);
float dec = (ceil(tcol.b*16.0)==16.0)?(0.0):frac(tcol.b*16.0);
#endif
#ifdef LUTMODE_64
float2 lc1 = float2(tcol.r,tcol.g/64.0+floor(tcol.b*64.0)/64.0);
float2 lc2 = float2(tcol.r,tcol.g/64.0+ceil(tcol.b*64.0)/64.0);
float dec = (ceil(tcol.b*64.0)==64.0)?(0.0):frac(tcol.b*64.0);
#endif
float3 tcl1 = TextureLUT.Sample(Linear,lc1).rgb;
float3 tcl2 = TextureLUT.Sample(Linear,lc2).rgb;
tcol = lerp(tcl1,tcl2,dec);
/*float lutblend = tod(lutblend);*/
return lerp(res,tcol,lutblend);
}
/* post-pass dithering, something apparently only my ENB does */
float3 Dither( float3 res, float2 coord )
{
float2 rcoord = coord*float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float3 col = res;
float dml = (1.0/256.0);
if ( dither == 1 )
col += ordered2[int(rcoord.x%2)+2*int(rcoord.y%2)]*dml-0.5*dml;
else if ( dither == 2 )
col += ordered3[int(rcoord.x%3)+3*int(rcoord.y%3)]*dml-0.5*dml;
else if ( dither == 3 )
col += ordered4[int(rcoord.x%4)+4*int(rcoord.y%4)]*dml-0.5*dml;
else if ( dither == 4 )
col += ordered8[int(rcoord.x%8)+8*int(rcoord.y%8)]*dml-0.5*dml;
else col += checkers[int(rcoord.x%2)+2*int(rcoord.y%2)]*dml-0.5*dml;
col = (trunc(col*256.0)/256.0);
return col;
}
/* 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;
/*
There are two methods of making noise here:
1. two-pass algorithm that produces a particular fuzz complete with
a soft horizontal tear, reminiscent of old TV static.
2. simple version that has very noticeable tiling and visible
scrolling at low speeds
*/
if ( np )
{
n1 = TextureNoise2.Sample(Noise2,s1*nm11*nr).r;
n2 = TextureNoise2.Sample(Noise2,s2*nm12*nr).g;
n3 = TextureNoise2.Sample(Noise2,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 = TextureNoise2.Sample(Noise2,s1*nm21*nr).r;
n2 = TextureNoise2.Sample(Noise2,s2*nm22*nr).g;
n3 = TextureNoise2.Sample(Noise2,s3*nm23*nr).b;
}
else
{
n1 = TextureNoise3.Sample(Noise3,s1*nm1*nr).r;
n2 = TextureNoise3.Sample(Noise3,s2*nm2*nr).g;
n3 = TextureNoise3.Sample(Noise3,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 ) return overlay(res,(nt*ni));
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);
return darkmask(res,(nn*ni));
}
return lerp(res,nt,ni);
}
/* MariENB shader */
float4 PS_MariENB( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float4 res = TextureColor.Sample(Nearest,coord);
if ( tmapenable && tmapbeforecomp ) res.rgb = Tonemap(res.rgb);
if ( compenable ) res.rgb = Compensate(res.rgb);
if ( tmapenable && !tmapbeforecomp ) res.rgb = Tonemap(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 ( lutenable ) res.rgb = GradingLUT(res.rgb);
if ( ne ) res.rgb = FilmGrain(res.rgb,coord);
if ( vanillaenable ) res.rgb = GameProcessing(res.rgb,coord);
if ( dodither ) res.rgb = Dither(res.rgb,coord);
res.a = 1.0;
return res;
}
/* Vanilla shader */
float4 PS_Vanilla( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float4 res;
float4 color;
color = TextureColor.Sample(Nearest,IN.txcoord0.xy);
float4 r0,r1,r2,r3;
r0.xyz = color.xyz;
r1.xy = Params01[4].zw*IN.txcoord0.xy;
r1.xyz = TextureBloom.Sample(Linear,r1.xy).xyz;
r0.w = TextureAdaptation.Sample(Nearest,IN.txcoord0.xy).x;
r1.w = Params01[1].z/(0.001+r0.w);
r2.x = r1.w<Params01[1].y;
r1.w = r2.x?Params01[1].y:r1.w;
r2.x = Params01[1].x<r1.w;
r1.w = r2.x?Params01[1].x:r1.w;
r0.xyz = r1.xyz+r0.xyz;
r0.xyz = r0.xyz*r1.w;
r1.xyz = r0.xyz+r0.xyz;
r2.xyz = r0.xyz*0.3+0.05;
r3.xy = float2(0.2,3.333333)*Params01[1].w;
r2.xyz = r1.xyz*r2.xyz+r3.x;
r0.xyz = r0.xyz*0.3+0.5;
r0.xyz = r1.xyz*r0.xyz+0.06;
r0.xyz = r2.xyz/r0.xyz;
r0.xyz = -Params01[1].w*3.333333+r0.xyz;
r1.x = Params01[1].w*0.2+19.376;
r1.x = r1.x*0.0408564-r3.y;
r1.xyz = r0.xyz/r1.x;
r0.x = dot(r1.xyz,float3(0.2125,0.7154,0.0721));
r1.xyz = r1.xyz-r0.x;
r1.xyz = Params01[2].x*r1.xyz+r0.x;
r2.xyz = r0.x * Params01[3].xyz-r1.xyz;
r1.xyz = Params01[3].w*r2.xyz+r1.xyz;
r1.xyz = Params01[2].w*r1.xyz-r0.w;
r0.xyz = Params01[2].z*r1.xyz+r0.w;
res.xyz = lerp(r0.xyz,Params01[5].xyz,Params01[5].w);
res.xyz = pow(res.xyz,1.0/2.2);
res.w = 1.0;
return res;
}
/* This seems to make a bit more sense now */
technique11 Draw <string UIName="MariENB";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_MariENB()));
}
}
/* cool, no more inline assembly */
technique11 ORIGINALPOSTPROCESS <string UIName="Vanilla";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Vanilla()));
}
}

View file

@ -1,101 +1,165 @@
/*
menbeffectinternals.fx : MariENB base internal variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* standard stuff */
float4 ScreenSize;
float ENightDayFactor;
float EInteriorFactor;
float EBloomAmount;
/* samplers and textures */
texture2D texs0;
texture2D texs1;
texture2D texs2;
texture2D texs3;
texture2D texs4;
texture2D texs7;
sampler2D _s0 = sampler_state
{
Texture = <texs0>;
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D _s1 = sampler_state
{
Texture = <texs1>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D _s2 = sampler_state
{
Texture = <texs2>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D _s3 = sampler_state
{
Texture = <texs3>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D _s4 = sampler_state
{
Texture = <texs4>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D _s7 = sampler_state
{
Texture = <texs7>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
/* whatever */
struct VS_OUTPUT_POST
{
float4 vpos : POSITION;
float2 txcoord0 : TEXCOORD0;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord0 : TEXCOORD0;
};
/*
menbeffectinternals.fx : MariENB 3 base internal variables.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
/*
dithering threshold maps
don't touch unless you know what you're doing
*/
static const float checkers[4] =
{
1.0,0.0,
0.0,1.0
};
#define d(x) x/4.0
static const float ordered2[4] =
{
d(0),d(2),
d(4),d(2)
};
#undef d
#define d(x) x/9.0
static const float ordered3[9] =
{
d(2),d(6),d(3),
d(5),d(0),d(8),
d(1),d(7),d(4)
};
#undef d
#define d(x) x/16.0
static const float ordered4[16] =
{
d( 0),d( 8),d( 2),d(10),
d(12),d( 4),d(14),d( 6),
d( 3),d(11),d( 1),d( 9),
d(15),d( 7),d(13),d( 5)
};
#undef d
#define d(x) x/64.0
static const float ordered8[64] =
{
d( 0),d(48),d(12),d(60),d( 3),d(51),d(15),d(63),
d(32),d(16),d(44),d(28),d(35),d(19),d(47),d(31),
d( 8),d(56),d( 4),d(52),d(11),d(59),d( 7),d(55),
d(40),d(24),d(36),d(20),d(43),d(27),d(39),d(23),
d( 2),d(50),d(14),d(62),d( 1),d(49),d(13),d(61),
d(34),d(18),d(46),d(30),d(33),d(17),d(45),d(29),
d(10),d(58),d( 6),d(54),d( 9),d(57),d( 5),d(53),
d(42),d(26),d(38),d(22),d(41),d(25),d(37),d(21)
};
#undef d
/* standard stuff */
float4 Timer;
float4 ScreenSize;
float AdaptiveQuality;
float4 Weather;
float4 TimeOfDay1;
float4 TimeOfDay2;
float4 tempF1;
float4 tempF2;
float4 tempF3;
float4 tempInfo1;
float4 Params01[6];
/*
attempting to figure what each param does:
0 unused
x unused
y unused
z unused
w unused
1 bloom/adaptation related
x ?
y ?
z ?
w ?
2 imagespace grading
x vibrance?
y unused
z multiplier 1?
w multiplier 2?
3 imagespace tint
x tint r
y tint g
z tint b
w tint value
4 coord multipliers for low quality texture sampling, I guess
x unused
y unused
z bloom coord multiplier x
w bloom coord multiplier y
5 imagespace fade
x fade r
y fade g
z fade b
w fade value
*/
/* samplers and textures */
Texture2D TextureColor;
Texture2D TextureBloom;
Texture2D TextureAdaptation;
Texture2D TextureDepth;
Texture2D TextureNoise2
<
string ResourceName = "menbnoise1.png";
>;
Texture2D TextureNoise3
<
string ResourceName = "menbnoise2.png";
>;
Texture2D TextureLUT
<
#ifdef LUTMODE_LEGACY
string ResourceName = "menblutpreset.png";
#endif
#ifdef LUTMODE_16
string ResourceName = "menblut16.png";
#endif
#ifdef LUTMODE_64
string ResourceName = "menblut64.png";
#endif
>;
SamplerState Nearest
{
Filter = MIN_MAG_MIP_POINT;
AddressU = Clamp;
AddressV = Clamp;
MaxLod = 0;
MipLodBias = 0;
};
SamplerState Linear
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Clamp;
AddressV = Clamp;
MaxLod = 0;
MipLodBias = 0;
};
SamplerState Noise2
{
Filter = MIN_LINEAR_MAG_MIP_POINT;
AddressU = Wrap;
AddressV = Wrap;
MaxLod = 0;
MipLodBias = 0;
};
SamplerState Noise3
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
MaxLod = 0;
MipLodBias = 0;
};
/* whatever */
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord0 : TEXCOORD0;
};
struct VS_OUTPUT_POST
{
float4 pos : SV_POSITION;
float2 txcoord0 : TEXCOORD0;
};

View file

@ -1,491 +1,342 @@
/*
menbeffectsettings.fx : MariENB base user-tweakable variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* "adaptation" factors */
bool aenable
<
string UIName = "UseAdaptation";
string UIWidget = "Checkbox";
> = {false};
float amin_n
<
string UIName = "AdaptationMinNight";
string UIWidget = "Spinner";
> = {0.0};
float amin_d
<
string UIName = "AdaptationMinDay";
string UIWidget = "Spinner";
> = {0.0};
float amin_in
<
string UIName = "AdaptationMinInteriorNight";
string UIWidget = "Spinner";
> = {0.0};
float amin_id
<
string UIName = "AdaptationMinInteriorDay";
string UIWidget = "Spinner";
> = {0.0};
float amax_n
<
string UIName = "AdaptationMaxNight";
string UIWidget = "Spinner";
> = {1.0};
float amax_d
<
string UIName = "AdaptationMaxDay";
string UIWidget = "Spinner";
> = {1.0};
float amax_in
<
string UIName = "AdaptationMaxInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float amax_id
<
string UIName = "AdaptationMaxInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* overshine/bloom compensation */
bool compenable
<
string UIName = "UseCompensate";
string UIWidget = "Checkbox";
> = {false};
/* compensation factor */
float compfactor_n
<
string UIName = "CompensateFactorNight";
string UIWidget = "Spinner";
> = {0.0};
float compfactor_d
<
string UIName = "CompensateFactorDay";
string UIWidget = "Spinner";
> = {0.0};
float compfactor_in
<
string UIName = "CompensateFactorInteriorNight";
string UIWidget = "Spinner";
> = {0.0};
float compfactor_id
<
string UIName = "CompensateFactorInteriorDay";
string UIWidget = "Spinner";
> = {0.0};
/* compensation power (contrast) */
float comppow_n
<
string UIName = "CompensatePowerNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float comppow_d
<
string UIName = "CompensatePowerDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float comppow_in
<
string UIName = "CompensatePowerInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float comppow_id
<
string UIName = "CompensatePowerInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* compensation saturation (higher values desaturate highlights) */
float compsat_n
<
string UIName = "CompensateSaturationNight";
string UIWidget = "Spinner";
> = {1.0};
float compsat_d
<
string UIName = "CompensateSaturationDay";
string UIWidget = "Spinner";
> = {1.0};
float compsat_in
<
string UIName = "CompensateSaturationInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float compsat_id
<
string UIName = "CompensateSaturationInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* Color grading */
bool gradeenable1
<
string UIName = "UseRGBGrading";
string UIWidget = "Checkbox";
> = {false};
/* color component multipliers */
float grademul_r_n
<
string UIName = "GradingMulRNight";
string UIWidget = "Spinner";
> = {1.0};
float grademul_g_n
<
string UIName = "GradingMulGNight";
string UIWidget = "Spinner";
> = {1.0};
float grademul_b_n
<
string UIName = "GradingMulBNight";
string UIWidget = "Spinner";
> = {1.0};
float grademul_r_d
<
string UIName = "GradingMulRDay";
string UIWidget = "Spinner";
> = {1.0};
float grademul_g_d
<
string UIName = "GradingMulGDay";
string UIWidget = "Spinner";
> = {1.0};
float grademul_b_d
<
string UIName = "GradingMulBDay";
string UIWidget = "Spinner";
> = {1.0};
float grademul_r_in
<
string UIName = "GradingMulRInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float grademul_g_in
<
string UIName = "GradingMulGInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float grademul_b_in
<
string UIName = "GradingMulBInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float grademul_r_id
<
string UIName = "GradingMulRInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
float grademul_g_id
<
string UIName = "GradingMulGInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
float grademul_b_id
<
string UIName = "GradingMulBInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* color component contrasts */
float gradepow_r_n
<
string UIName = "GradingPowRNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_g_n
<
string UIName = "GradingPowGNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_b_n
<
string UIName = "GradingPowBNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_r_d
<
string UIName = "GradingPowRDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_g_d
<
string UIName = "GradingPowGDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_b_d
<
string UIName = "GradingPowBDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_r_in
<
string UIName = "GradingPowRInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_g_in
<
string UIName = "GradingPowGInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_b_in
<
string UIName = "GradingPowBInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_r_id
<
string UIName = "GradingPowRInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_g_id
<
string UIName = "GradingPowGInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_b_id
<
string UIName = "GradingPowBInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* colorization factors */
bool gradeenable2
<
string UIName = "UseColorizeGrading";
string UIWidget = "Checkbox";
> = {false};
float gradecol_r_n
<
string UIName = "GradingColRNight";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_g_n
<
string UIName = "GradingColGNight";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_b_n
<
string UIName = "GradingColBNight";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_r_d
<
string UIName = "GradingColRDay";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_g_d
<
string UIName = "GradingColGDay";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_b_d
<
string UIName = "GradingColBDay";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_r_in
<
string UIName = "GradingColRInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_g_in
<
string UIName = "GradingColGInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_b_in
<
string UIName = "GradingColBInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_r_id
<
string UIName = "GradingColRInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_g_id
<
string UIName = "GradingColGInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_b_id
<
string UIName = "GradingColBInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* blend factor for colorization (negative values are quite fancy) */
float gradecolfact_n
<
string UIName = "GradingColFactorNight";
string UIWidget = "Spinner";
> = {0.0};
float gradecolfact_d
<
string UIName = "GradingColFactorDay";
string UIWidget = "Spinner";
> = {0.0};
float gradecolfact_in
<
string UIName = "GradingColFactorInteriorNight";
string UIWidget = "Spinner";
> = {0.0};
float gradecolfact_id
<
string UIName = "GradingColFactorInteriorDay";
string UIWidget = "Spinner";
> = {0.0};
/* HSV grading */
bool gradeenable3
<
string UIName = "UseHSVGrading";
string UIWidget = "Checkbox";
> = {false};
/* saturation multiplier */
float gradesatmul_n
<
string UIName = "GradingSatMulNight";
string UIWidget = "Spinner";
> = {1.0};
float gradesatmul_d
<
string UIName = "GradingSatMulDay";
string UIWidget = "Spinner";
> = {1.0};
float gradesatmul_in
<
string UIName = "GradingSatMulInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradesatmul_id
<
string UIName = "GradingSatMulInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* saturation power */
float gradesatpow_n
<
string UIName = "GradingSatPowNight";
string UIWidget = "Spinner";
> = {1.0};
float gradesatpow_d
<
string UIName = "GradingSatPowDay";
string UIWidget = "Spinner";
> = {1.0};
float gradesatpow_in
<
string UIName = "GradingSatPowInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradesatpow_id
<
string UIName = "GradingSatPowInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* value multiplier */
float gradevalmul_n
<
string UIName = "GradingValMulNight";
string UIWidget = "Spinner";
> = {1.0};
float gradevalmul_d
<
string UIName = "GradingValMulDay";
string UIWidget = "Spinner";
> = {1.0};
float gradevalmul_in
<
string UIName = "GradingValMulInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradevalmul_id
<
string UIName = "GradingValMulInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* value power */
float gradevalpow_n
<
string UIName = "GradingValPowNight";
string UIWidget = "Spinner";
> = {1.0};
float gradevalpow_d
<
string UIName = "GradingValPowDay";
string UIWidget = "Spinner";
> = {1.0};
float gradevalpow_in
<
string UIName = "GradingValPowInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float gradevalpow_id
<
string UIName = "GradingValPowInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
bool colorizeafterhsv
<
string UIName = "ColorizeAfterHSV";
string UIWidget = "Checkbox";
> = {false};
/* game tinting support */
bool tintenable
<
string UIName = "UseTint";
string UIWidget = "Checkbox";
> = {true};
float tintblend
<
string UIName = "TintingBlend";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {1.0};
bool tintbeforegrade
<
string UIName = "TintingBeforeGrading";
string UIWidget = "Checkbox";
> = {false};
/* vanilla grading */
bool vgradeenable
<
string UIName = "EnableVanillaGrading";
string UIWidget = "Checkbox";
> = {true};
float vgradeblend
<
string UIName = "VanillaGradingBlend";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {1.0};
/* debug vanilla shader registers */
bool regdebug
<
string UIName = "DebugRegisters";
string UIWidget = "Checkbox";
> = {false};
/* scale of register bars */
float regdebugscale
<
string UIName = "DebugRegistersScale";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/*
menbeffectsettings.fx : MariENB 3 base user-tweakable variables.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
/* film grain */
string str_noise = "Film Grain";
bool ne
<
string UIName = "Enable Grain";
string UIWidget = "Checkbox";
> = {false};
/* speed of grain */
float nf
<
string UIName = "Grain Speed";
string UIWidget = "Spinner";
> = {2500.0};
/* intensity of grain */
float ni
<
string UIName = "Grain Intensity";
string UIWidget = "Spinner";
> = {0.05};
/* saturation of grain */
float ns
<
string UIName = "Grain Saturation";
string UIWidget = "Spinner";
> = {0.0};
/* use two-pass grain (double the texture fetches, but looks less uniform) */
bool np
<
string UIName = "Grain Two-Pass";
string UIWidget = "Checkbox";
> = {true};
/*
blending mode for grain:
0 -> normal
1 -> add
2 -> overlay
3 -> "dark mask", a personal invention
*/
int nb
<
string UIName = "Grain Blending Mode";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 3;
> = {1};
/* dark mask blend mode contrast for mask image */
float bnp
<
string UIName = "Grain Dark Mask Contrast";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {2.5};
/* two-pass distortion factor (0 = look just like one-pass grain) */
float nk
<
string UIName = "Grain Two-Pass Factor";
string UIWidget = "Spinner";
> = {0.04};
/* zoom factors for each component of each noise texture */
float nm1
<
string UIName = "Grain Magnification 1";
string UIWidget = "Spinner";
> = {13.25};
float nm2
<
string UIName = "Grain Magnification 2";
string UIWidget = "Spinner";
> = {19.64};
float nm3
<
string UIName = "Grain Magnification 3";
string UIWidget = "Spinner";
> = {17.35};
float nm11
<
string UIName = "Grain Pass 1 Magnification 1";
string UIWidget = "Spinner";
> = {2.05};
float nm12
<
string UIName = "Grain Pass 1 Magnification 2";
string UIWidget = "Spinner";
> = {3.11};
float nm13
<
string UIName = "Grain Pass 1 Magnification 3";
string UIWidget = "Spinner";
> = {2.22};
float nm21
<
string UIName = "Grain Pass 2 Magnification 1";
string UIWidget = "Spinner";
> = {4.25};
float nm22
<
string UIName = "Grain Pass 2 Magnification 2";
string UIWidget = "Spinner";
> = {0.42};
float nm23
<
string UIName = "Grain Pass 2 Magnification 3";
string UIWidget = "Spinner";
> = {6.29};
/* contrast of grain */
float nj
<
string UIName = "Grain Contrast";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {2.0};
/* tone mapping */
string str_tonemap = "Filmic Tone Mapping";
bool tmapenable
<
string UIName = "Enable Tonemapping";
string UIWidget = "Checkbox";
> = {false};
float unA
<
string UIName = "Tonemap Shoulder Strength";
string UIWidget = "Spinner";
> = {0.5};
float unB
<
string UIName = "Tonemap Linear Strengtht";
string UIWidget = "Spinner";
> = {1.0};
float unC
<
string UIName = "Tonemap Linear Angle";
string UIWidget = "Spinner";
> = {0.2};
float unD
<
string UIName = "Tonemap Toe Strengtht";
string UIWidget = "Spinner";
> = {0.75};
float unE
<
string UIName = "Tonemap Toe Numerator";
string UIWidget = "Spinner";
> = {0.02};
float unF
<
string UIName = "Tonemap Toe Denominator";
string UIWidget = "Spinner";
> = {0.30};
float unW
<
string UIName = "Tonemap Linear Whitet";
string UIWidget = "Spinner";
> = {10.0};
bool tmapbeforecomp
<
string UIName = "Tonemap Before Compensate";
string UIWidget = "Checkbox";
> = {false};
/* overshine/bloom compensation */
string str_comp = "Overbright Compensation";
bool compenable
<
string UIName = "Enable Compensate";
string UIWidget = "Checkbox";
> = {false};
/* compensation factor */
float compfactor
<
string UIName = "Compensate Factor";
string UIWidget = "Spinner";
> = {0.0};
/* compensation power (contrast) */
float comppow
<
string UIName = "Compensate Contrast";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* compensation saturation (higher values desaturate highlights) */
float compsat
<
string UIName = "Compensate Saturationt";
string UIWidget = "Spinner";
> = {1.0};
/* Color grading */
string str_grade = "Color Grading Suite";
bool gradeenable1
<
string UIName = "Enable RGB Grading";
string UIWidget = "Checkbox";
> = {false};
/* color component multipliers */
float grademul_r
<
string UIName = "Grading Intensity Red";
string UIWidget = "Spinner";
> = {1.0};
float grademul_g
<
string UIName = "Grading Intensity Green";
string UIWidget = "Spinner";
> = {1.0};
float grademul_b
<
string UIName = "Grading Intensity Blue";
string UIWidget = "Spinner";
> = {1.0};
/* color component contrasts */
float gradepow_r
<
string UIName = "Grading Contrast Red";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_g
<
string UIName = "Grading Contrast Green";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float gradepow_b
<
string UIName = "Grading Contrast Blue";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* colorization factors */
bool gradeenable2
<
string UIName = "Enable Vibrance Grading";
string UIWidget = "Checkbox";
> = {false};
float gradecol_r
<
string UIName = "Grading Color Red";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_g
<
string UIName = "Grading Color Green";
string UIWidget = "Spinner";
> = {1.0};
float gradecol_b
<
string UIName = "Grading Color Blue";
string UIWidget = "Spinner";
> = {1.0};
/* blend factor for colorization (negative values are quite fancy) */
float gradecolfact
<
string UIName = "Grading Color Factor";
string UIWidget = "Spinner";
> = {0.0};
/* HSV grading */
bool gradeenable3
<
string UIName = "Enable HSV Grading";
string UIWidget = "Checkbox";
> = {false};
/* saturation multiplier */
float gradesatmul
<
string UIName = "Grading Saturation Intensity";
string UIWidget = "Spinner";
> = {1.0};
/* saturation power */
float gradesatpow
<
string UIName = "Grading Saturation Contrast";
string UIWidget = "Spinner";
> = {1.0};
/* value multiplier */
float gradevalmul
<
string UIName = "Grading Value Intensity";
string UIWidget = "Spinner";
> = {1.0};
/* value power */
float gradevalpow
<
string UIName = "Grading Value Contrast";
string UIWidget = "Spinner";
> = {1.0};
bool colorizeafterhsv
<
string UIName = "Colorize After HSV";
string UIWidget = "Checkbox";
> = {true};
/* vanilla imagespace support */
string str_vanilla = "Vanilla Processing";
bool vanillaenable
<
string UIName = "Enable Vanilla Processing";
string UIWidget = "Checkbox";
> = {true};
float vanillablend
<
string UIName = "Vanilla Blend";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {1.0};
/* LUT grading */
string str_lut = "RGB Lookup Table Grading";
bool lutenable
<
string UIName = "Enable LUT Grading";
string UIWidget = "Checkbox";
> = {false};
float lutblend
<
string UIName = "LUT Blend";
string UIWidget = "Spinner";
> = {1.0};
#ifdef LUTMODE_LEGACY
int clut
<
string UIName = "LUT Preset";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 63;
> = {1};
#endif
string str_dither = "Dithering";
bool dodither
<
string UIName = "Enable Post Dither";
string UIWidget = "Checkbox";
> = {true};
int dither
<
string UIName = "Dither Pattern";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 4;
> = {4};

View file

@ -1,11 +1,9 @@
/*
menbextrafilters.fx : MariENB extra shader routines.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
menbextrafilters.fx : MariENB 3 extra shader routines.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
#define tod ENightDayFactor
#define ind EInteriorFactor
VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
@ -14,6 +12,10 @@ VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
return OUT;
}
/* helpers */
/* photometric */
#define luminance(x) dot(x,float3(0.2126,0.7152,0.0722))
/* CCIR601 */
//#define luminance(x) dot(x,float3(0.299,0.587,0.114))
float3 rgb2hsv( float3 c )
{
float4 K = float4(0.0,-1.0/3.0,2.0/3.0,-1.0);
@ -32,8 +34,8 @@ float3 hsv2rgb( float3 c )
/* prepass */
float4 ReducePrepass( in float4 col, in float2 coord )
{
float3 hsv = rgb2hsv(col);
hsv.y *= bsaturation;
float3 hsv = rgb2hsv(col.rgb);
hsv.y = clamp(hsv.y*bsaturation,0.0,1.0);
hsv.z = pow(hsv.z,bgamma);
col.rgb = hsv2rgb(saturate(hsv));
if ( dither == 0 )
@ -49,6 +51,14 @@ float4 ReducePrepass( in float4 col, in float2 coord )
col = saturate(col);
return col;
}
/*
CGA had seven graphic modes (320x200 modes have low/high contrast versions):
- 640x200 monochrome, which doesn't really need a palette here, as it can
be done procedurally with minimum effort.
- 320x200 black/cyan/magenta/white
- 320x200 black/green/red/brown
- 320x200 black/cyan/red/white
*/
float4 ReduceCGA( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
@ -61,7 +71,7 @@ float4 ReduceCGA( in float4 color, in float2 coord )
int idx = 0;
if ( cgapal == 1 )
{
for ( int i=0; i<4; i++ )
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1l[i]) < dist )
{
idx = i;
@ -71,7 +81,7 @@ float4 ReduceCGA( in float4 color, in float2 coord )
}
else if ( cgapal == 2 )
{
for ( int i=0; i<4; i++ )
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1h[i]) < dist )
{
idx = i;
@ -81,7 +91,7 @@ float4 ReduceCGA( in float4 color, in float2 coord )
}
else if ( cgapal == 3 )
{
for ( int i=0; i<4; i++ )
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2l[i]) < dist )
{
idx = i;
@ -91,7 +101,7 @@ float4 ReduceCGA( in float4 color, in float2 coord )
}
else if ( cgapal == 4 )
{
for ( int i=0; i<4; i++ )
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2h[i]) < dist )
{
idx = i;
@ -101,7 +111,7 @@ float4 ReduceCGA( in float4 color, in float2 coord )
}
else if ( cgapal == 5 )
{
for ( int i=0; i<4; i++ )
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3l[i]) < dist )
{
idx = i;
@ -111,7 +121,7 @@ float4 ReduceCGA( in float4 color, in float2 coord )
}
else if ( cgapal == 6 )
{
for ( int i=0; i<4; i++ )
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3h[i]) < dist )
{
idx = i;
@ -121,6 +131,12 @@ float4 ReduceCGA( in float4 color, in float2 coord )
}
return color;
}
/*
EGA technically only had the 320x200 16-colour graphic mode, but when VGA
came out, it was possible to tweak the DAC, allowing for custom palettes.
AOS EGA is a palette based on my terminal colour scheme on Linux, which I
also use for AliceOS.
*/
float4 ReduceEGA( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
@ -128,7 +144,7 @@ float4 ReduceEGA( in float4 color, in float2 coord )
int idx = 0;
if ( egapal == 0 )
{
for ( int i=0; i<16; i++ )
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,stdega[i]) < dist )
{
idx = i;
@ -138,7 +154,7 @@ float4 ReduceEGA( in float4 color, in float2 coord )
}
else
{
for ( int i=0; i<16; i++ )
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,aosega[i]) < dist )
{
idx = i;
@ -148,24 +164,32 @@ float4 ReduceEGA( in float4 color, in float2 coord )
}
return color;
}
/* A two bits per channel mode that can usually fit VGA mode 13h and mode x */
float4 ReduceRGB2( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*4.0)/4.0;
return color;
}
/* Effectively has 256 colours, with a magenta tint due to precision loss */
float4 ReduceRGB323( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*float3(8.0,4.0,8.0))/float3(8.0,4.0,8.0);
return color;
}
/* 4096 colours, no actual graphics hardware existed that used 4bpc, though */
float4 ReduceRGB4( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*16.0)/16.0;
return color;
}
/*
The classic 16-bit colour mode everyone from my generation would remember,
especially that subtle green tint and the banding due to lack of dithering
in most games and GPUs at that time.
*/
float4 ReduceRGB565( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
@ -173,124 +197,45 @@ float4 ReduceRGB565( in float4 color, in float2 coord )
/float3(32.0,64.0,32.0);
return color;
}
/*
If you see no difference when using this, then it could be because your
own screen is already 6bpc. This is the case for a lot of LCDs, both old
and modern. 8bpc tends to be the norm on IPS, though. 10bpc is the next
step, but for now it's only used internally in video codecs for more
efficient compression with lower quality loss. I seem to recall that in
most *nix systems such as Linux it's possible to have 10bpc already with
NVIDIA, but it causes compatibility issues with a lot of programs.
*/
float4 ReduceRGB6( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*64.0)/64.0;
return color;
}
/* darken borders */
float3 Vignette( float3 res, float2 coord )
/* Various VGA 256-colour palettes: Doom, Quake I, and the standard. */
float4 ReduceDoom( in float4 color, in float2 coord )
{
float dkradius = lerp(lerp(dkradius_n,dkradius_d,tod),lerp(dkradius_in,
dkradius_id,tod),ind);
float dkbump = lerp(lerp(dkbump_n,dkbump_d,tod),lerp(dkbump_in,
dkbump_id,tod),ind);
float dkcurve = lerp(lerp(dkcurve_n,dkcurve_d,tod),lerp(dkcurve_in,
dkcurve_id,tod),ind);
float val = distance(coord,0.5)*2.0+dkradius;
val = saturate(val+dkbump);
return lerp(res,float3(0,0,0),pow(val,dkcurve));
float4 dac = ReducePrepass(color,coord);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureDoom.Sample(Nearest,lc);
}
/* letterbox filter */
float3 Letterbox( float3 res, float2 coord )
float4 ReduceQuake( in float4 color, in float2 coord )
{
if ( abs(2.0*coord.y-1.0) > boxv ) return float3(0,0,0);
return res;
float4 dac = ReducePrepass(color,coord);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureQuake.Sample(Nearest,lc);
}
/* Fuzzy */
float3 FilmGrain( float3 res, float2 coord )
float4 ReduceVGA( in float4 color, in float2 coord )
{
float ts = Timer.x*nf;
float2 tcs = coord.xy;
float2 s1 = tcs+float2(0,ts);
float2 s2 = tcs+float2(ts,0);
float2 s3 = tcs+float2(ts,ts);
float n1, n2, n3;
float2 nr = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w)/256.0;
if ( np )
{
n1 = tex2D(SamplerNoise2,s1*nm11*nr).r;
n2 = tex2D(SamplerNoise2,s2*nm12*nr).g;
n3 = tex2D(SamplerNoise2,s3*nm13*nr).b;
s1 = tcs+float2(ts+n1*nk,n2*nk);
s2 = tcs+float2(n2,ts+n3*nk);
s3 = tcs+float2(ts+n3*nk,ts+n1*nk);
n1 = tex2D(SamplerNoise2,s1*nm21*nr).r;
n2 = tex2D(SamplerNoise2,s2*nm22*nr).g;
n3 = tex2D(SamplerNoise2,s3*nm23*nr).b;
}
else
{
n1 = tex2D(SamplerNoise3,s1*nm1*nr).r;
n2 = tex2D(SamplerNoise3,s2*nm2*nr).g;
n3 = tex2D(SamplerNoise3,s3*nm3*nr).b;
}
float n4 = (n1+n2+n3)/3;
float3 ng = float3(n4,n4,n4);
float3 nc = float3(n1,n2,n3);
float3 nt = pow(clamp(lerp(ng,nc,ns),0.0,1.0),nj);
if ( nb == 1 ) return res+nt*ni;
if ( nb == 2 )
{
float3 tcol = res;
tcol.r = (tcol.r<0.5)?(2.0*tcol.r*(0.5+(nt.r*ni)))
:(1.0-2.0*(1.0-tcol.r)*(1.0-((0.5+(nt.r*ni)))));
tcol.g = (tcol.g<0.5)?(2.0*tcol.g*(0.5+(nt.g*ni)))
:(1.0-2.0*(1.0-tcol.g)*(1.0-((0.5+(nt.g*ni)))));
tcol.b = (tcol.b<0.5)?(2.0*tcol.b*(0.5+(nt.b*ni)))
:(1.0-2.0*(1.0-tcol.b)*(1.0-((0.5+(nt.b*ni)))));
return tcol;
}
if ( nb == 3 )
{
float bn = 1.0-saturate((res.r+res.g+res.b)/3.0);
bn = pow(bn,bnp);
float3 nn = saturate(nt*bn);
float3 tcol = res;
tcol.r = (tcol.r>0.5)?(2.0*tcol.r*(0.5+(nn.r*ni)))
:(1.0-2.0*(1.0-tcol.r)*(1.0-((0.5+(nn.r*ni)))));
tcol.g = (tcol.g>0.5)?(2.0*tcol.g*(0.5+(nn.g*ni)))
:(1.0-2.0*(1.0-tcol.g)*(1.0-((0.5+(nn.g*ni)))));
tcol.b = (tcol.b>0.5)?(2.0*tcol.b*(0.5+(nn.b*ni)))
:(1.0-2.0*(1.0-tcol.b)*(1.0-((0.5+(nn.b*ni)))));
return tcol;
}
return lerp(res,nt,ni);
}
/* CINEMATIC!!! */
float4 PS_PoopyFilm( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
float2 coord = IN.txcoord.xy;
float4 res = tex2D(SamplerColor,coord);
if ( ne ) res.rgb = FilmGrain(res.rgb,coord);
if ( dkenable ) res.rgb = Vignette(res.rgb,coord);
if ( boxenable ) res.rgb = Letterbox(res.rgb,coord);
res.a = 1.0;
return res;
}
/* REVOLUTIONARY ULTRA-AWESOME FILTER */
float4 PS_Aberration( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
float2 coord = IN.txcoord.xy;
float4 res = tex2D(SamplerColor,coord);
if ( !usecurve ) return res;
float3 eta = float3(1+chromaab*0.09,1+chromaab*0.06,1+chromaab*0.03);
float2 mid = coord-0.5;
float2 rc = eta.r*(1.0-chromaab*0.1)*mid+0.5;
float2 gc = eta.g*(1.0-chromaab*0.1)*mid+0.5;
float2 bc = eta.b*(1.0-chromaab*0.1)*mid+0.5;
float3 ab = float3(tex2D(SamplerColor,rc).r,tex2D(SamplerColor,gc).g,
tex2D(SamplerColor,bc).b);
res.rgb = ab;
res.a = 1.0;
return res;
float4 dac = ReducePrepass(color,coord);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureVGA.Sample(Nearest,lc);
}
/* Retro rockets */
float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
float4 PS_Retro( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = tex2D(SamplerColor,coord);
float4 res = TextureColor.Sample(Linear,coord);
if ( !useblock ) return res;
float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float4 tcol;
@ -310,68 +255,275 @@ float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
ncoord = (-0.5/sresl)*(rresl/bresl)+ncoord/sresl+0.5;
ncoord = floor(ncoord*bresl)/bresl;
if ( bresx <= 0 || bresy <= 0 ) ncoord = coord;
tcol = tex2D(SamplerColor,ncoord);
tcol = TextureColor.Sample(sBorder,ncoord);
if ( paltype == 0 ) res = ReduceCGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 1 ) res = ReduceEGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 2 ) res = ReduceRGB2(tcol,(coord*rresl)/sresl);
else if ( paltype == 3 ) res = ReduceRGB323(tcol,(coord*rresl)/sresl);
else if ( paltype == 4 ) res = ReduceRGB4(tcol,(coord*rresl)/sresl);
else if ( paltype == 5 ) res = ReduceRGB565(tcol,(coord*rresl)/sresl);
else if ( paltype == 6 ) res = ReduceRGB6(tcol,(coord*rresl)/sresl);
else if ( paltype == 4 ) res = ReduceVGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 5 ) res = ReduceDoom(tcol,(coord*rresl)/sresl);
else if ( paltype == 6 ) res = ReduceQuake(tcol,(coord*rresl)/sresl);
else if ( paltype == 7 ) res = ReduceRGB4(tcol,(coord*rresl)/sresl);
else if ( paltype == 8 ) res = ReduceRGB565(tcol,(coord*rresl)/sresl);
else if ( paltype == 9 ) res = ReduceRGB6(tcol,(coord*rresl)/sresl);
else res = tcol;
if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 )
res *= 0;
res.a = 1.0;
return res;
}
technique PostProcess
/* ASCII art (more like CP437 art) */
float4 PS_ASCII( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !asciienable ) return res;
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float2 fresl = float2(FONT_WIDTH,FONT_HEIGHT);
float2 cresl = float2(GLYPH_WIDTH,GLYPH_HEIGHT);
float2 bscl = floor(bresl/cresl);
/*
Here I use the "cheap" method, based on the overall luminance of each
glyph, rather than attempt to search for the best fitting glyph for
each cell. If you want to know why, take a look at the ASCII filter
bundled with the Dolphin emulator, and be prepared for the resulting
seconds per frame it runs at. The calculations needed for such a filter
are completely insane even for the highest-end GPUs.
*/
float3 col = TextureColor.Sample(Linear,
floor(bscl*coord)/bscl).rgb;
int lum = clamp(luminance(col)*FONT_LEVELS,0,FONT_LEVELS);
float2 itx = floor(coord*bresl);
float2 blk = floor(itx/cresl)*cresl;
float2 ofs = itx-blk;
ofs.y += lum*cresl.y;
ofs /= fresl;
float gch = TextureFont.Sample(Font,ofs).x;
if ( gch < 0.5 ) res.rgb = res.rgb*asciiblend;
else
{
if ( asciimono ) res.rgb = 1.0;
else res.rgb = col;
}
return res;
}
float4 PS_ChromaKey( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !maskenable ) return res;
if ( TextureDepth.Sample(Linear,coord).x > maskd )
return float4(maskr,maskg,maskb,1.0);
return res;
}
/* 2x2 RGBI dot matrix, not even close to anything that exists IRL but meh */
float4 PS_DotMatrix( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !dotenable ) return res;
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
bresl.xy *= 1.0/(dotsize*2.0);
float4 dac = float4(res.r*0.5,res.g*0.5,res.b*0.5,
(res.r+res.g+res.b)/6.0);
/*
There are two types of CRTs: aperture grille and shadow mask.
The former is blurry and has scanlines (rather big ones, even), but
is cheap to emulate; while the latter is the one most known for its
crisp, square pixels with minimal distortion. Most individuals into
this whole "retro graphics" stuff prefer aperture grille, which
looks like shit, then again, that's the sort of visual quality they
want. The main issue with shadow mask CRTs is that it's impossible
to accurately emulate them unless done on a screen with a HUGE
resolution. After all, the subpixels need to be clearly visible, and
if on top of it you add curvature distortion, you need to reduce
moire patterns that will inevitably show up at low resolutions.
It would be more desirable to eventually have flat panels that can
display arbitrary resolutions using a form of scaling that preserves
square pixels with unnoticeable distortion (typically, with nearest
neighbour you'd get some pixels that are bigger/smaller than others
if the upscale resolution isn't an integer multiple of the real
resolution.
This 2x2 RGBI thing is a rather naïve filter I made many years ago,
it looks unlike any real CRT, but scales well. Its only problem is
moire patterns when using the default size of 2x2.
*/
float4 dots = TextureDots.Sample(sWrap,coord*bresl)*dac;
float3 tcol = pow((dots.rgb+dots.a),dotpow)*dotmult;
res.rgb = res.rgb*(1-dotblend)+tcol*dotblend;
return res;
}
/* that's right, CRT curvature */
float4 PS_Curvature( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !curveenable ) return res;
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float2 bof = (1.0/bresl)*curvesoft;
float3 eta = float3(1+chromaab*0.009,1+chromaab*0.006,1+chromaab
*0.003);
float2 center = float2(coord.x-0.5,coord.y-0.5);
float zfact = 100.0/lenszoom;
float r2 = center.x*center.x+center.y*center.y;
float f = 1+r2*lensdist*0.01;
float x = f*zfact*center.x+0.5;
float y = f*zfact*center.y+0.5;
float2 rcoord = (f*eta.r)*zfact*(center.xy*0.5)+0.5;
float2 gcoord = (f*eta.g)*zfact*(center.xy*0.5)+0.5;
float2 bcoord = (f*eta.b)*zfact*(center.xy*0.5)+0.5;
int i,j;
float4 idist = float4(0,0,0,0);
/*
sticking a 5x5 gaussian blur with a tweakable radius in here to
attempt to reduce moire patterns in some cases. Supersampling would
be more useful for that, but ENB sucks ass through a crazy straw in
that aspect, so it would be more desirable to use GeDoSaTo (I sure
hope I can port all my stuff to it one day, at least the damn thing
is FOSS).
*/
[unroll] for ( i=-2; i<=2; i++ ) [unroll] for ( j=-2; j<=2; j++ )
{
idist += gauss3[abs(i)]*gauss3[abs(j)]
*float4(TextureColor.Sample(sBorder,
rcoord+bof*float2(i,j)).r,TextureColor.Sample(sBorder,
gcoord+bof*float2(i,j)).g,TextureColor.Sample(sBorder,
bcoord+bof*float2(i,j)).b,TextureColor.Sample(sBorder,
float2(x,y)+bof*float2(i,j)).a);
}
res.rgb = idist.rgb;
return res;
}
/* Why am I doing this */
float4 PS_Blur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !bssblurenable ) return res;
float2 ofs[16] =
{
float2(1.0,1.0), float2(-1.0,-1.0),
float2(-1.0,1.0), float2(1.0,-1.0),
float2(1.0,0.0), float2(-1.0,0.0),
float2(0.0,1.0), float2(0.0,-1.0),
float2(1.41,0.0), float2(-1.41,0.0),
float2(0.0,1.41), float2(0.0,-1.41),
float2(1.41,1.41), float2(-1.41,-1.41),
float2(-1.41,1.41), float2(1.41,-1.41)
};
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float2 bof = (1.0/bresl)*bssblurradius;
int i;
[unroll] for ( i=0; i<16; i++ )
res += TextureColor.Sample(Linear,coord+ofs[i]*bof);
res /= 17.0;
res.a = 1.0;
return res;
}
float4 PS_Sharp( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !bsssharpenable ) return res;
float2 ofs[8] =
{
float2(1.0,1.0), float2(-1.0,-1.0),
float2(-1.0,1.0), float2(1.0,-1.0),
float2(1.41,1.41), float2(-1.41,-1.41),
float2(-1.41,1.41), float2(1.41,-1.41)
};
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float2 bof = (1.0/bresl)*bsssharpradius;
float4 tcol = res;
int i;
[unroll] for ( i=0; i<8; i++ )
tcol += TextureColor.Sample(Linear,coord+ofs[i]*bof);
tcol /= 9.0;
float4 orig = res;
res = orig*(1.0+dot(orig.rgb-tcol.rgb,0.333333)*bsssharpamount);
float rg = clamp(pow(orig.b,3.0),0.0,1.0);
res = lerp(res,orig,rg);
res.a = 1.0;
return res;
}
float4 PS_Shift( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !bssshiftenable ) return res;
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float2 bof = (1.0/bresl)*bssshiftradius;
res.g = TextureColor.Sample(Linear,coord).g;
res.r = TextureColor.Sample(Linear,coord+float2(0,-bof.y)).r;
res.b = TextureColor.Sample(Linear,coord+float2(0,bof.y)).b;
res.a = 1.0;
return res;
}
technique11 MariENB <string UIName="MariENB";>
{
pass p0
{
VertexShader = compile vs_3_0 VS_Pass();
PixelShader = compile ps_3_0 PS_Aberration();
DitherEnable = FALSE;
ZEnable = FALSE;
CullMode = NONE;
ALPHATESTENABLE = FALSE;
SEPARATEALPHABLENDENABLE = FALSE;
AlphaBlendEnable = FALSE;
StencilEnable = FALSE;
FogEnable = FALSE;
SRGBWRITEENABLE = FALSE;
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Blur()));
}
}
technique PostProcess2
technique11 MariENB1
{
pass p0
{
VertexShader = compile vs_3_0 VS_Pass();
PixelShader = compile ps_3_0 PS_PoopyFilm();
DitherEnable = FALSE;
ZEnable = FALSE;
CullMode = NONE;
ALPHATESTENABLE = FALSE;
SEPARATEALPHABLENDENABLE = FALSE;
AlphaBlendEnable = FALSE;
StencilEnable = FALSE;
FogEnable = FALSE;
SRGBWRITEENABLE = FALSE;
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Sharp()));
}
}
technique PostProcess3
technique11 MariENB2
{
pass p0
{
VertexShader = compile vs_3_0 VS_Pass();
PixelShader = compile ps_3_0 PS_Retro();
DitherEnable = FALSE;
ZEnable = FALSE;
CullMode = NONE;
ALPHATESTENABLE = FALSE;
SEPARATEALPHABLENDENABLE = FALSE;
AlphaBlendEnable = FALSE;
StencilEnable = FALSE;
FogEnable = FALSE;
SRGBWRITEENABLE = FALSE;
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Shift()));
}
}
}
technique11 MariENB3
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_ChromaKey()));
}
}
technique11 MariENB4
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Retro()));
}
}
technique11 MariENB5
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_ASCII()));
}
}
technique11 MariENB6
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_DotMatrix()));
}
}
technique11 MariENB7
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Curvature()));
}
}

View file

@ -1,7 +1,7 @@
/*
menbextrainternals.fx : MariENB extra internal variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
menbextrainternals.fx : MariENB 3 extra internal variables.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
/*
@ -138,61 +138,84 @@ static const float3 aosega[16] =
float3(d(256),d(256),d(256)),
};
#undef d
/* gauss stuff */
float gauss3[3] =
{
0.444814, 0.239936, 0.037657
};
/* standard stuff */
float4 ScreenSize;
float4 Timer;
float ENightDayFactor;
float EInteriorFactor;
float4 Weather;
float4 TimeOfDay1;
float4 TimeOfDay2;
/* samplers and textures */
texture2D texColor;
texture2D texNoise2
Texture2D TextureColor;
Texture2D TextureDepth;
Texture2D TextureFont
<
string ResourceName = "menbnoise1.png";
string ResourceName = "menbvgaluma.png";
>;
texture2D texNoise3
Texture2D TextureDots
<
string ResourceName = "menbnoise2.png";
string ResourceName = "menbdots.png";
>;
sampler2D SamplerColor = sampler_state
Texture2D TextureDoom
<
string ResourceName = "menbdoomlut.png";
>;
Texture2D TextureQuake
<
string ResourceName = "menbquakelut.png";
>;
Texture2D TextureVGA
<
string ResourceName = "menbvgalut.png";
>;
SamplerState Nearest
{
Texture = <texColor>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Mirror;
AddressV = Mirror;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
Filter = MIN_MAG_MIP_POINT;
AddressU = Clamp;
AddressV = Clamp;
MaxLod = 0;
MipLodBias = 0;
};
sampler2D SamplerNoise2 = sampler_state
SamplerState Linear
{
Texture = <texNoise2>;
MinFilter = LINEAR;
MagFilter = POINT;
MipFilter = NONE;
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Clamp;
AddressV = Clamp;
MaxLod = 0;
MipLodBias = 0;
};
SamplerState sBorder
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Border;
AddressV = Border;
BorderColor = float4(0.0,0.0,0.0,1.0);
MaxLod = 0;
MipLodBias = 0;
};
SamplerState sWrap
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
MaxLod = 0;
MipLodBias = 0;
};
sampler2D SamplerNoise3 = sampler_state
SamplerState Font
{
Texture = <texNoise3>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
Filter = MIN_LINEAR_MAG_MIP_POINT;
AddressU = Wrap;
AddressV = Wrap;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
MaxLod = 0;
MipLodBias = 0;
};
/* whatever */
struct VS_OUTPUT_POST
{
float4 vpos : POSITION;
float4 vpos : SV_POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_INPUT_POST

View file

@ -1,226 +1,14 @@
/*
menbextrasettings.fx : MariENB extra user-tweakable variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
menbextrasettings.fx : MariENB 3 extra user-tweakable variables.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
/* Border darkening */
bool dkenable
<
string UIName = "UseDark";
string UIWidget = "Checkbox";
> = {false};
/* radius of darkening (relative to screen width) */
float dkradius_n
<
string UIName = "DarkRadiusNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
float dkradius_d
<
string UIName = "DarkRadiusDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
float dkradius_in
<
string UIName = "DarkRadiusInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
float dkradius_id
<
string UIName = "DarkRadiusInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
/* falloff of darkening */
float dkcurve_n
<
string UIName = "DarkCurveNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float dkcurve_d
<
string UIName = "DarkCurveDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float dkcurve_in
<
string UIName = "DarkCurveInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float dkcurve_id
<
string UIName = "DarkCurveInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* bump of darkening */
float dkbump_n
<
string UIName = "DarkBumpNight";
string UIWidget = "Spinner";
> = {-1.0};
float dkbump_d
<
string UIName = "DarkBumpDay";
string UIWidget = "Spinner";
> = {-1.0};
float dkbump_in
<
string UIName = "DarkBumpInteriorNight";
string UIWidget = "Spinner";
> = {-1.0};
float dkbump_id
<
string UIName = "DarkBumpInteriorDay";
string UIWidget = "Spinner";
> = {-1.0};
/* Letterbox */
bool boxenable
<
string UIName = "UseBox";
string UIWidget = "Checkbox";
> = {false};
/* vertical factor */
float boxv
<
string UIName = "BoxVertical";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.80};
/* film grain */
bool ne
<
string UIName = "UseGrain";
string UIWidget = "Checkbox";
> = {false};
/* speed of grain */
float nf
<
string UIName = "GrainFrequency";
string UIWidget = "Spinner";
> = {2500.0};
/* intensity of grain */
float ni
<
string UIName = "GrainIntensity";
string UIWidget = "Spinner";
> = {0.05};
/* saturation of grain */
float ns
<
string UIName = "GrainSaturation";
string UIWidget = "Spinner";
> = {0.0};
/* use two-pass grain (double the texture fetches, but looks less uniform) */
bool np
<
string UIName = "GrainTwoPass";
string UIWidget = "Checkbox";
> = {true};
/*
blending mode for grain:
0 -> normal
1 -> add
2 -> overlay
3 -> "dark mask", a personal invention
*/
int nb
<
string UIName = "GrainBlend";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 3;
> = {1};
/* dark mask blend mode contrast for mask image */
float bnp
<
string UIName = "GrainDarkMaskPower";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* two-pass distortion factor (0 = look just like one-pass grain) */
float nk
<
string UIName = "GrainTwoPassFactor";
string UIWidget = "Spinner";
> = {0.04};
/* zoom factors for each component of each noise texture */
float nm1
<
string UIName = "GrainMagnification1";
string UIWidget = "Spinner";
> = {13.25};
float nm2
<
string UIName = "GrainMagnification2";
string UIWidget = "Spinner";
> = {19.64};
float nm3
<
string UIName = "GrainMagnification3";
string UIWidget = "Spinner";
> = {17.35};
float nm11
<
string UIName = "GrainPass1Magnification1";
string UIWidget = "Spinner";
> = {2.05};
float nm12
<
string UIName = "GrainPass1Magnification2";
string UIWidget = "Spinner";
> = {3.11};
float nm13
<
string UIName = "GrainPass1Magnification3";
string UIWidget = "Spinner";
> = {2.22};
float nm21
<
string UIName = "GrainPass2Magnification1";
string UIWidget = "Spinner";
> = {4.25};
float nm22
<
string UIName = "GrainPass2Magnification2";
string UIWidget = "Spinner";
> = {0.42};
float nm23
<
string UIName = "GrainPass2Magnification3";
string UIWidget = "Spinner";
> = {6.29};
/* contrast of grain */
float nj
<
string UIName = "GrainPower";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {2.5};
/* use curvature + chromatic aberration filter */
bool usecurve
<
string UIName = "UseCurve";
string UIWidget = "Checkbox";
> = {false};
/* this is a stupid filter and you should feel bad for using it */
float chromaab
<
string UIName = "CurveChromaAberration";
string UIWidget = "Spinner";
> = {0.05};
/* BlockGFX filter, I'm proud of it */
string str_block = "BlockGFX Suite";
bool useblock
<
string UIName = "UseBlockGFX";
string UIName = "Enable Block GFX";
string UIWidget = "Checkbox";
> = {false};
/*
@ -231,47 +19,51 @@ bool useblock
*/
float bresx
<
string UIName = "EmulatedResX";
string UIName = "Emulated Resolution Width";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
float bresy
<
string UIName = "EmulatedResY";
string UIName = "Emulated Resolution Height";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
/* zooming factors (<=0 for stretch) */
float sresx
<
string UIName = "ZoomedResX";
string UIName = "Zoom Factor X";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float sresy
<
string UIName = "ZoomedResY";
string UIName = "Zoom Factor Y";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
/*
palette type:
-2 : Standard VGA 256-color palette
-1 : disable
0 : CGA (320x200 4-color, or 640x200 monochrome)
1 : EGA (320x200, 16 colors)
2 : RGB2 (64-color quarter VGA palette, used in AOS)
3 : RGB323 (8-bit RGB, I don't think this was a real thing)
4 : RGB4 (4bpc, I also don't think this was ever used in real hardware)
5 : RGB565 (ol' 16-bit "true color")
6 : RGB6 (typical screens incapable of 8bpc)
4 : VGA (256 colors, standard palette)
5 : Doom (256 colors, does not cover a lot)
6 : Quake I (256 colors, covers even less)
7 : RGB4 (4bpc, I also don't think this was ever used in real hardware)
8 : RGB565 (ol' 16-bit "true color")
9 : RGB6 (typical screens incapable of 8bpc)
*/
int paltype
<
string UIName = "PaletteType";
string UIName = "Palette Type";
string UIWidget = "Spinner";
int UIMin = -1;
int UIMax = 6;
> = {2};
int UIMax = 9;
> = {1};
/*
CGA palette to use:
0 : black, white.
@ -284,7 +76,7 @@ int paltype
*/
int cgapal
<
string UIName = "CGAPalette";
string UIName = "CGA Palette";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 6;
@ -296,7 +88,7 @@ int cgapal
*/
int egapal
<
string UIName = "EGAPalette";
string UIName = "EGA Palette";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 1;
@ -312,7 +104,7 @@ int egapal
*/
int dither
<
string UIName = "DitherMode";
string UIName = "Dithering Pattern";
string UIWidget = "Spinner";
int UIMin = -1;
int UIMax = 4;
@ -320,26 +112,178 @@ int dither
/* gamma modifier for base color, lower values raise midtones and viceversa */
float bgamma
<
string UIName = "GammaMod";
string UIName = "Contrast Modifier";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.65};
> = {0.35};
/* saturation modifier for base color, helps with limited palettes */
float bsaturation
<
string UIName = "Saturation Modifier";
string UIWidget = "Spinner";
> = {1.1};
/* base brightness bump for the dither grid */
float bdbump
<
string UIName = "DitherBump";
string UIName = "Dither Offset";
string UIWidget = "Spinner";
> = {-0.1};
/* range multiplier for the dither grid */
float bdmult
<
string UIName = "DitherMultiplier";
string UIName = "Dither Range";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.3};
/* saturation modifier for base color, helps with limited palettes */
float bsaturation
> = {0.25};
/* ASCII art filter */
string str_ascii = "Luma ASCII Art Filter";
bool asciienable
<
string UIName = "SaturationMod";
string UIName = "Enable ASCII";
string UIWidget = "Checkbox";
> = {false};
bool asciimono
<
string UIName = "ASCII Monochrome";
string UIWidget = "Checkbox";
> = {true};
float asciiblend
<
string UIName = "ASCII Blend";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.0};
string str_mask = "Depth Chroma Key";
bool maskenable
<
string UIName = "Enable Chroma Key";
string UIWidget = "Checkbox";
> = {false};
float maskr
<
string UIName = "Chroma Key Red";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.0};
float maskg
<
string UIName = "Chroma Key Green";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {1.0};
float maskb
<
string UIName = "Chroma Key Blue";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.0};
float maskd
<
string UIName = "Chroma Key Depth";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.5};
string str_dot = "RGBI Dot Matrix";
bool dotenable
<
string UIName = "Enable Dot Matrix";
string UIWidget = "Checkbox";
> = {false};
int dotsize
<
string UIName = "Dot Size";
string UIWidget = "Spinner";
int UIMin = 1;
> = {1};
float dotblend
<
string UIName = "Dot Blend";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.4};
float dotmult
<
string UIName = "Dot Intensity";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float dotpow
<
string UIName = "Dot Contrast";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
string str_curve = "Lens Curvature";
bool curveenable
<
string UIName = "Enable Curvature";
string UIWidget = "Checkbox";
> = {false};
float chromaab
<
string UIName = "Curve Chromatic Aberration";
string UIWidget = "Spinner";
> = {0.0};
float lenszoom
<
string UIName = "Curve Zooming";
string UIWidget = "Spinner";
> = {50.0};
float lensdist
<
string UIName = "Curve Distortion";
string UIWidget = "Spinner";
> = {0.0};
float curvesoft
<
string UIName = "Curve Sampling Soften";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
/* BlurSharpShift, some people are obsessed with this nonsense */
string str_bss = "BlurSharpShift";
bool bssblurenable
<
string UIName = "Enable Blur";
string UIWidget = "Checkbox";
> = {false};
float bssblurradius
<
string UIName = "Blur Sampling Range";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
bool bsssharpenable
<
string UIName = "Enable Sharp";
string UIWidget = "Checkbox";
> = {false};
float bsssharpradius
<
string UIName = "Sharp Sampling Range";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bsssharpamount
<
string UIName = "Sharpening Amount";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {6.0};
bool bssshiftenable
<
string UIName = "Enable Shift";
string UIWidget = "Checkbox";
> = {false};
float bssshiftradius
<
string UIName = "Shift Sampling Range";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.75};

BIN
enbseries/menbfrost.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 KiB

BIN
enbseries/menbfrostbump.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

View file

@ -0,0 +1,50 @@
/*
menbglobaldefs.fx : MariENB 3 global shared code.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
/*
TODO time of day interpolation
guessed formula, not used yet since it's a lot of work to make separate
variables for now.
*/
//#define tod(x) (x##_dw*TimeOfDay1.x+x##_sr*TimeOfDay1.y+x##_dy*TimeOfDay1.z\
// +x##_ss*TimeOfDay1.w+x##_ds*TimeOfDay2.x+x##_nt*TimeOfDay2.y)
#define tod(x) x
/* weather macros */
#define WT_TEMPERATE 0.0
#define WT_HOT 1.0
#define WT_COLD 2.0
#define weatherfactor(id) ((Weather.x==id)?(Weather.y==id)\
?(1.0):(Weather.z):(Weather.y==id)\
?(1.0-Weather.z):(0.0))
/* asset definitions */
/* ascii art font */
#define FONT_WIDTH 8
#define FONT_HEIGHT 4096
#define GLYPH_WIDTH 8
#define GLYPH_HEIGHT 16
#define FONT_LEVELS 255
/*
aspect correction for certain overlays
uncommented : the textures are 1:1 and must be corrected
commented : the textures are 16:9 or whatever ratio you use
*/
#define ASPECT_LENSDIRT
/* texture sizes */
#define NOISESIZE 256.0
#define HEATSIZE 1024.0
#define FROSTSIZE 1024.0
/* LUT mode (use only one) - The 256px option was discarded for size reasons */
//#define LUTMODE_LEGACY
//#define LUTMODE_16
#define LUTMODE_64
/* some textures can be provided as DDS rather than PNG to save space */
//#define HEAT_DDS
#define LENSDIRT_DDS
//#define FROST_DDS
//#define FROSTBUMP_DDS
/* experimental features (TODO) */
//#define USE_BOKEH
//#define MULTIPASS_RMAO

BIN
enbseries/menbheat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
enbseries/menblens.dds Normal file

Binary file not shown.

BIN
enbseries/menblut16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
enbseries/menblut64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 KiB

BIN
enbseries/menblutpreset.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

View file

@ -0,0 +1,69 @@
sikkmod
00 adrenaline
01 base
02 c2_alienvesselgreenblue
03 c2_alnvsl_streets
04 c2_battery_park_ab1_pier
05 c2_battery_park_ab2_park
06 c2_battery_park_spear
07 c2_battery_park_streets
08 c2_black_control
09 c2_centralpark
10 c2_centralstation_streets
11 c2_collided_buildings
12 c2_collided_hotel
13 c2_convoy
14 c2_cxp_360
15 c2_cxp_pc
16 c2_desaturate
17 c2_downtown2
18 c2_downtown_streets
19 c2_flash_blindness
20 c2_hive_ab3_crater
21 c2_liberty_test11
22 c2_madisonsquare_rapids
23 c2_pier_2
24 c2_pier_3
25 c2_pier_sunset
26 c2_pier
27 c2_pipeline
28 c2_rooftops_inside
29 c2_rooftops_outside
30 c2_rooftops
31 c2_roosevelt_park
32 c2_spear_streets_spore2
33 c2_spear_streets_spore
34 c2_spear_streets
35 c2_terminal_5
36 c2_timesquare_blackout
37 c2_timesquare_global
38 cold
39 dry
40 neutral
41 riddick2
42 sepia
43 udk_ce2
44 udk_dawn02
45 udk_day05
46 udk_dm_deck01
47 udk_dm_deck02
48 udk_dm_deck03
49 udk_necropolis01
50 udk_night03
51 udk_stormy
52 warm
marienb
53 mk_dust_1
54 mk_dust_2
55 mk_red
56 mk_blue
57 mk_brown
58 mk_flame
59 mk_golden
60 mk_dust_3
61 mk_dust_4
62 mk_desat_1
63 mk_desat_2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 192 KiB

Before After
Before After

View file

@ -1,519 +0,0 @@
/*
menbprepassfilters.fx : MariENB prepass shader routines.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
#define tod ENightDayFactor
#define ind EInteriorFactor
VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
OUT.txcoord.xy = IN.txcoord.xy;
return OUT;
}
/* these are znear/zfar values for Skyrim, but MAY match Fallout too */
float depthlinear( float2 coord )
{
float zNear = 0.0509804;
float zFar = 3098.0392;
float z = tex2D(SamplerDepth,coord).x;
return (2*zNear)/(zFar+zNear-z*(zFar-zNear));
}
/* That "luma sharpen" thingy, added just because someone might want it */
float3 Sharpen( float3 res, float2 coord )
{
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
if ( fixedx>0 ) bresl.x = fixedx;
if ( fixedy>0 ) bresl.y = fixedy;
float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*sharpradius;
float4 crawling = tex2D(SamplerColor,coord+float2(0,-1)*bof);
crawling += tex2D(SamplerColor,coord+float2(-1,0)*bof);
crawling += tex2D(SamplerColor,coord+float2(1,0)*bof);
crawling += tex2D(SamplerColor,coord+float2(0,1)*bof);
crawling *= 0.25;
float3 inmyskin = res-crawling.rgb;
float thesewounds = dot(inmyskin,0.33);
thesewounds = clamp(thesewounds,-sharpclamp,sharpclamp);
float3 theywillnotheal = res+thesewounds*sharpblend;
return theywillnotheal;
}
/* New and improved edge detection, generally useful for contour shading */
float3 Edge( float3 res, float2 coord )
{
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
if ( fixedx>0 ) bresl.x = fixedx;
if ( fixedy>0 ) bresl.y = fixedy;
float edgefadepow = lerp(lerp(edgefadepow_n,edgefadepow_d,tod),
lerp(edgefadepow_in,edgefadepow_id,tod),ind);
float edgefademult = lerp(lerp(edgefademult_n,edgefademult_d,tod),
lerp(edgefademult_in,edgefademult_id,tod),ind);
float2 bof = float2(1.0/bresl.x,1.0/bresl.y);
float mdx = 0, mdy = 0, mud = 0;
/* this reduces texture fetches by half, big difference */
float3x3 depths;
int i, j;
for ( i=-1; i<=1; i++ ) for ( j=-1; j<=1; j++ )
depths[i+1][j+1] = depthlinear(coord+float2(i,j)*bof);
for ( i=0; i<=2; i++ ) for ( j=0; j<=2; j++ )
mdx += GX[i][j]*depths[i][j];
for ( i=0; i<=2; i++ ) for ( j=0; j<=2; j++ )
mdy += GY[i][j]*depths[i][j];
mud = pow(mdx*mdx+mdy*mdy,0.5);
float fade = 1.0-tex2D(SamplerDepth,coord).x;
mud *= saturate(pow(fade,edgefadepow)*edgefademult);
mud = saturate(pow(mud,edgepow)*edgemult);
if ( edgeview ) return mud;
return res-mud;
}
/* the pass that happens before everything else */
float4 PS_FirstPass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
float2 coord = IN.txcoord.xy;
float4 res = tex2D(SamplerColor,coord);
if ( sharpenable ) res.rgb = Sharpen(res.rgb,coord);
if ( edgeenable ) res.rgb = Edge(res.rgb,coord);
return res;
}
/* Crappy SSAO */
float3 pseudonormal( float dep, float2 coord )
{
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float2 ofs1 = float2(0,1.0/bresl.y);
float2 ofs2 = float2(1.0/bresl.x,0);
float dep1 = tex2D(SamplerDepth,coord+ofs1).x;
float dep2 = tex2D(SamplerDepth,coord+ofs2).x;
float3 p1 = float3(ofs1,dep1-dep);
float3 p2 = float3(ofs2,dep2-dep);
float3 normal = cross(p1,p2);
normal.z = -normal.z;
return normalize(normal);
}
float4 PS_SSAOPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
float2 coord = IN.txcoord.xy;
float4 res = tex2D(SamplerColor,coord);
float ssaofadepow = lerp(lerp(ssaofadepow_n,ssaofadepow_d,tod),
lerp(ssaofadepow_in,ssaofadepow_id,tod),ind);
float ssaofademult = lerp(lerp(ssaofademult_n,ssaofademult_d,tod),
lerp(ssaofademult_in,ssaofademult_id,tod),ind);
if ( !ssaoenable ) return res;
float depth = tex2D(SamplerDepth,coord).x;
float ldepth = depthlinear(coord);
if ( depth >= cutoff*0.000001 )
{
res.a = 1.0;
return res;
}
float2 bresl;
if ( (fixedx > 0) && (fixedy > 0) ) bresl = float2(fixedx,fixedy);
else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float3 normal = pseudonormal(depth,coord);
float2 nc = coord*(bresl/256.0);
float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaoradius;
float2 nc2 = tex2D(SamplerNoise3,nc+48000.0*Timer.x).xy;
float3 rnormal = tex2D(SamplerNoise3,nc2).xyz*2.0-1.0;
rnormal.z = -abs(rnormal.z);
normal = normalize(normal+rnormal*ssaonoise);
float occ = 0.0;
int i;
float3 sample;
float sdepth, rangecheck;
float sclamp = ssaocfact/1000.0;
int maxsmp;
if ( ssaohq ) maxsmp = 64;
else maxsmp = 16;
for ( i=0; i<maxsmp; i++ )
{
if ( ssaohq ) sample = reflect(ssao_hq[i],normal);
else sample = reflect(ssao_lq[i],normal);
sdepth = depthlinear(coord+sample.xy*bof);
if ( ldepth < sdepth ) occ += 1.0;
else occ += saturate((abs(ldepth-sdepth)-sclamp)/sclamp);
}
float uocc = saturate(1.0-occ/float(maxsmp*2));
float fade = 1.0-depth;
uocc *= saturate(pow(fade,ssaofadepow)*ssaofademult);
uocc = saturate(pow(uocc,ssaopow)*ssaomult);
res.a = saturate(1.0-(uocc*ssaoblend));
return res;
}
float4 PS_SSAOBlurH( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
{
float2 coord = IN.txcoord.xy;
float4 res = tex2D(SamplerColor,coord);
if ( !ssaoenable ) return res;
if ( !ssaobenable ) return res;
float bresl = (fixedx>0)?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;
}
}

View file

@ -1,184 +0,0 @@
/*
menbprepassinternals.fx : MariENB prepass internal variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* mathematical constants */
static const float pi = 3.1415926535898;
/* edge detect factors */
static const float3x3 GX =
{
-1, 0, 1,
-2, 0, 2,
-1, 0, 1
};
static const float3x3 GY =
{
1, 2, 1,
0, 0, 0,
-1,-2,-1
};
/* gaussian kernels */
/* radius: 8, std dev: 3 */
static const float gauss8[8] =
{
0.134598, 0.127325, 0.107778, 0.081638,
0.055335, 0.033562, 0.018216, 0.008847
};
/* radius: 16, std dev: 6 */
static const float gauss16[16] =
{
0.067142, 0.066216, 0.063513, 0.059252,
0.053763, 0.047446, 0.040723, 0.033996,
0.027603, 0.021798, 0.016742, 0.012507,
0.009087, 0.006421, 0.004413, 0.002950
};
/* SSAO samples */
static const float3 ssao_lq[16] =
{
float3( 0.0174, 0.0599, 0.0037),float3(-0.0470,-0.1116,-0.0310),
float3(-0.1375, 0.0369,-0.1220),float3(-0.0373,-0.1082, 0.2222),
float3( 0.0731, 0.1548,-0.2614),float3(-0.3485, 0.0200, 0.1369),
float3( 0.2177,-0.2827,-0.2531),float3(-0.3315,-0.2890, 0.2379),
float3( 0.1429,-0.5418, 0.0491),float3(-0.4260,-0.3304,-0.3162),
float3( 0.3721,-0.4619, 0.3477),float3(-0.4609,-0.0396,-0.5903),
float3(-0.6294, 0.1593,-0.4885),float3(-0.8068,-0.1182, 0.3173),
float3( 0.6586, 0.6182,-0.2510),float3( 0.2338,-0.9721, 0.0167)
};
static const float3 ssao_hq[64] =
{
float3( 0.0000,-0.0002, 0.0002),float3(-0.0005, 0.0006, 0.0006),
float3(-0.0003,-0.0018,-0.0012),float3( 0.0025, 0.0001,-0.0030),
float3( 0.0032,-0.0031,-0.0042),float3(-0.0075, 0.0032, 0.0034),
float3(-0.0017, 0.0107, 0.0050),float3(-0.0113,-0.0022,-0.0106),
float3( 0.0113,-0.0000,-0.0162),float3(-0.0121,-0.0156,-0.0143),
float3( 0.0145,-0.0099, 0.0238),float3(-0.0041, 0.0258,-0.0236),
float3( 0.0261,-0.0282,-0.0150),float3(-0.0392, 0.0259, 0.0093),
float3( 0.0079, 0.0122,-0.0530),float3(-0.0173, 0.0024,-0.0600),
float3( 0.0164,-0.0483,-0.0487),float3( 0.0253, 0.0749, 0.0030),
float3( 0.0702,-0.0024, 0.0532),float3(-0.0587, 0.0343,-0.0701),
float3(-0.0284, 0.0949, 0.0422),float3(-0.0782,-0.0518, 0.0719),
float3( 0.0891,-0.0295, 0.0887),float3(-0.1176,-0.0770, 0.0034),
float3( 0.0911, 0.0979,-0.0736),float3(-0.0492,-0.1109,-0.1119),
float3( 0.0881,-0.1122,-0.1064),float3(-0.0978,-0.0594,-0.1534),
float3( 0.1226,-0.0478,-0.1577),float3( 0.1713, 0.1376,-0.0033),
float3(-0.1098, 0.1317,-0.1601),float3( 0.0153, 0.0431,-0.2458),
float3( 0.0413,-0.2602,-0.0358),float3( 0.1160, 0.2073,-0.1524),
float3(-0.0891,-0.2844,-0.0254),float3(-0.2356, 0.1856, 0.1007),
float3(-0.1331,-0.2241,-0.2093),float3(-0.0946,-0.0943, 0.3262),
float3(-0.2076, 0.2990,-0.0735),float3(-0.3388,-0.1854,-0.0584),
float3(-0.2950, 0.2562, 0.1256),float3( 0.1245, 0.3253, 0.2533),
float3(-0.3334, 0.0732, 0.2954),float3(-0.0878,-0.0338, 0.4632),
float3( 0.3257,-0.1494, 0.3406),float3( 0.1496, 0.4734, 0.1426),
float3(-0.4816,-0.1498,-0.1911),float3(-0.4407,-0.2691,-0.2231),
float3(-0.5739,-0.0862,-0.0829),float3(-0.1811,-0.4338, 0.3893),
float3(-0.4059, 0.2597,-0.4135),float3( 0.5669,-0.1450, 0.3057),
float3(-0.3459, 0.0907,-0.5852),float3(-0.0378,-0.4889,-0.5161),
float3(-0.1609,-0.1172, 0.7112),float3(-0.1584, 0.2215,-0.7156),
float3(-0.0601,-0.6410,-0.4634),float3(-0.1877,-0.4821, 0.6379),
float3(-0.5357, 0.6528, 0.0957),float3(-0.5073,-0.3124, 0.6462),
float3(-0.1505, 0.6792,-0.5842),float3( 0.1781,-0.9197, 0.0557),
float3(-0.5309,-0.3378,-0.7369),float3(-0.7460, 0.2721,-0.6078)
};
/* standard stuff */
float4 ScreenSize;
float ENightDayFactor;
float EInteriorFactor;
float FadeFactor;
float4 Timer;
float FieldOfView;
/* samplers and textures */
texture2D texColor;
texture2D texDepth;
texture2D texNoise3
<
string ResourceName = "menbnoise2.png";
>;
texture2D texFocus;
texture2D texCurr;
texture2D texPrev;
sampler2D SamplerColor = sampler_state
{
Texture = <texColor>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerDepth = sampler_state
{
Texture = <texDepth>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerNoise3 = sampler_state
{
Texture = <texNoise3>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Wrap;
AddressV = Wrap;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerFocus = sampler_state
{
Texture = <texFocus>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerCurr = sampler_state
{
Texture = <texCurr>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture = FALSE;
MaxMipLevel = 0;
MipMapLodBias = 0;
};
sampler2D SamplerPrev = sampler_state
{
Texture = <texPrev>;
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;
};

View file

@ -1,561 +0,0 @@
/*
menbprepasssettings.fx : MariENB prepass user-tweakable variables.
(C)2013-2015 Marisa Kirisame, UnSX Team.
Part of MariENB, the personal ENB of Marisa.
Released under the GNU GPLv3 (or later).
*/
/* fixed resolution, keeps blur filters at a consistent internal resolution */
int fixedx
<
string UIName = "_FixedResolutionX";
string UIWidget = "Spinner";
int UIMin = 0;
> = {1920};
int fixedy
<
string UIName = "_FixedResolutionY";
string UIWidget = "Spinner";
int UIMin = 0;
> = {1080};
float cutoff
<
string UIName = "DepthCutoff";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1000000.0;
> = {999949.0};
/* circle (triangle, actually) average focus */
bool focuscircle
<
string UIName = "FocusCircleEnable";
string UIWidget = "Checkbox";
> = {true};
/* radius of the focus point triangle */
float focusradius_n
<
string UIName = "FocusCircleRadiusNight";
string UIWidget = "Spinner";
> = {12.5};
float focusradius_d
<
string UIName = "FocusCircleRadiusDay";
string UIWidget = "Spinner";
> = {12.5};
float focusradius_in
<
string UIName = "FocusCircleRadiusInteriorNight";
string UIWidget = "Spinner";
> = {12.5};
float focusradius_id
<
string UIName = "FocusCircleRadiusInteriorDay";
string UIWidget = "Spinner";
> = {12.5};
/* mix factor with sample at screen center */
float focusmix_n
<
string UIName = "FocusCircleMixNight";
string UIWidget = "Spinner";
> = {0.25};
float focusmix_d
<
string UIName = "FocusCircleMixDay";
string UIWidget = "Spinner";
> = {0.25};
float focusmix_in
<
string UIName = "FocusCircleMixInteriorNight";
string UIWidget = "Spinner";
> = {0.25};
float focusmix_id
<
string UIName = "FocusCircleMixInteriorDay";
string UIWidget = "Spinner";
> = {0.25};
/* maximum focus depth */
float focusmax_n
<
string UIName = "FocusMaxNight";
string UIWidget = "Spinner";
> = {1.0};
float focusmax_d
<
string UIName = "FocusMaxDay";
string UIWidget = "Spinner";
> = {1.0};
float focusmax_in
<
string UIName = "FocusMaxInteriorNight";
string UIWidget = "Spinner";
> = {1.0};
float focusmax_id
<
string UIName = "FocusMaxInteriorDay";
string UIWidget = "Spinner";
> = {1.0};
/* dof filter */
/* dof multiplier (makes unfocused depths more blurry) */
float dofmult_n
<
string UIName = "DoFMultNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float dofmult_d
<
string UIName = "DoFMultDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float dofmult_in
<
string UIName = "DoFMultInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float dofmult_id
<
string UIName = "DoFMultInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
/* dof power (falloff, kinda) */
float dofpow_n
<
string UIName = "DoFPowNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {4.0};
float dofpow_d
<
string UIName = "DoFPowDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {4.0};
float dofpow_in
<
string UIName = "DoFPowInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {4.0};
float dofpow_id
<
string UIName = "DoFPowInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {4.0};
/* fixed focused depth factors */
float doffixedfocusmult_n
<
string UIName = "DoFFixedFocusedMultNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocusmult_d
<
string UIName = "DoFFixedFocusedMultDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocusmult_in
<
string UIName = "DoFFixedFocusedMultInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocusmult_id
<
string UIName = "DoFFixedFocusedMultInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocuspow_n
<
string UIName = "DoFFixedFocusedPowNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocuspow_d
<
string UIName = "DoFFixedFocusedPowDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocuspow_in
<
string UIName = "DoFFixedFocusedPowInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocuspow_id
<
string UIName = "DoFFixedFocusedPowInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedfocusblend_n
<
string UIName = "DoFFixedFocusedBlendNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float doffixedfocusblend_d
<
string UIName = "DoFFixedFocusedBlendDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float doffixedfocusblend_in
<
string UIName = "DoFFixedFocusedBlendInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float doffixedfocusblend_id
<
string UIName = "DoFFixedFocusedBlendInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
/* fixed unfocused depth factors */
float doffixedunfocusmult_n
<
string UIName = "DoFFixedUnfocusedMultNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedunfocusmult_d
<
string UIName = "DoFFixedUnfocusedMultDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedunfocusmult_in
<
string UIName = "DoFFixedUnfocusedMultInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedunfocusmult_id
<
string UIName = "DoFFixedUnfocusedMultInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float doffixedunfocuspow_n
<
string UIName = "DoFFixedUnfocusedPowNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float doffixedunfocuspow_d
<
string UIName = "DoFFixedUnfocusedPowDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float doffixedunfocuspow_in
<
string UIName = "DoFFixedUnfocusedPowInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float doffixedunfocuspow_id
<
string UIName = "DoFFixedUnfocusedPowInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1000.0};
float doffixedunfocusblend_n
<
string UIName = "DoFFixedUnfocusedBlendNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float doffixedunfocusblend_d
<
string UIName = "DoFFixedUnfocusedBlendDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float doffixedunfocusblend_in
<
string UIName = "DoFFixedUnfocusedBlendInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float doffixedunfocusblend_id
<
string UIName = "DoFFixedUnfocusedBlendInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
/* disable depth of field */
bool dofdisable
<
string UIName = "DoFDisable";
string UIWidget = "Checkbox";
> = {false};
/* use bilateral filtering for sharper dof blurring */
bool dofbilateral
<
string UIName = "DoFBilateral";
string UIWidget = "Checkbox";
> = {true};
float dofbfact
<
string UIName = "DoFBilateralFactor";
string UIWidget = "Spinner";
> = {5.0};
float dofbradius
<
string UIName = "DoFBlurRadius";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
bool dofrelfov
<
string UIName = "DoFRelativeToFoV";
string UIWidget = "Checkbox";
> = {false};
float fovdefault
<
string UIName = "DoFRelativeDefaultFOV";
string UIWidget = "Spinner";
float UIMin = 1.0;
float UIMax = 180.0;
> = {75.0};
float relfovfactor_n
<
string UIName = "DoFRelativeFactorNight";
string UIWidget = "Spinner";
> = {0.0};
float relfovfactor_d
<
string UIName = "DoFRelativeFactorDay";
string UIWidget = "Spinner";
> = {0.0};
float relfovfactor_in
<
string UIName = "DoFRelativeFactorInteriorNight";
string UIWidget = "Spinner";
> = {0.0};
float relfovfactor_id
<
string UIName = "DoFRelativeFactorInteriorDay";
string UIWidget = "Spinner";
> = {0.0};
bool dofdebug
<
string UIName = "DebugDepth";
string UIWidget = "Checkbox";
> = {false};
/* enable edge detect filters */
bool edgeenable
<
string UIName = "EdgeEnable";
string UIWidget = "Checkbox";
> = {false};
/* use "edge vision" instead of contour filter (just because it looks fancy) */
bool edgeview
<
string UIName = "EdgeView";
string UIWidget = "Checkbox";
> = {true};
/* factors */
float edgefadepow_n
<
string UIName = "EdgeFadePowerNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float edgefadepow_d
<
string UIName = "EdgeFadePowerDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float edgefadepow_in
<
string UIName = "EdgeFadePowerInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float edgefadepow_id
<
string UIName = "EdgeFadePowerInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float edgefademult_n
<
string UIName = "EdgeFadeMultiplierNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {5000.0};
float edgefademult_d
<
string UIName = "EdgeFadeMultiplierDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {5000.0};
float edgefademult_in
<
string UIName = "EdgeFadeMultiplierInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {5000.0};
float edgefademult_id
<
string UIName = "EdgeFadeMultiplierInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {5000.0};
float edgepow
<
string UIName = "EdgePower";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
float edgemult
<
string UIName = "EdgeMultiplier";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {2.0};
/* ssao filter */
bool ssaoenable
<
string UIName = "SSAOEnable";
string UIWidget = "Checkbox";
> = {false};
float ssaoradius
<
string UIName = "SSAORadius";
string UIWidget = "Spinner";
> = {128.0};
float ssaonoise
<
string UIName = "SSAONoise";
string UIWidget = "Spinner";
> = {1.0};
float ssaofadepow_n
<
string UIName = "SSAOFadePowerNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float ssaofadepow_d
<
string UIName = "SSAOFadePowerDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float ssaofadepow_in
<
string UIName = "SSAOFadePowerInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float ssaofadepow_id
<
string UIName = "SSAOFadePowerInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.5};
float ssaofademult_n
<
string UIName = "SSAOFadeMultiplierNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {15000.0};
float ssaofademult_d
<
string UIName = "SSAOFadeMultiplierDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {15000.0};
float ssaofademult_in
<
string UIName = "SSAOFadeMultiplierInteriorNight";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {15000.0};
float ssaofademult_id
<
string UIName = "SSAOFadeMultiplierInteriorDay";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {15000.0};
float ssaomult
<
string UIName = "SSAOMultiplier";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float ssaopow
<
string UIName = "SSAOPower";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {2.5};
float ssaoblend
<
string UIName = "SSAOBlend";
string UIWidget = "Spinner";
> = {1.0};
bool ssaobenable
<
string UIName = "SSAOBlurEnable";
string UIWidget = "Checkbox";
> = {true};
float ssaobfact
<
string UIName = "SSAOBilateralFactor";
string UIWidget = "Spinner";
> = {800000.0};
float ssaocfact
<
string UIName = "SSAOClampFactor";
string UIWidget = "Spinner";
> = {0.5};
float ssaobradius
<
string UIName = "SSAOBlurRadius";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
bool ssaohq
<
string UIName = "SSAOHighQualitySampling";
string UIWidget = "Checkbox";
> = {false};
bool ssaodebug
<
string UIName = "DebugSSAO";
string UIWidget = "Checkbox";
> = {false};
/* luma sharpen because of reasons */
bool sharpenable
<
string UIName = "SharpenEnable";
string UIWidget = "Checkbox";
> = {false};
float sharpradius
<
string UIName = "SharpenRadius";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float sharpclamp
<
string UIName = "SharpenClamp";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float sharpblend
<
string UIName = "SharpenBlending";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};

BIN
enbseries/menbquakelut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

BIN
enbseries/menbvgaluma.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
enbseries/menbvgalut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB