1
Fork 0

First MariENB 3 attempt for Skyrim Special Edition

This commit is contained in:
Marisa the Magician 2019-04-07 17:12:47 +02:00
commit 1b38c717bd
32 changed files with 7182 additions and 2056 deletions

View file

@ -4,10 +4,293 @@ UseEffect=true
[EFFECT]
UseOriginalObjectsProcessing=false
UseOriginalPostProcessing=false
UseOriginalColorFilter=true
UseOriginalBloom=true
UseOriginalAdaptation=true
UseOriginalColorFilter=false
UseOriginalBloom=false
UseOriginalAdaptation=false
EnablePostPassShader=true
EnableDithering=true
EnableAdaptation=true
EnableBloom=true
EnableDepthOfField=true
EnableLens=false
EnableSSAO=true
[COLORCORRECTION]
UseProceduralCorrection=false
UseProceduralCorrection=true
Brightness=1.0
GammaCurve=1.0
[TIMEOFDAY]
DawnDuration=2.0
SunriseTime=7.0
DayTime=13.0
SunsetTime=19.0
DuskDuration=2.0
NightTime=1.0
[ADAPTATION]
AdaptationSensitivity=0.35
AdaptationTime=2.2
ForceMinMaxValues=false
AdaptationMin=0.00001
AdaptationMax=1.0
[DEPTHOFFIELD]
FocusingTime=0.4
ApertureTime=1.0
[BLOOM]
IgnoreWeatherSystem=true
AmountDawn=1.0
AmountSunrise=1.0
AmountDay=1.0
AmountSunset=1.0
AmountDusk=1.0
AmountNight=1.0
AmountInteriorDay=1.0
AmountInteriorNight=1.0
[LENS]
IgnoreWeatherSystem=true
AmountDawn=1.0
AmountSunrise=1.0
AmountDay=1.0
AmountSunset=1.0
AmountDusk=1.0
AmountNight=1.0
AmountInteriorDay=1.0
AmountInteriorNight=1.0
[SKY]
IgnoreWeatherSystem=true
Enable=true
GradientIntensityDawn=0.91
GradientIntensitySunrise=0.97
GradientIntensityDay=1.01
GradientIntensitySunset=0.970001
GradientIntensityDusk=0.930001
GradientIntensityNight=0.940001
GradientIntensityInteriorDay=1.02
GradientIntensityInteriorNight=0.9
GradientDesaturationDawn=0.0
GradientDesaturationSunrise=0.0
GradientDesaturationDay=0.0
GradientDesaturationSunset=0.0
GradientDesaturationDusk=0.0
GradientDesaturationNight=0.0
GradientDesaturationInteriorDay=0.0
GradientDesaturationInteriorNight=0.0
GradientTopIntensityDawn=0.59
GradientTopIntensitySunrise=0.77
GradientTopIntensityDay=0.980001
GradientTopIntensitySunset=0.78
GradientTopIntensityDusk=0.52
GradientTopIntensityNight=0.43
GradientTopIntensityInteriorDay=0.97
GradientTopIntensityInteriorNight=0.97
GradientTopCurveDawn=0.87
GradientTopCurveSunrise=0.82
GradientTopCurveDay=0.95
GradientTopCurveSunset=0.88
GradientTopCurveDusk=0.86
GradientTopCurveNight=0.89
GradientTopCurveInteriorDay=0.98
GradientTopCurveInteriorNight=0.67
GradientTopColorFilterDawn=0.984, 0.757, 0.925
GradientTopColorFilterSunrise=0.973, 0.765, 0.706
GradientTopColorFilterDay=0.969, 0.871, 0.812
GradientTopColorFilterSunset=0.961, 0.702, 0.663
GradientTopColorFilterDusk=0.969, 0.812, 0.878
GradientTopColorFilterNight=0.816, 0.8, 0.839
GradientTopColorFilterInteriorDay=0.996, 0.886, 0.808
GradientTopColorFilterInteriorNight=0.871, 0.843, 0.898
GradientMiddleIntensityDawn=0.71
GradientMiddleIntensitySunrise=0.8
GradientMiddleIntensityDay=1.11
GradientMiddleIntensitySunset=0.94
GradientMiddleIntensityDusk=0.73
GradientMiddleIntensityNight=0.9
GradientMiddleIntensityInteriorDay=1.1
GradientMiddleIntensityInteriorNight=0.54
GradientMiddleCurveDawn=0.86
GradientMiddleCurveSunrise=0.89
GradientMiddleCurveDay=0.83
GradientMiddleCurveSunset=0.85
GradientMiddleCurveDusk=0.8
GradientMiddleCurveNight=0.93
GradientMiddleCurveInteriorDay=0.89
GradientMiddleCurveInteriorNight=0.64
GradientMiddleColorFilterDawn=0.929, 0.812, 0.922
GradientMiddleColorFilterSunrise=0.965, 0.792, 0.745
GradientMiddleColorFilterDay=0.953, 0.882, 0.851
GradientMiddleColorFilterSunset=0.969, 0.831, 0.788
GradientMiddleColorFilterDusk=0.937, 0.741, 0.827
GradientMiddleColorFilterNight=0.922, 0.898, 0.953
GradientMiddleColorFilterInteriorDay=1, 0.867, 0.788
GradientMiddleColorFilterInteriorNight=0.906, 0.882, 0.945
GradientHorizonIntensityDawn=1.21
GradientHorizonIntensitySunrise=1.17
GradientHorizonIntensityDay=1.060001
GradientHorizonIntensitySunset=1.18
GradientHorizonIntensityDusk=1.21
GradientHorizonIntensityNight=1.09
GradientHorizonIntensityInteriorDay=1.1
GradientHorizonIntensityInteriorNight=1.39
GradientHorizonCurveDawn=0.43
GradientHorizonCurveSunrise=0.57
GradientHorizonCurveDay=0.94
GradientHorizonCurveSunset=0.47
GradientHorizonCurveDusk=0.51
GradientHorizonCurveNight=0.88
GradientHorizonCurveInteriorDay=0.86
GradientHorizonCurveInteriorNight=0.65
GradientHorizonColorFilterDawn=0.878, 0.8, 0.82
GradientHorizonColorFilterSunrise=0.953, 0.769, 0.639
GradientHorizonColorFilterDay=0.98, 0.898, 0.863
GradientHorizonColorFilterSunset=0.914, 0.737, 0.647
GradientHorizonColorFilterDusk=0.953, 0.882, 0.875
GradientHorizonColorFilterNight=0.812, 0.835, 0.882
GradientHorizonColorFilterInteriorDay=0.988, 0.831, 0.753
GradientHorizonColorFilterInteriorNight=0.851, 0.863, 0.89
CloudsIntensityDawn=0.78
CloudsIntensitySunrise=0.7
CloudsIntensityDay=0.910001
CloudsIntensitySunset=0.610001
CloudsIntensityDusk=0.760001
CloudsIntensityNight=0.850001
CloudsIntensityInteriorDay=0.94
CloudsIntensityInteriorNight=0.04
CloudsCurveDawn=1.37
CloudsCurveSunrise=1.18
CloudsCurveDay=0.79
CloudsCurveSunset=1.15
CloudsCurveDusk=1.23
CloudsCurveNight=1.07
CloudsCurveInteriorDay=1.31
CloudsCurveInteriorNight=2.39
CloudsDesaturationDawn=0.34
CloudsDesaturationSunrise=0.17
CloudsDesaturationDay=0.09
CloudsDesaturationSunset=0.21
CloudsDesaturationDusk=0.39
CloudsDesaturationNight=0.16
CloudsDesaturationInteriorDay=0.14
CloudsDesaturationInteriorNight=0.16
CloudsOpacityDawn=1.13
CloudsOpacitySunrise=0.98
CloudsOpacityDay=0.75
CloudsOpacitySunset=0.96
CloudsOpacityDusk=1.19
CloudsOpacityNight=1.11
CloudsOpacityInteriorDay=1.0
CloudsOpacityInteriorNight=1.0
CloudsColorFilterDawn=0.996, 0.816, 0.816
CloudsColorFilterSunrise=0.992, 0.835, 0.718
CloudsColorFilterDay=0.996, 0.918, 0.855
CloudsColorFilterSunset=0.984, 0.737, 0.545
CloudsColorFilterDusk=0.965, 0.729, 0.729
CloudsColorFilterNight=0.953, 0.925, 0.98
CloudsColorFilterInteriorDay=0.953, 0.835, 0.718
CloudsColorFilterInteriorNight=0.953, 0.933, 0.98
SunIntensityDawn=4.0
SunIntensitySunrise=6.0
SunIntensityDay=5.0
SunIntensitySunset=6.0
SunIntensityDusk=4.0
SunIntensityNight=3.0
SunIntensityInteriorDay=5.0
SunIntensityInteriorNight=3.0
SunDesaturationDawn=0.0
SunDesaturationSunrise=0.0
SunDesaturationDay=0.0
SunDesaturationSunset=0.0
SunDesaturationDusk=0.0
SunDesaturationNight=0.0
SunDesaturationInteriorDay=0.0
SunDesaturationInteriorNight=0.0
SunColorFilterDawn=0.953, 0.098, 0.0353
SunColorFilterSunrise=0.98, 0.455, 0.322
SunColorFilterDay=1, 0.647, 0.38
SunColorFilterSunset=0.969, 0.471, 0.38
SunColorFilterDusk=0.969, 0.161, 0.161
SunColorFilterNight=0.839, 0.0275, 0.0157
SunColorFilterInteriorDay=0.988, 0.627, 0.369
SunColorFilterInteriorNight=0.859, 0.0471, 0.00392
MoonIntensityDawn=1.77
MoonIntensitySunrise=1.39
MoonIntensityDay=1.0
MoonIntensitySunset=1.48
MoonIntensityDusk=1.9
MoonIntensityNight=2.4
MoonIntensityInteriorDay=1.0
MoonIntensityInteriorNight=2.47
MoonDesaturationDawn=0.0
MoonDesaturationSunrise=0.0
MoonDesaturationDay=0.0
MoonDesaturationSunset=0.0
MoonDesaturationDusk=0.0
MoonDesaturationNight=0.0
MoonDesaturationInteriorDay=0.0
MoonDesaturationInteriorNight=0.0
MoonColorFilterDawn=0.443, 0.322, 0.98
MoonColorFilterSunrise=0.776, 0.835, 0.918
MoonColorFilterDay=1, 1, 1
MoonColorFilterSunset=0.722, 0.8, 0.918
MoonColorFilterDusk=0.337, 0.239, 0.969
MoonColorFilterNight=0.314, 0.541, 0.965
MoonColorFilterInteriorDay=1, 1, 1
MoonColorFilterInteriorNight=0.314, 0.431, 0.957
[ENVIRONMENT]
IgnoreWeatherSystem=true
DirectLightingIntensityDawn=1.86
DirectLightingIntensitySunrise=1.52
DirectLightingIntensityDay=1.06
DirectLightingIntensitySunset=1.58
DirectLightingIntensityDusk=1.95
DirectLightingIntensityNight=2.53
DirectLightingIntensityInteriorDay=1.16
DirectLightingIntensityInteriorNight=2.61
DirectLightingDesaturationDawn=0.0
DirectLightingDesaturationSunrise=0.0
DirectLightingDesaturationDay=0.0
DirectLightingDesaturationSunset=0.0
DirectLightingDesaturationDusk=0.0
DirectLightingDesaturationNight=0.0
DirectLightingDesaturationInteriorDay=0.0
DirectLightingDesaturationInteriorNight=0.0
DirectLightingColorFilterDawn=0.937, 0.812, 0.914
DirectLightingColorFilterSunrise=0.961, 0.851, 0.757
DirectLightingColorFilterDay=0.984, 0.945, 0.867
DirectLightingColorFilterSunset=0.988, 0.871, 0.8
DirectLightingColorFilterDusk=0.937, 0.851, 0.863
DirectLightingColorFilterNight=0.722, 0.706, 0.976
DirectLightingColorFilterInteriorDay=0.973, 0.859, 0.698
DirectLightingColorFilterInteriorNight=0.886, 0.863, 0.996
AmbientLightingIntensityDawn=0.7
AmbientLightingIntensitySunrise=0.83
AmbientLightingIntensityDay=0.83
AmbientLightingIntensitySunset=0.81
AmbientLightingIntensityDusk=0.75
AmbientLightingIntensityNight=0.65
AmbientLightingIntensityInteriorDay=0.78
AmbientLightingIntensityInteriorNight=0.66
[SSAO_SSIL]
UseIndirectLighting=true
ResolutionScale=1.0
SourceTexturesScale=0.5
SamplingQuality=0
SamplingRange=0.15
AOIntensity=1.0
AOIntensityInterior=1.0
AOAmount=0.5
AOAmountInterior=0.5
ILAmount=4.0
ILAmountInterior=4.0
AOMixingType=2
AOMixingTypeInterior=2

1
enbseries/VERSION Normal file
View file

@ -0,0 +1 @@
3.1.0 BETA "It Just Works"

228
enbseries/_coldweather.ini Normal file
View file

