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