diff --git a/enbseries.ini b/enbseries.ini index f394031..8bcf147 100644 --- a/enbseries.ini +++ b/enbseries.ini @@ -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 diff --git a/enbseries/VERSION b/enbseries/VERSION new file mode 100644 index 0000000..a370632 --- /dev/null +++ b/enbseries/VERSION @@ -0,0 +1 @@ +3.1.0 BETA "It Just Works" diff --git a/enbseries/_coldweather.ini b/enbseries/_coldweather.ini new file mode 100644 index 0000000..5e104ac --- /dev/null +++ b/enbseries/_coldweather.ini @@ -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 diff --git a/enbseries/_hotweather.ini b/enbseries/_hotweather.ini new file mode 100644 index 0000000..5e104ac --- /dev/null +++ b/enbseries/_hotweather.ini @@ -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 diff --git a/enbseries/_weatherlist.ini b/enbseries/_weatherlist.ini index a95585a..40cbb94 100644 --- a/enbseries/_weatherlist.ini +++ b/enbseries/_weatherlist.ini @@ -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= diff --git a/enbseries/enbadaptation.fx b/enbseries/enbadaptation.fx new file mode 100644 index 0000000..4b0beef --- /dev/null +++ b/enbseries/enbadaptation.fx @@ -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())); + } +} diff --git a/enbseries/enbadaptation.fx.ini b/enbseries/enbadaptation.fx.ini new file mode 100644 index 0000000..5bcee41 --- /dev/null +++ b/enbseries/enbadaptation.fx.ini @@ -0,0 +1,2 @@ +[ENBADAPTATION.FX] +TECHNIQUE=0 diff --git a/enbseries/enbbloom.fx b/enbseries/enbbloom.fx new file mode 100644 index 0000000..7f2a169 --- /dev/null +++ b/enbseries/enbbloom.fx @@ -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=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 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_PrePass())); + } +} + +technique11 BloomSimplePass1 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTargetRGBA64F,0.0))); + } +} +technique11 BloomSimplePass2 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget1024,1024.0))); + } +} +technique11 BloomSimplePass3 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget512,512.0))); + } +} +technique11 BloomSimplePass4 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget256,256.0))); + } +} +technique11 BloomSimplePass5 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget128,128.0))); + } +} +technique11 BloomSimplePass6 +{ + 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 +{ + 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 +{ + 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 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_PrePass())); + } +} + +technique11 BloomPass1 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTargetRGBA64F,0.0))); + } +} +technique11 BloomPass2 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget1024,1024.0))); + } +} +technique11 BloomPass3 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget512,512.0))); + } +} +technique11 BloomPass4 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget256,256.0))); + } +} +technique11 BloomPass5 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Downsize(RenderTarget128,128.0))); + } +} +technique11 BloomPass6 +{ + 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 +{ + 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 +{ + 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 +{ + 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 +{ + 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 +{ + 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 +{ + 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())); + } +} diff --git a/enbseries/enbbloom.fx.ini b/enbseries/enbbloom.fx.ini new file mode 100644 index 0000000..0bb39ed --- /dev/null +++ b/enbseries/enbbloom.fx.ini @@ -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 diff --git a/enbseries/enbdepthoffield.fx b/enbseries/enbdepthoffield.fx new file mode 100644 index 0000000..3b3e351 --- /dev/null +++ b/enbseries/enbdepthoffield.fx @@ -0,0 +1,1554 @@ +/* + enbdepthoffield.fx : MariENB3 prepass shaders. + (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_misc = "Miscellaneous"; +/* fixed resolution, keeps blur filters at a consistent internal resolution */ +int2 fixed +< + string UIName = "Fixed Resolution"; + string UIWidget = "Vector"; + int2 UIMin = {0,0}; +> = {1920,1080}; +float cutoff +< + string UIName = "Depth Cutoff"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1000000.0; +> = {999949.0}; +float zNear +< + string UIName = "Near Z"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.05}; +float zFar +< + string UIName = "Far Z"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {3098.0}; +string str_dist = "Distortion Filters"; +float distcha +< + string UIName = "Distortion Chromatic Aberration"; + string UIWidget = "Spinner"; +> = {10.0}; +bool waterenable +< + string UIName = "Enable Underwater"; + string UIWidget = "Checkbox"; +> = {false}; +float3 uwm +< + string UIName = "Underwater Frequency"; + string UIWidget = "Vector"; + float3 UIMin = {0.0,0.0,0.0}; +> = {1.4,1.6,1.4}; +float3 uwf +< + string UIName = "Underwater Speed"; + string UIWidget = "Vector"; + float3 UIMin = {0.0,0.0,0.0}; +> = {10.0,8.0,16.0}; +float3 uws +< + string UIName = "Underwater Amplitude"; + string UIWidget = "Vector"; + float3 UIMin = {0.0,0.0,0.0}; +> = {0.3,0.5,0.8}; +float uwz +< + string UIName = "Underwater Zoom"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.5}; +bool wateralways +< + string UIName = "Always Underwater"; + string UIWidget = "Checkbox"; +> = {false}; +bool heatenable +< + string UIName = "Enable Hot Air Refraction"; + string UIWidget = "Checkbox"; +> = {false}; +float heatsize +< + string UIName = "Heat Texture Size"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {3.5}; +float heatspeed +< + string UIName = "Heat Speed"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.5}; +float heatfadepow +< + string UIName = "Heat Fade Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {200.0}; +float heatfademul +< + string UIName = "Heat Fade Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.5}; +float heatfadebump +< + string UIName = "Heat Fade Offset"; + string UIWidget = "Spinner"; +> = {0.0}; +float heatstrength +< + string UIName = "Heat Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.25}; +float heatpow +< + string UIName = "Heat Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.2}; +float heatfactor_dw +< + string UIName = "Heat Factor Dawn"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.2}; +float heatfactor_sr +< + string UIName = "Heat Factor Sunrise"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.5}; +float heatfactor_dy +< + string UIName = "Heat Factor Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float heatfactor_ss +< + string UIName = "Heat Factor Sunset"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.7}; +float heatfactor_ds +< + string UIName = "Heat Factor Dusk"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.1}; +float heatfactor_nt +< + string UIName = "Heat Factor Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float heatfactor_i +< + string UIName = "Heat Factor Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +bool heatalways +< + string UIName = "Heat Always Enable"; + string UIWidget = "Checkbox"; +> = {false}; +bool frostenable +< + string UIName = "Enable Screen Frost"; + string UIWidget = "Checkbox"; +> = {false}; +float frostpow +< + string UIName = "Frost Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float froststrength +< + string UIName = "Frost Strength"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostrpow +< + string UIName = "Frost Radial Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostrmult +< + string UIName = "Frost Radial Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostrbump +< + string UIName = "Frost Radial Offset"; + string UIWidget = "Spinner"; +> = {0.0}; +float frostblend +< + string UIName = "Frost Texture Blend"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostbpow +< + string UIName = "Frost Texture Blend Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostsize +< + string UIName = "Frost Texture Size"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float frostfactor_dw +< + string UIName = "Frost Factor Dawn"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.1}; +float frostfactor_sr +< + string UIName = "Frost Factor Sunrise"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float frostfactor_dy +< + string UIName = "Frost Factor Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float frostfactor_ss +< + string UIName = "Frost Factor Sunset"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float frostfactor_ds +< + string UIName = "Frost Factor Dusk"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.1}; +float frostfactor_nt +< + string UIName = "Frost Factor Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.25}; +float frostfactor_i +< + string UIName = "Frost Factor Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +bool frostalways +< + string UIName = "Frost Always Enable"; + string UIWidget = "Checkbox"; +> = {false}; +string str_focus = "Focusing Parameters"; +/* circle (triangle, actually) average focus */ +bool focuscircle +< + string UIName = "Enable Focus Triangle"; + string UIWidget = "Checkbox"; +> = {true}; +bool focusdisplay +< + string UIName = "Display Focus Points"; + string UIWidget = "Checkbox"; +> = {false}; +bool focusmanual +< + string UIName = "Enable Manual Focus"; + string UIWidget = "Checkbox"; +> = {false}; +float focusmanualvalue +< + string UIName = "Manual Focus Depth"; + string UIWidget = "Checkbox"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.5}; +/* center point of focus */ +float2 focuscenter +< + string UIName = "Focus Point Center"; + string UIWidget = "Vector"; + float2 UIMin = {0.0,0.0}; + float2 UIMax = {1.0,1.0}; +> = {0.5,0.5}; +float focuscircleangle +< + string UIName = "Focus Triangle Angle"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.0}; +/* radius of the focus point triangle */ +float focusradius_n +< + string UIName = "Focus Triangle Radius Night"; + string UIWidget = "Spinner"; +> = {20.0}; +float focusradius_d +< + string UIName = "Focus Triangle Radius Day"; + string UIWidget = "Spinner"; +> = {20.0}; +float focusradius_i +< + string UIName = "Focus Triangle Radius Interior"; + string UIWidget = "Spinner"; +> = {20.0}; +/* mix factor with sample at screen center */ +float focusmix_n +< + string UIName = "Focus Triangle Blending Night"; + string UIWidget = "Spinner"; +> = {0.5}; +float focusmix_d +< + string UIName = "Focus Triangle Blending Day"; + string UIWidget = "Spinner"; +> = {0.5}; +float focusmix_i +< + string UIName = "Focus Triangle Blending Interior"; + string UIWidget = "Spinner"; +> = {0.5}; +/* maximum focus depth */ +float focusmax_n +< + string UIName = "Focus Maximum Depth Night"; + string UIWidget = "Spinner"; +> = {1000.0}; +float focusmax_d +< + string UIName = "Focus Maximum Depth Day"; + string UIWidget = "Spinner"; +> = {1000.0}; +float focusmax_i +< + string UIName = "Focus Maximum Depth Interior"; + string UIWidget = "Spinner"; +> = {1000.0}; +float focuscenterdiscard +< + string UIName = "Focus Circle Discard Center Depth"; + string UIWidget = "Spinner"; +> = {0.0}; +/* dof filter */ +string str_dof = "Depth Of Field"; +/* dof multiplier (makes unfocused depths more blurry) */ +float dofmult_n +< + string UIName = "DOF Intensity Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {500.0}; +float dofmult_d +< + string UIName = "DOF Intensity Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {500.0}; +float dofmult_i +< + string UIName = "DOF Intensity Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {500.0}; +/* dof power (falloff, kinda) */ +float dofpow_n +< + string UIName = "DOF Contrast Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {4.0}; +float dofpow_d +< + string UIName = "DOF Contrast Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {4.0}; +float dofpow_i +< + string UIName = "DOF Contrast Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {4.0}; +/* dof bump (negative values are useful for "widening" the focused area) */ +float dofbump_n +< + string UIName = "DOF Shift Night"; + string UIWidget = "Spinner"; +> = {0.0}; +float dofbump_d +< + string UIName = "DOF Shift Day"; + string UIWidget = "Spinner"; +> = {0.0}; +float dofbump_i +< + string UIName = "DOF Shift Interior"; + string UIWidget = "Spinner"; +> = {0.0}; +/* fixed focused depth factors */ +float doffixedfocusmult_n +< + string UIName = "DOF Fixed Focus Intensity Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float doffixedfocusmult_d +< + string UIName = "DOF Fixed Focus Intensity Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float doffixedfocusmult_i +< + string UIName = "DOF Fixed Focus Intensity Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float doffixedfocuspow_n +< + string UIName = "DOF Fixed Focus Contrast Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float doffixedfocuspow_d +< + string UIName = "DOF Fixed Focus Contrast Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float doffixedfocuspow_i +< + string UIName = "DOF Fixed Focus Contrast Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float doffixedfocusbump_n +< + string UIName = "DOF Fixed Focus Shift Night"; + string UIWidget = "Spinner"; +> = {0.0}; +float doffixedfocusbump_d +< + string UIName = "DOF Fixed Focus Shift Day"; + string UIWidget = "Spinner"; +> = {0.0}; +float doffixedfocusbump_i +< + string UIName = "DOF Fixed Focus Shift Interior"; + string UIWidget = "Spinner"; +> = {0.0}; +float doffixedfocusblend_n +< + string UIName = "DOF Fixed Focus Blend Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float doffixedfocusblend_d +< + string UIName = "DOF Fixed Focus Blend Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float doffixedfocusblend_i +< + string UIName = "DOF Fixed Focus Blend Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +/* fixed unfocused depth factors */ +float doffixedunfocusmult_n +< + string UIName = "DOF Fixed Unfocus Intensity Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +float doffixedunfocusmult_d +< + string UIName = "DOF Fixed Unfocus Intensity Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +float doffixedunfocusmult_i +< + string UIName = "DOF Fixed Unfocus Intensity Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +float doffixedunfocuspow_n +< + string UIName = "DOF Fixed Unfocus Contrast Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1000.0}; +float doffixedunfocuspow_d +< + string UIName = "DOF Fixed Unfocus Contrast Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1000.0}; +float doffixedunfocuspow_i +< + string UIName = "DOF Fixed Unfocus Contrast Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1000.0}; +float doffixedunfocusbump_n +< + string UIName = "DOF Fixed Unfocus Shift Night"; + string UIWidget = "Spinner"; +> = {0.0}; +float doffixedunfocusbump_d +< + string UIName = "DOF Fixed Unfocus Shift Day"; + string UIWidget = "Spinner"; +> = {0.0}; +float doffixedunfocusbump_i +< + string UIName = "DOF Fixed Unfocus Shift Interior"; + string UIWidget = "Spinner"; +> = {0.0}; +float doffixedunfocusblend_n +< + string UIName = "DOF Fixed Unfocus Blend Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float doffixedunfocusblend_d +< + string UIName = "DOF Fixed Unfocus Blend Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float doffixedunfocusblend_i +< + string UIName = "DOF Fixed Unfocus Blend Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +/* prevents fixed dof from blurring the skybox */ +bool doffixedcut +< + string UIName = "DOF Fixed Use Cutoff"; + string UIWidget = "Checkbox"; +> = {true}; +/* disable depth of field */ +bool dofdisable +< + string UIName = "Disable DOF"; + string UIWidget = "Checkbox"; +> = {false}; +float dofpradius +< + string UIName = "DOF Gather Blur Radius"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {6.0}; +/* cheap performance option */ +float dofminblur +< + string UIName = "DOF Minimum Blur"; + string UIWidget = "Spinner"; + float UIMin = 0.0; + float UIMax = 1.0; +> = {0.0}; +bool dofdebug +< + string UIName = "Debug Depth"; + string UIWidget = "Checkbox"; +> = {false}; +bool dfcdebug +< + string UIName = "Debug Focus"; + string UIWidget = "Checkbox"; +> = {false}; +/* use "edge vision" filter */ +string str_view = "Edgevision"; +bool edgevenable +< + string UIName = "Enable Edgevision"; + string UIWidget = "Checkbox"; +> = {false}; +/* factors */ +float edgevfadepow_n +< + string UIName = "Edgevision Fade Contrast Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +float edgevfadepow_d +< + string UIName = "Edgevision Fade Contrast Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +float edgevfadepow_i +< + string UIName = "Edgevision Fade Contrast Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {2.0}; +float edgevfademult_n +< + string UIName = "Edgevision Fade Intensity Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {500.0}; +float edgevfademult_d +< + string UIName = "Edgevision Fade Intensity Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {500.0}; +float edgevfademult_i +< + string UIName = "Edgevision Fade Intensity Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {500.0}; +float edgevpow +< + string UIName = "Edgevision Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.25}; +float edgevmult +< + string UIName = "Edgevision Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {4.0}; +float edgevradius +< + string UIName = "Edgevision Radius"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +/* ssao filter */ +string str_ssao = "Ray Marching SSAO"; +bool ssaoenable +< + string UIName = "Enable SSAO"; + string UIWidget = "Checkbox"; +> = {false}; +float ssaoradius +< + string UIName = "SSAO Radius"; + string UIWidget = "Spinner"; +> = {1.0}; +int ssaonoise +< + string UIName = "SSAO Noise"; + string UIWidget = "Spinner"; + int UIMin = 0; + int UIMax = 1; +> = {1}; +float ssaofadepow_n +< + string UIName = "SSAO Fade Contrast Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.05}; +float ssaofadepow_d +< + string UIName = "SSAO Fade Contrast Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.05}; +float ssaofadepow_i +< + string UIName = "SSAO Fade Contrast Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.05}; +float ssaofademult_n +< + string UIName = "SSAO Fade Intensity Night"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float ssaofademult_d +< + string UIName = "SSAO Fade Intensity Day"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float ssaofademult_i +< + string UIName = "SSAO Fade Intensity Interior"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float ssaomult +< + string UIName = "SSAO Intensity"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.5}; +float ssaopow +< + string UIName = "SSAO Contrast"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.5}; +float ssaoblend +< + string UIName = "SSAO Blending"; + string UIWidget = "Spinner"; +> = {1.0}; +bool ssaobenable +< + string UIName = "SSAO Blur"; + string UIWidget = "Checkbox"; +> = {true}; +float ssaobfact +< + string UIName = "SSAO Bilateral Factor"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1000.0}; +float ssaoclamp +< + string UIName = "SSAO Range"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +float ssaoclampmin +< + string UIName = "SSAO Range Min"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.0}; +float ssaobradius +< + string UIName = "SSAO Blur Radius"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.0}; +bool ssaodebug +< + string UIName = "Debug SSAO"; + string UIWidget = "Checkbox"; +> = {false}; +bool ssaoquarter +< + string UIName = "SSAO Use Less Samples"; + string UIWidget = "Checkbox"; +> = {true}; +bool ssaohalfblur +< + string UIName = "SSAO Blur Use Less Samples"; + string UIWidget = "Checkbox"; +> = {true}; + +/* mathematical constants */ +static const float pi = 3.1415926535898; + +/* edge detect factors */ +static const float3x3 GX = +{ + -1, 0, 1, + -2, 0, 2, + -1, 0, 1 +}; +static const float3x3 GY = +{ + 1, 2, 1, + 0, 0, 0, + -1,-2,-1 +}; +/* radius: 8, std dev: 6 */ +static const float gauss8[8] = +{ + 0.084247, 0.083085, 0.079694, 0.074348, + 0.067460, 0.059533, 0.051099, 0.042657 +}; +/* radius: 16, std dev: 13 */ +static const float gauss16[16] = +{ + 0.040012, 0.039893, 0.039541, 0.038960, + 0.038162, 0.037159, 0.035969, 0.034612, + 0.033109, 0.031485, 0.029764, 0.027971, + 0.026131, 0.024268, 0.022405, 0.020563 +}; +/* SSAO samples */ +static const float3 ssao_samples_lq[16] = +{ + float3( 0.0000,-0.0002, 0.0000),float3(-0.0004, 0.0013, 0.0014), + float3(-0.0030, 0.0048,-0.0034),float3( 0.0147, 0.0046,-0.0026), + float3(-0.0097, 0.0275,-0.0092),float3(-0.0178,-0.0072, 0.0491), + float3( 0.0227,-0.0431,-0.0681),float3( 0.1052, 0.0332,-0.0588), + float3( 0.0997, 0.0056, 0.1473),float3(-0.1252, 0.2019, 0.0564), + float3(-0.1054,-0.2072, 0.2271),float3(-0.0542, 0.3096, 0.2814), + float3( 0.0072,-0.3534, 0.4035),float3(-0.0024,-0.2385, 0.6260), + float3(-0.1940, 0.5722,-0.5602),float3(-0.0910,-0.7548,-0.6497) +}; +static const float3 ssao_samples_hq[64] = +{ + float3( 0.0000,-0.0000,-0.0000),float3( 0.0000, 0.0000,-0.0000), + float3( 0.0001,-0.0000,-0.0000),float3( 0.0002, 0.0001,-0.0001), + float3(-0.0000,-0.0005, 0.0000),float3( 0.0004,-0.0004,-0.0006), + float3( 0.0005,-0.0011,-0.0004),float3(-0.0000, 0.0013,-0.0014), + float3( 0.0024, 0.0006, 0.0013),float3(-0.0017,-0.0017, 0.0030), + float3(-0.0037, 0.0033,-0.0011),float3( 0.0010, 0.0018,-0.0063), + float3( 0.0059, 0.0056,-0.0020),float3(-0.0009, 0.0083,-0.0063), + float3(-0.0110, 0.0065,-0.0016),float3( 0.0089, 0.0070,-0.0108), + float3(-0.0115,-0.0134,-0.0062),float3(-0.0121,-0.0172, 0.0071), + float3(-0.0066, 0.0246,-0.0060),float3( 0.0057,-0.0279, 0.0109), + float3(-0.0269,-0.0160,-0.0164),float3( 0.0402, 0.0045, 0.0034), + float3( 0.0248,-0.0045, 0.0390),float3( 0.0110,-0.0491,-0.0159), + float3(-0.0193,-0.0431, 0.0363),float3( 0.0441, 0.0271,-0.0426), + float3( 0.0385,-0.0428,-0.0482),float3(-0.0623,-0.0501, 0.0249), + float3( 0.0683,-0.0000, 0.0631),float3( 0.1008, 0.0180,-0.0114), + float3(-0.0156,-0.0713, 0.0871),float3(-0.0561,-0.0757, 0.0822), + float3( 0.0714, 0.0850,-0.0805),float3(-0.1320,-0.0042, 0.0711), + float3( 0.1553, 0.0486,-0.0167),float3(-0.1164,-0.0125,-0.1341), + float3( 0.1380,-0.1230,-0.0562),float3( 0.0868,-0.1897,-0.0175), + float3( 0.0749, 0.1495, 0.1525),float3(-0.2038,-0.1324,-0.0235), + float3( 0.0205, 0.1920, 0.1784),float3( 0.1637,-0.0964,-0.2092), + float3( 0.2875, 0.0966,-0.0020),float3( 0.0572,-0.0180,-0.3194), + float3(-0.3329, 0.0981,-0.0189),float3( 0.2627, 0.2092,-0.1585), + float3( 0.1783,-0.3359,-0.1108),float3( 0.2675, 0.2056,-0.2533), + float3(-0.1852, 0.3017,-0.2759),float3(-0.0944, 0.3532, 0.3061), + float3(-0.0022,-0.3744, 0.3404),float3(-0.0600,-0.4031,-0.3487), + float3(-0.2663, 0.4915, 0.1004),float3(-0.2442, 0.4253, 0.3468), + float3( 0.2583, 0.1321,-0.5645),float3(-0.0219, 0.4516, 0.4943), + float3(-0.5503, 0.2597,-0.3590),float3( 0.2239,-0.5571,-0.4398), + float3(-0.7210,-0.1982, 0.2339),float3( 0.7948,-0.1848, 0.1145), + float3(-0.7190, 0.1767, 0.4489),float3(-0.5617, 0.5845,-0.4116), + float3(-0.8919,-0.0384, 0.3360),float3(-0.0144, 0.9775,-0.2105) +}; +/* For high quality DOF */ +static const float2 poisson32[32] = +{ + float2( 0.7284430,-0.1927130),float2( 0.4051600,-0.2312710), + float2( 0.9535280, 0.0669683),float2( 0.6544140,-0.4439470), + float2( 0.6029910, 0.1058970),float2( 0.2637500,-0.7163810), + float2( 0.9105380,-0.3889810),float2( 0.5942730,-0.7400740), + float2( 0.8215680, 0.3162520),float2( 0.3577550, 0.4884250), + float2( 0.6935990, 0.7070140),float2( 0.0470570, 0.1961800), + float2(-0.0977021, 0.6241300),float2( 0.2110300, 0.8778350), + float2(-0.3743440, 0.2494580),float2( 0.0144776,-0.0766484), + float2(-0.3377660,-0.1255100),float2( 0.3136420, 0.1077710), + float2(-0.5204340, 0.8369860),float2(-0.1182680, 0.9801750), + float2(-0.6969480,-0.3869330),float2(-0.6156080, 0.0307209), + float2(-0.3806790,-0.6055360),float2(-0.1909570,-0.3861330), + float2(-0.2449080,-0.8655030),float2( 0.0822108,-0.4975580), + float2(-0.5649250, 0.5756740),float2(-0.8741830,-0.1685750), + float2( 0.0761715,-0.9631760),float2(-0.9218270, 0.2121210), + float2(-0.6378530, 0.3053550),float2(-0.8425180, 0.4753000) +}; + +float4 Timer; +float4 ScreenSize; +float4 Weather; +float ENightDayFactor; +float EInteriorFactor; +float4 TimeOfDay1; +float4 TimeOfDay2; +float4 DofParameters; + +Texture2D TextureCurrent; +Texture2D TexturePrevious; +Texture2D TextureOriginal; +Texture2D TextureColor; +Texture2D TextureDepth; +Texture2D TextureFocus; + +Texture2D RenderTargetR16F; /* for SSAO */ +Texture2D RenderTargetR32F; /* for DOF */ + +Texture2D TextureNoise3 +< + string ResourceName = "menbnoise2.png"; +>; +Texture2D TextureHeat +< +#ifdef HEAT_DDS + string ResourceName = "menbheat.dds"; +#else + string ResourceName = "menbheat.png"; +#endif +>; +Texture2D TextureFrost +< +#ifdef FROST_DDS + string ResourceName = "menbfrost.dds"; +#else + string ResourceName = "menbfrost.png"; +#endif +>; +Texture2D TextureFrostBump +< +#ifdef FROSTBUMP_DDS + string ResourceName = "menbfrostbump.dds"; +#else + string ResourceName = "menbfrostbump.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 Sampler2 +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord : TEXCOORD0; +}; +struct VS_OUTPUT_POST +{ + float4 pos : SV_POSITION; + float2 txcoord : 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.txcoord.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)) +/* these are znear/zfar values for Skyrim, but MAY match Fallout too */ +float depthlinear( float2 coord ) +{ + float z = TextureDepth.SampleLevel(Sampler1,coord,0).x; + return (2*zNear)/(zFar+zNear-z*(zFar-zNear)); +} + +/* + Thank you Boris for not providing access to a normal buffer. Guesswork using + the depth buffer results in imprecise normals that aren't smoothed. Plus + there is no way to get the normal data from textures either. Also, three + texture fetches are needed instead of one (great!) +*/ +float3 pseudonormal( float dep, float2 coord ) +{ + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 ofs1 = float2(0,1.0/bresl.y); + float2 ofs2 = float2(1.0/bresl.x,0); + float dep1 = TextureDepth.SampleLevel(Sampler1,coord+ofs1,0).x; + float dep2 = TextureDepth.SampleLevel(Sampler1,coord+ofs2,0).x; + float3 p1 = float3(ofs1,dep1-dep); + float3 p2 = float3(ofs2,dep2-dep); + float3 normal = cross(p1,p2); + normal.z = -normal.z; + return normalize(normal); +} + +/* SSAO Prepass */ +float4 PS_SSAOPre( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + /* get occlusion using single-step Ray Marching with 64 samples */ + float ssaofadepow = tod_ind(ssaofadepow); + float ssaofademult = tod_ind(ssaofademult); + if ( !ssaoenable ) return 0.0; + float depth = TextureDepth.Sample(Sampler1,coord).x; + float ldepth = depthlinear(coord); + if ( depth >= cutoff*0.000001 ) return 1.0; + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float3 normal = pseudonormal(depth,coord); + float2 nc = coord*(bresl/256.0); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaoradius; + float2 nc2 = TextureNoise3.SampleLevel(Sampler2,nc+48000.0*Timer.x + *ssaonoise,0).xy; + float3 rnormal = TextureNoise3.SampleLevel(Sampler2,nc2,0).xyz*2.0-1.0; + rnormal = normalize(rnormal); + float occ = 0.0; + int i; + float3 sample; + float sdepth, so, delta; + float sclamp = ssaoclamp/100000.0; + float sclampmin = ssaoclampmin/100000.0; + if ( ssaoquarter ) [unroll] for ( i=0; i<16; i++ ) + { + sample = reflect(ssao_samples_lq[i],rnormal); + sample *= sign(dot(normal,sample)); + so = ldepth-sample.z*bof.x; + sdepth = depthlinear(coord+bof*sample.xy/ldepth); + delta = saturate(so-sdepth); + delta *= 1.0-smoothstep(0.0,sclamp,delta); + if ( (delta > sclampmin) && (delta < sclamp) ) + occ += 1.0-delta; + } + else [unroll] for ( i=0; i<64; i++ ) + { + sample = reflect(ssao_samples_hq[i],rnormal); + sample *= sign(dot(normal,sample)); + so = ldepth-sample.z*bof.x; + sdepth = depthlinear(coord+bof*sample.xy/ldepth); + delta = saturate(so-sdepth); + delta *= 1.0-smoothstep(0.0,sclamp,delta); + if ( (delta > sclampmin) && (delta < sclamp) ) + occ += 1.0-delta; + } + float uocc = saturate(occ/(ssaoquarter?16.0:64.0)); + float fade = 1.0-depth; + uocc *= saturate(pow(max(0,fade),ssaofadepow)*ssaofademult); + uocc = saturate(pow(max(0,uocc),ssaopow)*ssaomult); + return saturate(1.0-(uocc*ssaoblend)); +} +/* + The blur passes use bilateral filtering to mostly preserve borders. + An additional factor using difference of normals was tested, but the + performance decrease was too much, so it's gone forever. +*/ +float4 PS_SSAOBlurH( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + if ( !ssaoenable ) return 0.0; + if ( !ssaobenable ) return TextureColor.Sample(Sampler1,coord); + float bresl = ScreenSize.x; + float bof = (1.0/bresl)*ssaobradius; + float isd, sd, ds, sw, tw = 0; + float res = 0.0; + int i; + isd = TextureDepth.Sample(Sampler1,coord).x; + if ( ssaohalfblur ) [unroll] for ( i=-7; i<=7; i++ ) + { + sd = TextureDepth.Sample(Sampler1,coord+float2(i,0)*bof).x; + ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact); + sw = ds; + sw *= gauss8[abs(i)]; + tw += sw; + res += sw*TextureColor.Sample(Sampler1,coord+float2(i,0) + *bof).x; + } + else [unroll] for ( i=-15; i<=15; i++ ) + { + sd = TextureDepth.Sample(Sampler1,coord+float2(i,0)*bof).x; + ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact); + sw = ds; + sw *= gauss16[abs(i)]; + tw += sw; + res += sw*TextureColor.Sample(Sampler1,coord+float2(i,0) + *bof).x; + } + res /= tw; + return res; +} +float4 PS_SSAOBlurV( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + if ( !ssaoenable ) return 0.0; + if ( !ssaobenable ) return TextureColor.Sample(Sampler1,coord); + float bresl = ScreenSize.x*ScreenSize.w; + float bof = (1.0/bresl)*ssaobradius; + float isd, sd, ds, sw, tw = 0; + float res = 0.0; + int i; + isd = TextureDepth.Sample(Sampler1,coord).x; + if ( ssaohalfblur ) [unroll] for ( i=-7; i<=7; i++ ) + { + sd = TextureDepth.Sample(Sampler1,coord+float2(0,i)*bof).x; + ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact); + sw = ds; + sw *= gauss8[abs(i)]; + tw += sw; + res += sw*TextureColor.Sample(Sampler1,coord+float2(0,i) + *bof).x; + } + else [unroll] for ( i=-15; i<=15; i++ ) + { + sd = TextureDepth.Sample(Sampler1,coord+float2(0,i)*bof).x; + ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact); + sw = ds; + sw *= gauss16[abs(i)]; + tw += sw; + res += sw*TextureColor.Sample(Sampler1,coord+float2(0,i) + *bof).x; + } + res /= tw; + return res; +} + +/* precalculate DOF factors */ +float4 PS_DoFPrepass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + if ( dofdisable ) return 0.0; + float dofpow = tod_ind(dofpow); + float dofmult = tod_ind(dofmult); + float dofbump = tod_ind(dofbump); + float doffixedfocuspow = tod_ind(doffixedfocuspow); + float doffixedfocusmult = tod_ind(doffixedfocusmult); + float doffixedfocusbump = tod_ind(doffixedfocusbump); + float doffixedfocusblend = tod_ind(doffixedfocusblend); + float doffixedunfocuspow = tod_ind(doffixedunfocuspow); + float doffixedunfocusmult = tod_ind(doffixedunfocusmult); + float doffixedunfocusbump = tod_ind(doffixedunfocusbump); + float doffixedunfocusblend = tod_ind(doffixedunfocusblend); + float dep = TextureDepth.Sample(Sampler1,coord).x; + float foc = TextureFocus.Sample(Sampler1,coord).x; + float dfc = abs(dep-foc); + float dff = abs(dep); + float dfu = dff; + if ( doffixedcut && (dep >= cutoff*0.000001) ) dfu *= 0; + dfc = clamp(pow(dfc,dofpow)*dofmult+dofbump,0.0,1.0); + dff = clamp(pow(dff,doffixedfocuspow)*doffixedfocusmult + +doffixedfocusbump,0.0,1.0); + dfu = clamp(pow(dfu,doffixedunfocuspow)*doffixedunfocusmult + +doffixedunfocusbump,0.0,1.0); + dfc *= lerp(1.0,dff,doffixedfocusblend); + dfc += lerp(0.0,dfu,doffixedunfocusblend); + return max(0.0,dfc); +} + +/* apply SSAO to screen */ +float4 PS_SSAOApply( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureOriginal.Sample(Sampler1,coord); + if ( !ssaoenable ) return res; + float mud = RenderTargetR16F.Sample(Sampler1,coord).x; + if ( ssaodebug ) return saturate(mud); + return res*mud; +} + +/* old Edgevision mode */ +float3 EdgeView( float3 res, float2 coord ) +{ + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + if ( fixed.x>0 && fixed.y>0 ) bresl = fixed; + float edgevfadepow = tod_ind(edgevfadepow); + float edgevfademult = tod_ind(edgevfademult); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*edgevradius; + float mdx = 0, mdy = 0, mud = 0; + /* this reduces texture fetches by half, big difference */ + float3x3 depths; + depths[0][0] = depthlinear(coord+float2(-1,-1)*bof); + depths[0][1] = depthlinear(coord+float2( 0,-1)*bof); + depths[0][2] = depthlinear(coord+float2( 1,-1)*bof); + depths[1][0] = depthlinear(coord+float2(-1, 0)*bof); + depths[1][1] = depthlinear(coord+float2( 0, 0)*bof); + depths[1][2] = depthlinear(coord+float2( 1, 0)*bof); + depths[2][0] = depthlinear(coord+float2(-1, 1)*bof); + depths[2][1] = depthlinear(coord+float2( 0, 1)*bof); + depths[2][2] = depthlinear(coord+float2( 1, 1)*bof); + mdx += GX[0][0]*depths[0][0]; + mdx += GX[0][1]*depths[0][1]; + mdx += GX[0][2]*depths[0][2]; + mdx += GX[1][0]*depths[1][0]; + mdx += GX[1][1]*depths[1][1]; + mdx += GX[1][2]*depths[1][2]; + mdx += GX[2][0]*depths[2][0]; + mdx += GX[2][1]*depths[2][1]; + mdx += GX[2][2]*depths[2][2]; + mdy += GY[0][0]*depths[0][0]; + mdy += GY[0][1]*depths[0][1]; + mdy += GY[0][2]*depths[0][2]; + mdy += GY[1][0]*depths[1][0]; + mdy += GY[1][1]*depths[1][1]; + mdy += GY[1][2]*depths[1][2]; + mdy += GY[2][0]*depths[2][0]; + mdy += GY[2][1]*depths[2][1]; + mdy += GY[2][2]*depths[2][2]; + mud = pow(mdx*mdx+mdy*mdy,0.5); + float fade = 1.0-TextureDepth.Sample(Sampler1,coord).x; + mud *= saturate(pow(max(0,fade),edgevfadepow)*edgevfademult); + mud = saturate(pow(max(0,mud),edgevpow)*edgevmult); + return mud; +} + +/* Edgevision and Sharpen */ +float4 PS_Edge( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Sampler1,coord); + if ( edgevenable ) res.rgb = EdgeView(res.rgb,coord); + return res; +} + +/* + Underwater distortion, which currently has no real use due to Boris being + lazy. fWaterLevel doesn't yet provide any usable values. +*/ +float2 UnderwaterDistort( float2 coord ) +{ + if ( !wateralways ) return coord; + float2 ofs = float2(0.0,0.0); + float siny = sin(pi*2.0*(coord.y*uwm.x+Timer.x*uwf.x*100.0))*uws.x; + ofs.y = siny+sin(pi*2.0*(coord.x*uwm.y+Timer.x*uwf.y*100.0))*uws.y; + ofs.x = siny+sin(pi*2.0*(coord.x*uwm.z+Timer.x*uwf.z*100.0))*uws.z; + ofs -= (coord-0.5)*2.0*uwz; + return coord+ofs*0.01; +} + +/* Distant hot air refraction. Not very realistic, but does the job. */ +float2 DistantHeat( float2 coord ) +{ + float2 bresl; + float dep, odep; + dep = TextureDepth.Sample(Sampler1,coord).x; + float distfade = clamp(pow(max(0,dep),heatfadepow)*heatfademul + +heatfadebump,0.0,1.0); + if ( distfade <= 0.0 ) return coord; + float todpow = todx_ind(heatfactor); + if ( !heatalways && (todpow <= 0.0) ) return coord; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 nc = coord*(bresl/HEATSIZE)*heatsize; + float2 ts = float2(0.01,1.0)*Timer.x*10000.0*heatspeed; + float2 ofs = TextureHeat.SampleLevel(Sampler2,nc+ts,0).xy; + ofs = (ofs-0.5)*2.0; + ofs *= pow(length(ofs),heatpow); + ofs *= todpow; + if ( !heatalways ) ofs *= weatherfactor(WT_HOT); + odep = TextureDepth.SampleLevel(Sampler1,coord+ofs*heatstrength + *distfade*0.01,0).x; + float odistfade = clamp(pow(max(0,odep),heatfadepow)*heatfademul + +heatfadebump,0.0,1.0); + if ( odistfade <= 0.0 ) return coord; + return coord+ofs*heatstrength*distfade*0.01; +} + +/* Screen distortion filters */ +float4 PS_Distortion( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 ofs = coord; + if ( waterenable ) ofs = UnderwaterDistort(ofs); + if ( heatenable ) ofs = DistantHeat(ofs); + ofs -= coord; + float4 res; + if ( (distcha == 0.0) || (length(ofs) == 0.0) ) + return TextureColor.Sample(Sampler1,coord+ofs); + float2 ofr, ofg, ofb; + ofr = ofs*(1.0-distcha*0.01); + ofg = ofs; + ofb = ofs*(1.0+distcha*0.01); + res = float4(TextureColor.Sample(Sampler1,coord+ofr).r, + TextureColor.Sample(Sampler1,coord+ofg).g, + TextureColor.Sample(Sampler1,coord+ofb).b, + TextureColor.Sample(Sampler1,coord+ofs).a); + return res; +} + +/* This will do absolutely nothing */ +float4 PS_Aperture( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + return float4(0,0,0,1); +} + +/* Focus */ +float4 PS_ReadFocus( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + if ( dofdisable ) return 0.0; + if ( focusmanual ) return focusmanualvalue; + float focusmax = tod_ind(focusmax); + float cfocus = min(TextureDepth.Sample(Sampler1,focuscenter).x, + focusmax*0.001); + if ( !focuscircle ) return cfocus; + /* using polygons inscribed into a circle, in this case a triangle */ + float focusradius = tod_ind(focusradius); + float focusmix = tod_ind(focusmix); + float cstep = (1.0/3.0); + float sfocus, mfocus[4]; + float2 coord; + float2 bof = float2(1.0,1.0/ScreenSize.w)*focusradius*0.01; + float fan = focuscircleangle*2.0*pi; + coord.x = focuscenter.x+sin(fan)*bof.x; + coord.y = focuscenter.y+cos(fan)*bof.y; + mfocus[0] = min(TextureDepth.Sample(Sampler1,coord).x, + focusmax*0.001); + coord.x = focuscenter.x+sin(fan+2.0*pi*cstep)*bof.x; + coord.y = focuscenter.y+cos(fan+2.0*pi*cstep)*bof.y; + mfocus[1] = min(TextureDepth.Sample(Sampler1,coord).x, + focusmax*0.001); + coord.x = focuscenter.x+sin(fan+4.0*pi*cstep)*bof.x; + coord.y = focuscenter.y+cos(fan+4.0*pi*cstep)*bof.y; + mfocus[2] = min(TextureDepth.Sample(Sampler1,coord).x, + focusmax*0.001); + if ( (mfocus[0] <= focuscenterdiscard) + && (mfocus[1] <= focuscenterdiscard) + && (mfocus[2] <= focuscenterdiscard) ) + mfocus[3] = focuscenterdiscard; + else if ( mfocus[0] <= focuscenterdiscard ) + { + if ( mfocus[1] <= focuscenterdiscard ) mfocus[3] = mfocus[2]; + else mfocus[3] = 0.5*(mfocus[1]+mfocus[2]); + } + else if ( mfocus[1] <= focuscenterdiscard ) + { + if ( mfocus[2] <= focuscenterdiscard ) mfocus[3] = mfocus[0]; + else mfocus[3] = 0.5*(mfocus[0]+mfocus[2]); + } + else if ( mfocus[2] <= focuscenterdiscard ) + mfocus[3] = 0.5*(mfocus[0]+mfocus[1]); + else mfocus[3] = cstep*(mfocus[0]+mfocus[1]+mfocus[2]); + if ( cfocus <= focuscenterdiscard ) cfocus = mfocus[3]; + else cfocus = (1.0-focusmix)*cfocus+focusmix*mfocus[3]; + return cfocus; +} + +float4 PS_Focus( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + if ( dofdisable ) return 0.0; + return max(lerp(TexturePrevious.Sample(Sampler0,0.5).x, + TextureCurrent.Sample(Sampler0,0.5).x, + saturate(DofParameters.w)),0.0); +} + +/* gather blur pass */ +float4 PS_DoFBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + if ( dofdisable ) return TextureColor.Sample(Sampler1,coord); + float dfc = RenderTargetR32F.Sample(Sampler1,coord).x; + if ( dofdebug ) return TextureDepth.Sample(Sampler1,coord).x; + if ( dfcdebug ) return dfc; + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = 1.0/bresl; + if ( dfc <= dofminblur ) return TextureColor.Sample(Sampler1,coord); + float4 res = float4(0,0,0,0); + float dep = TextureDepth.Sample(Sampler1,coord).x; + float sd, ds, sw, tw = 0; + float2 bsz = bof*dofpradius*dfc; + float4 sc; + [unroll] for ( int i=0; i<32; i++ ) + { + sc = TextureColor.SampleLevel(Sampler1,coord+poisson32[i]*bsz, + dfc*4.0); + ds = TextureDepth.SampleLevel(Sampler1,coord+poisson32[i]*bsz, + 0).x; + sd = RenderTargetR32F.SampleLevel(Sampler1,coord+poisson32[i] + *bsz,0).x; + sw = (ds>dep)?1.0:sd; + tw += sw; + res += sc*sw; + } + res /= tw; + return res; + +} + +/* Screen frost shader. Not very realistic either, but looks fine too. */ +float2 ScreenFrost( float2 coord ) +{ + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 nc = coord*(bresl/FROSTSIZE)*frostsize; + float2 ofs = TextureFrostBump.Sample(Sampler2,nc).xy; + ofs = (ofs-0.5)*2.0; + ofs *= pow(length(ofs),frostpow)*froststrength; + float todpow = todx_ind(frostfactor); + if ( !frostalways ) ofs *= weatherfactor(WT_COLD) + +(1.0-weatherfactor(WT_HOT))*todpow; + else ofs *= todpow; + float dist = distance(coord,float2(0.5,0.5))*2.0; + ofs *= clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0,1.0); + return coord+ofs; +} + +/* screen frost overlay */ +float4 PS_FrostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float2 bresl; + if ( (fixed.x > 0) && (fixed.y > 0) ) bresl = fixed; + else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float4 res; + [branch] if ( frostenable ) + { + float2 ofs = ScreenFrost(coord); + ofs -= coord; + if ( (distcha != 0.0) && (length(ofs) != 0.0) ) + { + float2 ofr, ofg, ofb; + ofr = ofs*(1.0-distcha*0.01); + ofg = ofs; + ofb = ofs*(1.0+distcha*0.01); + res = float4(TextureColor.Sample(Sampler1,coord+ofr).r, + TextureColor.Sample(Sampler1,coord+ofg).g, + TextureColor.Sample(Sampler1,coord+ofb).b,1.0); + } + else res = TextureColor.Sample(Sampler1,coord+ofs); + float2 nc = coord*(bresl/FROSTSIZE)*frostsize; + float bmp = pow(max(0,TextureFrost.SampleLevel(Sampler2,nc, + 0).x),frostbpow); + float dist = distance(coord,float2(0.5,0.5))*2.0; + dist = clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0, + 1.0)*frostblend; + float todpow = todx_ind(frostfactor); + /* Weathers not implemented in FO4 ENB as of 0.291 */ + if ( !frostalways ) dist *= weatherfactor(WT_COLD) + +(1.0-weatherfactor(WT_HOT))*todpow; + else dist *= todpow; + res.rgb *= 1.0+bmp*dist; + } + else res = TextureColor.Sample(Sampler1,coord); + if ( !focusdisplay ) return res; + if ( distance(coord,focuscenter) < 0.01 ) res.rgb = float3(1,0,0); + float cstep = (1.0/3.0); + float2 tcoord; + float focusradius = tod_ind(focusradius); + float2 bof = float2(1.0,1.0/ScreenSize.w)*focusradius*0.01; + float fan = focuscircleangle*2.0*pi; + tcoord.x = focuscenter.x+sin(fan)*bof.x; + tcoord.y = focuscenter.y+cos(fan)*bof.y; + if ( distance(coord,tcoord) < 0.01 ) res.rgb = float3(1,0,0); + tcoord.x = focuscenter.x+sin(fan+2.0*pi*cstep)*bof.x; + tcoord.y = focuscenter.y+cos(fan+2.0*pi*cstep)*bof.y; + if ( distance(coord,tcoord) < 0.01 ) res.rgb = float3(1,0,0); + tcoord.x = focuscenter.x+sin(fan+4.0*pi*cstep)*bof.x; + tcoord.y = focuscenter.y+cos(fan+4.0*pi*cstep)*bof.y; + if ( distance(coord,tcoord) < 0.01 ) res.rgb = float3(1,0,0); + return res; +} + +technique11 Aperture +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Aperture())); + } +} + +technique11 ReadFocus +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_ReadFocus())); + } +} + +technique11 Focus +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Focus())); + } +} + +technique11 Prepass +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_SSAOPre())); + } +} +technique11 Prepass1 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_SSAOBlurH())); + } +} +technique11 Prepass2 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_SSAOBlurV())); + } +} +technique11 Prepass3 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_DoFPrepass())); + } +} +technique11 Prepass4 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_SSAOApply())); + } +} +technique11 Prepass5 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Edge())); + } +} +technique11 Prepass6 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_Distortion())); + } +} +technique11 Prepass7 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_DoFBlur())); + } +} +technique11 Prepass8 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_Quad())); + SetPixelShader(CompileShader(ps_5_0,PS_FrostPass())); + } +} diff --git a/enbseries/enbdepthoffield.fx.ini b/enbseries/enbdepthoffield.fx.ini new file mode 100644 index 0000000..cc93924 --- /dev/null +++ b/enbseries/enbdepthoffield.fx.ini @@ -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 diff --git a/enbseries/enbeffect.fx b/enbseries/enbeffect.fx index e0f18b3..5d6ae26 100644 --- a/enbseries/enbeffect.fx +++ b/enbseries/enbeffect.fx @@ -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 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 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0, VS_Draw())); + SetPixelShader(CompileShader(ps_5_0, PS_Draw())); + } +} + +technique11 ORIGINALPOSTPROCESS +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0, VS_Draw())); + SetPixelShader(CompileShader(ps_5_0, PS_DrawOriginal())); + } +} diff --git a/enbseries/enbeffect.fx.ini b/enbseries/enbeffect.fx.ini index bb93cde..cc4a264 100644 --- a/enbseries/enbeffect.fx.ini +++ b/enbseries/enbeffect.fx.ini @@ -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 diff --git a/enbseries/enbeffectpostpass.fx b/enbseries/enbeffectpostpass.fx index 39c8a4c..d6f5e98 100644 --- a/enbseries/enbeffectpostpass.fx +++ b/enbseries/enbeffectpostpass.fx @@ -1,10 +1,1062 @@ /* - enbeffectpostpass.fx : MariENB 3 extra shader. - (C)2015 Marisa Kirisame, UnSX Team. - Part of MariENB 3, the personal ENB of Marisa for Fallout 4. + enbeffectpostpass.fx : MariENB3 extra 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 "menbextrasettings.fx" -#include "menbextrainternals.fx" -#include "menbextrafilters.fx" + +/* 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) +*/ +float2 bres +< + string UIName = "Emulated Resolution"; + string UIWidget = "Vector"; + float2 UIMin = {0.0,0.0}; +> = {0.5,0.5}; +/* zooming factors (<=0 for stretch) */ +float2 sres +< + string UIName = "Zoom Factor"; + string UIWidget = "Vector"; + float2 UIMin = {0.0,0.0}; +> = {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}; +float3 mask +< + string UIName = "Chroma Key Red"; + string UIWidget = "Color"; +> = {0.0,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}; +/* luma sharpen because of reasons */ +string str_lsharp = "Luma Sharpen"; +bool lsharpenable +< + string UIName = "Luma Sharpen Enable"; + string UIWidget = "Checkbox"; +> = {false}; +float lsharpradius +< + string UIName = "Luma Sharpen Radius"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.8}; +float lsharpclamp +< + string UIName = "Luma Sharpen Clamp"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {0.02}; +float lsharpblend +< + string UIName = "Luma Sharpen Blending"; + string UIWidget = "Spinner"; + float UIMin = 0.0; +> = {1.2}; + +/* + 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 +}; + +float4 ScreenSize; +Texture2D TextureOriginal; +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 Sampler +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Clamp; + AddressV = Clamp; +}; +SamplerState SamplerB +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Border; + AddressV = Border; +}; +SamplerState SamplerFont +{ + Filter = MIN_LINEAR_MAG_MIP_POINT; + AddressU = Wrap; + AddressV = Wrap; + MaxLOD = 0; + MinLOD = 0; +}; +SamplerState SamplerDots +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; + MaxLOD = 0; + MinLOD = 0; +}; +SamplerState SamplerLUT +{ + Filter = MIN_MAG_MIP_POINT; + AddressU = Clamp; + AddressV = Clamp; + MaxLOD = 0; + MinLOD = 0; +}; + +struct VS_INPUT_POST +{ + float3 pos : POSITION; + float2 txcoord : TEXCOORD0; +}; +struct VS_OUTPUT_POST +{ + float4 pos : SV_POSITION; + float2 txcoord : TEXCOORD0; +}; + +VS_OUTPUT_POST VS_PostProcess(VS_INPUT_POST IN) +{ + VS_OUTPUT_POST OUT; + OUT.pos = 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.g0.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 = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995); + float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); + return TextureDoom.Sample(SamplerLUT,lc); +} +float4 ReduceQuake( in float4 color, in float2 coord ) +{ + float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995); + float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); + return TextureQuake.Sample(SamplerLUT,lc); +} +float4 ReduceVGA( in float4 color, in float2 coord ) +{ + float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995); + float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); + return TextureVGA.Sample(SamplerLUT,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(Sampler,coord); + if ( !useblock ) return res; + float2 rresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float4 tcol; + float2 bresl = rresl; + if ( bres.x <= 0 || bres.y <= 0 ) bresl = rresl; + else + { + if ( bres.x <= 1.0 ) bresl.x = rresl.x*bres.x; + else bresl.x = bres.x; + if ( bres.y <= 1.0 ) bresl.y = rresl.y*bres.y; + else bresl.y = bres.y; + } + float2 sresl = sres; + if ( sres.x <= 0 ) sresl.x = rresl.x/bresl.x; + if ( sres.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 ( bres.x <= 0 || bres.y <= 0 ) ncoord = coord; + tcol = TextureOriginal.Sample(Sampler,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; + if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 ) + res *= 0; + 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(Sampler,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 = TextureOriginal.Sample(Sampler,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(SamplerFont,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(Sampler,coord); + if ( !maskenable ) return res; + if ( TextureDepth.Sample(Sampler,coord).x > maskd ) + return float4(mask.r,mask.g,mask.b,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(Sampler,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(SamplerDots,coord*bresl)*dac; + float3 tcol = pow(max(0,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(Sampler,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(Sampler,rcoord+bof + *float2(i,j)).r,TextureColor.Sample(SamplerB,gcoord+bof + *float2(i,j)).g,TextureColor.Sample(SamplerB,bcoord+bof + *float2(i,j)).b,TextureColor.Sample(SamplerB,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(Sampler,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(Sampler,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(Sampler,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(Sampler,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(Sampler,coord); + if ( !bssshiftenable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = (1.0/bresl)*bssshiftradius; + res.g = TextureColor.Sample(Sampler,coord).g; + res.r = TextureColor.Sample(Sampler,coord+float2(0,-bof.y)).r; + res.b = TextureColor.Sample(Sampler,coord+float2(0,bof.y)).b; + res.a = 1.0; + return res; +} + +/* That "luma sharpen" thingy, added just because someone might want it */ +float4 PS_LumaSharp( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target +{ + float2 coord = IN.txcoord.xy; + float4 res = TextureColor.Sample(Sampler,coord); + if ( !lsharpenable ) return res; + float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w); + float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*lsharpradius; + float4 crawling = TextureColor.Sample(Sampler,coord+float2(0,-1)*bof); + crawling += TextureColor.Sample(Sampler,coord+float2(-1,0)*bof); + crawling += TextureColor.Sample(Sampler,coord+float2(1,0)*bof); + crawling += TextureColor.Sample(Sampler,coord+float2(0,1)*bof); + crawling *= 0.25; + float4 inmyskin = res-crawling; + float thesewounds = luminance(inmyskin.rgb); + thesewounds = clamp(thesewounds,-lsharpclamp*0.01,lsharpclamp*0.01); + float4 theywillnotheal = res+thesewounds*lsharpblend; + return theywillnotheal; +} + +technique11 ExtraFilters +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_LumaSharp())); + } +} +technique11 ExtraFilters1 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_Blur())); + } +} +technique11 ExtraFilters2 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_Sharp())); + } +} +technique11 ExtraFilters3 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_Shift())); + } +} +technique11 ExtraFilters4 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_ChromaKey())); + } +} +technique11 ExtraFilters5 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_Retro())); + } +} +technique11 ExtraFilters6 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_ASCII())); + } +} +technique11 ExtraFilters7 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_DotMatrix())); + } +} +technique11 ExtraFilters8 +{ + pass p0 + { + SetVertexShader(CompileShader(vs_5_0,VS_PostProcess())); + SetPixelShader(CompileShader(ps_5_0,PS_Curvature())); + } +} diff --git a/enbseries/enbeffectpostpass.fx.ini b/enbseries/enbeffectpostpass.fx.ini index fc24ed8..f8e99b7 100644 --- a/enbseries/enbeffectpostpass.fx.ini +++ b/enbseries/enbeffectpostpass.fx.ini @@ -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 diff --git a/enbseries/enblens.fx b/enbseries/enblens.fx new file mode 100644 index 0000000..df6a8e9 --- /dev/null +++ b/enbseries/enblens.fx @@ -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())); + } +} diff --git a/enbseries/enblens.fx.ini b/enbseries/enblens.fx.ini new file mode 100644 index 0000000..d1938c1 --- /dev/null +++ b/enbseries/enblens.fx.ini @@ -0,0 +1,2 @@ +[ENBLENS.FX] +TECHNIQUE=0 diff --git a/enbseries/intlightsprite.fx.ini b/enbseries/intlightsprite.fx.ini deleted file mode 100644 index 2d083e5..0000000 --- a/enbseries/intlightsprite.fx.ini +++ /dev/null @@ -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 diff --git a/enbseries/menbeffectfilters.fx b/enbseries/menbeffectfilters.fx deleted file mode 100644 index 4e0d93a..0000000 --- a/enbseries/menbeffectfilters.fx +++ /dev/null @@ -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 -{ - pass p0 - { - SetVertexShader(CompileShader(vs_5_0,VS_Pass())); - SetPixelShader(CompileShader(ps_5_0,PS_MariENB())); - } -} -/* cool, no more inline assembly */ -technique11 ORIGINALPOSTPROCESS -{ - pass p0 - { - SetVertexShader(CompileShader(vs_5_0,VS_Pass())); - SetPixelShader(CompileShader(ps_5_0,PS_Vanilla())); - } -} diff --git a/enbseries/menbeffectinternals.fx b/enbseries/menbeffectinternals.fx deleted file mode 100644 index d234c73..0000000 --- a/enbseries/menbeffectinternals.fx +++ /dev/null @@ -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; -}; diff --git a/enbseries/menbeffectsettings.fx b/enbseries/menbeffectsettings.fx deleted file mode 100644 index 5bcc441..0000000 --- a/enbseries/menbeffectsettings.fx +++ /dev/null @@ -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}; diff --git a/enbseries/menbextrafilters.fx b/enbseries/menbextrafilters.fx deleted file mode 100644 index 295933a..0000000 --- a/enbseries/menbextrafilters.fx +++ /dev/null @@ -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.g0.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 -{ - 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())); - } -} diff --git a/enbseries/menbextrainternals.fx b/enbseries/menbextrainternals.fx deleted file mode 100644 index b46c496..0000000 --- a/enbseries/menbextrainternals.fx +++ /dev/null @@ -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; -}; diff --git a/enbseries/menbextrasettings.fx b/enbseries/menbextrasettings.fx deleted file mode 100644 index 0e32fbb..0000000 --- a/enbseries/menbextrasettings.fx +++ /dev/null @@ -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}; diff --git a/enbseries/menbglobaldefs.fx b/enbseries/menbglobaldefs.fx index 1d0c585..9990541 100644 --- a/enbseries/menbglobaldefs.fx +++ b/enbseries/menbglobaldefs.fx @@ -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 \ No newline at end of file diff --git a/enbseries/menblens.dds b/enbseries/menblens.dds deleted file mode 100644 index d79494b..0000000 Binary files a/enbseries/menblens.dds and /dev/null differ diff --git a/enbseries/menblens.png b/enbseries/menblens.png new file mode 100644 index 0000000..61f8955 Binary files /dev/null and b/enbseries/menblens.png differ diff --git a/enbseries/menblut16.png b/enbseries/menblut16.png deleted file mode 100644 index 3ac426d..0000000 Binary files a/enbseries/menblut16.png and /dev/null differ diff --git a/enbseries/menblut64.png b/enbseries/menblut64.png index 1c58d5f..cf41211 100644 Binary files a/enbseries/menblut64.png and b/enbseries/menblut64.png differ diff --git a/enbseries/menblutpreset.png b/enbseries/menblutpreset.png deleted file mode 100644 index 0f54c92..0000000 Binary files a/enbseries/menblutpreset.png and /dev/null differ diff --git a/enbseries/menblutpresetnames.txt b/enbseries/menblutpresetnames.txt deleted file mode 100644 index dfc15ec..0000000 --- a/enbseries/menblutpresetnames.txt +++ /dev/null @@ -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 \ No newline at end of file diff --git a/enbseries/menbweatherinfo.txt b/enbseries/menbweatherinfo.txt new file mode 100644 index 0000000..19e35c9 --- /dev/null +++ b/enbseries/menbweatherinfo.txt @@ -0,0 +1,1225 @@ +ID NAME TEMPERATURE + +Skyrim + +15E DefaultWeather TEMPERATE +81A SkyrimClear HOT +12F89 SkyrimCloudy HOT +2E7AB TESTCloudyRain HOT +48C14 BlackreachWeather TEMPERATE +4D7FB SkyrimOvercastSnow COLD +5ED7A FXWthrInvertLightsSolitude TEMPERATE +6ED5A FXWthrInvertDayNight TEMPERATE +6ED5B FXWthrCaveBlueSkylight TEMPERATE +7548F FXWthrSunlight TEMPERATE +75491 FXWthrSunlightWhite TEMPERATE +75DE5 FXWthrCaveBluePaleLight TEMPERATE +777CF FXWthrInvertDayNighWarm TEMPERATE +8277A FXWthrInvertWindowsWhiterun TEMPERATE +8282A FXWthrInvertLightsWhiterun TEMPERATE +923FD SovngardeFog TEMPERATE +A6858 WorldMapWeather HOT +AEE84 FXWthrInvertWindowsWindhelm COLD +C821E SkyrimFog COLD +C821F SkyrimOvercastRain COLD +C8220 SkyrimStormRain COLD +C8221 SkyrimStormSnow COLD +D299E SkyrimOvercastWar TEMPERATE +D4886 FXMagicStormRain COLD +D9329 HelgenAttackWeather HOT +ECC96 FXWthrInvertWindowsWindhelm2 COLD +101910 FXWthrInvertLightMarkarth TEMPERATE +10199F SkyrimMQ206weather HOT +104AB4 SkuldafnCloudy COLD +105941 BloatedMansGrottoFog HOT +105942 SolitudeBluePalaceFogARENA TEMPERATE +105943 SolitudeBluePalaceFogFEAR TEMPERATE +105944 SolitudeBluePalaceFogNMARE TEMPERATE +105945 SolitudeBluePalaceFog TEMPERATE +105F40 SkyrimDA02Weather TEMPERATE +106635 KarthspireRedoubtFog TEMPERATE +10A230 SkyrimClearMA HOT +10A231 SkyrimOvercastRainMA TEMPERATE +10A232 SkyrimFogMA TEMPERATE +10A233 SkyrimCloudyMA HOT +10A234 SkyrimClearCO COLD +10A235 SkyrimFogCO COLD +10A236 SkyrimCloudyCO COLD +10A237 SkyrimClearRE HOT +10A238 SkyrimOvercastRainRE TEMPERATE +10A239 SkyrimFogRE TEMPERATE +10A23A SkyrimCloudyRE HOT +10A23B SkyrimClearFF HOT +10A23C SkyrimStormRainFF TEMPERATE +10A23D SkyrimOvercastRainFF TEMPERATE +10A23E SkyrimFogFF TEMPERATE +10A23F SkyrimCloudyFF HOT +10A240 SkyrimClearTU HOT +10A241 SkyrimStormRainTU TEMPERATE +10A242 SkyrimOvercastRainTU TEMPERATE +10A243 SkyrimCloudyTU HOT +10A244 SkyrimClearSN TEMPERATE +10A245 SkyrimCloudySN TEMPERATE +10A7A5 SkyrimClearVT HOT +10A7A6 SkyrimOvercastRainVT TEMPERATE +10A7A7 SkyrimFogVT TEMPERATE +10A7A8 SkyrimCloudyVT HOT +10C32F FXSkyrimStormBlowingGrass TEMPERATE +10D9EC SovngardeClear HOT +10DA13 FXWthrInvertWindowsWinterhold COLD +10E1E3 SkyrimCloudyVT_A HOT +10E1E4 SkyrimClearVT_A HOT +10E1E5 SkyrimCloudyMA_A HOT +10E1E6 SkyrimClearMA_A HOT +10E1E7 SkyrimCloudyCO_A COLD +10E1E8 SkyrimClearCO_A COLD +10E1E9 SkyrimCloudyRE_A HOT +10E1EA SkyrimClearRE_A HOT +10E1EB SkyrimCloudyFF_A HOT +10E1EC SkyrimClearFF_A HOT +10E1ED SkyrimCloudyTU_A HOT +10E1EE SkyrimClearTU_A HOT +10E1EF SkyrimCloudySN_A TEMPERATE +10E1F0 SkyrimClearSN_A TEMPERATE +10E1F1 SkyrimCloudy_A HOT +10E1F2 SkyrimClear_A HOT +10E3D4 EditorCloudPreview TEMPERATE +10FE7E RiftenOvercastFog TEMPERATE +10FEF8 SovngardeDark COLD + +Dawnguard + +1407 SoulCairnAmb01 COLD +6AEC DLC1Eclipse TEMPERATE +959F SoulCairnAurora COLD +F89C DLC1AurielsBowClearWeather TEMPERATE +F89D DLC1MagicAurielBowCloudyWeather TEMPERATE +10E0B DLC1_SkyrimCloudyFV_A COLD +10E0E DLC1_SkyrimCloudyFV COLD +10E0F DLC1_SkyrimClearFV COLD +10E10 DLC1_SkyrimClearFV_A COLD +14551 SoulCairnAmb01_Rain COLD +18DBB SoulCairnAmb02 COLD +18DBC SoulCairnAmb03 COLD +18DBD SoulCairnAmb04 COLD +19599 DLC1FalmerValley_bf COLD +195A0 DLC1FalmerValley_bfDark COLD + +Dragonborn + +18471 DLC02VolcanicAsh01 HOT +1D760 DLC02VolcanicAshTundra01 COLD +1DFF5 DLC2ApocryphaWeather TEMPERATE +31AC0 DLC02VolcanicAsh02 HOT +32336 DLC02VolcanicAshStorm01 HOT +34CFB DLC2ApocryphaWeatherNew TEMPERATE +374B8 DLC02VolcanicAsh01_A HOT +374B9 DLC02VolcanicAsh02_A HOT +374BA DLC02VolcanicAshTundra01_A COLD + +Wet and Cold - Ashes + +5B29C _WetAshFallLight HOT +5B29D _WetAshFallMed HOT +5B2A0 _WetAshFallHeavy HOT + +Natural Lighting and Atmospherics + +1760E SkyrimClearTU_CM_NoClouds HOT +1760F SkyrimClear_CM_NoClouds HOT +19BBE SkyrimMarkarthClear HOT +19BBF SkyrimMarkarthCloudy HOT +19BC0 SkyrimMarkarthClear_NoClouds HOT +1BC0D SkyrimClearMA_CM_NoClouds HOT +1C6D2 SkyrimMarkarthFog TEMPERATE +1CC35 SkyrimMarkarthOvercast TEMPERATE +25D8D SkyrimClearSN_CM_NoClouds HOT +2E982 SkyrimClearCO_CM_NoClouds HOT +2E983 SkyrimClearFF_CM_NoCoulds HOT +3AB68 SkyrimClearRE_CM_NoClouds HOT +4BDF7 SkyrimMist_CM TEMPERATE +57500 SkyrimOvercast_CM TEMPERATE +73963 SkyrimStormRainHeavy_CM TEMPERATE +73964 SkyrimOvercastMarsh_CM TEMPERATE +73EC8 SkyrimFogHeavy_CM TEMPERATE +83665 SkyrimFogRain_CM TEMPERATE + +-- In progress + +Darkend + +179AB DLC1EclipseDUPLICATE001 - +161063 XJKphalosFog - +161065 XJKphalosStormRainFOG - +2946E6 XJKphalosFogDUPLICATE001 - +296EB5 XJKphalosFogSovngarde - + +Vigilant + +56A0C zzzCHMonoFogWeather - +56A0D zzzCHMonoClearWeather - +62484 zzzCOCursedWeather - +67BB2 zzzCHMolagWeatherNoCore - +701D2 zzzCHMolagWeather - +2C603B zzzCHOldForestStormRain - +2DA92C zzzCHWhaleGraveyardStormSnow - + +Enderal + +4815 _00E_Swamp01 - +6563 SkyrimClearCOPY0000 - +703C _00E_SuncoastSunrise - +1095F _0E_ForestWeather - +1AB44 _JonasWaldVersuch3 - +1DF4E _0E_Pilzwald - +1DF4F _0E_SullevanWeatherDontUse - +20B13 _00E_WeatherSullevanInterior - +20B16 _00E_WeatherSullevanIntereur - +21310 SkuldafnCloudyDUPLICATE001 - +21311 _00E_EnderalRainLight COLD +2B999 _0E_MaxWetter - +2B9A1 _00E_MaxWetterRegen - +30FE2 _00E_MQ11a_SkyrimOvercastSnowSlow - +30FE3 _00E_KristallwaldWeather - +36DDB _0E_WetterGrberpfad - +36E23 SkyrimClearDUPLICATE002 - +373C7 _00E_Thalgard_New - +39294 _00E_OvercastSnowLight - +3BC11 EnderalClearNoClouds_Aurora - +43C5C _00E_Desert - +477A0 SkyrimCloudyDUPLICATE001 - +477A1 PrologWeather - +53547 _JonasWaldVersuchDUPLICATE004 - +54E05 _0E_MaxWetterGraeberpfad - +5C27C _00E_ClassMenu_Weather - +607CE _0E_GraeberDonnerfrostQuellwacht - +607CF _00E_DesertDUPLICATE001 - +6877C _00E_Thalgard - +6FEC5 _JonasAltDothulgradDUPLICATE002 - +6FEC7 _JonasAltDothulgrad - +72785 _00E_EnderalOvercast - +72B93 _00E_Ark_NQ_Kor_CaveWeather - +74545 _0E_OstBauernkueste - +74546 _0E_GraeberPfade - +76985 _00E_Farmcoast - +7761F _00E_MQP02ShipWeather HOT +7D3FD _JonasWaldVersuchDUPLICATE005 - +8B19C _00E_SilberhainWetter - +962ED _00E_WesternBayWeather - +9649F _00E_MQ11c_SilberhainRealWeather - +9A9C2 _00E_Desertsandstorm - +A8261 _00E_AkropolisWeather - +AD5B3 _00E_GraeberpfadHeiligtum - +AEB93 FFPalmenhain - +C09D0 _00E_TestWeather - +C5634 _00E_TropicalIslandWeather - +CE924 _0E_WeatherSullevanDUPLICATE001 - +D340E _00E_DesertWeather - +DB551 _00E_EnderalRainLightFogged - +DD765 _00E_GoldenforstWeather - +E4318 SkyrimOvercastSnowDUPLICATE002 - +EFCBF _00E_StarCityWeather - +F64A4 SkyrimClearDUPLICATE001 - +F8EF4 _00E_MQ07aOldManManor - +106723 _00E_MQ07aVisionWeatherRain - +10674E _00E_MQ07aVisionWeatherNoRain - +10A758 _00E_MQ07aOldManManorNoRain - +12EAB9 _00E_MQP01_Weather HOT +12ECEC SkyrimOvercastSnowKristallwald - +13706E EnderalClearNoClouds - +14BDDC _00E_Test_Weather_02 - +14BDE0 _00E_MQ17_Purge_Weather - +14BFF0 _00E_MQ18_EpilogueWeather - + +-- These ones are going to take me a really long time... + +Climates of Tamriel (absolutely fucking insane) + +29E89 CoTClear_5_TU - +29E8A CoTClear_6_TU - +2A951 CoTClear_7_TU - +2A952 CoTClear_8_TU - +2AEB6 CoTClear_10_TU - +2B419 CoTClear_11_TU - +2B97D CoTClear_13_A_TU - +2B97F CoTClear_12_TU - +2B980 CoTClear_14_A_TU - +2C445 CoTClear_15_TU - +2C446 CoTClear_16_TU - +2D46D CoTClear_17_TU - +2D46E CoTClear_18_TU - +2D9D1 CoTClear_19_AP_TU - +2D9D2 CoTClear_20_AO_TU - +2DF35 CoTClear_21_TU - +2DF36 CoTClear_22_TU - +2E499 CoTClear_23_TU - +2E49A CoTClear_24_TU - +2E49B CoTClear_25_AO_TU - +2E49C CoTClear_26_AO_TU - +2E49D CoTClear_27_TU - +2E49E CoTClear_28_TU - +2EF64 CoTClear_4_TU - +31FDB CoTClear_1_TU - +32AA0 CoTClear_2_TU - +33003 CoTClear_3_TU - +34AEE CoTClear_9_TU - +37B61 CoTCloudy_1_MA - +3A115 CoTCloudy_3_VT - +3A678 CoTCloudy_4_VT - +3B13D CoTCloudy_5_VT - +3B13E CoTCloudy_6_VT - +3B6A1 CoTCloudy_7_VT - +3CC2A CoTCloudy_8_VT - +3D6EF CoTCloudy_9_VT - +3DC52 CoTCloudy_10_VT - +3E1B5 CoTCloudy_11_VT - +3EC7A CoTCloudy_12_VT - +3EC7B CoTCloudy_13_A_VT - +3EC7C CoTCloudy_14_A_VT - +40767 CoTCloudy_15_VT - +40CCE CoTCloudy_16_VT - +40CCF CoTCloudy_17_VT - +40CD0 CoTCloudy_18_VT - +40CD1 CoTCloudy_19_VT - +40CD2 CoTCloudy_20_VT - +40CD3 CoTCloudy_21_VT - +40CD4 CoTCloudy_22_VT - +40CD5 CoTCloudy_23_VT - +40CD6 CoTCloudy_24_VT - +40CD8 CoTCloudy_26_AM_VT - +40CD9 CoTCloudy_27_AM_VT - +40CDA CoTCloudy_28_AM_VT - +437F9 CoTOvercast_1 - +44824 CoTOvercast_2 - +44825 CoTOvercast_3 - +44826 CoTOvercast_4 - +44827 CoTOvercast_5_AP - +44829 CoTOvercast_6_AM - +4482A CoTOvercast_1_T - +4482B CoTOvercast_2_T - +4482C CoTOvercast_4_T - +4482D CoTOvercast_3_T - +4482E CoTOvercast_5_T - +4482F CoTOvercast_6_T - +44830 CoTOvercast_1_LR - +44831 CoTOvercast_1_HR_T - +44832 CoTOvercast_2_HR - +44833 CoTOvercast_2_LR - +44834 CoTOvercast_3_HR - +44835 CoTOvercast_3_LR - +44836 CoTOvercast_4_HR_T - +44837 CoTOvercast_4_LR - +44838 CoTOvercast_5_HR - +44839 CoTOvercast_5_LR - +4483A CoTOvercast_6_HR - +4483B CoTOvercast_6_LR - +45868 CoTFog_1 - +45869 CoTFog_1_T - +4586A CoTFog_2 - +4586B CoTFog_2_T - +4586C CoTFog_3 - +4586D CoTFog_3_T - +4586E CoTFog_4 - +4586F CoTFog_4_T - +45870 CoTFog_5 - +45871 CoTFog_5_T - +45872 CoTFog_6 - +45873 CoTFog_6_T - +47362 CoTSnow_LS - +47E2E CoTFogWind - +47E2F CoTSnow_NS_T - +47E30 CoTSnow_HS - +47E31 CoTSnowStorm_T - +47E33 CoTClear_1_INT - +47E34 CoTClear_10_INT - +47E35 CoTClear_11_INT - +47E36 CoTClear_12_INT - +47E37 CoTClear_13_A_INT - +47E38 CoTClear_15_INT - +47E39 CoTClear_14_A_INT - +47E3A CoTClear_16_INT - +47E3B CoTClear_17_INT - +47E3C CoTClear_18_INT - +47E3D CoTClear_19_AP_INT - +47E3E CoTClear_2_INT - +47E3F CoTClear_20_AO_INT - +47E40 CoTClear_21_INT - +47E41 CoTClear_22_INT - +47E42 CoTClear_23_INT - +47E43 CoTClear_24_INT - +47E44 CoTClear_25_AO_INT - +47E45 CoTClear_26_AO_INT - +47E46 CoTClear_27_INT - +47E47 CoTClear_28_INT - +47E48 CoTClear_3_INT - +47E49 CoTClear_4_INT - +47E4A CoTClear_5_INT - +47E4B CoTClear_6_INT - +47E4C CoTClear_7_INT - +47E4D CoTClear_8_INT - +47E4E CoTClear_9_INT - +483C2 CoTSnow_HS_AM - +48925 CoTSnow_HS_AP - +48926 CoTSnow_HS_A - +53567 CoTFogRIFTEN_1 - +53568 CoTFogRIFTEN_1_T - +53569 CoTFogRIFTEN_2 - +5356A CoTFogRIFTEN_2_T - +5356B CoTFogRIFTEN_3 - +5356C CoTFogRIFTEN_4 - +5356D CoTFogRIFTEN_3_T - +5356E CoTFogRIFTEN_4_T - +5356F CoTFogRIFTEN_5 - +53570 CoTFogRIFTEN_5_T - +53571 CoTFogRIFTEN_6 - +53572 CoTFogRIFTEN_6_T - +53573 CoTFogRIFTENWind - +56088 CoTClear_10_CO - +56089 CoTClear_11_CO - +5608A CoTClear_12_CO - +5608B CoTClear_13_A_CO - +5608C CoTClear_14_A_CO - +5608D CoTClear_15_CO - +5608E CoTClear_16_CO - +5608F CoTClear_17_CO - +56090 CoTClear_18_CO - +56091 CoTClear_19_AP_CO - +56092 CoTClear_1_CO - +56093 CoTClear_20_AO_CO - +56094 CoTClear_21_CO - +56095 CoTClear_22_CO - +56096 CoTClear_23_CO - +56097 CoTClear_24_CO - +56098 CoTClear_25_AO_CO - +56099 CoTClear_26_AO_CO - +5609A CoTClear_27_CO - +5609B CoTClear_28_CO - +5609C CoTClear_2_CO - +5609D CoTClear_3_CO - +5609E CoTClear_4_CO - +5609F CoTClear_5_CO - +560A0 CoTClear_6_CO - +560A1 CoTClear_7_CO - +560A2 CoTClear_8_CO - +560A3 CoTClear_9_CO - +5660B CoTClear_10_RE - +5660C CoTClear_11_RE - +5660D CoTClear_12_RE - +5660E CoTClear_13_A_RE - +5660F CoTClear_14_A_RE - +56610 CoTClear_15_RE - +56611 CoTClear_16_RE - +56612 CoTClear_17_RE - +56613 CoTClear_18_RE - +56614 CoTClear_19_AP_RE - +56615 CoTClear_1_RE - +56616 CoTClear_20_AO_RE - +56617 CoTClear_21_RE - +56618 CoTClear_22_RE - +56619 CoTClear_23_RE - +5661A CoTClear_24_RE - +5661B CoTClear_25_AO_RE - +5661C CoTClear_26_AO_RE - +5661D CoTClear_27_RE - +5661E CoTClear_28_RE - +5661F CoTClear_2_RE - +56620 CoTClear_3_RE - +56621 CoTClear_4_RE - +56622 CoTClear_5_RE - +56623 CoTClear_6_RE - +56624 CoTClear_7_RE - +56625 CoTClear_8_RE - +56626 CoTClear_9_RE - +570F1 CoTClear_10_FF - +570F2 CoTClear_11_FF - +570F3 CoTClear_12_FF - +570F4 CoTClear_13_A_FF - +570F5 CoTClear_14_A_FF - +570F6 CoTClear_15_FF - +570F7 CoTClear_16_FF - +570F8 CoTClear_17_FF - +570F9 CoTClear_18_FF - +570FA CoTClear_19_AP_FF - +570FB CoTClear_1_FF - +570FC CoTClear_20_AO_FF - +570FD CoTClear_21_FF - +570FE CoTClear_22_FF - +570FF CoTClear_23_FF - +57100 CoTClear_24_FF - +57101 CoTClear_25_AO_FF - +57102 CoTClear_26_AO_FF - +57103 CoTClear_27_FF - +57104 CoTClear_28_FF - +57105 CoTClear_2_FF - +57106 CoTClear_3_FF - +57107 CoTClear_4_FF - +57108 CoTClear_5_FF - +57109 CoTClear_6_FF - +5710A CoTClear_7_FF - +5710B CoTClear_8_FF - +5710C CoTClear_9_FF - +5813B CoTClear_10_SN - +5813C CoTClear_11_SN - +5813D CoTClear_12_SN - +5813E CoTClear_13_A_SN - +5813F CoTClear_14_A_SN - +58140 CoTClear_15_SN - +58141 CoTClear_16_SN - +58142 CoTClear_17_SN - +58143 CoTClear_18_SN - +58144 CoTClear_19_AP_SN - +58145 CoTClear_1_SN - +58146 CoTClear_20_AO_SN - +58147 CoTClear_21_SN - +58148 CoTClear_22_SN - +58149 CoTClear_23_SN - +5814A CoTClear_24_SN - +5814B CoTClear_25_AO_SN - +5814C CoTClear_26_AO_SN - +5814D CoTClear_27_SN - +5814E CoTClear_28_SN - +5814F CoTClear_2_SN - +58150 CoTClear_3_SN - +58151 CoTClear_4_SN - +58152 CoTClear_5_SN - +58153 CoTClear_6_SN - +58154 CoTClear_7_SN - +58155 CoTClear_8_SN - +58156 CoTClear_9_SN - +5A1A9 CoTClear_10_MA - +5A1AA CoTClear_11_MA - +5A1AB CoTClear_12_MA - +5A1AC CoTClear_13_A_MA - +5A1AD CoTClear_14_A_MA - +5A1AE CoTClear_15_MA - +5A1AF CoTClear_16_MA - +5A1B0 CoTClear_17_MA - +5A1B1 CoTClear_18_MA - +5A1B2 CoTClear_19_AP_MA - +5A1B4 CoTClear_20_AO_MA - +5A1B5 CoTClear_21_MA - +5A1B6 CoTClear_22_MA - +5A1B7 CoTClear_23_MA - +5A1B8 CoTClear_24_MA - +5A1B9 CoTClear_25_AO_MA - +5A1BA CoTClear_26_AO_MA - +5A1BB CoTClear_27_MA - +5A1BC CoTClear_28_MA - +5A1BD CoTClear_2_MA - +5A1BE CoTClear_3_MA - +5A1BF CoTClear_4_MA - +5A1C0 CoTClear_5_MA - +5A1C1 CoTClear_6_MA - +5A1C2 CoTClear_7_MA - +5A1C3 CoTClear_8_MA - +5A1C4 CoTClear_9_MA - +5A72C CoTClear_1_MA - +5A72D CoTClear_10_VT - +5A72E CoTClear_11_VT - +5A72F CoTClear_12_VT - +5A730 CoTClear_13_A_VT - +5A731 CoTClear_14_A_VT - +5A732 CoTClear_15_VT - +5A733 CoTClear_16_VT - +5A734 CoTClear_17_VT - +5A735 CoTClear_18_VT - +5A736 CoTClear_19_AP_VT - +5A737 CoTClear_1_VT - +5A738 CoTClear_20_AO_VT - +5A739 CoTClear_21_VT - +5A73A CoTClear_22_VT - +5A73B CoTClear_23_VT - +5A73C CoTClear_24_VT - +5A73D CoTClear_25_AO_VT - +5A73E CoTClear_26_AO_VT - +5A73F CoTClear_27_VT - +5A740 CoTClear_28_VT - +5A741 CoTClear_2_VT - +5A742 CoTClear_3_VT - +5A743 CoTClear_4_VT - +5A744 CoTClear_5_VT - +5A745 CoTClear_6_VT - +5A746 CoTClear_7_VT - +5A747 CoTClear_8_VT - +5A748 CoTClear_9_VT - +5B775 CoTCloudy_1_TU - +5B776 CoTCloudy_1_FF - +5B777 CoTCloudy_1_SN - +5B778 CoTCloudy_1_VT - +5B779 CoTCloudy_1_RE - +5B77A CoTCloudy_1_CO - +5B77B CoTCloudy_2_CO - +5B77C CoTCloudy_2_FF - +5B77D CoTCloudy_2_MA - +5B77E CoTCloudy_2_RE - +5B77F CoTCloudy_2_SN - +5B780 CoTCloudy_2_TU - +5B781 CoTCloudy_2_VT - +5B782 CoTCloudy_3_CO - +5B783 CoTCloudy_3_FF - +5B784 CoTCloudy_3_MA - +5B785 CoTCloudy_3_RE - +5B786 CoTCloudy_3_SN - +5B787 CoTCloudy_3_TU - +5B788 CoTCloudy_4_CO - +5B789 CoTCloudy_4_FF - +5B78A CoTCloudy_4_MA - +5B78B CoTCloudy_4_SN - +5B78C CoTCloudy_4_RE - +5B78D CoTCloudy_4_TU - +5B78E CoTCloudy_5_CO - +5B78F CoTCloudy_5_FF - +5B790 CoTCloudy_5_MA - +5B791 CoTCloudy_5_RE - +5B792 CoTCloudy_5_SN - +5B793 CoTCloudy_5_TU - +5B794 CoTCloudy_6_CO - +5B795 CoTCloudy_6_FF - +5B796 CoTCloudy_6_MA - +5B797 CoTCloudy_6_RE - +5B798 CoTCloudy_6_SN - +5B799 CoTCloudy_6_TU - +5B79A CoTCloudy_7_CO - +5B79B CoTCloudy_7_FF - +5B79C CoTCloudy_7_MA - +5B79D CoTCloudy_7_RE - +5B79E CoTCloudy_7_SN - +5B79F CoTCloudy_7_TU - +5B7A0 CoTCloudy_8_CO - +5B7A1 CoTCloudy_8_FF - +5B7A2 CoTCloudy_8_MA - +5B7A3 CoTCloudy_8_RE - +5B7A4 CoTCloudy_8_SN - +5B7A5 CoTCloudy_8_TU - +5B7A6 CoTCloudy_9_CO - +5B7A7 CoTCloudy_9_FF - +5B7A8 CoTCloudy_9_MA - +5B7A9 CoTCloudy_9_RE - +5B7AA CoTCloudy_9_SN - +5B7AB CoTCloudy_9_TU - +5B7AC CoTCloudy_10_CO - +5B7AD CoTCloudy_10_FF - +5B7AE CoTCloudy_10_MA - +5B7AF CoTCloudy_10_RE - +5B7B0 CoTCloudy_10_SN - +5B7B1 CoTCloudy_10_TU - +5B7B2 CoTCloudy_11_CO - +5B7B3 CoTCloudy_11_FF - +5B7B4 CoTCloudy_11_MA - +5B7B5 CoTCloudy_11_RE - +5B7B6 CoTCloudy_11_SN - +5B7B7 CoTCloudy_11_TU - +5B7B8 CoTCloudy_12_CO - +5B7B9 CoTCloudy_12_FF - +5B7BA CoTCloudy_12_MA - +5B7BB CoTCloudy_12_RE - +5B7BC CoTCloudy_12_SN - +5B7BD CoTCloudy_12_TU - +5B7BE CoTCloudy_13_A_CO - +5B7BF CoTCloudy_13_A_FF - +5B7C0 CoTCloudy_13_A_MA - +5B7C1 CoTCloudy_13_A_RE - +5B7C2 CoTCloudy_13_A_SN - +5B7C3 CoTCloudy_13_A_TU - +5B7C4 CoTCloudy_14_A_CO - +5B7C5 CoTCloudy_14_A_FF - +5B7C6 CoTCloudy_14_A_MA - +5B7C7 CoTCloudy_14_A_RE - +5B7C8 CoTCloudy_14_A_SN - +5B7C9 CoTCloudy_14_A_TU - +5B7CA CoTCloudy_15_CO - +5B7CB CoTCloudy_15_FF - +5B7CC CoTCloudy_15_MA - +5B7CD CoTCloudy_15_RE - +5B7CE CoTCloudy_15_SN - +5B7CF CoTCloudy_15_TU - +5B7D0 CoTCloudy_16_CO - +5B7D1 CoTCloudy_16_FF - +5B7D2 CoTCloudy_16_MA - +5B7D3 CoTCloudy_16_RE - +5B7D4 CoTCloudy_16_SN - +5B7D5 CoTCloudy_16_TU - +5B7D6 CoTCloudy_17_CO - +5B7D7 CoTCloudy_17_FF - +5B7D8 CoTCloudy_17_MA - +5B7D9 CoTCloudy_17_RE - +5B7DA CoTCloudy_17_SN - +5B7DB CoTCloudy_17_TU - +5B7DC CoTCloudy_18_CO - +5B7DD CoTCloudy_18_FF - +5B7DE CoTCloudy_18_MA - +5B7DF CoTCloudy_18_RE - +5B7E0 CoTCloudy_18_SN - +5B7E1 CoTCloudy_18_TU - +5B7E2 CoTCloudy_19_CO - +5B7E3 CoTCloudy_19_FF - +5B7E4 CoTCloudy_19_MA - +5B7E5 CoTCloudy_19_RE - +5B7E6 CoTCloudy_19_SN - +5B7E7 CoTCloudy_19_TU - +5B7E8 CoTCloudy_20_CO - +5B7E9 CoTCloudy_20_FF - +5B7EA CoTCloudy_20_MA - +5B7EB CoTCloudy_20_RE - +5B7EC CoTCloudy_20_SN - +5B7ED CoTCloudy_20_TU - +5B7EE CoTCloudy_21_CO - +5B7EF CoTCloudy_21_FF - +5B7F0 CoTCloudy_21_MA - +5B7F1 CoTCloudy_21_RE - +5B7F2 CoTCloudy_21_SN - +5B7F3 CoTCloudy_21_TU - +5B7F4 CoTCloudy_22_CO - +5B7F5 CoTCloudy_22_FF - +5B7F6 CoTCloudy_22_MA - +5B7F7 CoTCloudy_22_RE - +5B7F8 CoTCloudy_22_SN - +5B7F9 CoTCloudy_22_TU - +5B7FA CoTCloudy_23_CO - +5B7FB CoTCloudy_23_FF - +5B7FC CoTCloudy_23_MA - +5B7FD CoTCloudy_23_RE - +5B7FE CoTCloudy_23_SN - +5B7FF CoTCloudy_23_TU - +5B800 CoTCloudy_24_CO - +5B801 CoTCloudy_24_FF - +5B802 CoTCloudy_24_MA - +5B803 CoTCloudy_24_RE - +5B804 CoTCloudy_24_SN - +5B805 CoTCloudy_24_TU - +5B806 CoTCloudy_25_AP_CO - +5B807 CoTCloudy_25_AP_FF - +5B808 CoTCloudy_25_AP_MA - +5B809 CoTCloudy_25_AP_RE - +5B80A CoTCloudy_25_AP_SN - +5B80B CoTCloudy_25_AP_TU - +5B80C CoTCloudy_25_AP_VT - +5B80D CoTCloudy_26_AM_CO - +5B80E CoTCloudy_26_AM_FF - +5B80F CoTCloudy_26_AM_MA - +5B810 CoTCloudy_26_AM_RE - +5B811 CoTCloudy_26_AM_SN - +5B812 CoTCloudy_26_AM_TU - +5B813 CoTCloudy_27_AM_CO - +5B814 CoTCloudy_27_AM_FF - +5B815 CoTCloudy_27_AM_MA - +5B816 CoTCloudy_27_AM_RE - +5B817 CoTCloudy_27_AM_SN - +5B818 CoTCloudy_27_AM_TU - +5B819 CoTCloudy_28_AM_CO - +5B81A CoTCloudy_28_AM_FF - +5B81B CoTCloudy_28_AM_MA - +5B81C CoTCloudy_28_AM_RE - +5B81D CoTCloudy_28_AM_SN - +5B81E CoTCloudy_28_AM_TU - +6497D CoTOvercast_Storm_Needles - +68A17 CoTOvercast_Storm_Grass - +68A18 CoTOvercast_Storm_Leaves - +68A1A CoTSnowBlizzard_Swirl - +6C559 CoTSnowBlizzard_Down_NoFog - + +Climates of Tamriel (Dragonborn Patch) + +1ED92 CoTAsh_HS - +1ED93 CoTAsh_HS_A - +1ED94 CoTAsh_HS_AM - +1ED95 CoTAsh_HS_AP - +1ED96 CoTAsh_LS - + +Vivid Weathers (absolutely fucking insane 2: electric boogaloo) + +36CE DLC2Ashfall_HS - +36D2 DLC2VividSnow_LS - +36D3 DLC2VividSnow_NS_T - +12DDE6 SkyrimSnowBlizzard_Down_NoFog3 - +12DDE7 SkyrimSnowBlizzard_Down_NoFog2 - +12DDE8 SkyrimSnowBlizzard_Down_NoFog1 - +12DDE9 SkyrimSnowBlizzard_Swirl3 - +12DDEA SkyrimSnowBlizzard_Swirl2 - +12DDEB SkyrimSnowBlizzard_Swirl1 - +12DDEC SkyrimSnowStorm_46 - +12DDED SkyrimSnowStorm_45 - +12DDEE SkyrimSnowStorm_44 - +14D2DF SkyrimClear_Tundra_47 - +14D2E0 SkyrimClear_Tundra_48 - +14DDA7 SkyrimClear_Tundra_49 - +14DDA8 SkyrimClear_Tundra_50 - +14E30C SkyrimClear_Tundra_52 - +14E86F SkyrimClear_Tundra_53 - +14EDD3 SkyrimClear_Aurora_Tundra_55 - +14EDD5 SkyrimClear_Tundra_54 - +14EDD6 SkyrimClear_Aurora_Tundra_56 - +14F89B SkyrimClear_Tundra_57 - +14F89C SkyrimClear_Tundra_58 - +1508C3 SkyrimClear_Tundra_59 - +1508C4 SkyrimClear_Tundra_60 - +150E27 SkyrimClear_AuroraPeach_Tundra_61 - +150E28 SkyrimClear_AuroraOverdose_Tundra_62 - +15138B SkyrimClear_Tundra_63 - +15138C SkyrimClear_Tundra_64 - +1518EF SkyrimClear_Tundra_65 - +1518F0 SkyrimClear_Tundra_66 - +1518F1 SkyrimClear_AuroraOverdose_Tundra_67 - +1518F2 SkyrimClear_AuroraOverdose_Tundra_68 - +1518F3 SkyrimClear_Tundra_69 - +1518F4 SkyrimClear_Tundra_70 - +1523BA SkyrimClear_Tundra_46 - +155431 SkyrimClear_Tundra_43 - +155EF6 SkyrimClear_Tundra_44 - +156459 SkyrimClear_Tundra_45 - +157F44 SkyrimClear_Tundra_51 - +15AFB7 SkyrimCloudy_March_43 - +15D56B SkyrimCloudy_VolTundra_45 - +15DACE SkyrimCloudy_VolTundra_46 - +15E593 SkyrimCloudy_VolTundra_47 - +15E594 SkyrimCloudy_VolTundra_48 - +15EAF7 SkyrimCloudy_VolTundra_49 - +160080 SkyrimCloudy_VolTundra_50 - +160B45 SkyrimCloudy_VolTundra_51 - +1610A8 SkyrimCloudy_VolTundra_52 - +16160B SkyrimCloudy_VolTundra_53 - +1620D0 SkyrimCloudy_VolTundra_54 - +1620D1 SkyrimCloudy_Aurora_VolTundra_55 - +1620D2 SkyrimCloudy_Aurora_VolTundra_56 - +163BBD SkyrimCloudy_VolTundra_57 - +164124 SkyrimCloudy_VolTundra_58 - +164125 SkyrimCloudy_VolTundra_59 - +164126 SkyrimCloudy_VolTundra_60 - +164127 SkyrimCloudy_VolTundra_61 - +164128 SkyrimCloudy_VolTundra_62 - +164129 SkyrimCloudy_VolTundra_63 - +16412A SkyrimCloudy_VolTundra_64 - +16412B SkyrimCloudy_VolTundra_65 - +16412C SkyrimCloudy_VolTundra_66 - +16412E SkyrimCloudy_AuroraMental_VolTundra_68 - +16412F SkyrimCloudy_AuroraMental_VolTundra_69 - +164130 SkyrimCloudy_AuroraMental_VolTundra_70 - +166C4F SkyrimOvercast_43 - +167C7A SkyrimOvercast_44 - +167C7B SkyrimOvercast_45 - +167C7C SkyrimOvercast_46 - +167C7D SkyrimOvercast_AuroraPeach_47 - +167C7F SkyrimOvercast_AuroraMental_48 - +167C80 SkyrimOvercast_Thunder_43 - +167C81 SkyrimOvercast_Thunder_44 - +167C82 SkyrimOvercast_Thunder_46 - +167C83 SkyrimOvercast_Thunder_45 - +167C84 SkyrimOvercast_Thunder_47 - +167C85 SkyrimOvercast_Thunder_48 - +167C86 SkyrimOvercast_LowRain_43 - +167C87 SkyrimOvercast_HighRain_Thunder_43 - +167C88 SkyrimOvercast_HighRain_44 - +167C89 SkyrimOvercast_LowRain_44 - +167C8A SkyrimOvercast_HighRain_45 - +167C8B SkyrimOvercast_LowRain_45 - +167C8C SkyrimOvercast_HighRain_Thunder_46 - +167C8D SkyrimOvercast_LowRain_Thunder_46 - +167C8E SkyrimOvercast_HighRain_Thunder_47 - +167C8F SkyrimOvercast_LowRain_Thunder_47 - +167C90 SkyrimOvercast_HighRain_Thunder_48 - +167C91 SkyrimOvercast_LowRain_Thunder_48 - +168CBE SkyrimFog_43 - +168CBF SkyrimFog_Thunder_43 - +168CC0 SkyrimFog_44 - +168CC1 SkyrimFog_Thunder_44 - +168CC2 SkyrimFog_45 - +168CC3 SkyrimFog_Thunder_45 - +168CC4 SkyrimFog_46 - +168CC5 SkyrimFog_Thunder_46 - +168CC6 SkyrimFog_47 - +168CC7 SkyrimFog_Thunder_47 - +168CC8 SkyrimFog_48 - +168CC9 SkyrimFog_Thunder_48 - +16A7B8 SkyrimSnow_LS - +16B284 SkyrimFogWind - +16B285 SkyrimSnow_NS_T - +16B286 SkyrimSnow_HS - +16B287 SkyrimSnowStorm_T - +16B289 SkyrimClear_Interior_43 - +16B28A SkyrimClear_Interior_52 - +16B28B SkyrimClear_Interior_53 - +16B28C SkyrimClear_Interior_54 - +16B28D SkyrimClear_Aurora_Interior_55 - +16B28E SkyrimClear_Interior_57 - +16B28F SkyrimClear_Aurora_Interior_56 - +16B290 SkyrimClear_Interior_58 - +16B291 SkyrimClear_Interior_59 - +16B292 SkyrimClear_Interior_60 - +16B293 SkyrimClear_AuroraPeach_Interior_61 - +16B294 SkyrimClear_Interior_44 - +16B295 SkyrimClear_AuroraOverdose_Interior_62 - +16B296 SkyrimClear_Interior_63 - +16B297 SkyrimClear_Interior_64 - +16B298 SkyrimClear_Interior_65 - +16B299 SkyrimClear_Interior_66 - +16B29A SkyrimClear_AuroraOverdose_Interior_67 - +16B29B SkyrimClear_AuroraOverdose_Interior_68 - +16B29C SkyrimClear_Interior_69 - +16B29D SkyrimClear_Interior_70 - +16B29E SkyrimClear_Interior_45 - +16B29F SkyrimClear_Interior_46 - +16B2A0 SkyrimClear_Interior_47 - +16B2A1 SkyrimClear_Interior_48 - +16B2A2 SkyrimClear_Interior_49 - +16B2A3 SkyrimClear_Interior_50 - +16B2A4 SkyrimClear_Interior_51 - +16B818 SkyrimSnow_HS_AM - +16BD7B SkyrimSnow_HS_AP - +16BD7C SkyrimSnow_HS_A - +1769BD SkyrimFogRIFTEN_43 - +1769BE SkyrimFogRIFTEN_Thunder_43 - +1769BF SkyrimFogRIFTEN_44 - +1769C0 SkyrimFogRIFTEN_Thunder_44 - +1769C1 SkyrimFogRIFTEN_45 - +1769C2 SkyrimFogRIFTEN_46 - +1769C3 SkyrimFogRIFTEN_Thunder_45 - +1769C4 SkyrimFogRIFTEN_Thunder_46 - +1769C5 SkyrimFogRIFTEN_47 - +1769C6 SkyrimFogRIFTEN_Thunder_47 - +1769C7 SkyrimFogRIFTEN_48 - +1769C8 SkyrimFogRIFTEN_Thunder_48 - +1769C9 SkyrimFogRIFTENWind - +1794DE SkyrimClear_Coast_52 - +1794DF SkyrimClear_Coast_53 - +1794E0 SkyrimClear_Coast_54 - +1794E1 SkyrimClear_Aurora_Coast_55 - +1794E2 SkyrimClear_Aurora_Coast_56 - +1794E3 SkyrimClear_Coast_57 - +1794E4 SkyrimClear_Coast_58 - +1794E5 SkyrimClear_Coast_59 - +1794E6 SkyrimClear_Coast_60 - +1794E7 SkyrimClear_AuroraPeach_Coast_61 - +1794E8 SkyrimClear_Coast_43 - +1794E9 SkyrimClear_AuroraOverdose_Coast_62 - +1794EA SkyrimClear_Coast_63 - +1794EB SkyrimClear_Coast_64 - +1794EC SkyrimClear_Coast_65 - +1794ED SkyrimClear_Coast_66 - +1794EE SkyrimClear_AuroraOverdose_Coast_67 - +1794EF SkyrimClear_AuroraOverdose_Coast_68 - +1794F0 SkyrimClear_Coast_69 - +1794F1 SkyrimClear_Coast_70 - +1794F2 SkyrimClear_Coast_44 - +1794F3 SkyrimClear_Coast_45 - +1794F4 SkyrimClear_Coast_46 - +1794F5 SkyrimClear_Coast_47 - +1794F8 SkyrimClear_Coast_50 - +1794F9 SkyrimClear_Coast_51 - +179A61 SkyrimClear_Reach_52 - +179A62 SkyrimClear_Reach_53 - +179A63 SkyrimClear_Reach_54 - +179A64 SkyrimClear_Aurora_Reach_55 - +179A65 SkyrimClear_Aurora_Reach_56 - +179A66 SkyrimClear_Reach_57 - +179A67 SkyrimClear_Reach_58 - +179A68 SkyrimClear_Reach_59 - +179A69 SkyrimClear_Reach_60 - +179A6A SkyrimClear_AuroraPeach_Reach_61 - +179A6B SkyrimClear_Reach_43 - +179A6C SkyrimClear_AuroraOverdose_Reach_62 - +179A6D SkyrimClear_Reach_63 - +179A6E SkyrimClear_Reach_64 - +179A6F SkyrimClear_Reach_65 - +179A70 SkyrimClear_Reach_66 - +179A71 SkyrimClear_AuroraOverdose_Reach_67 - +179A72 SkyrimClear_AuroraOverdose_Reach_68 - +179A73 SkyrimClear_Reach_69 - +179A74 SkyrimClear_Reach_70 - +179A75 SkyrimClear_Reach_44 - +179A76 SkyrimClear_Reach_45 - +179A77 SkyrimClear_Reach_46 - +179A78 SkyrimClear_Reach_47 - +179A79 SkyrimClear_Reach_48 - +179A7A SkyrimClear_Reach_49 - +179A7B SkyrimClear_Reach_50 - +179A7C SkyrimClear_Reach_51 - +17A547 SkyrimClear_FallForrest_52 - +17A548 SkyrimClear_FallForrest_53 - +17A549 SkyrimClear_FallForrest_54 - +17A54A SkyrimClear_Aurora_FallForrest_55 - +17A54B SkyrimClear_Aurora_FallForrest_56 - +17A54C SkyrimClear_FallForrest_57 - +17A54D SkyrimClear_FallForrest_58 - +17A54E SkyrimClear_FallForrest_59 - +17A54F SkyrimClear_FallForrest_60 - +17A550 SkyrimClear_AuroraPeach_FallForrest_61 - +17A551 SkyrimClear_FallForrest_43 - +17A552 SkyrimClear_AuroraOverdose_FallForrest_62 - +17A553 SkyrimClear_FallForrest_63 - +17A554 SkyrimClear_FallForrest_64 - +17A555 SkyrimClear_FallForrest_65 - +17A556 SkyrimClear_FallForrest_66 - +17A557 SkyrimClear_AuroraOverdose_FallForrest_67 - +17A558 SkyrimClear_AuroraOverdose_FallForrest_68 - +17A559 SkyrimClear_FallForrest_69 - +17A55A SkyrimClear_FallForrest_70 - +17A55B SkyrimClear_FallForrest_44 - +17A55C SkyrimClear_FallForrest_45 - +17A55D SkyrimClear_FallForrest_46 - +17A55E SkyrimClear_FallForrest_47 - +17A55F SkyrimClear_FallForrest_48 - +17A560 SkyrimClear_FallForrest_49 - +17A561 SkyrimClear_FallForrest_50 - +17A562 SkyrimClear_FallForrest_51 - +17B591 SkyrimClear_Snow_52 - +17B592 SkyrimClear_Snow_53 - +17B593 SkyrimClear_Snow_54 - +17B594 SkyrimClear_Aurora_Snow_55 - +17B595 SkyrimClear_Aurora_Snow_56 - +17B596 SkyrimClear_Snow_57 - +17B597 SkyrimClear_Snow_58 - +17B598 SkyrimClear_Snow_59 - +17B599 SkyrimClear_Snow_60 - +17B59A SkyrimClear_AuroraPeach_Snow_61 - +17B59B SkyrimClear_Snow_43 - +17B59C SkyrimClear_AuroraOverdose_Snow_62 - +17B59D SkyrimClear_Snow_63 - +17B59E SkyrimClear_Snow_64 - +17B59F SkyrimClear_Snow_65 - +17B5A0 SkyrimClear_Snow_66 - +17B5A1 SkyrimClear_AuroraOverdose_Snow_67 - +17B5A2 SkyrimClear_AuroraOverdose_Snow_68 - +17B5A3 SkyrimClear_Snow_69 - +17B5A4 SkyrimClear_Snow_70 - +17B5A5 SkyrimClear_Snow_44 - +17B5A6 SkyrimClear_Snow_45 - +17B5A7 SkyrimClear_Snow_46 - +17B5A8 SkyrimClear_Snow_47 - +17B5A9 SkyrimClear_Snow_48 - +17B5AA SkyrimClear_Snow_49 - +17B5AB SkyrimClear_Snow_50 - +17B5AC SkyrimClear_Snow_51 - +17D5FF SkyrimClear_March_52 - +17D600 SkyrimClear_March_53 - +17D601 SkyrimClear_March_54 - +17D602 SkyrimClear_Aurora_March_55 - +17D603 SkyrimClear_Aurora_March_56 - +17D604 SkyrimClear_March_57 - +17D605 SkyrimClear_March_58 - +17D606 SkyrimClear_March_59 - +17D607 SkyrimClear_March_60 - +17D608 SkyrimClear_AuroraPeach_March_61 - +17D60A SkyrimClear_AuroraOverdose_March_62 - +17D60B SkyrimClear_March_63 - +17D60C SkyrimClear_March_64 - +17D60D SkyrimClear_March_65 - +17D60E SkyrimClear_March_66 - +17D60F SkyrimClear_AuroraOverdose_March_67 - +17D610 SkyrimClear_AuroraOverdose_March_68 - +17D611 SkyrimClear_March_69 - +17D612 SkyrimClear_March_70 - +17D613 SkyrimClear_March_44 - +17D614 SkyrimClear_March_45 - +17D615 SkyrimClear_March_46 - +17D616 SkyrimClear_March_47 - +17D617 SkyrimClear_March_48 - +17D618 SkyrimClear_March_49 - +17D619 SkyrimClear_March_50 - +17D61A SkyrimClear_March_51 - +17DB82 SkyrimClear_March_43 - +17DB83 SkyrimClear_VolTundra_52 - +17DB84 SkyrimClear_VolTundra_53 - +17DB85 SkyrimClear_VolTundra_54 - +17DB86 SkyrimClear_Aurora_VolTundra_55 - +17DB87 SkyrimClear_Aurora_VolTundra_56 - +17DB88 SkyrimClear_VolTundra_57 - +17DB89 SkyrimClear_VolTundra_58 - +17DB8A SkyrimClear_VolTundra_59 - +17DB8B SkyrimClear_VolTundra_60 - +17DB8C SkyrimClear_AuroraPeach_VolTundra_61 - +17DB8D SkyrimClear_VolTundra_43 - +17DB8E SkyrimClear_AuroraOverdose_VolTundra_62 - +17DB8F SkyrimClear_VolTundra_63 - +17DB90 SkyrimClear_VolTundra_64 - +17DB91 SkyrimClear_VolTundra_65 - +17DB92 SkyrimClear_VolTundra_66 - +17DB93 SkyrimClear_AuroraOverdose_VolTundra_67 - +17DB94 SkyrimClear_AuroraOverdose_VolTundra_68 - +17DB95 SkyrimClear_VolTundra_69 - +17DB96 SkyrimClear_VolTundra_70 - +17DB97 SkyrimClear_VolTundra_44 - +17DB98 SkyrimClear_VolTundra_45 - +17DB99 SkyrimClear_VolTundra_46 - +17DB9A SkyrimClear_VolTundra_47 - +17DB9B SkyrimClear_VolTundra_48 - +17DB9C SkyrimClear_VolTundra_49 - +17DB9D SkyrimClear_VolTundra_50 - +17DB9E SkyrimClear_VolTundra_51 - +17EBCB SkyrimCloudy_Tundra_43 - +17EBCC SkyrimCloudy_FallForrest_43 - +17EBCD SkyrimCloudy_Snow_43 - +17EBCE SkyrimCloudy_VolTundra_43 - +17EBCF SkyrimCloudy_Reach_43 - +17EBD0 SkyrimCloudy_Coast_43 - +17EBD1 SkyrimCloudy_Coast_44 - +17EBD2 SkyrimCloudy_FallForrest_44 - +17EBD3 SkyrimCloudy_March_44 - +17EBD4 SkyrimCloudy_Reach_44 - +17EBD5 SkyrimCloudy_Snow_44 - +17EBD6 SkyrimCloudy_Tundra_44 - +17EBD7 SkyrimCloudy_VolTundra_44 - +17EBD8 SkyrimCloudy_Coast_45 - +17EBD9 SkyrimCloudy_FallForrest_45 - +17EBDA SkyrimCloudy_March_45 - +17EBDB SkyrimCloudy_Reach_45 - +17EBDC SkyrimCloudy_Snow_45 - +17EBDD SkyrimCloudy_Tundra_45 - +17EBDE SkyrimCloudy_Coast_46 - +17EBDF SkyrimCloudy_FallForrest_46 - +17EBE0 SkyrimCloudy_March_46 - +17EBE1 SkyrimCloudy_Snow_46 - +17EBE2 SkyrimCloudy_Reach_46 - +17EBE3 SkyrimCloudy_Tundra_46 - +17EBE4 SkyrimCloudy_Coast_47 - +17EBE5 SkyrimCloudy_FallForrest_47 - +17EBE6 SkyrimCloudy_March_47 - +17EBE7 SkyrimCloudy_Reach_47 - +17EBE8 SkyrimCloudy_Snow_47 - +17EBE9 SkyrimCloudy_Tundra_47 - +17EBEA SkyrimCloudy_Coast_48 - +17EBEB SkyrimCloudy_FallForrest_48 - +17EBEC SkyrimCloudy_March_48 - +17EBED SkyrimCloudy_Reach_48 - +17EBEE SkyrimCloudy_Snow_48 - +17EBEF SkyrimCloudy_Tundra_48 - +17EBF0 SkyrimCloudy_Coast_49 - +17EBF1 SkyrimCloudy_FallForrest_49 - +17EBF2 SkyrimCloudy_March_49 - +17EBF3 SkyrimCloudy_Reach_49 - +17EBF4 SkyrimCloudy_Snow_49 - +17EBF5 SkyrimCloudy_Tundra_49 - +17EBF6 SkyrimCloudy_Coast_50 - +17EBF7 SkyrimCloudy_FallForrest_50 - +17EBF8 SkyrimCloudy_March_50 - +17EBF9 SkyrimCloudy_Reach_50 - +17EBFA SkyrimCloudy_Snow_50 - +17EBFB SkyrimCloudy_Tundra_50 - +17EBFC SkyrimCloudy_Coast_51 - +17EBFD SkyrimCloudy_FallForrest_51 - +17EBFE SkyrimCloudy_March_51 - +17EBFF SkyrimCloudy_Reach_51 - +17EC00 SkyrimCloudy_Snow_51 - +17EC01 SkyrimCloudy_Tundra_51 - +17EC02 SkyrimCloudy_Coast_52 - +17EC03 SkyrimCloudy_FallForrest_52 - +17EC04 SkyrimCloudy_March_52 - +17EC05 SkyrimCloudy_Reach_52 - +17EC06 SkyrimCloudy_Snow_52 - +17EC07 SkyrimCloudy_Tundra_52 - +17EC08 SkyrimCloudy_Coast_53 - +17EC09 SkyrimCloudy_FallForrest_53 - +17EC0A SkyrimCloudy_March_53 - +17EC0B SkyrimCloudy_Reach_53 - +17EC0C SkyrimCloudy_Snow_53 - +17EC0D SkyrimCloudy_Tundra_53 - +17EC0E SkyrimCloudy_Coast_54 - +17EC0F SkyrimCloudy_FallForrest_54 - +17EC10 SkyrimCloudy_March_54 - +17EC11 SkyrimCloudy_Reach_54 - +17EC12 SkyrimCloudy_Snow_54 - +17EC13 SkyrimCloudy_Tundra_54 - +17EC14 SkyrimCloudy_Aurora_Coast_55 - +17EC15 SkyrimCloudy_Aurora_FallForrest_55 - +17EC16 SkyrimCloudy_Aurora_March_55 - +17EC17 SkyrimCloudy_Aurora_Reach_55 - +17EC18 SkyrimCloudy_Aurora_Snow_55 - +17EC19 SkyrimCloudy_Aurora_Tundra_55 - +17EC1A SkyrimCloudy_Aurora_Coast_56 - +17EC1B SkyrimCloudy_Aurora_FallForrest_56 - +17EC1C SkyrimCloudy_Aurora_March_56 - +17EC1D SkyrimCloudy_Aurora_Reach_56 - +17EC1E SkyrimCloudy_Aurora_Snow_56 - +17EC1F SkyrimCloudy_Aurora_Tundra_56 - +17EC20 SkyrimCloudy_Coast_57 - +17EC21 SkyrimCloudy_FallForrest_57 - +17EC22 SkyrimCloudy_March_57 - +17EC23 SkyrimCloudy_Reach_57 - +17EC24 SkyrimCloudy_Snow_57 - +17EC25 SkyrimCloudy_Tundra_57 - +17EC26 SkyrimCloudy_Coast_58 - +17EC27 SkyrimCloudy_FallForrest_58 - +17EC28 SkyrimCloudy_March_58 - +17EC29 SkyrimCloudy_Reach_58 - +17EC2A SkyrimCloudy_Snow_58 - +17EC2B SkyrimCloudy_Tundra_58 - +17EC2C SkyrimCloudy_Coast_59 - +17EC2D SkyrimCloudy_FallForrest_59 - +17EC2E SkyrimCloudy_March_59 - +17EC2F SkyrimCloudy_Reach_59 - +17EC30 SkyrimCloudy_Snow_59 - +17EC31 SkyrimCloudy_Tundra_59 - +17EC32 SkyrimCloudy_Coast_60 - +17EC33 SkyrimCloudy_FallForrest_60 - +17EC34 SkyrimCloudy_March_60 - +17EC35 SkyrimCloudy_Reach_60 - +17EC36 SkyrimCloudy_Snow_60 - +17EC37 SkyrimCloudy_Tundra_60 - +17EC38 SkyrimCloudy_Coast_61 - +17EC39 SkyrimCloudy_FallForrest_61 - +17EC3A SkyrimCloudy_March_61 - +17EC3B SkyrimCloudy_Reach_61 - +17EC3C SkyrimCloudy_Snow_61 - +17EC3D SkyrimCloudy_Tundra_61 - +17EC3E SkyrimCloudy_Coast_62 - +17EC3F SkyrimCloudy_FallForrest_62 - +17EC40 SkyrimCloudy_March_62 - +17EC41 SkyrimCloudy_Reach_62 - +17EC42 SkyrimCloudy_Snow_62 - +17EC43 SkyrimCloudy_Tundra_62 - +17EC44 SkyrimCloudy_Coast_63 - +17EC45 SkyrimCloudy_FallForrest_63 - +17EC46 SkyrimCloudy_March_63 - +17EC47 SkyrimCloudy_Reach_63 - +17EC48 SkyrimCloudy_Snow_63 - +17EC49 SkyrimCloudy_Tundra_63 - +17EC4A SkyrimCloudy_Coast_64 - +17EC4B SkyrimCloudy_FallForrest_64 - +17EC4C SkyrimCloudy_March_64 - +17EC4D SkyrimCloudy_Reach_64 - +17EC4E SkyrimCloudy_Snow_64 - +17EC4F SkyrimCloudy_Tundra_64 - +17EC50 SkyrimCloudy_Coast_65 - +17EC51 SkyrimCloudy_FallForrest_65 - +17EC52 SkyrimCloudy_March_65 - +17EC53 SkyrimCloudy_Reach_65 - +17EC54 SkyrimCloudy_Snow_65 - +17EC55 SkyrimCloudy_Tundra_65 - +17EC56 SkyrimCloudy_Coast_66 - +17EC57 SkyrimCloudy_FallForrest_66 - +17EC58 SkyrimCloudy_March_66 - +17EC59 SkyrimCloudy_Reach_66 - +17EC5A SkyrimCloudy_Snow_66 - +17EC5B SkyrimCloudy_Tundra_66 - +17EC5C SkyrimCloudy_AuroraPeach_Coast_67 - +17EC5D SkyrimCloudy_AuroraPeach_FallForrest_67 - +17EC5E SkyrimCloudy_AuroraPeach_March_67 - +17EC5F SkyrimCloudy_AuroraPeach_Reach_67 - +17EC60 SkyrimCloudy_AuroraPeach_Snow_67 - +17EC61 SkyrimCloudy_AuroraPeach_Tundra_67 - +17EC62 SkyrimCloudy_AuroraPeach_VolTundra_67 - +17EC63 SkyrimCloudy_AuroraMental_Coast_68 - +17EC64 SkyrimCloudy_AuroraMental_FallForrest_68 - +17EC65 SkyrimCloudy_AuroraMental_March_68 - +17EC66 SkyrimCloudy_AuroraMental_Reach_68 - +17EC67 SkyrimCloudy_AuroraMental_Snow_68 - +17EC68 SkyrimCloudy_AuroraMental_Tundra_68 - +17EC69 SkyrimCloudy_AuroraMental_Coast_69 - +17EC6A SkyrimCloudy_AuroraMental_FallForrest_69 - +17EC6B SkyrimCloudy_AuroraMental_March_69 - +17EC6C SkyrimCloudy_AuroraMental_Reach_69 - +17EC6D SkyrimCloudy_AuroraMental_Snow_69 - +17EC6E SkyrimCloudy_AuroraMental_Tundra_69 - +17EC6F SkyrimCloudy_AuroraMental_Coast_70 - +17EC70 SkyrimCloudy_AuroraMental_FallForrest_70 - +17EC71 SkyrimCloudy_AuroraMental_March_70 - +17EC72 SkyrimCloudy_AuroraMental_Reach_70 - +17EC73 SkyrimCloudy_AuroraMental_Snow_70 - +17EC74 SkyrimCloudy_AuroraMental_Tundra_70 - +187DD3 SkyrimOC_Storm_ANWE - +18BE6D SkyrimOC_Storm_ANWE2 - +18BE6E SkyrimOC_Storm_ALWE - +18BE70 SkyrimSnowBlizzard_Swirl - +18F9AF SkyrimSnowBlizzard_Down_NoFog - +18FDAF DLC2VividAshBlizzard - +18FDB0 DLC2VividAshFall - +194EB6 FXVampireAttack -