@ -0,0 +1,228 @@
[BLOOM]
AmountDawn=0.1
AmountSunrise=0.1
AmountDay=0.1
AmountSunset=0.1
AmountDusk=0.1
AmountNight=0.1
AmountInteriorDay=0.1
AmountInteriorNight=0.1
[LENS]
AmountDawn=1.0
AmountSunrise=1.0
AmountDay=1.0
AmountSunset=1.0
AmountDusk=1.0
AmountNight=1.0
AmountInteriorDay=1.0
AmountInteriorNight=1.0
[SKY]
GradientIntensityDawn=1.0
GradientIntensitySunrise=1.0
GradientIntensityDay=1.0
GradientIntensitySunset=1.0
GradientIntensityDusk=1.0
GradientIntensityNight=1.0
GradientIntensityInteriorDay=1.0
GradientIntensityInteriorNight=1.0
GradientDesaturationDawn=0.0
GradientDesaturationSunrise=0.0
GradientDesaturationDay=0.0
GradientDesaturationSunset=0.0
GradientDesaturationDusk=0.0
GradientDesaturationNight=0.0
GradientDesaturationInteriorDay=0.0
GradientDesaturationInteriorNight=0.0
GradientTopIntensityDawn=1.0
GradientTopIntensitySunrise=1.0
GradientTopIntensityDay=1.0
GradientTopIntensitySunset=1.0
GradientTopIntensityDusk=1.0
GradientTopIntensityNight=1.0
GradientTopIntensityInteriorDay=1.0
GradientTopIntensityInteriorNight=1.0
GradientTopCurveDawn=1.0
GradientTopCurveSunrise=1.0
GradientTopCurveDay=1.0
GradientTopCurveSunset=1.0
GradientTopCurveDusk=1.0
GradientTopCurveNight=1.0
GradientTopCurveInteriorDay=1.0
GradientTopCurveInteriorNight=1.0
GradientTopColorFilterDawn=1, 1, 1
GradientTopColorFilterSunrise=1, 1, 1
GradientTopColorFilterDay=1, 1, 1
GradientTopColorFilterSunset=1, 1, 1
GradientTopColorFilterDusk=1, 1, 1
GradientTopColorFilterNight=1, 1, 1
GradientTopColorFilterInteriorDay=1, 1, 1
GradientTopColorFilterInteriorNight=1, 1, 1
GradientMiddleIntensityDawn=1.0
GradientMiddleIntensitySunrise=1.0
GradientMiddleIntensityDay=1.0
GradientMiddleIntensitySunset=1.0
GradientMiddleIntensityDusk=1.0
GradientMiddleIntensityNight=1.0
GradientMiddleIntensityInteriorDay=1.0
GradientMiddleIntensityInteriorNight=1.0
GradientMiddleCurveDawn=1.0
GradientMiddleCurveSunrise=1.0
GradientMiddleCurveDay=1.0
GradientMiddleCurveSunset=1.0
GradientMiddleCurveDusk=1.0
GradientMiddleCurveNight=1.0
GradientMiddleCurveInteriorDay=1.0
GradientMiddleCurveInteriorNight=1.0
GradientMiddleColorFilterDawn=1, 1, 1
GradientMiddleColorFilterSunrise=1, 1, 1
GradientMiddleColorFilterDay=1, 1, 1
GradientMiddleColorFilterSunset=1, 1, 1
GradientMiddleColorFilterDusk=1, 1, 1
GradientMiddleColorFilterNight=1, 1, 1
GradientMiddleColorFilterInteriorDay=1, 1, 1
GradientMiddleColorFilterInteriorNight=1, 1, 1
GradientHorizonIntensityDawn=1.0
GradientHorizonIntensitySunrise=1.0
GradientHorizonIntensityDay=1.0
GradientHorizonIntensitySunset=1.0
GradientHorizonIntensityDusk=1.0
GradientHorizonIntensityNight=1.0
GradientHorizonIntensityInteriorDay=1.0
GradientHorizonIntensityInteriorNight=1.0
GradientHorizonCurveDawn=1.0
GradientHorizonCurveSunrise=1.0
GradientHorizonCurveDay=1.0
GradientHorizonCurveSunset=1.0
GradientHorizonCurveDusk=1.0
GradientHorizonCurveNight=1.0
GradientHorizonCurveInteriorDay=1.0
GradientHorizonCurveInteriorNight=1.0
GradientHorizonColorFilterDawn=1, 1, 1
GradientHorizonColorFilterSunrise=1, 1, 1
GradientHorizonColorFilterDay=1, 1, 1
GradientHorizonColorFilterSunset=1, 1, 1
GradientHorizonColorFilterDusk=1, 1, 1
GradientHorizonColorFilterNight=1, 1, 1
GradientHorizonColorFilterInteriorDay=1, 1, 1
GradientHorizonColorFilterInteriorNight=1, 1, 1
CloudsIntensityDawn=1.0
CloudsIntensitySunrise=1.0
CloudsIntensityDay=1.0
CloudsIntensitySunset=1.0
CloudsIntensityDusk=1.0
CloudsIntensityNight=1.0
CloudsIntensityInteriorDay=1.0
CloudsIntensityInteriorNight=1.0
CloudsCurveDawn=1.0
CloudsCurveSunrise=1.0
CloudsCurveDay=1.0
CloudsCurveSunset=1.0
CloudsCurveDusk=1.0
CloudsCurveNight=1.0
CloudsCurveInteriorDay=1.0
CloudsCurveInteriorNight=1.0
CloudsDesaturationDawn=0.0
CloudsDesaturationSunrise=0.0
CloudsDesaturationDay=0.0
CloudsDesaturationSunset=0.0
CloudsDesaturationDusk=0.0
CloudsDesaturationNight=0.0
CloudsDesaturationInteriorDay=0.0
CloudsDesaturationInteriorNight=0.0
CloudsOpacityDawn=1.0
CloudsOpacitySunrise=1.0
CloudsOpacityDay=1.0
CloudsOpacitySunset=1.0
CloudsOpacityDusk=1.0
CloudsOpacityNight=1.0
CloudsOpacityInteriorDay=1.0
CloudsOpacityInteriorNight=1.0
CloudsColorFilterDawn=1, 1, 1
CloudsColorFilterSunrise=1, 1, 1
CloudsColorFilterDay=1, 1, 1
CloudsColorFilterSunset=1, 1, 1
CloudsColorFilterDusk=1, 1, 1
CloudsColorFilterNight=1, 1, 1
CloudsColorFilterInteriorDay=1, 1, 1
CloudsColorFilterInteriorNight=1, 1, 1
SunIntensityDawn=1.0
SunIntensitySunrise=1.0
SunIntensityDay=1.0
SunIntensitySunset=1.0
SunIntensityDusk=1.0
SunIntensityNight=1.0
SunIntensityInteriorDay=1.0
SunIntensityInteriorNight=1.0
SunDesaturationDawn=0.0
SunDesaturationSunrise=0.0
SunDesaturationDay=0.0
SunDesaturationSunset=0.0
SunDesaturationDusk=0.0
SunDesaturationNight=0.0
SunDesaturationInteriorDay=0.0
SunDesaturationInteriorNight=0.0
SunColorFilterDawn=1, 1, 1
SunColorFilterSunrise=1, 1, 1
SunColorFilterDay=1, 1, 1
SunColorFilterSunset=1, 1, 1
SunColorFilterDusk=1, 1, 1
SunColorFilterNight=1, 1, 1
SunColorFilterInteriorDay=1, 1, 1
SunColorFilterInteriorNight=1, 1, 1
MoonIntensityDawn=1.0
MoonIntensitySunrise=1.0
MoonIntensityDay=1.0
MoonIntensitySunset=1.0
MoonIntensityDusk=1.0
MoonIntensityNight=1.0
MoonIntensityInteriorDay=1.0
MoonIntensityInteriorNight=1.0
MoonDesaturationDawn=0.0
MoonDesaturationSunrise=0.0
MoonDesaturationDay=0.0
MoonDesaturationSunset=0.0
MoonDesaturationDusk=0.0
MoonDesaturationNight=0.0
MoonDesaturationInteriorDay=0.0
MoonDesaturationInteriorNight=0.0
MoonColorFilterDawn=1, 1, 1
MoonColorFilterSunrise=1, 1, 1
MoonColorFilterDay=1, 1, 1
MoonColorFilterSunset=1, 1, 1
MoonColorFilterDusk=1, 1, 1
MoonColorFilterNight=1, 1, 1
MoonColorFilterInteriorDay=1, 1, 1
MoonColorFilterInteriorNight=1, 1, 1
[ENVIRONMENT]
DirectLightingIntensityDawn=1.0
DirectLightingIntensitySunrise=1.0
DirectLightingIntensityDay=1.0
DirectLightingIntensitySunset=1.0
DirectLightingIntensityDusk=1.0
DirectLightingIntensityNight=1.0
DirectLightingIntensityInteriorDay=1.0
DirectLightingIntensityInteriorNight=1.0
DirectLightingDesaturationDawn=0.0
DirectLightingDesaturationSunrise=0.0
DirectLightingDesaturationDay=0.0
DirectLightingDesaturationSunset=0.0
DirectLightingDesaturationDusk=0.0
DirectLightingDesaturationNight=0.0
DirectLightingDesaturationInteriorDay=0.0
DirectLightingDesaturationInteriorNight=0.0
DirectLightingColorFilterDawn=1, 1, 1
DirectLightingColorFilterSunrise=1, 1, 1
DirectLightingColorFilterDay=1, 1, 1
DirectLightingColorFilterSunset=1, 1, 1
DirectLightingColorFilterDusk=1, 1, 1
DirectLightingColorFilterNight=1, 1, 1
DirectLightingColorFilterInteriorDay=1, 1, 1
DirectLightingColorFilterInteriorNight=1, 1, 1
AmbientLightingIntensityDawn=1.0
AmbientLightingIntensitySunrise=1.0
AmbientLightingIntensityDay=1.0
AmbientLightingIntensitySunset=1.0
AmbientLightingIntensityDusk=1.0
AmbientLightingIntensityNight=1.0
AmbientLightingIntensityInteriorDay=1.0
AmbientLightingIntensityInteriorNight=1.0

228
enbseries/_hotweather.ini Normal file
View file

@ -0,0 +1,228 @@
[BLOOM]
AmountDawn=0.1
AmountSunrise=0.1
AmountDay=0.1
AmountSunset=0.1
AmountDusk=0.1
AmountNight=0.1
AmountInteriorDay=0.1
AmountInteriorNight=0.1
[LENS]
AmountDawn=1.0
AmountSunrise=1.0
AmountDay=1.0
AmountSunset=1.0
AmountDusk=1.0
AmountNight=1.0
AmountInteriorDay=1.0
AmountInteriorNight=1.0
[SKY]
GradientIntensityDawn=1.0
GradientIntensitySunrise=1.0
GradientIntensityDay=1.0
GradientIntensitySunset=1.0
GradientIntensityDusk=1.0
GradientIntensityNight=1.0
GradientIntensityInteriorDay=1.0
GradientIntensityInteriorNight=1.0
GradientDesaturationDawn=0.0
GradientDesaturationSunrise=0.0
GradientDesaturationDay=0.0
GradientDesaturationSunset=0.0
GradientDesaturationDusk=0.0
GradientDesaturationNight=0.0
GradientDesaturationInteriorDay=0.0
GradientDesaturationInteriorNight=0.0
GradientTopIntensityDawn=1.0
GradientTopIntensitySunrise=1.0
GradientTopIntensityDay=1.0
GradientTopIntensitySunset=1.0
GradientTopIntensityDusk=1.0
GradientTopIntensityNight=1.0
GradientTopIntensityInteriorDay=1.0
GradientTopIntensityInteriorNight=1.0
GradientTopCurveDawn=1.0
GradientTopCurveSunrise=1.0
GradientTopCurveDay=1.0
GradientTopCurveSunset=1.0
GradientTopCurveDusk=1.0
GradientTopCurveNight=1.0
GradientTopCurveInteriorDay=1.0
GradientTopCurveInteriorNight=1.0
GradientTopColorFilterDawn=1, 1, 1
GradientTopColorFilterSunrise=1, 1, 1
GradientTopColorFilterDay=1, 1, 1
GradientTopColorFilterSunset=1, 1, 1
GradientTopColorFilterDusk=1, 1, 1
GradientTopColorFilterNight=1, 1, 1
GradientTopColorFilterInteriorDay=1, 1, 1
GradientTopColorFilterInteriorNight=1, 1, 1
GradientMiddleIntensityDawn=1.0
GradientMiddleIntensitySunrise=1.0
GradientMiddleIntensityDay=1.0
GradientMiddleIntensitySunset=1.0
GradientMiddleIntensityDusk=1.0
GradientMiddleIntensityNight=1.0
GradientMiddleIntensityInteriorDay=1.0
GradientMiddleIntensityInteriorNight=1.0
GradientMiddleCurveDawn=1.0
GradientMiddleCurveSunrise=1.0
GradientMiddleCurveDay=1.0
GradientMiddleCurveSunset=1.0
GradientMiddleCurveDusk=1.0
GradientMiddleCurveNight=1.0
GradientMiddleCurveInteriorDay=1.0
GradientMiddleCurveInteriorNight=1.0
GradientMiddleColorFilterDawn=1, 1, 1
GradientMiddleColorFilterSunrise=1, 1, 1
GradientMiddleColorFilterDay=1, 1, 1
GradientMiddleColorFilterSunset=1, 1, 1
GradientMiddleColorFilterDusk=1, 1, 1
GradientMiddleColorFilterNight=1, 1, 1
GradientMiddleColorFilterInteriorDay=1, 1, 1
GradientMiddleColorFilterInteriorNight=1, 1, 1
GradientHorizonIntensityDawn=1.0
GradientHorizonIntensitySunrise=1.0
GradientHorizonIntensityDay=1.0
GradientHorizonIntensitySunset=1.0
GradientHorizonIntensityDusk=1.0
GradientHorizonIntensityNight=1.0
GradientHorizonIntensityInteriorDay=1.0
GradientHorizonIntensityInteriorNight=1.0
GradientHorizonCurveDawn=1.0
GradientHorizonCurveSunrise=1.0
GradientHorizonCurveDay=1.0
GradientHorizonCurveSunset=1.0
GradientHorizonCurveDusk=1.0
GradientHorizonCurveNight=1.0
GradientHorizonCurveInteriorDay=1.0
GradientHorizonCurveInteriorNight=1.0
GradientHorizonColorFilterDawn=1, 1, 1
GradientHorizonColorFilterSunrise=1, 1, 1
GradientHorizonColorFilterDay=1, 1, 1
GradientHorizonColorFilterSunset=1, 1, 1
GradientHorizonColorFilterDusk=1, 1, 1
GradientHorizonColorFilterNight=1, 1, 1
GradientHorizonColorFilterInteriorDay=1, 1, 1
GradientHorizonColorFilterInteriorNight=1, 1, 1
CloudsIntensityDawn=1.0
CloudsIntensitySunrise=1.0
CloudsIntensityDay=1.0
CloudsIntensitySunset=1.0
CloudsIntensityDusk=1.0
CloudsIntensityNight=1.0
CloudsIntensityInteriorDay=1.0
CloudsIntensityInteriorNight=1.0
CloudsCurveDawn=1.0
CloudsCurveSunrise=1.0
CloudsCurveDay=1.0
CloudsCurveSunset=1.0
CloudsCurveDusk=1.0
CloudsCurveNight=1.0
CloudsCurveInteriorDay=1.0
CloudsCurveInteriorNight=1.0
CloudsDesaturationDawn=0.0
CloudsDesaturationSunrise=0.0
CloudsDesaturationDay=0.0
CloudsDesaturationSunset=0.0
CloudsDesaturationDusk=0.0
CloudsDesaturationNight=0.0
CloudsDesaturationInteriorDay=0.0
CloudsDesaturationInteriorNight=0.0
CloudsOpacityDawn=1.0
CloudsOpacitySunrise=1.0
CloudsOpacityDay=1.0
CloudsOpacitySunset=1.0
CloudsOpacityDusk=1.0
CloudsOpacityNight=1.0
CloudsOpacityInteriorDay=1.0
CloudsOpacityInteriorNight=1.0
CloudsColorFilterDawn=1, 1, 1
CloudsColorFilterSunrise=1, 1, 1
CloudsColorFilterDay=1, 1, 1
CloudsColorFilterSunset=1, 1, 1
CloudsColorFilterDusk=1, 1, 1
CloudsColorFilterNight=1, 1, 1
CloudsColorFilterInteriorDay=1, 1, 1
CloudsColorFilterInteriorNight=1, 1, 1
SunIntensityDawn=1.0
SunIntensitySunrise=1.0
SunIntensityDay=1.0
SunIntensitySunset=1.0
SunIntensityDusk=1.0
SunIntensityNight=1.0
SunIntensityInteriorDay=1.0
SunIntensityInteriorNight=1.0
SunDesaturationDawn=0.0
SunDesaturationSunrise=0.0
SunDesaturationDay=0.0
SunDesaturationSunset=0.0
SunDesaturationDusk=0.0
SunDesaturationNight=0.0
SunDesaturationInteriorDay=0.0
SunDesaturationInteriorNight=0.0
SunColorFilterDawn=1, 1, 1
SunColorFilterSunrise=1, 1, 1
SunColorFilterDay=1, 1, 1
SunColorFilterSunset=1, 1, 1
SunColorFilterDusk=1, 1, 1
SunColorFilterNight=1, 1, 1
SunColorFilterInteriorDay=1, 1, 1
SunColorFilterInteriorNight=1, 1, 1
MoonIntensityDawn=1.0
MoonIntensitySunrise=1.0
MoonIntensityDay=1.0
MoonIntensitySunset=1.0
MoonIntensityDusk=1.0
MoonIntensityNight=1.0
MoonIntensityInteriorDay=1.0
MoonIntensityInteriorNight=1.0
MoonDesaturationDawn=0.0
MoonDesaturationSunrise=0.0
MoonDesaturationDay=0.0
MoonDesaturationSunset=0.0
MoonDesaturationDusk=0.0
MoonDesaturationNight=0.0
MoonDesaturationInteriorDay=0.0
MoonDesaturationInteriorNight=0.0
MoonColorFilterDawn=1, 1, 1
MoonColorFilterSunrise=1, 1, 1
MoonColorFilterDay=1, 1, 1
MoonColorFilterSunset=1, 1, 1
MoonColorFilterDusk=1, 1, 1
MoonColorFilterNight=1, 1, 1
MoonColorFilterInteriorDay=1, 1, 1
MoonColorFilterInteriorNight=1, 1, 1
[ENVIRONMENT]
DirectLightingIntensityDawn=1.0
DirectLightingIntensitySunrise=1.0
DirectLightingIntensityDay=1.0
DirectLightingIntensitySunset=1.0
DirectLightingIntensityDusk=1.0
DirectLightingIntensityNight=1.0
DirectLightingIntensityInteriorDay=1.0
DirectLightingIntensityInteriorNight=1.0
DirectLightingDesaturationDawn=0.0
DirectLightingDesaturationSunrise=0.0
DirectLightingDesaturationDay=0.0
DirectLightingDesaturationSunset=0.0
DirectLightingDesaturationDusk=0.0
DirectLightingDesaturationNight=0.0
DirectLightingDesaturationInteriorDay=0.0
DirectLightingDesaturationInteriorNight=0.0
DirectLightingColorFilterDawn=1, 1, 1
DirectLightingColorFilterSunrise=1, 1, 1
DirectLightingColorFilterDay=1, 1, 1
DirectLightingColorFilterSunset=1, 1, 1
DirectLightingColorFilterDusk=1, 1, 1
DirectLightingColorFilterNight=1, 1, 1
DirectLightingColorFilterInteriorDay=1, 1, 1
DirectLightingColorFilterInteriorNight=1, 1, 1
AmbientLightingIntensityDawn=1.0
AmbientLightingIntensitySunrise=1.0
AmbientLightingIntensityDay=1.0
AmbientLightingIntensitySunset=1.0
AmbientLightingIntensityDusk=1.0
AmbientLightingIntensityNight=1.0
AmbientLightingIntensityInteriorDay=1.0
AmbientLightingIntensityInteriorNight=1.0

View file

@ -1,7 +1,9 @@
[WEATHER001]
FileName=
FileName=_hotweather.ini
WeatherIDs=81a, 12f89, 2e7ab, a6858, d9329, 10199f, 105941, 10a230, 10a233, 10a237, 10a23a, 10a23b, 10a23f, 10a240, 10a243, 10a7a5, 10a7a8, 10d9ec, 10e1e3, 10e1e4, 10e1e5, 10e1e6, 10e1e9, 10e1ea, 10e1eb, 10e1ec, 10e1ed, 10e1ee, 10e1f1, 10e1f2, 18471, 31ac0, 32336, 374b8, 374b9, 5b29c, 5b29d, 5b2a0, 1760e, 1760f, 19bbe, 19bbf, 19bc0, 1bc0d, 25d8d, 2e982, 2e983, 3ab68, 12eab9, 7761f
[WEATHER002]
FileName=
FileName=_coldweather.ini
WeatherIDs=4d7fb, aee84, 4d7fb, c821e, c821f, c8220, c8221, d4886, ecc96, 104ab4, 10a234, 10a235, 10a236, 10da13, 10e1e7, 10e1e8, 10fef8, 1407, 959f, 10e0b, 10e0e, 10e0f, 10e10, 14551, 18dbb, 18dbc, 18dbd, 19599, 195a0, 1d760, 374ba, 21311
[WEATHER003]
FileName=
[WEATHER004]
@ -60,3 +62,139 @@ FileName=
FileName=
[WEATHER031]
FileName=
[WEATHER032]
FileName=
[WEATHER033]
FileName=
[WEATHER034]
FileName=
[WEATHER035]
FileName=
[WEATHER036]
FileName=
[WEATHER037]
FileName=
[WEATHER038]
FileName=
[WEATHER039]
FileName=
[WEATHER040]
FileName=
[WEATHER041]
FileName=
[WEATHER042]
FileName=
[WEATHER043]
FileName=
[WEATHER044]
FileName=
[WEATHER045]
FileName=
[WEATHER046]
FileName=
[WEATHER047]
FileName=
[WEATHER048]
FileName=
[WEATHER049]
FileName=
[WEATHER050]
FileName=
[WEATHER051]
FileName=
[WEATHER052]
FileName=
[WEATHER053]
FileName=
[WEATHER054]
FileName=
[WEATHER055]
FileName=
[WEATHER056]
FileName=
[WEATHER057]
FileName=
[WEATHER058]
FileName=
[WEATHER059]
FileName=
[WEATHER060]
FileName=
[WEATHER061]
FileName=
[WEATHER062]
FileName=
[WEATHER063]
FileName=
[WEATHER064]
FileName=
[WEATHER065]
FileName=
[WEATHER066]
FileName=
[WEATHER067]
FileName=
[WEATHER068]
FileName=
[WEATHER069]
FileName=
[WEATHER070]
FileName=
[WEATHER071]
FileName=
[WEATHER072]
FileName=
[WEATHER073]
FileName=
[WEATHER074]
FileName=
[WEATHER075]
FileName=
[WEATHER076]
FileName=
[WEATHER077]
FileName=
[WEATHER078]
FileName=
[WEATHER079]
FileName=
[WEATHER080]
FileName=
[WEATHER081]
FileName=
[WEATHER082]
FileName=
[WEATHER083]
FileName=
[WEATHER084]
FileName=
[WEATHER085]
FileName=
[WEATHER086]
FileName=
[WEATHER087]
FileName=
[WEATHER088]
FileName=
[WEATHER089]
FileName=
[WEATHER090]
FileName=
[WEATHER091]
FileName=
[WEATHER092]
FileName=
[WEATHER093]
FileName=
[WEATHER094]
FileName=
[WEATHER095]
FileName=
[WEATHER096]
FileName=
[WEATHER097]
FileName=
[WEATHER098]
FileName=
[WEATHER099]
FileName=

100
enbseries/enbadaptation.fx Normal file
View file

@ -0,0 +1,100 @@
/*
enbadaptation.fx : MariENB3 eye adaptation shader.
(C)2016 Marisa Kirisame, UnSX Team.
Part of MariENB3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
#include "menbglobaldefs.fx"
float4 AdaptationParameters;
Texture2D TextureCurrent;
Texture2D TexturePrevious;
SamplerState Sampler0
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Clamp;
AddressV = Clamp;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_OUTPUT_POST
{
float4 pos : SV_POSITION;
float2 txcoord0 : TEXCOORD0;
};
VS_OUTPUT_POST VS_Quad( 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.txcoord.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))
float4 PS_Downsample( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float ssz = 1.0/16.0;
float4 res = float4(0,0,0,0);
int x, y;
[unroll] for ( y=-8; y<8; y++ ) [unroll] for ( x=-8; x<8; x++ )
res += TextureCurrent.Sample(Sampler0,coord+float2(x,y)*ssz);
res /= 256.0;
res = luminance(res.rgb);
res.w = 1.0;
return res;
}
float4 PS_Adaptation(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float prev = TexturePrevious.Sample(Sampler0,coord).x;
float ssz = 1.0/16.0;
float4 res = float4(0,0,0,0);
float smpmax = 0.0, smp;
int x, y;
[unroll] for ( y=-8; y<8; y++ ) [unroll] for ( x=-8; x<8; x++ )
{
smp = TextureCurrent.Sample(Sampler0,coord+float2(x,y)*ssz).x;
smpmax = max(smpmax,smp);
res += smp;
}
res /= 256.0;
res = lerp(res,smpmax,AdaptationParameters.z);
res = lerp(prev,res,AdaptationParameters.w);
res = clamp(res,0.0,16384.0);
float vclip = clamp(res.x,AdaptationParameters.x,
AdaptationParameters.y);
res *= vclip/(res+0.000000001);
res.w = 1.0;
return res;
}
technique11 Downsample
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsample()));
}
}
technique11 Draw
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Adaptation()));
}
}

View file

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

938
enbseries/enbbloom.fx Normal file
View file

@ -0,0 +1,938 @@
/*
enbbloom.fx : MariENB3 bloom shader.
(C)2016 Marisa Kirisame, UnSX Team.
Part of MariENB3, the personal ENB of Marisa for Fallout 4.
Released under the GNU GPLv3 (or later).
*/
#include "menbglobaldefs.fx"
string str_bloompre = "Bloom Prepass";
/* bloom intensity */
float bloomintensity_n
<
string UIName = "Bloom Intensity Night";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomintensity_d
<
string UIName = "Bloom Intensity Day";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomintensity_i
<
string UIName = "Bloom Intensity Interior";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* bloom power (contrast) */
float bloompower_n
<
string UIName = "Bloom Contrast Night";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloompower_d
<
string UIName = "Bloom Contrast Day";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloompower_i
<
string UIName = "Bloom Contrast Interior";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
/* bloom saturation */
float bloomsaturation_n
<
string UIName = "Bloom Saturation Night";
string UIWidget = "Spinner";
> = {0.75};
float bloomsaturation_d
<
string UIName = "Bloom Saturation Day";
string UIWidget = "Spinner";
> = {0.75};
float bloomsaturation_i
<
string UIName = "Bloom Saturation Interior";
string UIWidget = "Spinner";
> = {0.75};
/* bloom offset (negative values keep dark areas from muddying up) */
float bloombump_n
<
string UIName = "Bloom Offset Night";
string UIWidget = "Spinner";
> = {-0.5};
float bloombump_d
<
string UIName = "Bloom Offset Day";
string UIWidget = "Spinner";
> = {-0.5};
float bloombump_i
<
string UIName = "Bloom Offset Interior";
string UIWidget = "Spinner";
> = {-0.5};
/* bloom cap (maximum brightness samples can have) */
float bloomcap_n
<
string UIName = "Bloom Intensity Cap Night";
string UIWidget = "Spinner";
> = {20.0};
float bloomcap_d
<
string UIName = "Bloom Intensity Cap Day";
string UIWidget = "Spinner";
> = {20.0};
float bloomcap_i
<
string UIName = "Bloom Intensity Cap Interior";
string UIWidget = "Spinner";
> = {20.0};
string str_bloomper = "Bloom Per-pass";
/* bloom blur radius */
float bloomradiusx
<
string UIName = "Bloom Blur Radius X";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomradiusy
<
string UIName = "Bloom Blur Radius Y";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float bloomtheta
<
string UIName = "Bloom Angle";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.0};
/* bloom tint/blueshift parameters */
float3 blu_n
<
string UIName = "Blue Shift Night";
string UIWidget = "Color";
> = {0.2,0.6,1.0};
float3 blu_d
<
string UIName = "Blue Shift Day";
string UIWidget = "Color";
> = {0.2,0.6,1.0};
float3 blu_i
<
string UIName = "Blue Shift Interior";
string UIWidget = "Color";
> = {0.2,0.6,1.0};
float bsi_n
<
string UIName = "Blue Shift Intensity Night";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
float bsi_d
<
string UIName = "Blue Shift Intensity Day";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
float bsi_i
<
string UIName = "Blue Shift Intensity Interior";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
float bslp
<
string UIName = "Blue Shift Luminance Factor Per-pass";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.22};
float bsbp
<
string UIName = "Blue Shift Color Factor Per-pass";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.33};
/* anamorphic bloom (very intensive) */
string str_bloomalf = "Anamorphic Bloom";
bool alfenable
<
string UIName = "Enable Anamorphic Bloom";
string UIWidget = "Checkbox";
> = {true};
float fbl_n
<
string UIName = "Anamorphic Bloom Blend Night";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.75};
float fbl_d
<
string UIName = "Anamorphic Bloom Blend Day";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.75};
float fbl_i
<
string UIName = "Anamorphic Bloom Blend Interior";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.75};
float3 flu_n
<
string UIName = "Anamorphic Bloom Blue Shift Night";
string UIWidget = "Color";
> = {0.4,0.1,1.0};
float3 flu_d
<
string UIName = "Anamorphic Bloom Blue Shift Day";
string UIWidget = "Color";
> = {0.4,0.1,1.0};
float3 flu_i
<
string UIName = "Anamorphic Bloom Blue Shift Interior";
string UIWidget = "Color";
> = {0.4,0.1,1.0};
float fsi_n
<
string UIName = "Anamorphic Bloom Blue Shift Intensity Night";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fsi_d
<
string UIName = "Anamorphic Bloom Blue Shift Intensity Day";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fsi_i
<
string UIName = "Anamorphic Bloom Blue Shift Intensity Interior";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_n
<
string UIName = "Anamorphic Bloom Contrast Night";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_d
<
string UIName = "Anamorphic Bloom Contrast Day";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float fpw_i
<
string UIName = "Anamorphic Bloom Contrast Interior";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {1.0};
float flen
<
string UIName = "Anamorphic Bloom Radius Multiplier";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {4.0};
string str_bloompost = "Bloom Post-pass";
/* bloom mix factors */
float bloommix1
<
string UIName = "Bloom Pass 1 Blend";
string UIWidget = "Spinner";
> = {0.75};
float bloommix2
<
string UIName = "Bloom Pass 2 Blend";
string UIWidget = "Spinner";
> = {0.8};
float bloommix3
<
string UIName = "Bloom Pass 3 Blend";
string UIWidget = "Spinner";
> = {0.85};
float bloommix4
<
string UIName = "Bloom Pass 4 Blend";
string UIWidget = "Spinner";
> = {0.9};
float bloommix5
<
string UIName = "Bloom Pass 5 Blend";
string UIWidget = "Spinner";
> = {0.95};
float bloommix6
<
string UIName = "Bloom Pass 6 Blend";
string UIWidget = "Spinner";
> = {1.0};
float bloommixs
<
string UIName = "Bloom Single Pass Blend";
string UIWidget = "Spinner";
> = {1.0};
string str_bloomdirt = "Lens Dirt";
bool dirtenable
<
string UIName = "Enable Lens Dirt";
string UIWidget = "Checkbox";
> = {false};
float dirtmix1
<
string UIName = "Dirt Pass 1 Blend";
string UIWidget = "Spinner";
> = {0.0};
float dirtmix2
<
string UIName = "Dirt Pass 2 Blend";
string UIWidget = "Spinner";
> = {0.1};
float dirtmix3
<
string UIName = "Dirt Pass 3 Blend";
string UIWidget = "Spinner";
> = {1.2};
float dirtmix4
<
string UIName = "Dirt Pass 4 Blend";
string UIWidget = "Spinner";
> = {0.5};
float dirtmix5
<
string UIName = "Dirt Pass 5 Blend";
string UIWidget = "Spinner";
> = {0.25};
float dirtmix6
<
string UIName = "Dirt Pass 6 Blend";
string UIWidget = "Spinner";
> = {0.1};
float dirtmixs
<
string UIName = "Dirt Single Pass Blend";
string UIWidget = "Spinner";
> = {1.0};
float dirtsaturation
<
string UIName = "Dirt Saturation";
string UIWidget = "Spinner";
> = {1.0};
float ldirtpow
<
string UIName = "Dirt Contrast";
string UIWidget = "Spinner";
> = {1.25};
float ldirtfactor
<
string UIName = "Dirt Factor";
string UIWidget = "Spinner";
> = {1.5};
/* gaussian blur matrices */
/* radius: 4, std dev: 1.5 */
/*static const float gauss4[4] =
{
0.270682, 0.216745, 0.111281, 0.036633
};*/
/* 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: 40, std dev: 15 */
/*static const float gauss40[40] =
{
0.026823, 0.026763, 0.026585, 0.026291,
0.025886, 0.025373, 0.024760, 0.024055,
0.023267, 0.022404, 0.021478, 0.020499,
0.019477, 0.018425, 0.017352, 0.016269,
0.015186, 0.014112, 0.013056, 0.012025,
0.011027, 0.010067, 0.009149, 0.008279,
0.007458, 0.006688, 0.005972, 0.005308,
0.004697, 0.004139, 0.003630, 0.003170,
0.002756, 0.002385, 0.002055, 0.001763,
0.001506, 0.001280, 0.001084, 0.000913
};*/
/* radius: 80, std dev: 30 */
static const float gauss80[80] =
{
0.013406, 0.013398, 0.013376, 0.013339, 0.013287, 0.013221,
0.013140, 0.013046, 0.012938, 0.012816, 0.012681, 0.012534,
0.012375, 0.012205, 0.012023, 0.011831, 0.011629, 0.011417,
0.011198, 0.010970, 0.010735, 0.010493, 0.010245, 0.009992,
0.009735, 0.009473, 0.009209, 0.008941, 0.008672, 0.008402,
0.008131, 0.007860, 0.007590, 0.007321, 0.007053, 0.006788,
0.006525, 0.006266, 0.006010, 0.005759, 0.005511, 0.005269,
0.005031, 0.004799, 0.004573, 0.004352, 0.004138, 0.003929,
0.003727, 0.003532, 0.003343, 0.003160, 0.002985, 0.002816,
0.002653, 0.002497, 0.002348, 0.002205, 0.002068, 0.001938,
0.001814, 0.001696, 0.001584, 0.001478, 0.001377, 0.001282,
0.001192, 0.001107, 0.001027, 0.000952, 0.000881, 0.000815,
0.000753, 0.000694, 0.000640, 0.000589, 0.000542, 0.000497,
0.000456, 0.000418
};
/* mathematical constants */
static const float pi = 3.1415926535898;
float4 ScreenSize;
float ENightDayFactor;
float EInteriorFactor;
float4 TimeOfDay1;
float4 TimeOfDay2;
Texture2D TextureDownsampled;
Texture2D TextureColor;
Texture2D RenderTarget1024;
Texture2D RenderTarget512;
Texture2D RenderTarget256;
Texture2D RenderTarget128;
Texture2D RenderTarget64;
Texture2D RenderTarget32;
Texture2D RenderTargetRGBA64F;
Texture2D TextureLens
<
#ifdef LENSDIRT_DDS
string ResourceName = "menblens.dds";
#else
string ResourceName = "menblens.png";
#endif
>;
SamplerState Sampler
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Border;
AddressV = Border;
};
SamplerState Sampler2
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Clamp;
AddressV = Clamp;
};
SamplerState SamplerLens
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Mirror;
AddressV = Mirror;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_OUTPUT_POST
{
float4 pos : SV_POSITION;
float2 txcoord0 : TEXCOORD0;
};
VS_OUTPUT_POST VS_Quad(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.txcoord.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))
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 */
float4 PS_PrePass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float bloomcap = tod_ind(bloomcap);
float bloombump = tod_ind(bloombump);
float bloompower = tod_ind(bloompower);
float bloomsaturation = tod_ind(bloomsaturation);
float bloomintensity = tod_ind(bloomintensity);
float4 res = TextureDownsampled.Sample(Sampler2,coord);
float3 hsv = rgb2hsv(res.rgb);
hsv.z = min(hsv.z,bloomcap);
res.rgb = hsv2rgb(hsv);
res = max(res+bloombump,0.0);
hsv = rgb2hsv(res.rgb);
hsv.y = clamp(hsv.y*bloomsaturation,0.0,1.0);
hsv.z = pow(hsv.z,bloompower);
res.rgb = hsv2rgb(hsv)*bloomintensity;
res.a = 1.0;
return res;
}
/*
progressive downsizing of textures, with interpolation.
First downsample is unnecessary because both textures are the same size.
*/
float4 PS_Downsize( VS_OUTPUT_POST IN, float4 v0 : SV_Position0,
uniform Texture2D intex, uniform float insz ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float2 ssz;
if ( insz <= 0.0 ) return intex.Sample(Sampler2,coord);
ssz = float2(1.0/insz,1.0/insz);
float4 res = 0.25*(intex.Sample(Sampler2,coord)
+intex.Sample(Sampler2,coord+float2(ssz.x,0.0))
+intex.Sample(Sampler2,coord+float2(0.0,ssz.y))
+intex.Sample(Sampler2,coord+float2(ssz.x,ssz.y)));
return res;
}
/*
Anamorphic bloom step. Secondary bloom stretched along an axis.
I've seen that some ENBs do something almost-maybe-possibly-slightly-similar
they call "anamorphic lens flare", which has an ass-backwards-retarded
implementation, which serves to showcase their incompetence. Rather than use
a single-axis massive-scale blur like I do, they simply awkwardly stretch
sampling coordinates along one axis, which doesn't even have the same effect
as it just makes it so bright areas ONLY at the very middle of the screen
produces sharp bright lines extending towards the sides.
*/
float4 Anamorphic( float2 coord, Texture2D intex, float insz )
{
float4 res = float4(0.0,0.0,0.0,0.0),
base = RenderTargetRGBA64F.Sample(Sampler,coord);
int i;
float sum = 0.0;
float2 pp;
float2 dir = float2(cos(bloomtheta*2*pi),sin(bloomtheta*2*pi))
*flen/insz;
[unroll] for ( i=-79; i<=79; i++ )
{
pp = coord+dir*i;
res += gauss80[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss80[abs(i)]:0.0;
}
res *= 1.0/sum;
float3 flu = tod_ind(flu);
float fsi = tod_ind(fsi);
float lm = max(0,luminance(res.rgb)-luminance(base.rgb))*fsi;
lm = lm/(1.0+lm);
res.rgb *= lerp(1.0,flu,lm);
float fbl = tod_ind(fbl);
float fpw = tod_ind(fpw);
res.rgb = pow(max(0,res.rgb),fpw)*fbl;
return res;
}
/* blur step goes here */
float4 PS_HorizontalBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0,
uniform Texture2D intex, uniform float insz ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float4 res = float4(0.0,0.0,0.0,0.0);
int i;
float sum = 0.0;
float2 pp;
float2 dir = float2(cos(bloomtheta*2*pi),sin(bloomtheta*2*pi))
*bloomradiusx/insz;
[unroll] for ( i=-7; i<=7; i++ )
{
pp = coord+dir*i;
res += gauss8[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss8[abs(i)]:0.0;
}
res *= 1.0/sum;
if ( alfenable ) res += Anamorphic(coord,intex,insz);
res.a = 1.0;
return res;
}
/* This is the vertical step */
float4 PS_VerticalBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0,
uniform Texture2D intex, uniform float insz,
uniform float bpass ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float4 res = float4(0.0,0.0,0.0,0.0),
base = RenderTargetRGBA64F.Sample(Sampler,coord);
int i;
float sum = 0.0;
float2 pp;
float2 dir = float2(sin(bloomtheta*2*pi),-cos(bloomtheta*2*pi))
*bloomradiusy/insz;
[unroll] for ( i=-7; i<=7; i++ )
{
pp = coord+dir*i;
res += gauss8[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.y>=0.0)&&(pp.y<1.0))?gauss8[abs(i)]:0.0;
}
res *= 1.0/sum;
float3 blu = tod_ind(blu);
float bsi = tod_ind(bsi);
float lm = max(0,luminance(res.rgb)-luminance(base.rgb))*bsi;
lm = lm/(1.0+lm);
lm *= 1.0-saturate(bpass*bslp);
blu = saturate(blu+bpass*bsbp);
res.rgb *= lerp(1.0,blu,lm);
res.a = 1.0;
return res;
}
/* end pass, mix it all up */
float4 PS_PostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float4 res = bloommix1*RenderTarget1024.Sample(Sampler2,coord);
res += bloommix2*RenderTarget512.Sample(Sampler2,coord);
res += bloommix3*RenderTarget256.Sample(Sampler2,coord);
res += bloommix4*RenderTarget128.Sample(Sampler2,coord);
res += bloommix5*RenderTarget64.Sample(Sampler2,coord);
res += bloommix6*RenderTarget32.Sample(Sampler2,coord);
res.rgb /= 6.0;
res.rgb = clamp(res.rgb,0.0,32768.0);
res.a = 1.0;
if ( !dirtenable ) return res;
/* crappy lens filter, useful when playing characters with glasses */
float2 ccoord = coord;
#ifdef ASPECT_LENSDIRT
ccoord.y = (coord.y-0.5)*ScreenSize.w+0.5;
#endif
float4 crap = TextureLens.Sample(SamplerLens,ccoord);
float4 mud = dirtmix1*RenderTarget1024.Sample(Sampler2,coord);
mud += dirtmix2*RenderTarget512.Sample(Sampler2,coord);
mud += dirtmix3*RenderTarget256.Sample(Sampler2,coord);
mud += dirtmix4*RenderTarget128.Sample(Sampler2,coord);
mud += dirtmix5*RenderTarget64.Sample(Sampler2,coord);
mud += dirtmix6*RenderTarget32.Sample(Sampler2,coord);
mud.rgb /= 6.0;
mud.rgb = clamp(mud.rgb,0.0,32768.0);
float mudmax = luminance(mud.rgb);
float mudn = max(mudmax/(1.0+mudmax),0.0);
mudn = pow(mudn,max(ldirtpow-crap.a,0.0));
mud.rgb *= mudn*ldirtfactor*crap.rgb;
res += max(mud,0.0);
res.a = 1.0;
return res;
}
float4 PS_SPostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float4 res = bloommixs*RenderTarget128.Sample(Sampler2,coord);
res.rgb = clamp(res.rgb,0.0,32768.0);
res.a = 1.0;
if ( !dirtenable ) return res;
/* crappy lens filter, useful when playing characters with glasses */
float2 ccoord = coord;
#ifdef ASPECT_LENSDIRT
ccoord.y = (coord.y-0.5)*ScreenSize.w+0.5;
#endif
float4 crap = TextureLens.Sample(SamplerLens,ccoord);
float4 mud = dirtmixs*RenderTarget32.Sample(Sampler2,coord);
float3 hsv = rgb2hsv(mud.rgb);
hsv.y = clamp(hsv.y*dirtsaturation,0.0,1.0);
mud.rgb = clamp(hsv2rgb(hsv),0.0,32768.0);
float mudmax = luminance(mud.rgb);
float mudn = max(mudmax/(1.0+mudmax),0.0);
mudn = pow(mudn,max(ldirtpow-crap.a,0.0));
mud.rgb *= mudn*ldirtfactor*crap.rgb;
res += max(mud,0.0);
res.a = 1.0;
return res;
}
technique11 BloomSimplePass <string UIName="MariENB Simple Bloom"; string RenderTarget="RenderTargetRGBA64F";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_PrePass()));
}
}
technique11 BloomSimplePass1 <string RenderTarget="RenderTarget1024";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTargetRGBA64F,0.0)));
}
}
technique11 BloomSimplePass2 <string RenderTarget="RenderTarget512";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget1024,1024.0)));
}
}
technique11 BloomSimplePass3 <string RenderTarget="RenderTarget256";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget512,512.0)));
}
}
technique11 BloomSimplePass4 <string RenderTarget="RenderTarget128";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget256,256.0)));
}
}
technique11 BloomSimplePass5 <string RenderTarget="RenderTarget64";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget128,128.0)));
}
}
technique11 BloomSimplePass6 <string RenderTarget="RenderTarget32";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget64,64.0)));
}
}
technique11 BloomSimplePass7
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget128,128.0)));
}
}
technique11 BloomSimplePass8 <string RenderTarget="RenderTarget128";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,128.0,3.0)));
}
}
technique11 BloomSimplePass9
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget32,32.0)));
}
}
technique11 BloomSimplePass10 <string RenderTarget="RenderTarget32";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,32.0,5.0)));
}
}
technique11 BloomSimplePass11
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_SPostPass()));
}
}
technique11 BloomPass <string UIName="MariENB Multi Bloom"; string RenderTarget="RenderTargetRGBA64F";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_PrePass()));
}
}
technique11 BloomPass1 <string RenderTarget="RenderTarget1024";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTargetRGBA64F,0.0)));
}
}
technique11 BloomPass2 <string RenderTarget="RenderTarget512";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget1024,1024.0)));
}
}
technique11 BloomPass3 <string RenderTarget="RenderTarget256";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget512,512.0)));
}
}
technique11 BloomPass4 <string RenderTarget="RenderTarget128";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget256,256.0)));
}
}
technique11 BloomPass5 <string RenderTarget="RenderTarget64";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget128,128.0)));
}
}
technique11 BloomPass6 <string RenderTarget="RenderTarget32";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget64,64.0)));
}
}
technique11 BloomPass7
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget1024,1024.0)));
}
}
technique11 BloomPass8 <string RenderTarget="RenderTarget1024";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,1024.0,0.0)));
}
}
technique11 BloomPass9
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget512,512.0)));
}
}
technique11 BloomPass10 <string RenderTarget="RenderTarget512";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,512.0,1.0)));
}
}
technique11 BloomPass11
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget256,256.0)));
}
}
technique11 BloomPass12 <string RenderTarget="RenderTarget256";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,256.0,2.0)));
}
}
technique11 BloomPass13
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget128,128.0)));
}
}
technique11 BloomPass14 <string RenderTarget="RenderTarget128";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,128.0,3.0)));
}
}
technique11 BloomPass15
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget64,64.0)));
}
}
technique11 BloomPass16 <string RenderTarget="RenderTarget64";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,64.0,4.0)));
}
}
technique11 BloomPass17
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_HorizontalBlur(RenderTarget32,32.0)));
}
}
technique11 BloomPass18 <string RenderTarget="RenderTarget32";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_VerticalBlur(TextureColor,32.0,5.0)));
}
}
technique11 BloomPass19
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_PostPass()));
}
}

103
enbseries/enbbloom.fx.ini Normal file
View file

@ -0,0 +1,103 @@
[ENBBLOOM.FX]
TECHNIQUE=2
Bloom Intensity Night=0.79
Bloom Intensity Day=0.73
Bloom Intensity Interior=0.86
Bloom Contrast Night=1.27
Bloom Contrast Day=1.42
Bloom Contrast Interior=1.36
Bloom Saturation Night=1.21
Bloom Saturation Day=1.18
Bloom Saturation Interior=1.24
Bloom Offset Night=-0.07
Bloom Offset Day=-0.11
Bloom Offset Interior=-0.08
Bloom Intensity Cap Night=20.0
Bloom Intensity Cap Day=20.0
Bloom Intensity Cap Interior=20.0
Bloom Blur Radius=1.0
Blue Shift Night=0.294, 0.424, 0.859
Blue Shift Day=0.22, 0.537, 0.855
Blue Shift Interior=0.337, 0.525, 0.878
Blue Shift Intensity Night=0.32
Blue Shift Intensity Day=0.45
Blue Shift Intensity Interior=0.38
Blue Shift Luminance Factor Per-pass=0.41
Blue Shift Color Factor Per-pass=0.92
Enable Anamorphic Bloom=true
Anamorphic Bloom Blend Night=0.75
Anamorphic Bloom Blend Day=0.68
Anamorphic Bloom Blend Interior=0.79
Anamorphic Bloom Blue Shift Night=0.553, 0.404, 0.851
Anamorphic Bloom Blue Shift Day=0.424, 0.384, 0.831
Anamorphic Bloom Blue Shift Interior=0.537, 0.475, 0.89
Anamorphic Bloom Blue Shift Intensity Night=1.33
Anamorphic Bloom Blue Shift Intensity Day=1.2
Anamorphic Bloom Blue Shift Intensity Interior=1.52
Anamorphic Bloom Contrast Night=1.13
Anamorphic Bloom Contrast Day=1.1
Anamorphic Bloom Contrast Interior=1.19
Anamorphic Bloom Radius Multiplier=1.0
Bloom Intensity Interior Night=1.33
Bloom Intensity Interior Day=1.26
Bloom Contrast Interior Night=0.73
Bloom Contrast Interior Day=0.75
Bloom Saturation Interior Night=0.81
Bloom Saturation Interior Day=0.75
Bloom Offset Interior Night=-0.43
Bloom Offset Interior Day=-0.42
Bloom Intensity Cap Interior Night=100.0
Bloom Intensity Cap Interior Day=100.0
Blue Shift Night Red=0.2
Blue Shift Night Green=0.6
Blue Shift Night Blue=1.0
Blue Shift Day Red=0.2
Blue Shift Day Green=0.6
Blue Shift Day Blue=1.0
Blue Shift Interior Night Red=0.2
Blue Shift Interior Night Green=0.6
Blue Shift Interior Night Blue=1.0
Blue Shift Interior Day Red=0.2
Blue Shift Interior Day Green=0.6
Blue Shift Interior Day Blue=1.0
Blue Shift Intensity Interior Night=0.59
Blue Shift Intensity Interior Day=0.48
Anamorphic Bloom Blend Interior Night=0.69
Anamorphic Bloom Blend Interior Day=0.63
Anamorphic Bloom Blue Shift Night Red=0.4
Anamorphic Bloom Blue Shift Night Green=0.1
Anamorphic Bloom Blue Shift Night Blue=1.0
Anamorphic Bloom Blue Shift Day Red=0.5
Anamorphic Bloom Blue Shift Day Green=0.1
Anamorphic Bloom Blue Shift Day Blue=1.0
Anamorphic Bloom Blue Shift Interior Night Red=0.5
Anamorphic Bloom Blue Shift Interior Night Green=0.1
Anamorphic Bloom Blue Shift Interior Night Blue=1.0
Anamorphic Bloom Blue Shift Interior Day Red=0.5
Anamorphic Bloom Blue Shift Interior Day Green=0.1
Anamorphic Bloom Blue Shift Interior Day Blue=1.0
Anamorphic Bloom Blue Shift Interior Night=1.86
Anamorphic Bloom Blue Shift Interior Day=1.86
Anamorphic Bloom Contrast Interior Night=1.12
Anamorphic Bloom Contrast Interior Day=1.22
Bloom Pass 1 Blend=0.97
Bloom Pass 2 Blend=0.86
Bloom Pass 3 Blend=0.79
Bloom Pass 4 Blend=0.63
Bloom Pass 5 Blend=0.49
Bloom Pass 6 Blend=0.34
Enable Lens Dirt=false
Dirt Pass 1 Blend=0.03
Dirt Pass 2 Blend=0.12
Dirt Pass 3 Blend=0.24
Dirt Pass 4 Blend=0.4
Dirt Pass 5 Blend=0.67
Dirt Pass 6 Blend=5.15
Dirt Contrast=1.17
Dirt Factor=2.91
Bloom Blur Radius X=1.0
Bloom Blur Radius Y=2.0
Bloom Single Pass Blend=1.0
Dirt Single Pass Blend=1.13
Bloom Angle=0.0
Dirt Saturation=0.68

1554
enbseries/enbdepthoffield.fx Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,186 @@
[ENBDEPTHOFFIELD.FX]
TECHNIQUE=1
Fixed Resolution Width=1920
Fixed Resolution Height=1080
Depth Cutoff=999998.0
Near Z=0.05
Far Z=3098.0
Distortion Chromatic Aberration=7.4
Enable Underwater=false
Underwater Frequency=2.36, 3.39, 2.72
Underwater Speed=24.3, 21.9, 26.5
Underwater Amplitude=0.1, 0.11, 0.07
Underwater Zoom=0.15
Always Underwater=false
Enable Hot Air Refraction=false
Heat Texture Size=7.04
Heat Speed=0.67
Heat Fade Contrast=235.0
Heat Fade Intensity=1.1
Heat Fade Offset=-0.59
Heat Intensity=0.6
Heat Contrast=0.95
Heat Time-of-day Contrast=0.5
Heat Always Enable=false
Enable Screen Frost=false
Frost Contrast=0.83
Frost Strength=0.05
Frost Radial Contrast=2.11
Frost Radial Intensity=1.22
Frost Radial Offset=-0.94
Frost Texture Blend=0.85
Frost Texture Blend Contrast=2.78
Frost Texture Size=0.8
Frost Indoor Factor=0.0
Frost Night Factor=0.0
Frost Always Enable=false
Enable Focus Triangle=true
Display Focus Points=false
Enable Manual Focus=false
Manual Focus Depth=0.0
Focus Point Center=0.5, 0.48, 0
Focus Triangle Angle=0.5
Focus Triangle Radius Night=12.0
Focus Triangle Radius Day=16.0
Focus Triangle Radius Interior=14.0
Focus Triangle Blending Night=0.4
Focus Triangle Blending Day=0.3
Focus Triangle Blending Interior=0.5
Focus Maximum Depth Night=990.0
Focus Maximum Depth Day=994.0
Focus Maximum Depth Interior=988.0
DOF Intensity Night=375.0
DOF Intensity Day=325.0
DOF Intensity Interior=380.0
DOF Contrast Night=3.95
DOF Contrast Day=4.16
DOF Contrast Interior=3.78
DOF Shift Night=0.0
DOF Shift Day=0.0
DOF Shift Interior=0.0
DOF Fixed Focus Intensity Night=1.0
DOF Fixed Focus Intensity Day=1.0
DOF Fixed Focus Intensity Interior=1.0
DOF Fixed Focus Contrast Night=1.0
DOF Fixed Focus Contrast Day=1.0
DOF Fixed Focus Contrast Interior=1.0
DOF Fixed Focus Shift Night=0.0
DOF Fixed Focus Shift Day=0.0
DOF Fixed Focus Shift Interior=0.0
DOF Fixed Focus Blend Night=1.0
DOF Fixed Focus Blend Day=1.0
DOF Fixed Focus Blend Interior=1.0
DOF Fixed Unfocus Intensity Night=1.16
DOF Fixed Unfocus Intensity Day=1.12
DOF Fixed Unfocus Intensity Interior=1.14
DOF Fixed Unfocus Contrast Night=100.0
DOF Fixed Unfocus Contrast Day=126.0
DOF Fixed Unfocus Contrast Interior=110.0
DOF Fixed Unfocus Shift Night=-0.85
DOF Fixed Unfocus Shift Day=-0.9
DOF Fixed Unfocus Shift Interior=-0.87
DOF Fixed Unfocus Blend Night=1.0
DOF Fixed Unfocus Blend Day=1.0
DOF Fixed Unfocus Blend Interior=1.0
DOF Fixed Use Cutoff=true
Disable DOF=false
DOF Gather Blur Radius=8.0
Debug Depth=false
Debug Focus=false
Enable Edgevision=false
Edgevision Fade Contrast Night=1.8
Edgevision Fade Contrast Day=1.9
Edgevision Fade Contrast Interior=3.0
Edgevision Fade Intensity Night=1.25
Edgevision Fade Intensity Day=1.1
Edgevision Fade Intensity Interior=1.3
Edgevision Contrast=0.25
Edgevision Intensity=8.0
Edgevision Radius=1.0
Enable SSAO=false
SSAO Radius=0.05
SSAO Noise=0
SSAO Fade Contrast Night=0.45
SSAO Fade Contrast Day=0.4
SSAO Fade Contrast Interior=0.5
SSAO Fade Intensity Night=1.3
SSAO Fade Intensity Day=1.1
SSAO Fade Intensity Interior=1.3
SSAO Intensity=1.25
SSAO Contrast=0.65
SSAO Blending=0.8
SSAO Blur=true
SSAO Bilateral Factor=500.0
SSAO Range=20.0
SSAO Range Min=0.0
SSAO Blur Radius=1.0
Debug SSAO=false
SSAO Use Less Samples=true
SSAO Blur Use Less Samples=true
Focus Circle Discard Center Depth=0.01
Underwater Frequency 1=2.36
Underwater Frequency 2=3.39
Underwater Frequency 3=2.72
Underwater Speed 1=24.309999
Underwater Speed 2=21.9
Underwater Speed 3=26.549999
Underwater Amplitude 1=0.1
Underwater Amplitude 2=0.11
Underwater Amplitude 3=0.07
Focus Point Center X=0.5
Focus Point Center Y=0.48
Focus Triangle Radius Interior Night=5.0
Focus Triangle Radius Interior Day=7.0
Focus Triangle Blending Interior Night=0.5
Focus Triangle Blending Interior Day=0.6
Focus Maximum Depth Interior Night=984.0
Focus Maximum Depth Interior Day=988.0
DOF Intensity Interior Night=300.0
DOF Intensity Interior Day=280.0
DOF Contrast Interior Night=3.45
DOF Contrast Interior Day=3.6
DOF Shift Interior Night=0.0
DOF Shift Interior Day=0.0
DOF Fixed Focus Intensity Interior Night=1.0
DOF Fixed Focus Intensity Interior Day=1.0
DOF Fixed Focus Contrast Interior Night=1.0
DOF Fixed Focus Contrast Interior Day=1.0
DOF Fixed Focus Shift Interior Night=-0.01
DOF Fixed Focus Shift Interior Day=-0.01
DOF Fixed Focus Blend Interior Night=1.0
DOF Fixed Focus Blend Interior Day=1.0
DOF Fixed Unfocus Intensity Interior Night=1.5
DOF Fixed Unfocus Intensity Interior Day=1.5
DOF Fixed Unfocus Contrast Interior Night=230.0
DOF Fixed Unfocus Contrast Interior Day=250.0
DOF Fixed Unfocus Shift Interior Night=-0.98
DOF Fixed Unfocus Shift Interior Day=-1.03
DOF Fixed Unfocus Blend Interior Night=1.0
DOF Fixed Unfocus Blend Interior Day=1.0
Edgevision Fade Contrast Interior Night=2.0
Edgevision Fade Contrast Interior Day=2.0
Edgevision Fade Intensity Interior Night=500.0
Edgevision Fade Intensity Interior Day=600.0
SSAO Fade Contrast Interior Night=0.75
SSAO Fade Contrast Interior Day=0.85
SSAO Fade Intensity Interior Night=12.0
SSAO Fade Intensity Interior Day=11.5
Fixed ResolutionX=1920
Fixed ResolutionY=1080
DOF Minimum Blur=0.01
Heat Factor Dawn=0.15
Heat Factor Sunrise=0.59
Heat Factor Day=0.89
Heat Factor Sunset=0.67
Heat Factor Dusk=0.13
Heat Factor Night=0.0
Heat Factor Interior=0.0
Frost Factor Dawn=0.3
Frost Factor Sunrise=0.1
Frost Factor Day=0.0
Frost Factor Sunset=0.1
Frost Factor Dusk=0.3
Frost Factor Night=0.85
Frost Factor Interior=0.0
DOF Bilateral Factor=5.0
DOF Bilateral Radius=1.0

View file

@ -1,10 +1,912 @@
/*
enbeffect.fx : MariENB 3 base shader.
(C)2015 Marisa Kirisame, UnSX Team.
Part of MariENB 3, the personal ENB of Marisa for Fallout 4.
enbeffect.fx : MariENB3 base shader.
(C)2016 Marisa Kirisame, UnSX Team.
Part of MariENB3, 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"
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 */
float3 nm
<
string UIName = "Grain Magnification";
string UIWidget = "Vector";
> = {13.25,19.64,17.35};
float3 nm1
<
string UIName = "Grain Pass 1 Magnification";
string UIWidget = "Vector";
> = {2.05,3.11,2.22};
float3 nm2
<
string UIName = "Grain Pass 2 Magnification";
string UIWidget = "Vector";
> = {4.25,0.42,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_n
<
string UIName = "Tonemap Shoulder Strength Night";
string UIWidget = "Spinner";
> = {0.5};
float unA_d
<
string UIName = "Tonemap Shoulder Strength Day";
string UIWidget = "Spinner";
> = {0.5};
float unA_i
<
string UIName = "Tonemap Shoulder Strength Interior";
string UIWidget = "Spinner";
> = {0.5};
float unB_n
<
string UIName = "Tonemap Linear Strength Night";
string UIWidget = "Spinner";
> = {1.0};
float unB_d
<
string UIName = "Tonemap Linear Strength Day";
string UIWidget = "Spinner";
> = {1.0};
float unB_i
<
string UIName = "Tonemap Linear Strength Interior";
string UIWidget = "Spinner";
> = {1.0};
float unC_n
<
string UIName = "Tonemap Linear Angle Night";
string UIWidget = "Spinner";
> = {0.2};
float unC_d
<
string UIName = "Tonemap Linear Angle Day";
string UIWidget = "Spinner";
> = {0.2};
float unC_i
<
string UIName = "Tonemap Linear Angle Interior";
string UIWidget = "Spinner";
> = {0.2};
float unD_n
<
string UIName = "Tonemap Toe Strength Night";
string UIWidget = "Spinner";
> = {0.75};
float unD_d
<
string UIName = "Tonemap Toe Strength Day";
string UIWidget = "Spinner";
> = {0.75};
float unD_i
<
string UIName = "Tonemap Toe Strength Interior";
string UIWidget = "Spinner";
> = {0.75};
float unE_n
<
string UIName = "Tonemap Toe Numerator Night";
string UIWidget = "Spinner";
> = {0.02};
float unE_d
<
string UIName = "Tonemap Toe Numerator Day";
string UIWidget = "Spinner";
> = {0.02};
float unE_i
<
string UIName = "Tonemap Toe Numerator Interior";
string UIWidget = "Spinner";
> = {0.02};
float unF_n
<
string UIName = "Tonemap Toe Denominator Night";
string UIWidget = "Spinner";
> = {0.30};
float unF_d
<
string UIName = "Tonemap Toe Denominator Day";
string UIWidget = "Spinner";
> = {0.30};
float unF_i
<
string UIName = "Tonemap Toe Denominator Interior";
string UIWidget = "Spinner";
> = {0.30};
float unW_n
<
string UIName = "Tonemap Linear White Night";
string UIWidget = "Spinner";
> = {10.0};
float unW_d
<
string UIName = "Tonemap Linear White Day";
string UIWidget = "Spinner";
> = {10.0};
float unW_i
<
string UIName = "Tonemap Linear White Interior";
string UIWidget = "Spinner";
> = {10.0};
/* Color grading */
string str_grade = "Color Grading Suite";
bool gradeenable1
<
string UIName = "Enable RGB Grading";
string UIWidget = "Checkbox";
> = {false};
/* color component multipliers */
float3 grademul_n
<
string UIName = "Grading Intensity Night";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
float3 grademul_d
<
string UIName = "Grading Intensity Day";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
float3 grademul_i
<
string UIName = "Grading Intensity Interior";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
/* color component contrasts */
float3 gradepow_n
<
string UIName = "Grading Contrast Night";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
float3 gradepow_d
<
string UIName = "Grading Contrast Day";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
float3 gradepow_i
<
string UIName = "Grading Contrast Interior";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
/* colorization factors */
bool gradeenable2
<
string UIName = "Enable Vibrance Grading";
string UIWidget = "Checkbox";
> = {false};
float3 gradecol_n
<
string UIName = "Grading Color Night";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
float3 gradecol_d
<
string UIName = "Grading Color Day";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
float3 gradecol_i
<
string UIName = "Grading Color Interior";
string UIWidget = "Vector";
> = {1.0,1.0,1.0};
/* blend factor for colorization (negative values are quite fancy) */
float gradecolfact_n
<
string UIName = "Grading Color Factor Night";
string UIWidget = "Spinner";
> = {0.0};
float gradecolfact_d
<
string UIName = "Grading Color Factor Day";
string UIWidget = "Spinner";
> = {0.0};
float gradecolfact_i
<
string UIName = "Grading Color Factor Interior";
string UIWidget = "Spinner";
> = {0.0};
/* HSV grading */
bool gradeenable3
<
string UIName = "Enable HSV Grading";
string UIWidget = "Checkbox";
> = {false};
/* saturation multiplier */
float gradesatmul_n
<
string UIName = "Grading Saturation Intensity Night";
string UIWidget = "Spinner";
> = {1.0};
float gradesatmul_d
<
string UIName = "Grading Saturation Intensity Day";
string UIWidget = "Spinner";
> = {1.0};
float gradesatmul_i
<
string UIName = "Grading Saturation Intensity Interior";
string UIWidget = "Spinner";
> = {1.0};
/* saturation power */
float gradesatpow_n
<
string UIName = "Grading Saturation Contrast Night";
string UIWidget = "Spinner";
> = {1.0};
float gradesatpow_d
<
string UIName = "Grading Saturation Contrast Day";
string UIWidget = "Spinner";
> = {1.0};
float gradesatpow_i
<
string UIName = "Grading Saturation Contrast Interior";
string UIWidget = "Spinner";
> = {1.0};
/* value multiplier */
float gradevalmul_n
<
string UIName = "Grading Value Intensity Night";
string UIWidget = "Spinner";
> = {1.0};
float gradevalmul_d
<
string UIName = "Grading Value Intensity Day";
string UIWidget = "Spinner";
> = {1.0};
float gradevalmul_i
<
string UIName = "Grading Value Intensity Interior";
string UIWidget = "Spinner";
> = {1.0};
/* value power */
float gradevalpow_n
<
string UIName = "Grading Value Contrast Night";
string UIWidget = "Spinner";
> = {1.0};
float gradevalpow_d
<
string UIName = "Grading Value Contrast Day";
string UIWidget = "Spinner";
> = {1.0};
float gradevalpow_i
<
string UIName = "Grading Value Contrast Interior";
string UIWidget = "Spinner";
> = {1.0};
bool colorizeafterhsv
<
string UIName = "Colorize After HSV";
string UIWidget = "Checkbox";
> = {true};/* LUT grading */
string str_lut = "RGB Lookup Table Grading";
bool lutenable
<
string UIName = "Enable LUT Grading";
string UIWidget = "Checkbox";
> = {false};
float lutblend_n
<
string UIName = "LUT Blend Night";
string UIWidget = "Spinner";
> = {1.0};
float lutblend_d
<
string UIName = "LUT Blend Day";
string UIWidget = "Spinner";
> = {1.0};
float lutblend_i
<
string UIName = "LUT Blend Interior";
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};
string str_debug = "Debugging";
bool bloomdebug
<
string UIName = "Display Bloom";
string UIWidget = "Checkbox";
> = {false};
bool adaptdebug
<
string UIName = "Display Adaptation";
string UIWidget = "Checkbox";
> = {false};
/*
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
float4 Timer;
float4 ScreenSize;
float ENightDayFactor;
float EInteriorFactor;
float4 TimeOfDay1;
float4 TimeOfDay2;
#ifdef SKYRIMSE
float4 Params01[7];
#else
float4 Params01[6];
#endif
float4 ENBParams01;
Texture2D TextureColor;
Texture2D TextureBloom;
Texture2D TextureAdaptation;
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 Sampler0
{
Filter = MIN_MAG_MIP_POINT;
AddressU = Clamp;
AddressV = Clamp;
};
SamplerState Sampler1
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Clamp;
AddressV = Clamp;
};
SamplerState SamplerLUT
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
MaxLOD = 0;
MinLOD = 0;
};
SamplerState SamplerNoise2
{
Filter = MIN_LINEAR_MAG_MIP_POINT;
AddressU = Wrap;
AddressV = Wrap;
MaxLOD = 0;
MinLOD = 0;
};
SamplerState SamplerNoise3
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
MaxLOD = 0;
MinLOD = 0;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_OUTPUT_POST
{
float4 pos : SV_POSITION;
float2 txcoord0 : TEXCOORD0;
};
VS_OUTPUT_POST VS_Draw( 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.txcoord.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_ind(unA);
float B = tod_ind(unB);
float C = tod_ind(unC);
float D = tod_ind(unD);
float E = tod_ind(unE);
float F = tod_ind(unF);
return ((res*(A*res+C*B)+D*E)/(res*(A*res+B)+D*F))-E/F;
}
float3 Tonemap( float3 res )
{
float W = tod_ind(unW);
float3 ucol = Uch(res);
float3 uwhite = Uch(W);
return max(ucol/uwhite,0.0);
}
/* colour grading passes */
float3 GradingRGB( float3 res )
{
float3 grademul = tod_ind(grademul);
float3 gradepow = tod_ind(gradepow);
return pow(max(0,res),gradepow)*grademul;
}
float3 GradingColorize( float3 res )
{
float gradecolfact = tod_ind(gradecolfact);
float3 gradecol = tod_ind(gradecol);
float tonev = luminance(res);
float3 tonecolor = gradecol*tonev;
return res*(1.0-gradecolfact)+tonecolor*gradecolfact;
}
float3 GradingHSV( float3 res )
{
float gradesatmul = tod_ind(gradesatmul);
float gradesatpow = tod_ind(gradesatpow);
float gradevalmul = tod_ind(gradevalmul);
float gradevalpow = tod_ind(gradevalpow);
float3 hsv = rgb2hsv(res);
hsv.y = clamp(pow(max(0,hsv.y),gradesatpow)*gradesatmul,0.0,1.0);
hsv.z = pow(max(0,hsv.z),gradevalpow)*gradevalmul;
return hsv2rgb(hsv);
}
/* LUT colour grading */
float3 GradingLUT( float3 res )
{
/*
gross hacks were needed to "fix" the way direct3d interpolates on
sampling, and to manually interpolate on the blue channel
this could be alleviated if I could have all the LUTs as volume
maps, but I think ENB can't load them.
*/
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(SamplerLUT,lc1).rgb;
float3 tcl2 = TextureLUT.Sample(SamplerLUT,lc2).rgb;
tcol = lerp(tcl1,tcl2,dec);
float lutblend = tod_ind(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(SamplerNoise2,s1*nm1.x*nr).r;
n2 = TextureNoise2.Sample(SamplerNoise2,s2*nm1.y*nr).g;
n3 = TextureNoise2.Sample(SamplerNoise2,s3*nm1.z*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(SamplerNoise2,s1*nm2.x*nr).r;
n2 = TextureNoise2.Sample(SamplerNoise2,s2*nm2.y*nr).g;
n3 = TextureNoise2.Sample(SamplerNoise2,s3*nm2.z*nr).b;
}
else
{
n1 = TextureNoise3.Sample(SamplerNoise3,s1*nm.x*nr).r;
n2 = TextureNoise3.Sample(SamplerNoise3,s2*nm.y*nr).g;
n3 = TextureNoise3.Sample(SamplerNoise3,s3*nm.z*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);
}
float4 PS_Draw( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord0.xy;
float4 res;
#ifdef SKYRIMSE
res = TextureColor.Sample(Sampler0,coord)
+TextureBloom.Sample(Sampler1,coord)*ENBParams01.x;
/* Luckily I could sort of interpret some of the vanilla grading */
float val = luminance(res.rgb);
float adapt = TextureAdaptation.Sample(Sampler1,coord).x;
float4 tint;
res -= val;
res = Params01[3].x*res+val;
tint = Params01[4]*val-res;
res = Params01[4].w*tint+res;
res = Params01[3].w*res-adapt;
res = Params01[3].z*res+adapt;
if ( bloomdebug ) res = TextureBloom.Sample(Sampler1,coord)
*ENBParams01.x;
#else
float4 color;
color = TextureColor.Sample(Sampler0,IN.txcoord0.xy);
float4 r0, r1, r2, r3;
r0.xyz = color.xyz;
r1.xy = Params01[4].zw*IN.txcoord0.xy;
r1.xyz = TextureBloom.Sample(Sampler1,r1.xy).xyz*ENBParams01.x;
r0.w = TextureAdaptation.Sample(Sampler0,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;
color.xyz = lerp(r0.xyz,Params01[5].xyz,Params01[5].w);
color.xyz = saturate(color.xyz);
color.xyz = pow(color.xyz,1.0/2.2);
res.xyz = max(0,color.xyz);
res.w = 1.0;
if ( bloomdebug ) res = TextureBloom.Sample(Sampler1,Params01[4].zw
*coord)*ENBParams01.x;
#endif
/* Insert MariENB filters here */
if ( tmapenable ) 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 ( adaptdebug ) res.rgb = TextureAdaptation.Sample(Sampler1,coord).x;
if ( dodither ) res.rgb = Dither(res.rgb,coord);
res.rgb = max(0,res.rgb);
res.a = 1.0;
return res;
}
float4 PS_DrawOriginal( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{
float4 res;
float4 color;
color = TextureColor.Sample(Sampler0,IN.txcoord0.xy);
float4 r0, r1, r2, r3;
#ifdef SKYRIMSE
/*
You won't believe how HARD Boris has mangled this code.
After fixing the horrid code style and the unnecessary scientific
notation on floats, it's still unreadable.
It's also completely broken and results in a black screen.
*/
float2 scaleduv=Params01[6].xy*IN.txcoord0.xy;
scaleduv = max(scaleduv, 0.0);
scaleduv = min(scaleduv, Params01[6].zy);
r1.xy = scaleduv;
r0.xyz = color.xyz;
if ( Params01[0].x > 0.5 ) r1.xy = IN.txcoord0.xy;
r1.xyz = TextureBloom.Sample(Sampler1,r1.xy).xyz;
r2.xy = TextureAdaptation.Sample(Sampler1,IN.txcoord0.xy).xy;
r0.w = dot(float3(0.2125,0.7154,0.0721),r0.xyz);
r0.w = max(r0.w,0.00001);
r1.w = r2.y/r2.x;
r2.y = r0.w*r1.w;
if ( Params01[2].z >= 0.5 ) r2.z = 0xffffffff;
else r2.z = 0;
r3.xy = r1.w*r0.w+float2(-0.004,1.0);
r1.w = max(r3.x, 0.0);
r3.xz = r1.w*6.2+float2(0.5,1.7);
r2.w = r1.w*r3.x;
r1.w = r1.w*r3.z+0.06;
r1.w = r2.w/r1.w;
r1.w = pow(r1.w,2.2);
r1.w = r1.w*Params01[2].y;
r2.w = r2.y*Params01[2].y+1.0;
r2.y = r2.w*r2.y;
r2.y = r2.y/r3.y;
if (r2.z == 0) r1.w = r2.y;
else r1.w = r1.w;
r0.w = r1.w/r0.w;
r1.w = saturate(Params01[2].x-r1.w);
r1.xyz = r1*r1.w;
r0.xyz = r0*r0.w+r1;
r1.x = dot(r0.xyz,float3(0.2125,0.7154,0.0721));
r0.w = 1.0;
r0 = r0-r1.x;
r0 = Params01[3].x*r0+r1.x;
r1 = Params01[4]*r1.x-r0;
r0 = Params01[4].w*r1+r0;
r0 = Params01[3].w*r0-r2.x;
r0 = Params01[3].z*r0+r2.x;
r0.xyz = saturate(r0);
r1.xyz = pow(r1.xyz,Params01[6].w);
r1 = Params01[5]-r0;
res = Params01[5].w*r1+r0;
#else
r0.xyz = color.xyz;
r1.xy = Params01[4].zw*IN.txcoord0.xy;
r1.xyz = TextureBloom.Sample(Sampler1,r1.xy).xyz;
r0.w = TextureAdaptation.Sample(Sampler0,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(max(0,res.xyz),1.0/2.2);
#endif
res.w = 1.0;
return res;
}
technique11 Draw <string UIName="MariENB";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0, VS_Draw()));
SetPixelShader(CompileShader(ps_5_0, PS_Draw()));
}
}
technique11 ORIGINALPOSTPROCESS <string UIName="Vanilla";>
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0, VS_Draw()));
SetPixelShader(CompileShader(ps_5_0, PS_DrawOriginal()));
}
}

View file

@ -2,12 +2,73 @@
TECHNIQUE=1
Enable Grain=false
Grain Speed=2500.0
Grain Intensity=0.01
Grain Saturation=0.0
Grain Intensity=0.06
Grain Saturation=-0.23
Grain Two-Pass=true
Grain Blending Mode=1
Grain Dark Mask Contrast=3.56
Grain Blending Mode=3
Grain Dark Mask Contrast=0.74
Grain Two-Pass Factor=0.04
Grain Magnification=13.3, 19.6, 17.4
Grain Pass 1 Magnification=2.05, 3.11, 2.22
Grain Pass 2 Magnification=4.25, 0.42, 6.29
Grain Contrast=3.54
Enable Tonemapping=true
Tonemap Shoulder Strength Night=0.87
Tonemap Shoulder Strength Day=0.85
Tonemap Shoulder Strength Interior=0.67
Tonemap Linear Strength Night=1.32
Tonemap Linear Strength Day=1.21
Tonemap Linear Strength Interior=1.37
Tonemap Linear Angle Night=0.2
Tonemap Linear Angle Day=0.26
Tonemap Linear Angle Interior=0.14
Tonemap Toe Strength Night=1.27
Tonemap Toe Strength Day=1.36
Tonemap Toe Strength Interior=1.26
Tonemap Toe Numerator Night=3.63
Tonemap Toe Numerator Day=3.4
Tonemap Toe Numerator Interior=3.58
Tonemap Toe Denominator Night=0.99
Tonemap Toe Denominator Day=1.15
Tonemap Toe Denominator Interior=1.05
Tonemap Linear White Night=4.3
Tonemap Linear White Day=4.17
Tonemap Linear White Interior=4.26
Enable RGB Grading=true
Grading Intensity Night=1.08, 1.03, 1
Grading Intensity Day=1.06, 1.03, 1.08
Grading Intensity Interior=1.07, 1.03, 1.01
Grading Contrast Night=0.97, 0.98, 0.94
Grading Contrast Day=0.96, 0.98, 0.98
Grading Contrast Interior=0.96, 0.98, 0.95
Enable Vibrance Grading=true
Grading Color Night=-0.44, -0.33, -0.83
Grading Color Day=-0.65, -0.3, -0.69
Grading Color Interior=-0.25, -0.15, -0.05
Grading Color Factor Night=-0.06
Grading Color Factor Day=-0.04
Grading Color Factor Interior=-0.05
Enable HSV Grading=true
Grading Saturation Intensity Night=1.05
Grading Saturation Intensity Day=1.07
Grading Saturation Intensity Interior=1.05
Grading Saturation Contrast Night=1.01
Grading Saturation Contrast Day=1.06
Grading Saturation Contrast Interior=1.01
Grading Value Intensity Night=1.09
Grading Value Intensity Day=1.06
Grading Value Intensity Interior=1.08
Grading Value Contrast Night=1.41
Grading Value Contrast Day=1.55
Grading Value Contrast Interior=1.48
Colorize After HSV=true
Enable LUT Grading=true
LUT Blend Night=0.31
LUT Blend Day=0.51
LUT Blend Interior=0.38
Enable Post Dither=false
Dither Pattern=4
Display Bloom=false
Grain Magnification 1=13.25
Grain Magnification 2=19.639999
Grain Magnification 3=17.35
@ -17,47 +78,66 @@ 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
Tonemap Shoulder Strength Interior Night=1.13
Tonemap Shoulder Strength Interior Day=1.14
Tonemap Linear Strength Interior Night=0.88
Tonemap Linear Strength Interior Day=0.92
Tonemap Linear Angle Interior Night=0.68
Tonemap Linear Angle Interior Day=0.58
Tonemap Toe Strength Interior Night=0.79
Tonemap Toe Strength Interior Day=0.69
Tonemap Toe Numerator Interior Night=2.5
Tonemap Toe Numerator Interior Day=2.72
Tonemap Toe Denominator Interior Night=1.25
Tonemap Toe Denominator Interior Day=1.07
Tonemap Linear White Interior Night=1.33
Tonemap Linear White Interior Day=1.37
Grading Intensity Night Red=1.04
Grading Intensity Night Green=1.08
Grading Intensity Night Blue=1.07
Grading Intensity Day Red=1.11
Grading Intensity Day Green=1.08
Grading Intensity Day Blue=1.04
Grading Intensity Interior Night Red=1.07
Grading Intensity Interior Night Green=1.03
Grading Intensity Interior Night Blue=1.01
Grading Intensity Interior Day Red=1.1
Grading Intensity Interior Day Green=1.05
Grading Intensity Interior Day Blue=1.02
Grading Contrast Night Red=0.97
Grading Contrast Night Green=0.94
Grading Contrast Night Blue=0.96
Grading Contrast Day Red=0.94
Grading Contrast Day Green=0.99
Grading Contrast Day Blue=0.98
Grading Contrast Interior Night Red=0.96
Grading Contrast Interior Night Green=0.98
Grading Contrast Interior Night Blue=0.95
Grading Contrast Interior Day Red=0.94
Grading Contrast Interior Day Green=0.96
Grading Contrast Interior Day Blue=0.99
Grading Color Night Red=-0.91
Grading Color Night Green=-0.62
Grading Color Night Blue=-0.94
Grading Color Day Red=-0.48
Grading Color Day Green=-0.11
Grading Color Day Blue=-0.65
Grading Color Interior Night Red=-0.28
Grading Color Interior Night Green=-0.12
Grading Color Interior Night Blue=-0.06
Grading Color Interior Day Red=-0.47
Grading Color Interior Day Green=-0.12
Grading Color Interior Day Blue=-0.14
Grading Color Factor Interior Night=-0.11
Grading Color Factor Interior Day=-0.09
Grading Saturation Intensity Interior Night=1.43
Grading Saturation Intensity Interior Day=1.46
Grading Saturation Contrast Interior Night=1.19
Grading Saturation Contrast Interior Day=1.1
Grading Value Intensity Interior Night=1.03
Grading Value Intensity Interior Day=1.09
Grading Value Contrast Interior Night=1.42
Grading Value Contrast Interior Day=1.62
LUT Blend Interior Night=0.39
LUT Blend Interior Day=0.45
Display Adaptation=false

File diff suppressed because it is too large Load diff

View file

@ -1,40 +1,47 @@
[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
Emulated Resolution=0, 0, 0
Zoom Factor=0, 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
Contrast Modifier=1.3
Saturation Modifier=1.2
Dither Offset=-0.15
Dither Range=0.25
Enable ASCII=false
ASCII Monochrome=false
ASCII Blend=0.0
Enable Chroma Key=false
Chroma Key Red=0.0
Chroma Key Color=0.0, 1.0, 0.0
Chroma Key Depth=0.92
Enable Dot Matrix=false
Dot Size=1
Dot Blend=0.4
Dot Intensity=1.0
Dot Contrast=1.0
Enable Curvature=false
Curve Chromatic Aberration=0.7
Curve Zooming=50.200008
Curve Distortion=0.0
Curve Sampling Soften=0.0
Enable Blur=true
Blur Sampling Range=0.15
Enable Sharp=true
Sharp Sampling Range=0.35
Sharpening Amount=2.0
Enable Shift=false
Shift Sampling Range=0.6
Luma Sharpen Enable=true
Luma Sharpen Radius=0.8
Luma Sharpen Clamp=0.12
Luma Sharpen Blending=6.0
Emulated Resolution Width=0.0
Emulated Resolution Height=0.0
Zoom Factor X=0.0
Zoom Factor Y=0.0
Chroma Key Red=0, 1, 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

33
enbseries/enblens.fx Normal file
View file

@ -0,0 +1,33 @@
/* This shader intentionally left blank */
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_OUTPUT_POST
{
float4 pos : SV_POSITION;
float2 txcoord0 : TEXCOORD0;
};
VS_OUTPUT_POST VS_Quad(VS_INPUT_POST IN)
{
VS_OUTPUT_POST OUT;
float4 pos;
pos.xyz = IN.pos.xyz;
pos.w = 1.0;
OUT.pos = pos;
OUT.txcoord0.xy = IN.txcoord.xy;
return OUT;
}
float4 PS_Nothing(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
{
return float4(0.0,0.0,0.0,1.0);
}
technique11 Nothing
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_Nothing()));
}
}

2
enbseries/enblens.fx.ini Normal file
View file

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

View file

@ -1,6 +0,0 @@
[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,320 +0,0 @@
/*
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,165 +0,0 @@
/*
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,342 +0,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,529 +0,0 @@
/*
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).
*/
VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
{
VS_OUTPUT_POST OUT;
OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
OUT.txcoord.xy = IN.txcoord.xy;
return OUT;
}
/* helpers */
/* 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);
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);
}
/* prepass */
float4 ReducePrepass( in float4 col, in float2 coord )
{
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 )
col += bdbump+checkers[int(coord.x%2)+2*int(coord.y%2)]*bdmult;
else if ( dither == 1 )
col += bdbump+ordered2[int(coord.x%2)+2*int(coord.y%2)]*bdmult;
else if ( dither == 2 )
col += bdbump+ordered3[int(coord.x%3)+3*int(coord.y%3)]*bdmult;
else if ( dither == 3 )
col += bdbump+ordered4[int(coord.x%4)+4*int(coord.y%4)]*bdmult;
else if ( dither == 4 )
col += bdbump+ordered8[int(coord.x%8)+8*int(coord.y%8)]*bdmult;
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);
if ( cgapal == 0 )
{
dac.a = (dac.r+dac.g+dac.b)/3.0;
return (dac.a>0.5);
}
float dist = 2.0;
int idx = 0;
if ( cgapal == 1 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga1l[i]);
}
color.rgb = cga1l[idx];
}
else if ( cgapal == 2 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga1h[i]);
}
color.rgb = cga1h[idx];
}
else if ( cgapal == 3 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga2l[i]);
}
color.rgb = cga2l[idx];
}
else if ( cgapal == 4 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga2h[i]);
}
color.rgb = cga2h[idx];
}
else if ( cgapal == 5 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga3l[i]);
}
color.rgb = cga3l[idx];
}
else if ( cgapal == 6 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga3h[i]);
}
color.rgb = cga3h[idx];
}
return color;
}
/*
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);
float dist = 2.0;
int idx = 0;
if ( egapal == 0 )
{
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,stdega[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,stdega[i]);
}
color.rgb = stdega[idx];
}
else
{
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,aosega[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,aosega[i]);
}
color.rgb = aosega[idx];
}
return color;
}
/* 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);
color.rgb = trunc(dac.rgb*float3(32.0,64.0,32.0))
/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;
}
/* Various VGA 256-colour palettes: Doom, Quake I, and the standard. */
float4 ReduceDoom( in float4 color, in float2 coord )
{
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);
}
float4 ReduceQuake( in float4 color, in float2 coord )
{
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);
}
float4 ReduceVGA( in float4 color, in float2 coord )
{
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, float4 v0 : SV_Position0 ) : SV_Target
{
float2 coord = IN.txcoord.xy;
float4 res = TextureColor.Sample(Linear,coord);
if ( !useblock ) return res;
float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
float4 tcol;
float2 bresl = rresl;
float2 sresl = float2(sresx,sresy);
if ( bresx <= 0 || bresy <= 0 ) bresl = rresl;
else
{
if ( bresx <= 1.0 ) bresl.x = rresl.x*bresx;
else bresl.x = bresx;
if ( bresy <= 1.0 ) bresl.y = rresl.y*bresy;
else bresl.y = bresy;
}
if ( sresl.x <= 0 ) sresl.x = rresl.x/bresl.x;
if ( sresl.y <= 0 ) sresl.y = rresl.y/bresl.y;
float2 ncoord = coord*(rresl/bresl);
ncoord = (-0.5/sresl)*(rresl/bresl)+ncoord/sresl+0.5;
ncoord = floor(ncoord*bresl)/bresl;
if ( bresx <= 0 || bresy <= 0 ) ncoord = coord;
tcol = 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 = 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;
res.a = 1.0;
return res;
}
/* 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
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Blur()));
}
}
technique11 MariENB1
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Pass()));
SetPixelShader(CompileShader(ps_5_0,PS_Sharp()));
}
}
technique11 MariENB2
{
pass p0
{
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,225 +0,0 @@
/*
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).
*/
/*
dithering threshold maps
don't touch unless you know what you're doing
*/
static const float checkers[4] =
{
1.0,0.0,
0.0,1.0
};
#define d(x) x/4.0
static const float ordered2[4] =
{
d(0),d(2),
d(4),d(2)
};
#undef d
#define d(x) x/9.0
static const float ordered3[9] =
{
d(2),d(6),d(3),
d(5),d(0),d(8),
d(1),d(7),d(4)
};
#undef d
#define d(x) x/16.0
static const float ordered4[16] =
{
d( 0),d( 8),d( 2),d(10),
d(12),d( 4),d(14),d( 6),
d( 3),d(11),d( 1),d( 9),
d(15),d( 7),d(13),d( 5)
};
#undef d
#define d(x) x/64.0
static const float ordered8[64] =
{
d( 0),d(48),d(12),d(60),d( 3),d(51),d(15),d(63),
d(32),d(16),d(44),d(28),d(35),d(19),d(47),d(31),
d( 8),d(56),d( 4),d(52),d(11),d(59),d( 7),d(55),
d(40),d(24),d(36),d(20),d(43),d(27),d(39),d(23),
d( 2),d(50),d(14),d(62),d( 1),d(49),d(13),d(61),
d(34),d(18),d(46),d(30),d(33),d(17),d(45),d(29),
d(10),d(58),d( 6),d(54),d( 9),d(57),d( 5),d(53),
d(42),d(26),d(38),d(22),d(41),d(25),d(37),d(21)
};
#undef d
/*
palettes
don't touch unless you know what you're doing
*/
#define d(x) x/3.0
static const float3 cga1l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(2)),
float3(d(2),d(0),d(2)),
float3(d(2),d(2),d(2))
};
static const float3 cga1h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(3)),
float3(d(3),d(1),d(3)),
float3(d(3),d(3),d(3))
};
static const float3 cga2l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(0)),
float3(d(2),d(0),d(0)),
float3(d(2),d(1),d(0))
};
static const float3 cga2h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(1)),
float3(d(3),d(1),d(1)),
float3(d(3),d(2),d(1))
};
static const float3 cga3l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(2)),
float3(d(2),d(0),d(0)),
float3(d(2),d(2),d(2))
};
static const float3 cga3h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(3)),
float3(d(3),d(1),d(1)),
float3(d(3),d(3),d(3))
};
static const float3 stdega[16] =
{
float3(d(0),d(0),d(0)),
float3(d(2),d(0),d(0)),
float3(d(0),d(2),d(0)),
float3(d(2),d(1),d(0)),
float3(d(0),d(0),d(2)),
float3(d(2),d(0),d(2)),
float3(d(0),d(2),d(2)),
float3(d(2),d(2),d(2)),
float3(d(1),d(1),d(1)),
float3(d(3),d(1),d(1)),
float3(d(1),d(3),d(1)),
float3(d(3),d(3),d(1)),
float3(d(1),d(1),d(3)),
float3(d(3),d(1),d(3)),
float3(d(1),d(3),d(3)),
float3(d(3),d(3),d(3))
};
#undef d
#define d(x) x/256.0
static const float3 aosega[16] =
{
float3(d( 0),d( 0),d( 0)),
float3(d(128),d( 0),d( 0)),
float3(d( 32),d(128),d( 0)),
float3(d(160),d( 64),d( 32)),
float3(d( 0),d( 32),d( 88)),
float3(d( 60),d( 0),d( 88)),
float3(d( 16),d(160),d(208)),
float3(d( 88),d( 88),d( 88)),
float3(d( 32),d( 32),d( 32)),
float3(d(256),d( 64),d( 64)),
float3(d( 72),d(256),d( 64)),
float3(d(256),d(224),d( 60)),
float3(d( 48),d(128),d(256)),
float3(d(192),d( 48),d(256)),
float3(d( 72),d(224),d(256)),
float3(d(256),d(256),d(256)),
};
#undef d
/* gauss stuff */
float gauss3[3] =
{
0.444814, 0.239936, 0.037657
};
/* standard stuff */
float4 ScreenSize;
float4 Weather;
float4 TimeOfDay1;
float4 TimeOfDay2;
/* samplers and textures */
Texture2D TextureColor;
Texture2D TextureDepth;
Texture2D TextureFont
<
string ResourceName = "menbvgaluma.png";
>;
Texture2D TextureDots
<
string ResourceName = "menbdots.png";
>;
Texture2D TextureDoom
<
string ResourceName = "menbdoomlut.png";
>;
Texture2D TextureQuake
<
string ResourceName = "menbquakelut.png";
>;
Texture2D TextureVGA
<
string ResourceName = "menbvgalut.png";
>;
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 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;
MaxLod = 0;
MipLodBias = 0;
};
SamplerState Font
{
Filter = MIN_LINEAR_MAG_MIP_POINT;
AddressU = Wrap;
AddressV = Wrap;
MaxLod = 0;
MipLodBias = 0;
};
/* whatever */
struct VS_OUTPUT_POST
{
float4 vpos : SV_POSITION;
float2 txcoord : TEXCOORD0;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};

View file

@ -1,289 +0,0 @@
/*
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).
*/
/* BlockGFX filter, I'm proud of it */
string str_block = "BlockGFX Suite";
bool useblock
<
string UIName = "Enable Block GFX";
string UIWidget = "Checkbox";
> = {false};
/*
emulated resolution:
0 or 1 : real resolution
<1 and >0 : multiple of real resolution (e.g.: 0.5 is half resolution)
>1 : this resolution (e.g.: 320x200 is good ol' Mode 13h)
*/
float bresx
<
string UIName = "Emulated Resolution Width";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
float bresy
<
string UIName = "Emulated Resolution Height";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.5};
/* zooming factors (<=0 for stretch) */
float sresx
<
string UIName = "Zoom Factor X";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.0};
float sresy
<
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 : 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 = "Palette Type";
string UIWidget = "Spinner";
int UIMin = -1;
int UIMax = 9;
> = {1};
/*
CGA palette to use:
0 : black, white.
1 : black, cyan, magenta, white. low contrast
2 : black, cyan, magenta, white. high contrast
3 : black, green, red, brown. low contrast
4 : black, green, red, brown. high contrast
5 : black, cyan, red, white. low contrast
6 : black, cyan, red, white. high contrast
*/
int cgapal
<
string UIName = "CGA Palette";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 6;
> = {1};
/*
EGA palette to use:
0 : Standard EGA
1 : AOS EGA (it's designed for text, but looks well on images too)
*/
int egapal
<
string UIName = "EGA Palette";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 1;
> = {0};
/*
Dithering mode:
-1 : No dithering, just raw banding
0 : 2x2 checkerboard dithering, looks like ass
1 : 2x2 ordered dithering
2 : 3x3 ordered dithering
3 : 4x4 ordered dithering
4 : 8x8 ordered dithering
*/
int dither
<
string UIName = "Dithering Pattern";
string UIWidget = "Spinner";
int UIMin = -1;
int UIMax = 4;
> = {4};
/* gamma modifier for base color, lower values raise midtones and viceversa */
float bgamma
<
string UIName = "Contrast Modifier";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {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 = "Dither Offset";
string UIWidget = "Spinner";
> = {-0.1};
/* range multiplier for the dither grid */
float bdmult
<
string UIName = "Dither Range";
string UIWidget = "Spinner";
float UIMin = 0.0;
> = {0.25};
/* ASCII art filter */
string str_ascii = "Luma ASCII Art Filter";
bool asciienable
<
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};

View file

@ -1,24 +1,36 @@
/*
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.
menbglobaldefs.fx : MariENB3 global shared code.
(C)2016 Marisa Kirisame, UnSX Team.
Part of MariENB3, 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 */
/* are we running on skyrim special edition or on fallout 4? */
#define SKYRIMSE
/* time of day and interior interpolation */
#define ndfact clamp(0.5+(TimeOfDay1.z+(TimeOfDay1.y+TimeOfDay1.w)*0.5)*0.5\
-(TimeOfDay2.y+(TimeOfDay1.x+TimeOfDay2.x)*0.5)*0.5,0.0,1.0)
#define tod_ind(a) lerp(lerp(a##_n,a##_d,ndfact),a##_i,EInteriorFactor)
#define todx_ind(a) lerp(a##_dw*TimeOfDay1.x+a##_sr*TimeOfDay1.y+a##_dy\
*TimeOfDay1.z+a##_ss*TimeOfDay1.w+a##_ds*TimeOfDay2.x+a##_nt\
*TimeOfDay2.y,a##_i,EInteriorFactor)
/* weather macros (not very useful yet) */
#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))
#define weatherfactor(id) ((Weather.x==id)?(Weather.y==id)?(1.0):(Weather.z)\
:(Weather.y==id)?(1.0-Weather.z):(0.0))
/*
Explanation of macro, because some of the people reading this likely don't
know what a ternary conditional is:
(WeatherAndTime.x==id) -> transitioning to wanted weather?
?(WeatherAndTime.y==id) -> coming from wanted weather?
?(1.0) -> if so, always 1
:(WeatherAndTime.z) -> if not, return transition
:(WeatherAndTime.y==id) -> not transitioning but coming from wanted weather?
?(1.0-WeatherAndTime.z) -> return inverse transition
:(0.0) -> otherwise return 0
*/
/* asset definitions */
/* ascii art font */
#define FONT_WIDTH 8
@ -31,7 +43,7 @@
uncommented : the textures are 1:1 and must be corrected
commented : the textures are 16:9 or whatever ratio you use
*/
#define ASPECT_LENSDIRT
//#define ASPECT_LENSDIRT
/* texture sizes */
#define NOISESIZE 256.0
#define HEATSIZE 1024.0
@ -42,9 +54,6 @@
#define LUTMODE_64
/* some textures can be provided as DDS rather than PNG to save space */
//#define HEAT_DDS
#define LENSDIRT_DDS
//#define LENSDIRT_DDS
//#define FROST_DDS
//#define FROSTBUMP_DDS
/* experimental features (TODO) */
//#define USE_BOKEH
//#define MULTIPASS_RMAO

Binary file not shown.

BIN
enbseries/menblens.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 187 KiB

After

Width:  |  Height:  |  Size: 161 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 268 KiB

View file

@ -1,69 +0,0 @@
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

File diff suppressed because it is too large Load diff