MariENB Skyrim 2.6.0
|
|
@ -546,22 +546,22 @@ MoonDesaturationInteriorDay=0.35
|
||||||
MoonDesaturationInteriorNight=0.14
|
MoonDesaturationInteriorNight=0.14
|
||||||
[OBJECT]
|
[OBJECT]
|
||||||
IgnoreWeatherSystem=true
|
IgnoreWeatherSystem=true
|
||||||
SubSurfaceScatteringMultiplierDawn=0.0
|
SubSurfaceScatteringMultiplierDawn=0.86
|
||||||
SubSurfaceScatteringMultiplierSunrise=0.0
|
SubSurfaceScatteringMultiplierSunrise=0.81
|
||||||
SubSurfaceScatteringMultiplierDay=0.0
|
SubSurfaceScatteringMultiplierDay=0.76
|
||||||
SubSurfaceScatteringMultiplierSunset=0.0
|
SubSurfaceScatteringMultiplierSunset=0.82
|
||||||
SubSurfaceScatteringMultiplierDusk=0.0
|
SubSurfaceScatteringMultiplierDusk=0.87
|
||||||
SubSurfaceScatteringMultiplierNight=0.0
|
SubSurfaceScatteringMultiplierNight=0.91
|
||||||
SubSurfaceScatteringMultiplierInteriorDay=0.0
|
SubSurfaceScatteringMultiplierInteriorDay=0.78
|
||||||
SubSurfaceScatteringMultiplierInteriorNight=0.0
|
SubSurfaceScatteringMultiplierInteriorNight=0.93
|
||||||
SubSurfaceScatteringPowerDawn=1.0
|
SubSurfaceScatteringPowerDawn=1.71
|
||||||
SubSurfaceScatteringPowerSunrise=1.0
|
SubSurfaceScatteringPowerSunrise=1.61
|
||||||
SubSurfaceScatteringPowerDay=1.0
|
SubSurfaceScatteringPowerDay=1.55
|
||||||
SubSurfaceScatteringPowerSunset=1.0
|
SubSurfaceScatteringPowerSunset=1.62
|
||||||
SubSurfaceScatteringPowerDusk=1.0
|
SubSurfaceScatteringPowerDusk=1.75
|
||||||
SubSurfaceScatteringPowerNight=1.0
|
SubSurfaceScatteringPowerNight=1.85
|
||||||
SubSurfaceScatteringPowerInteriorDay=1.0
|
SubSurfaceScatteringPowerInteriorDay=1.47
|
||||||
SubSurfaceScatteringPowerInteriorNight=1.0
|
SubSurfaceScatteringPowerInteriorNight=1.92
|
||||||
SpecularAmountMultiplierDawn=1.32
|
SpecularAmountMultiplierDawn=1.32
|
||||||
SpecularAmountMultiplierSunrise=1.18
|
SpecularAmountMultiplierSunrise=1.18
|
||||||
SpecularAmountMultiplierDay=1.08
|
SpecularAmountMultiplierDay=1.08
|
||||||
|
|
@ -575,7 +575,7 @@ SpecularPowerMultiplierSunrise=1.15
|
||||||
SpecularPowerMultiplierDay=1.12
|
SpecularPowerMultiplierDay=1.12
|
||||||
SpecularPowerMultiplierSunset=1.19
|
SpecularPowerMultiplierSunset=1.19
|
||||||
SpecularPowerMultiplierDusk=1.25
|
SpecularPowerMultiplierDusk=1.25
|
||||||
SpecularPowerMultiplierNight=1.43
|
SpecularPowerMultiplierNight=1.44
|
||||||
SpecularPowerMultiplierInteriorDay=1.18
|
SpecularPowerMultiplierInteriorDay=1.18
|
||||||
SpecularPowerMultiplierInteriorNight=1.52
|
SpecularPowerMultiplierInteriorNight=1.52
|
||||||
[VEGETATION]
|
[VEGETATION]
|
||||||
|
|
@ -614,22 +614,22 @@ SpecularPowerMultiplierInteriorDay=1.18
|
||||||
SpecularPowerMultiplierInteriorNight=0.84
|
SpecularPowerMultiplierInteriorNight=0.84
|
||||||
[EYES]
|
[EYES]
|
||||||
IgnoreWeatherSystem=true
|
IgnoreWeatherSystem=true
|
||||||
SubSurfaceScatteringMultiplierDawn=0.0
|
SubSurfaceScatteringMultiplierDawn=1.74
|
||||||
SubSurfaceScatteringMultiplierSunrise=0.0
|
SubSurfaceScatteringMultiplierSunrise=1.55
|
||||||
SubSurfaceScatteringMultiplierDay=0.0
|
SubSurfaceScatteringMultiplierDay=1.31
|
||||||
SubSurfaceScatteringMultiplierSunset=0.0
|
SubSurfaceScatteringMultiplierSunset=1.56
|
||||||
SubSurfaceScatteringMultiplierDusk=0.0
|
SubSurfaceScatteringMultiplierDusk=1.75
|
||||||
SubSurfaceScatteringMultiplierNight=0.0
|
SubSurfaceScatteringMultiplierNight=1.88
|
||||||
SubSurfaceScatteringMultiplierInteriorDay=0.0
|
SubSurfaceScatteringMultiplierInteriorDay=1.27
|
||||||
SubSurfaceScatteringMultiplierInteriorNight=0.0
|
SubSurfaceScatteringMultiplierInteriorNight=1.92
|
||||||
SubSurfaceScatteringPowerDawn=1.0
|
SubSurfaceScatteringPowerDawn=1.29
|
||||||
SubSurfaceScatteringPowerSunrise=1.0
|
SubSurfaceScatteringPowerSunrise=1.17
|
||||||
SubSurfaceScatteringPowerDay=1.0
|
SubSurfaceScatteringPowerDay=1.11
|
||||||
SubSurfaceScatteringPowerSunset=1.0
|
SubSurfaceScatteringPowerSunset=1.18
|
||||||
SubSurfaceScatteringPowerDusk=1.0
|
SubSurfaceScatteringPowerDusk=1.26
|
||||||
SubSurfaceScatteringPowerNight=1.0
|
SubSurfaceScatteringPowerNight=1.38
|
||||||
SubSurfaceScatteringPowerInteriorDay=1.0
|
SubSurfaceScatteringPowerInteriorDay=1.12
|
||||||
SubSurfaceScatteringPowerInteriorNight=1.0
|
SubSurfaceScatteringPowerInteriorNight=1.41
|
||||||
SpecularAmountMultiplierDawn=1.49
|
SpecularAmountMultiplierDawn=1.49
|
||||||
SpecularAmountMultiplierSunrise=1.39
|
SpecularAmountMultiplierSunrise=1.39
|
||||||
SpecularAmountMultiplierDay=1.32
|
SpecularAmountMultiplierDay=1.32
|
||||||
|
|
@ -832,15 +832,15 @@ MotionTransparency=0.6
|
||||||
IgnoreWeatherSystem=true
|
IgnoreWeatherSystem=true
|
||||||
Quality=1
|
Quality=1
|
||||||
Radius=7.64
|
Radius=7.64
|
||||||
Amount=0.36
|
Amount=0.69
|
||||||
EpidermalAmount=0.73
|
EpidermalAmount=1.47
|
||||||
SubdermalAmount=1.55
|
SubdermalAmount=1.86
|
||||||
EpidermalDiffuseSaturation=0.64
|
EpidermalDiffuseSaturation=-0.18
|
||||||
SubdermalDiffuseSaturation=0.74
|
SubdermalDiffuseSaturation=0.21
|
||||||
EpidermalMix=0.18
|
EpidermalMix=0.66
|
||||||
SubdermalMix=0.56
|
SubdermalMix=0.51
|
||||||
SubdermalTranslucency=0.73
|
SubdermalTranslucency=0.75
|
||||||
SubdermalPhase=0.53
|
SubdermalPhase=0.71
|
||||||
EnableTextureAlpha=true
|
EnableTextureAlpha=true
|
||||||
[WATER]
|
[WATER]
|
||||||
IgnoreWeatherSystem=true
|
IgnoreWeatherSystem=true
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
2.5.1sk "Alone In The Prepass"
|
2.6.0sk "Suddenly Volumes"
|
||||||
|
|
|
||||||
|
|
@ -45,3 +45,26 @@ Border Blur Contrast=2.25
|
||||||
Border Blur Intensity=1.52
|
Border Blur Intensity=1.52
|
||||||
Border Blur Shift=0.0
|
Border Blur Shift=0.0
|
||||||
Border Blur Radius=1.0
|
Border Blur Radius=1.0
|
||||||
|
Enable Oil=false
|
||||||
|
Oil Radius=1.0
|
||||||
|
Oil Smoothing Radius=1.0
|
||||||
|
Enable ASCII=false
|
||||||
|
ASCII Monochrome=true
|
||||||
|
ASCII Blend=0.0
|
||||||
|
Enable Dot Matrix=false
|
||||||
|
Dot Size=1
|
||||||
|
Dot Blend=0.4
|
||||||
|
Dot Intensity=2.41
|
||||||
|
Dot Contrast=1.25
|
||||||
|
Enable Curvature=false
|
||||||
|
Curve Chromatic Aberration=0.62
|
||||||
|
Curve Zooming=50.34
|
||||||
|
Curve Distortion=0.0
|
||||||
|
Selected Filter=1
|
||||||
|
Van Gogh Sky=false
|
||||||
|
Van Gogh Animation Speed=0.0
|
||||||
|
Enable Oil Filter=false
|
||||||
|
Enable FXAA=false
|
||||||
|
FXAA Span Max=4.0
|
||||||
|
FXAA Reduce Mul=16.0
|
||||||
|
FXAA Reduce Min=128.0
|
||||||
|
|
|
||||||
|
|
@ -2,13 +2,13 @@
|
||||||
TECHNIQUE=0
|
TECHNIQUE=0
|
||||||
Fixed Resolution Width=1920
|
Fixed Resolution Width=1920
|
||||||
Fixed Resolution Height=1080
|
Fixed Resolution Height=1080
|
||||||
Distortion Chromatic Aberration=41.52
|
Distortion Chromatic Aberration=15.980001
|
||||||
Enable Screen Frost=true
|
Enable Screen Frost=true
|
||||||
Frost Contrast=1.22
|
Frost Contrast=1.22
|
||||||
Frost Strength=0.19
|
Frost Strength=0.19
|
||||||
Frost Radial Contrast=1.17
|
Frost Radial Contrast=1.17
|
||||||
Frost Radial Intensity=0.87
|
Frost Radial Intensity=0.87
|
||||||
Frost Radial Offset=-0.71
|
Frost Radial Offset=-0.96
|
||||||
Frost Texture Blend=1.51
|
Frost Texture Blend=1.51
|
||||||
Frost Texture Blend Contrast=6.51
|
Frost Texture Blend Contrast=6.51
|
||||||
Frost Texture Size=0.8
|
Frost Texture Size=0.8
|
||||||
|
|
@ -194,3 +194,9 @@ Technicolor Blend=0.6
|
||||||
Enable Post Dither=true
|
Enable Post Dither=true
|
||||||
Dither Pattern=2
|
Dither Pattern=2
|
||||||
Display Bloom=false
|
Display Bloom=false
|
||||||
|
Enable Dirt=false
|
||||||
|
Dirt Factor=0.35
|
||||||
|
Dirt Coord Factor=0.34
|
||||||
|
Dirt Luminance Factor=-0.37
|
||||||
|
Dirt Coord Zoom=3.38
|
||||||
|
Dirt Luminance Zoom=1.19
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ Heat Fade Intensity=1.09
|
||||||
Heat Fade Offset=-0.78
|
Heat Fade Offset=-0.78
|
||||||
Heat Intensity=0.18
|
Heat Intensity=0.18
|
||||||
Heat Contrast=1.0
|
Heat Contrast=1.0
|
||||||
Heat Factor Night=0.0
|
Heat Factor Night=-0.58
|
||||||
Heat Factor Day=1.15
|
Heat Factor Day=1.15
|
||||||
Heat Factor Interior Night=0.0
|
Heat Factor Interior Night=-0.47
|
||||||
Heat Factor Interior Day=0.52
|
Heat Factor Interior Day=0.52
|
||||||
Heat Always Enable=false
|
Heat Always Enable=false
|
||||||
Enable Edgevision=false
|
Enable Edgevision=false
|
||||||
|
|
@ -24,24 +24,24 @@ Edgevision Fade Contrast Night=1.82
|
||||||
Edgevision Fade Contrast Day=1.86
|
Edgevision Fade Contrast Day=1.86
|
||||||
Edgevision Fade Contrast Interior Night=2.9
|
Edgevision Fade Contrast Interior Night=2.9
|
||||||
Edgevision Fade Contrast Interior Day=3.0
|
Edgevision Fade Contrast Interior Day=3.0
|
||||||
Edgevision Fade Intensity Night=700.0
|
Edgevision Fade Intensity Night=692.630005
|
||||||
Edgevision Fade Intensity Day=800.0
|
Edgevision Fade Intensity Day=793.580017
|
||||||
Edgevision Fade Intensity Interior Night=500.0
|
Edgevision Fade Intensity Interior Night=484.679993
|
||||||
Edgevision Fade Intensity Interior Day=600.0
|
Edgevision Fade Intensity Interior Day=590.840027
|
||||||
Edgevision Contrast=0.25
|
Edgevision Contrast=0.25
|
||||||
Edgevision Intensity=8.0
|
Edgevision Intensity=8.0
|
||||||
Edgevision Radius=1.0
|
Edgevision Radius=1.0
|
||||||
Enable SSAO=false
|
Enable SSAO=false
|
||||||
SSAO Radius=0.05
|
SSAO Radius=0.05
|
||||||
SSAO Noise=0
|
SSAO Noise=0
|
||||||
SSAO Fade Contrast Night=0.46
|
SSAO Fade Contrast Night=0.97
|
||||||
SSAO Fade Contrast Day=0.41
|
SSAO Fade Contrast Day=0.93
|
||||||
SSAO Fade Contrast Interior Night=0.58
|
SSAO Fade Contrast Interior Night=0.98
|
||||||
SSAO Fade Contrast Interior Day=0.53
|
SSAO Fade Contrast Interior Day=0.94
|
||||||
SSAO Fade Intensity Night=1.27
|
SSAO Fade Intensity Night=631.659973
|
||||||
SSAO Fade Intensity Day=1.08
|
SSAO Fade Intensity Day=716.929993
|
||||||
SSAO Fade Intensity Interior Night=1.3
|
SSAO Fade Intensity Interior Night=481.650024
|
||||||
SSAO Fade Intensity Interior Day=1.05
|
SSAO Fade Intensity Interior Day=573.030029
|
||||||
SSAO Intensity=1.25
|
SSAO Intensity=1.25
|
||||||
SSAO Contrast=0.65
|
SSAO Contrast=0.65
|
||||||
SSAO Blending=0.8
|
SSAO Blending=0.8
|
||||||
|
|
@ -132,3 +132,56 @@ Grading Value Contrast Day=0.78
|
||||||
Grading Value Contrast Interior Night=0.58
|
Grading Value Contrast Interior Night=0.58
|
||||||
Grading Value Contrast Interior Day=0.64
|
Grading Value Contrast Interior Day=0.64
|
||||||
Colorize After HSV=true
|
Colorize After HSV=true
|
||||||
|
Invert Edgevision=false
|
||||||
|
Enable Edge Detect=false
|
||||||
|
Edge Detect Contrast=0.85
|
||||||
|
Edge Detect Intensity=0.25
|
||||||
|
Edge Detect Radius=1.0
|
||||||
|
Invert Edge Detect=false
|
||||||
|
Enable Linevision=false
|
||||||
|
Linevision Fade Contrast Night=1.24
|
||||||
|
Linevision Fade Contrast Day=1.12
|
||||||
|
Linevision Fade Contrast Interior Night=1.41
|
||||||
|
Linevision Fade Contrast Interior Day=1.33
|
||||||
|
Linevision Fade Intensity Night=692.630005
|
||||||
|
Linevision Fade Intensity Day=793.580017
|
||||||
|
Linevision Fade Intensity Interior Night=484.679993
|
||||||
|
Linevision Fade Intensity Interior Day=590.840027
|
||||||
|
Linevision Contrast=1.0
|
||||||
|
Linevision Intensity=1.0
|
||||||
|
Linevision Radius=1.0
|
||||||
|
Linevision Threshold=0.1
|
||||||
|
Invert Linevision=false
|
||||||
|
Enable Spooky Fog=false
|
||||||
|
Limbo Contrast=0.65
|
||||||
|
Limbo Intensity=10.0
|
||||||
|
Enable Cardboard=false
|
||||||
|
Cardboard Fade Contrast Night=1.82
|
||||||
|
Cardboard Fade Contrast Day=1.86
|
||||||
|
Cardboard Fade Contrast Interior Night=2.9
|
||||||
|
Cardboard Fade Contrast Interior Day=3.0
|
||||||
|
Cardboard Fade Intensity Night=700.0
|
||||||
|
Cardboard Fade Intensity Day=800.0
|
||||||
|
Cardboard Fade Intensity Interior Night=500.0
|
||||||
|
Cardboard Fade Intensity Interior Day=600.0
|
||||||
|
Cardboard Contrast=1.0
|
||||||
|
Cardboard Intensity=1.0
|
||||||
|
Invert Cardboard=false
|
||||||
|
Blend Edgevision=false
|
||||||
|
Blend Edge Detect=false
|
||||||
|
Blend Linevision=false
|
||||||
|
Limbo ColorX=1.0
|
||||||
|
Limbo ColorY=1.0
|
||||||
|
Limbo ColorZ=1.0
|
||||||
|
Blend Limbo=false
|
||||||
|
Enable Custom Fog=false
|
||||||
|
Fog Contrast=1.0
|
||||||
|
Fog Intensity=1.0
|
||||||
|
Fog Shift=0.0
|
||||||
|
Fog ColorX=1.0
|
||||||
|
Fog ColorY=1.0
|
||||||
|
Fog ColorZ=1.0
|
||||||
|
Limbo Mode=false
|
||||||
|
SSAO Shift=-0.25
|
||||||
|
Debug Mask Texture=-1
|
||||||
|
Debug Test=-1
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ texture2D texColor;
|
||||||
texture2D texDepth;
|
texture2D texDepth;
|
||||||
texture2D texNoise3
|
texture2D texNoise3
|
||||||
<
|
<
|
||||||
string ResourceName = "menbnoise2.png";
|
string ResourceName = "menbnoise3.png";
|
||||||
>;
|
>;
|
||||||
texture2D texFocus;
|
texture2D texFocus;
|
||||||
texture2D texCurr;
|
texture2D texCurr;
|
||||||
|
|
|
||||||
BIN
enbseries/menbdots.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
|
|
@ -331,12 +331,18 @@ float3 GradingGame( float3 res )
|
||||||
/* LUT colour grading */
|
/* LUT colour grading */
|
||||||
float3 GradingLUT( float3 res )
|
float3 GradingLUT( float3 res )
|
||||||
{
|
{
|
||||||
|
#ifdef VOLUME_LUTS
|
||||||
/*
|
/*
|
||||||
Gross hacks were needed to "fix" the way direct3d interpolates on
|
volume maps are SO MUCH BETTER on the shader side, no ugly
|
||||||
sampling, and to manually interpolate on the blue channel.
|
interpolation hacks are needed to work around sampling quirks,
|
||||||
This could be removed if I could have the LUTs as volume maps, but
|
and the code is EXTREMELY simplified as a result
|
||||||
I think ENB doesn't support those.
|
|
||||||
*/
|
*/
|
||||||
|
float3 tcl_n = tex3D(SamplerLUTN,res).rgb;
|
||||||
|
float3 tcl_d = tex3D(SamplerLUTD,res).rgb;
|
||||||
|
float3 tcl_in = tex3D(SamplerLUTIN,res).rgb;
|
||||||
|
float3 tcl_id = tex3D(SamplerLUTID,res).rgb;
|
||||||
|
float3 tcol = tod_ind(tcl);
|
||||||
|
#else
|
||||||
#ifdef LUTMODE_LEGACY
|
#ifdef LUTMODE_LEGACY
|
||||||
float3 tcol = clamp(res,0.08,0.92);
|
float3 tcol = clamp(res,0.08,0.92);
|
||||||
tcol.rg = tcol.rg*0.5+0.25;
|
tcol.rg = tcol.rg*0.5+0.25;
|
||||||
|
|
@ -386,6 +392,7 @@ float3 GradingLUT( float3 res )
|
||||||
float3 tcl1 = tod_ind(tcl1);
|
float3 tcl1 = tod_ind(tcl1);
|
||||||
float3 tcl2 = tod_ind(tcl2);
|
float3 tcl2 = tod_ind(tcl2);
|
||||||
tcol = lerp(tcl1,tcl2,dec);
|
tcol = lerp(tcl1,tcl2,dec);
|
||||||
|
#endif
|
||||||
float lutblend = tod_ind(lutblend);
|
float lutblend = tod_ind(lutblend);
|
||||||
return lerp(res,tcol,lutblend);
|
return lerp(res,tcol,lutblend);
|
||||||
}
|
}
|
||||||
|
|
@ -479,6 +486,19 @@ float2 ScreenFrost( float2 coord )
|
||||||
ofs *= clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0,1.0);
|
ofs *= clamp(pow(dist,frostrpow)*frostrmult+frostrbump,0.0,1.0);
|
||||||
return coord+ofs;
|
return coord+ofs;
|
||||||
}
|
}
|
||||||
|
/* Old MariENB 0.x screen dirt filter, updated */
|
||||||
|
float3 ScreenDirt( float3 res, float2 coord )
|
||||||
|
{
|
||||||
|
float2 nr = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w)/256.0;
|
||||||
|
float3 ncolc = tex2D(SamplerNoise1,coord*dirtmc*nr).rgb;
|
||||||
|
float2 ds = float2(res.r+res.g,res.g+res.b)/2.0;
|
||||||
|
float3 ncoll = tex2D(SamplerNoise1,ds*dirtml).rgb;
|
||||||
|
res = lerp(res,(ncolc.r+1.0)*res,dirtcfactor
|
||||||
|
*saturate(1.0-(ds.x+ds.y)*0.25));
|
||||||
|
res = lerp(res,(ncoll.r+1.0)*res,dirtlfactor
|
||||||
|
*saturate(1.0-(ds.x+ds.y)*0.25));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
/* MariENB shader */
|
/* MariENB shader */
|
||||||
float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
{
|
{
|
||||||
|
|
@ -529,6 +549,7 @@ float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
res.rgb += bcol;
|
res.rgb += bcol;
|
||||||
if ( aenable ) res.rgb = Adaptation(res.rgb);
|
if ( aenable ) res.rgb = Adaptation(res.rgb);
|
||||||
if ( nbt && ne ) res.rgb = FilmGrain(res.rgb,coord);
|
if ( nbt && ne ) res.rgb = FilmGrain(res.rgb,coord);
|
||||||
|
if ( dirtenable ) res.rgb = ScreenDirt(res.rgb,coord);
|
||||||
res.rgb = Tonemap(res.rgb);
|
res.rgb = Tonemap(res.rgb);
|
||||||
if ( vgradeenable ) res.rgb = GradingGame(res.rgb);
|
if ( vgradeenable ) res.rgb = GradingGame(res.rgb);
|
||||||
if ( gradeenable1 ) res.rgb = GradingRGB(res.rgb);
|
if ( gradeenable1 ) res.rgb = GradingRGB(res.rgb);
|
||||||
|
|
|
||||||
|
|
@ -48,14 +48,56 @@ texture2D texs2;
|
||||||
texture2D texs3;
|
texture2D texs3;
|
||||||
texture2D texs4;
|
texture2D texs4;
|
||||||
texture2D texs7;
|
texture2D texs7;
|
||||||
texture2D texNoise2
|
texture2D texNoise1
|
||||||
<
|
<
|
||||||
string ResourceName = "menbnoise1.png";
|
string ResourceName = "menbnoise1.png";
|
||||||
>;
|
>;
|
||||||
texture2D texNoise3
|
texture2D texNoise2
|
||||||
<
|
<
|
||||||
string ResourceName = "menbnoise2.png";
|
string ResourceName = "menbnoise2.png";
|
||||||
>;
|
>;
|
||||||
|
texture2D texNoise3
|
||||||
|
<
|
||||||
|
string ResourceName = "menbnoise3.png";
|
||||||
|
>;
|
||||||
|
#ifdef VOLUME_LUTS
|
||||||
|
texture3D texLUTN
|
||||||
|
<
|
||||||
|
#ifdef LUTMODE_16
|
||||||
|
string ResourceName = "menblut16v_night.dds";
|
||||||
|
#endif
|
||||||
|
#ifdef LUTMODE_64
|
||||||
|
string ResourceName = "menblut64v_night.dds";
|
||||||
|
#endif
|
||||||
|
>;
|
||||||
|
texture3D texLUTD
|
||||||
|
<
|
||||||
|
#ifdef LUTMODE_16
|
||||||
|
string ResourceName = "menblut16v_day.dds";
|
||||||
|
#endif
|
||||||
|
#ifdef LUTMODE_64
|
||||||
|
string ResourceName = "menblut64v_day.dds";
|
||||||
|
#endif
|
||||||
|
>;
|
||||||
|
texture3D texLUTIN
|
||||||
|
<
|
||||||
|
#ifdef LUTMODE_16
|
||||||
|
string ResourceName = "menblut16v_interiornight.dds";
|
||||||
|
#endif
|
||||||
|
#ifdef LUTMODE_64
|
||||||
|
string ResourceName = "menblut64v_interiornight.dds";
|
||||||
|
#endif
|
||||||
|
>;
|
||||||
|
texture3D texLUTID
|
||||||
|
<
|
||||||
|
#ifdef LUTMODE_16
|
||||||
|
string ResourceName = "menblut16v_interiorday.dds";
|
||||||
|
#endif
|
||||||
|
#ifdef LUTMODE_64
|
||||||
|
string ResourceName = "menblut64v_interiorday.dds";
|
||||||
|
#endif
|
||||||
|
>;
|
||||||
|
#else
|
||||||
#ifdef LUTMODE_LEGACY
|
#ifdef LUTMODE_LEGACY
|
||||||
texture2D texLUT
|
texture2D texLUT
|
||||||
<
|
<
|
||||||
|
|
@ -99,6 +141,7 @@ texture2D texLUTID
|
||||||
#endif
|
#endif
|
||||||
>;
|
>;
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
texture2D texTonemap
|
texture2D texTonemap
|
||||||
<
|
<
|
||||||
string ResourceName = "menbfilmlut.png";
|
string ResourceName = "menbfilmlut.png";
|
||||||
|
|
@ -183,6 +226,18 @@ sampler2D _s7 = sampler_state
|
||||||
MaxMipLevel = 0;
|
MaxMipLevel = 0;
|
||||||
MipMapLodBias = 0;
|
MipMapLodBias = 0;
|
||||||
};
|
};
|
||||||
|
sampler2D SamplerNoise1 = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texNoise1>;
|
||||||
|
MinFilter = POINT;
|
||||||
|
MagFilter = POINT;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Wrap;
|
||||||
|
AddressV = Wrap;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
sampler2D SamplerNoise2 = sampler_state
|
sampler2D SamplerNoise2 = sampler_state
|
||||||
{
|
{
|
||||||
Texture = <texNoise2>;
|
Texture = <texNoise2>;
|
||||||
|
|
@ -207,6 +262,60 @@ sampler2D SamplerNoise3 = sampler_state
|
||||||
MaxMipLevel = 0;
|
MaxMipLevel = 0;
|
||||||
MipMapLodBias = 0;
|
MipMapLodBias = 0;
|
||||||
};
|
};
|
||||||
|
#ifdef VOLUME_LUTS
|
||||||
|
sampler3D SamplerLUTN = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texLUTN>;
|
||||||
|
MinFilter = LINEAR;
|
||||||
|
MagFilter = LINEAR;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Clamp;
|
||||||
|
AddressV = Clamp;
|
||||||
|
AddressW = Clamp;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
|
sampler3D SamplerLUTD = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texLUTD>;
|
||||||
|
MinFilter = LINEAR;
|
||||||
|
MagFilter = LINEAR;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Clamp;
|
||||||
|
AddressV = Clamp;
|
||||||
|
AddressW = Clamp;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
|
sampler3D SamplerLUTIN = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texLUTIN>;
|
||||||
|
MinFilter = LINEAR;
|
||||||
|
MagFilter = LINEAR;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Clamp;
|
||||||
|
AddressV = Clamp;
|
||||||
|
AddressW = Clamp;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
|
sampler3D SamplerLUTID = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texLUTID>;
|
||||||
|
MinFilter = LINEAR;
|
||||||
|
MagFilter = LINEAR;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Clamp;
|
||||||
|
AddressV = Clamp;
|
||||||
|
AddressW = Clamp;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
|
#else
|
||||||
#ifdef LUTMODE_LEGACY
|
#ifdef LUTMODE_LEGACY
|
||||||
sampler2D SamplerLUT = sampler_state
|
sampler2D SamplerLUT = sampler_state
|
||||||
{
|
{
|
||||||
|
|
@ -270,6 +379,7 @@ sampler2D SamplerLUTID = sampler_state
|
||||||
MipMapLodBias = 0;
|
MipMapLodBias = 0;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
sampler2D SamplerTonemap = sampler_state
|
sampler2D SamplerTonemap = sampler_state
|
||||||
{
|
{
|
||||||
Texture = <texTonemap>;
|
Texture = <texTonemap>;
|
||||||
|
|
|
||||||
|
|
@ -217,6 +217,33 @@ bool nbt
|
||||||
string UIName = "Apply Grain Before Tone Mapping";
|
string UIName = "Apply Grain Before Tone Mapping";
|
||||||
string UIWidget = "Checkbox";
|
string UIWidget = "Checkbox";
|
||||||
> = {true};
|
> = {true};
|
||||||
|
/* old dirt filter */
|
||||||
|
string str_dirt = "Screen Dirt";
|
||||||
|
bool dirtenable
|
||||||
|
<
|
||||||
|
string UIName = "Enable Dirt";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
float dirtcfactor
|
||||||
|
<
|
||||||
|
string UIName = "Dirt Coord Factor";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {0.1};
|
||||||
|
float dirtlfactor
|
||||||
|
<
|
||||||
|
string UIName = "Dirt Luminance Factor";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {0.0};
|
||||||
|
float dirtmc
|
||||||
|
<
|
||||||
|
string UIName = "Dirt Coord Zoom";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {3.0};
|
||||||
|
float dirtml
|
||||||
|
<
|
||||||
|
string UIName = "Dirt Luminance Zoom";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {1.0};
|
||||||
/* "adaptation" factors */
|
/* "adaptation" factors */
|
||||||
string str_adaptation = "Eye Adaptation";
|
string str_adaptation = "Eye Adaptation";
|
||||||
bool aenable
|
bool aenable
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ float3 hsv2rgb( float3 c )
|
||||||
/* prepass */
|
/* prepass */
|
||||||
float4 ReducePrepass( in float4 col, in float2 coord )
|
float4 ReducePrepass( in float4 col, in float2 coord )
|
||||||
{
|
{
|
||||||
float3 hsv = rgb2hsv(col);
|
float3 hsv = rgb2hsv(col.rgb);
|
||||||
hsv.y = clamp(hsv.y*bsaturation,0.0,1.0);
|
hsv.y = clamp(hsv.y*bsaturation,0.0,1.0);
|
||||||
hsv.z = pow(max(0,hsv.z),bgamma);
|
hsv.z = pow(max(0,hsv.z),bgamma);
|
||||||
col.rgb = hsv2rgb(saturate(hsv));
|
col.rgb = hsv2rgb(saturate(hsv));
|
||||||
|
|
@ -133,6 +133,40 @@ float4 PS_Retro( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
res.a = 1.0;
|
res.a = 1.0;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
/* ASCII art (more like CP437 art) */
|
||||||
|
float4 PS_ASCII( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = IN.txcoord.xy;
|
||||||
|
float4 res = tex2D(SamplerColor,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 = tex2D(SamplerColor,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 = tex2D(SamplerFont,ofs).x;
|
||||||
|
if ( gch < 0.5 ) res.rgb = res.rgb*asciiblend;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ( asciimono ) res.rgb = 1.0;
|
||||||
|
else res.rgb = col;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
float4 PS_ChromaKey( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
float4 PS_ChromaKey( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
{
|
{
|
||||||
float2 coord = IN.txcoord.xy;
|
float2 coord = IN.txcoord.xy;
|
||||||
|
|
@ -146,6 +180,69 @@ float4 PS_ChromaKey( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
return float4(maskr,maskg,maskb,1.0);
|
return float4(maskr,maskg,maskb,1.0);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
/* 2x2 RGBI dot matrix, not even close to anything that exists IRL but meh */
|
||||||
|
float4 PS_DotMatrix( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = IN.txcoord.xy;
|
||||||
|
float4 res = tex2D(SamplerColor,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 = tex2D(SamplerDots,coord*bresl)*dac;
|
||||||
|
float3 tcol = pow(max(0,dots.rgb+dots.a),dotpow)*dotmult;
|
||||||
|
res.rgb = res.rgb*(1-dotblend)+tcol*dotblend;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
/* that's right, CRT curvature */
|
||||||
|
float4 PS_Curvature( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = IN.txcoord.xy;
|
||||||
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
|
if ( !curveenable ) return res;
|
||||||
|
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;
|
||||||
|
float3 idist = float3(tex2D(SamplerColorb,rcoord).r,
|
||||||
|
tex2D(SamplerColorb,gcoord).g,
|
||||||
|
tex2D(SamplerColorb,bcoord).b);
|
||||||
|
res.rgb = idist.rgb;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
/* Why am I doing this */
|
/* Why am I doing this */
|
||||||
float4 PS_Blur( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
float4 PS_Blur( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
{
|
{
|
||||||
|
|
@ -235,8 +332,8 @@ float4 PS_Vignette( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
/* box vignette */
|
/* box vignette */
|
||||||
float2 uv = coord.xy*(1.0-coord.yx)*4.0;
|
float2 uv = coord.xy*(1.0-coord.yx)*4.0;
|
||||||
vigdata.a = 1.0-(uv.x*uv.y);
|
vigdata.a = 1.0-(uv.x*uv.y);
|
||||||
vigdata.a = clamp(pow(vigdata.a,vigpow)*vigmul+vigbump,
|
vigdata.a = clamp(pow(max(vigdata.a,0.0),vigpow)*vigmul
|
||||||
0.0,1.0);
|
+vigbump,0.0,1.0);
|
||||||
vigdata.rgb = float3(vigcolor_r,vigcolor_g,vigcolor_b);
|
vigdata.rgb = float3(vigcolor_r,vigcolor_g,vigcolor_b);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
@ -255,7 +352,7 @@ float4 PS_Vignette( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
int i,j;
|
int i,j;
|
||||||
[unroll] for ( i=-3; i<4; i++ ) [unroll] for ( j=-3; j<4; j++ )
|
[unroll] for ( i=-3; i<4; i++ ) [unroll] for ( j=-3; j<4; j++ )
|
||||||
res.rgb += gauss4[abs(i)]*gauss4[abs(j)]
|
res.rgb += gauss4[abs(i)]*gauss4[abs(j)]
|
||||||
*tex2D(SamplerColor,coord+float2(i,j)*bof);
|
*tex2D(SamplerColor,coord+float2(i,j)*bof).rgb;
|
||||||
}
|
}
|
||||||
/* apply color */
|
/* apply color */
|
||||||
if ( vigenable )
|
if ( vigenable )
|
||||||
|
|
@ -271,13 +368,88 @@ float4 PS_Vignette( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
}
|
}
|
||||||
return clamp(res,0.0,1.0);
|
return clamp(res,0.0,1.0);
|
||||||
}
|
}
|
||||||
/* TODO paint filter */
|
/* paint filter */
|
||||||
/*float4 PS_Oily( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
float4 PS_Kuwahara( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
{
|
{
|
||||||
float2 coord = IN.txcoord.xy;
|
float2 coord = IN.txcoord.xy;
|
||||||
float4 res = tex2D(SamplerColor,coord);
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
|
if ( !oilenable ) return res;
|
||||||
|
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
||||||
|
float2 bof = 1.0/bresl;
|
||||||
|
float n = 16.0;
|
||||||
|
float3 m[4] =
|
||||||
|
{
|
||||||
|
float3(0,0,0),float3(0,0,0),float3(0,0,0),float3(0,0,0)
|
||||||
|
}, s[4] =
|
||||||
|
{
|
||||||
|
float3(0,0,0),float3(0,0,0),float3(0,0,0),float3(0,0,0)
|
||||||
|
}, c;
|
||||||
|
int i, j;
|
||||||
|
[loop] for ( i=-3; i<=0; i++ ) [loop] for ( j=-3; j<=0; j++ )
|
||||||
|
{
|
||||||
|
c = tex2D(SamplerColor,coord+float2(i,j)*bof).rgb;
|
||||||
|
m[0] += c;
|
||||||
|
s[0] += c*c;
|
||||||
|
}
|
||||||
|
[loop] for ( i=-3; i<=0; i++ ) [loop] for ( j=0; j<=3; j++ )
|
||||||
|
{
|
||||||
|
c = tex2D(SamplerColor,coord+float2(i,j)*bof).rgb;
|
||||||
|
m[1] += c;
|
||||||
|
s[1] += c*c;
|
||||||
|
}
|
||||||
|
[loop] for ( i=0; i<=3; i++ ) [loop] for ( j=-3; j<=0; j++ )
|
||||||
|
{
|
||||||
|
c = tex2D(SamplerColor,coord+float2(i,j)*bof).rgb;
|
||||||
|
m[2] += c;
|
||||||
|
s[2] += c*c;
|
||||||
|
}
|
||||||
|
[loop] for ( i=0; i<=3; i++ ) [loop] for ( j=0; j<=3; j++ )
|
||||||
|
{
|
||||||
|
c = tex2D(SamplerColor,coord+float2(i,j)*bof).rgb;
|
||||||
|
m[3] += c;
|
||||||
|
s[3] += c*c;
|
||||||
|
}
|
||||||
|
float min_sigma2 = 1e+2, sigma2;
|
||||||
|
[unroll] for ( i=0; i<4; i++ )
|
||||||
|
{
|
||||||
|
m[i] /= n;
|
||||||
|
s[i] = abs(s[i]/n-m[i]*m[i]);
|
||||||
|
sigma2 = s[i].r+s[i].g+s[i].b;
|
||||||
|
if ( sigma2 >= min_sigma2 ) continue;
|
||||||
|
min_sigma2 = sigma2;
|
||||||
|
res.rgb = m[i];
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
}*/
|
}
|
||||||
|
/* remove speckles from kuwahara filter */
|
||||||
|
float4 PS_MedianSmooth( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = IN.txcoord.xy;
|
||||||
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
|
if ( !oilenable ) return res;
|
||||||
|
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
||||||
|
float2 bof = 1.0/bresl;
|
||||||
|
float3 m1, m2, m3;
|
||||||
|
float3 a, b, c;
|
||||||
|
a = tex2D(SamplerColor,coord+float2(-1,-1)*bof).rgb;
|
||||||
|
b = tex2D(SamplerColor,coord+float2( 0,-1)*bof).rgb;
|
||||||
|
c = tex2D(SamplerColor,coord+float2( 1,-1)*bof).rgb;
|
||||||
|
m1 = (luminance(a)<luminance(b))?((luminance(b)<luminance(c))?b
|
||||||
|
:max(a,c)):((luminance(a)<luminance(c))?a:max(b,c));
|
||||||
|
a = tex2D(SamplerColor,coord+float2(-1, 0)*bof).rgb;
|
||||||
|
b = tex2D(SamplerColor,coord+float2( 0, 0)*bof).rgb;
|
||||||
|
c = tex2D(SamplerColor,coord+float2( 1, 0)*bof).rgb;
|
||||||
|
m2 = (luminance(a)<luminance(b))?((luminance(b)<luminance(c))?b
|
||||||
|
:max(a,c)):((luminance(a)<luminance(c))?a:max(b,c));
|
||||||
|
a = tex2D(SamplerColor,coord+float2(-1, 1)*bof).rgb;
|
||||||
|
b = tex2D(SamplerColor,coord+float2( 0, 1)*bof).rgb;
|
||||||
|
c = tex2D(SamplerColor,coord+float2( 1, 1)*bof).rgb;
|
||||||
|
m3 = (luminance(a)<luminance(b))?((luminance(b)<luminance(c))?b
|
||||||
|
:max(a,c)):((luminance(a)<luminance(c))?a:max(b,c));
|
||||||
|
res.rgb = (luminance(m1)<luminance(m2))?((luminance(m2)<luminance(m3))
|
||||||
|
?m2:max(m1,m3)):((luminance(m1)<luminance(m3))?m1:max(m2,m3));
|
||||||
|
return res;
|
||||||
|
}
|
||||||
/* ultimate super-cinematic immersive black bars */
|
/* ultimate super-cinematic immersive black bars */
|
||||||
float4 PS_Cinematic( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
float4 PS_Cinematic( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
{
|
{
|
||||||
|
|
@ -295,13 +467,53 @@ float4 PS_Cinematic( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
if ( -test.x != test.y ) res *= 0.0;
|
if ( -test.x != test.y ) res *= 0.0;
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
/* TODO bring back oil filter */
|
/* Legacy MariENB FXAA, useful for further smoothing the paint filter */
|
||||||
|
float4 PS_FXAA( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = float2(IN.txcoord.x,IN.txcoord.y);
|
||||||
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
|
if ( !fxaaenable ) return res;
|
||||||
|
float fxaareducemul_ = 1.0/max(abs(fxaareducemul),1.0);
|
||||||
|
float fxaareducemin_ = 1.0/max(abs(fxaareducemin),1.0);
|
||||||
|
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
||||||
|
float2 bof = float2(1.0/bresl.x,1.0/bresl.y);
|
||||||
|
float3 rgbNW = tex2D(SamplerColor,coord+float2(-1,-1)*bof).rgb;
|
||||||
|
float3 rgbNE = tex2D(SamplerColor,coord+float2(1,-1)*bof).rgb;
|
||||||
|
float3 rgbSW = tex2D(SamplerColor,coord+float2(-1,1)*bof).rgb;
|
||||||
|
float3 rgbSE = tex2D(SamplerColor,coord+float2(1,1)*bof).rgb;
|
||||||
|
float3 rgbM = tex2D(SamplerColor,coord).rgb;
|
||||||
|
float3 luma = float3(0.299,0.587,0.114);
|
||||||
|
float lumaNW = dot(rgbNW,luma);
|
||||||
|
float lumaNE = dot(rgbNE,luma);
|
||||||
|
float lumaSW = dot(rgbSW,luma);
|
||||||
|
float lumaSE = dot(rgbSE,luma);
|
||||||
|
float lumaM = dot(rgbM,luma);
|
||||||
|
float lumaMin = min(lumaM,min(min(lumaNW,lumaNE),min(lumaSW,lumaSE)));
|
||||||
|
float lumaMax = max(lumaM,max(max(lumaNW,lumaNE),max(lumaSW,lumaSE)));
|
||||||
|
float2 dir = float2(-((lumaNW+lumaNE)-(lumaSW+lumaSE)),((lumaNW+lumaSW)
|
||||||
|
-(lumaNE+lumaSE)));
|
||||||
|
float dirReduce = max((lumaNW+lumaNE+lumaSW+lumaSE)*(0.25
|
||||||
|
*fxaareducemul_),fxaareducemin_);
|
||||||
|
float rcpDirMin = 1.0/(min(abs(dir.x),abs(dir.y))+dirReduce);
|
||||||
|
dir = min(float2(fxaaspanmax,fxaaspanmax),max(float2(-fxaaspanmax,
|
||||||
|
-fxaaspanmax),dir*rcpDirMin))/bresl;
|
||||||
|
float3 rgbA = (1.0/2.0)*(tex2D(SamplerColor,coord+dir*(1.0/3.0-0.5))
|
||||||
|
.rgb+tex2D(SamplerColor,coord+dir*(2.0/3.0-0.5)).rgb);
|
||||||
|
float3 rgbB = rgbA*(1.0/2.0)+(1.0/4.0)*(tex2D(SamplerColor,coord+dir
|
||||||
|
*(0.0/3.0-0.5)).rgb+tex2D(SamplerColor,coord+dir*(3.0/3.0-0.5))
|
||||||
|
.rgb);
|
||||||
|
float lumaB = dot(rgbB,luma);
|
||||||
|
if ( (lumaB < lumaMin) || (lumaB > lumaMax) ) res.rgb = rgbA;
|
||||||
|
else res.rgb = rgbB;
|
||||||
|
res.a = 1.0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
technique PostProcess
|
technique PostProcess
|
||||||
{
|
{
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_Blur();
|
PixelShader = compile ps_3_0 PS_Kuwahara();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -318,7 +530,7 @@ technique PostProcess2
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_Sharp();
|
PixelShader = compile ps_3_0 PS_MedianSmooth();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -335,7 +547,7 @@ technique PostProcess3
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_Shift();
|
PixelShader = compile ps_3_0 PS_FXAA();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -352,7 +564,7 @@ technique PostProcess4
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_ChromaKey();
|
PixelShader = compile ps_3_0 PS_Blur();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -369,7 +581,7 @@ technique PostProcess5
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_Vignette();
|
PixelShader = compile ps_3_0 PS_Sharp();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -381,13 +593,12 @@ technique PostProcess5
|
||||||
SRGBWRITEENABLE = FALSE;
|
SRGBWRITEENABLE = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Paint will go between these two */
|
|
||||||
technique PostProcess6
|
technique PostProcess6
|
||||||
{
|
{
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_Retro();
|
PixelShader = compile ps_3_0 PS_Shift();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -400,6 +611,108 @@ technique PostProcess6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
technique PostProcess7
|
technique PostProcess7
|
||||||
|
{
|
||||||
|
pass p0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
|
PixelShader = compile ps_3_0 PS_ChromaKey();
|
||||||
|
DitherEnable = FALSE;
|
||||||
|
ZEnable = FALSE;
|
||||||
|
CullMode = NONE;
|
||||||
|
ALPHATESTENABLE = FALSE;
|
||||||
|
SEPARATEALPHABLENDENABLE = FALSE;
|
||||||
|
AlphaBlendEnable = FALSE;
|
||||||
|
StencilEnable = FALSE;
|
||||||
|
FogEnable = FALSE;
|
||||||
|
SRGBWRITEENABLE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
technique PostProcess8
|
||||||
|
{
|
||||||
|
pass p0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
|
PixelShader = compile ps_3_0 PS_Vignette();
|
||||||
|
DitherEnable = FALSE;
|
||||||
|
ZEnable = FALSE;
|
||||||
|
CullMode = NONE;
|
||||||
|
ALPHATESTENABLE = FALSE;
|
||||||
|
SEPARATEALPHABLENDENABLE = FALSE;
|
||||||
|
AlphaBlendEnable = FALSE;
|
||||||
|
StencilEnable = FALSE;
|
||||||
|
FogEnable = FALSE;
|
||||||
|
SRGBWRITEENABLE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
technique PostProcess9
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
technique PostProcess10
|
||||||
|
{
|
||||||
|
pass p0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
|
PixelShader = compile ps_3_0 PS_ASCII();
|
||||||
|
DitherEnable = FALSE;
|
||||||
|
ZEnable = FALSE;
|
||||||
|
CullMode = NONE;
|
||||||
|
ALPHATESTENABLE = FALSE;
|
||||||
|
SEPARATEALPHABLENDENABLE = FALSE;
|
||||||
|
AlphaBlendEnable = FALSE;
|
||||||
|
StencilEnable = FALSE;
|
||||||
|
FogEnable = FALSE;
|
||||||
|
SRGBWRITEENABLE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
technique PostProcess11
|
||||||
|
{
|
||||||
|
pass p0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
|
PixelShader = compile ps_3_0 PS_DotMatrix();
|
||||||
|
DitherEnable = FALSE;
|
||||||
|
ZEnable = FALSE;
|
||||||
|
CullMode = NONE;
|
||||||
|
ALPHATESTENABLE = FALSE;
|
||||||
|
SEPARATEALPHABLENDENABLE = FALSE;
|
||||||
|
AlphaBlendEnable = FALSE;
|
||||||
|
StencilEnable = FALSE;
|
||||||
|
FogEnable = FALSE;
|
||||||
|
SRGBWRITEENABLE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
technique PostProcess12
|
||||||
|
{
|
||||||
|
pass p0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
|
PixelShader = compile ps_3_0 PS_Curvature();
|
||||||
|
DitherEnable = FALSE;
|
||||||
|
ZEnable = FALSE;
|
||||||
|
CullMode = NONE;
|
||||||
|
ALPHATESTENABLE = FALSE;
|
||||||
|
SEPARATEALPHABLENDENABLE = FALSE;
|
||||||
|
AlphaBlendEnable = FALSE;
|
||||||
|
StencilEnable = FALSE;
|
||||||
|
FogEnable = FALSE;
|
||||||
|
SRGBWRITEENABLE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
technique PostProcess13
|
||||||
{
|
{
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,18 @@ static const float ordered8[64] =
|
||||||
float4 ScreenSize;
|
float4 ScreenSize;
|
||||||
float ENightDayFactor;
|
float ENightDayFactor;
|
||||||
float EInteriorFactor;
|
float EInteriorFactor;
|
||||||
|
float4 Timer;
|
||||||
/* samplers and textures */
|
/* samplers and textures */
|
||||||
texture2D texColor;
|
texture2D texColor;
|
||||||
texture2D texDepth;
|
texture2D texDepth;
|
||||||
|
texture2D texFont
|
||||||
|
<
|
||||||
|
string ResourceName = "menbvgaluma.png";
|
||||||
|
>;
|
||||||
|
texture2D texDots
|
||||||
|
<
|
||||||
|
string ResourceName = "menbdots.png";
|
||||||
|
>;
|
||||||
texture2D texCGA
|
texture2D texCGA
|
||||||
<
|
<
|
||||||
string ResourceName = "menbcgalut.png";
|
string ResourceName = "menbcgalut.png";
|
||||||
|
|
@ -102,6 +111,30 @@ sampler2D SamplerDepth = sampler_state
|
||||||
MaxMipLevel = 0;
|
MaxMipLevel = 0;
|
||||||
MipMapLodBias = 0;
|
MipMapLodBias = 0;
|
||||||
};
|
};
|
||||||
|
sampler2D SamplerFont = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texFont>;
|
||||||
|
MinFilter = LINEAR;
|
||||||
|
MagFilter = POINT;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Wrap;
|
||||||
|
AddressV = Wrap;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
|
sampler2D SamplerDots = sampler_state
|
||||||
|
{
|
||||||
|
Texture = <texDots>;
|
||||||
|
MinFilter = LINEAR;
|
||||||
|
MagFilter = LINEAR;
|
||||||
|
MipFilter = NONE;
|
||||||
|
AddressU = Wrap;
|
||||||
|
AddressV = Wrap;
|
||||||
|
SRGBTexture = FALSE;
|
||||||
|
MaxMipLevel = 0;
|
||||||
|
MipMapLodBias = 0;
|
||||||
|
};
|
||||||
sampler2D SamplerCGA = sampler_state
|
sampler2D SamplerCGA = sampler_state
|
||||||
{
|
{
|
||||||
Texture = <texCGA>;
|
Texture = <texCGA>;
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,63 @@ float bdmult
|
||||||
string UIWidget = "Spinner";
|
string UIWidget = "Spinner";
|
||||||
float UIMin = 0.0;
|
float UIMin = 0.0;
|
||||||
> = {0.25};
|
> = {0.25};
|
||||||
|
/*
|
||||||
|
Paint filters:
|
||||||
|
-1 : Disabled
|
||||||
|
0 : Oil painting filter, mixes Kuwahara with median for a smooth result
|
||||||
|
1 : "Van Gogh" filter, ported from https://www.shadertoy.com/view/MdGSDG
|
||||||
|
with some small changes
|
||||||
|
2 : "Watercolor" filter, ported from https://www.shadertoy.com/view/ltyGRV
|
||||||
|
also with some small changes
|
||||||
|
|
||||||
|
*/
|
||||||
|
string str_paint = "Painting Filters";
|
||||||
|
bool oilenable
|
||||||
|
<
|
||||||
|
string UIName = "Enable Oil Filter";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
/* legacy FXAA filter */
|
||||||
|
string str_fxaa = "FXAA";
|
||||||
|
bool fxaaenable
|
||||||
|
<
|
||||||
|
string UIName = "Enable FXAA";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
float fxaaspanmax
|
||||||
|
<
|
||||||
|
string UIName = "FXAA Span Max";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {4.0};
|
||||||
|
float fxaareducemul
|
||||||
|
<
|
||||||
|
string UIName = "FXAA Reduce Mul";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {16.0};
|
||||||
|
float fxaareducemin
|
||||||
|
<
|
||||||
|
string UIName = "FXAA Reduce Min";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {128.0};
|
||||||
|
/* ASCII art filter */
|
||||||
|
string str_ascii = "Luma ASCII Art Filter";
|
||||||
|
bool asciienable
|
||||||
|
<
|
||||||
|
string UIName = "Enable ASCII";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
bool asciimono
|
||||||
|
<
|
||||||
|
string UIName = "ASCII Monochrome";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {true};
|
||||||
|
float asciiblend
|
||||||
|
<
|
||||||
|
string UIName = "ASCII Blend";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
float UIMax = 1.0;
|
||||||
|
> = {0.0};
|
||||||
/* Depth-cutting chroma key */
|
/* Depth-cutting chroma key */
|
||||||
string str_mask = "Depth Chroma Key";
|
string str_mask = "Depth Chroma Key";
|
||||||
bool maskenable
|
bool maskenable
|
||||||
|
|
@ -200,6 +257,60 @@ float masktilty
|
||||||
string UIName = "Chroma Key Depth Vertical Tilt";
|
string UIName = "Chroma Key Depth Vertical Tilt";
|
||||||
string UIWidget = "Spinner";
|
string UIWidget = "Spinner";
|
||||||
> = {0.0};
|
> = {0.0};
|
||||||
|
/* cheap dot matrix */
|
||||||
|
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};
|
||||||
|
/* lens curve with chromatic aberration */
|
||||||
|
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};
|
||||||
/* BlurSharpShift, some people are obsessed with this nonsense */
|
/* BlurSharpShift, some people are obsessed with this nonsense */
|
||||||
string str_bss = "BlurSharpShift";
|
string str_bss = "BlurSharpShift";
|
||||||
bool bssblurenable
|
bool bssblurenable
|
||||||
|
|
|
||||||
|
|
@ -65,16 +65,31 @@
|
||||||
?isfog(WeatherAndTime.y)?(1.0):(WeatherAndTime.z)\
|
?isfog(WeatherAndTime.y)?(1.0):(WeatherAndTime.z)\
|
||||||
:isfog(WeatherAndTime.y)?(1.0-WeatherAndTime.z):(0.0))
|
:isfog(WeatherAndTime.y)?(1.0-WeatherAndTime.z):(0.0))
|
||||||
/* asset definitions */
|
/* 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 */
|
/* texture sizes */
|
||||||
#define NOISESIZE 256.0
|
#define NOISESIZE 256.0
|
||||||
#define HEATSIZE 1024.0
|
#define HEATSIZE 1024.0
|
||||||
#define FROSTSIZE 1024.0
|
#define FROSTSIZE 1024.0
|
||||||
/* LUT mode (use only one) - The 256px option was discarded for size reasons */
|
/* LUT mode (use only one) */
|
||||||
//#define LUTMODE_LEGACY
|
//#define LUTMODE_LEGACY
|
||||||
//#define LUTMODE_16
|
//#define LUTMODE_16
|
||||||
#define LUTMODE_64
|
#define LUTMODE_64
|
||||||
|
/* !NEW! volume map option, faster and more precise, no legacy tex support */
|
||||||
|
#define VOLUME_LUTS
|
||||||
/* some textures can be provided as DDS rather than PNG to save space */
|
/* some textures can be provided as DDS rather than PNG to save space */
|
||||||
//#define HEAT_DDS
|
//#define HEAT_DDS
|
||||||
|
//#define LENSDIRT_DDS
|
||||||
//#define FROST_DDS
|
//#define FROST_DDS
|
||||||
//#define FROSTBUMP_DDS
|
//#define FROSTBUMP_DDS
|
||||||
//#define VIGNETTE_DDS
|
//#define VIGNETTE_DDS
|
||||||
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 14 KiB |
BIN
enbseries/menblut64v_day.dds
Normal file
BIN
enbseries/menblut64v_interiorday.dds
Normal file
BIN
enbseries/menblut64v_interiornight.dds
Normal file
BIN
enbseries/menblut64v_night.dds
Normal file
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 181 KiB |
|
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 108 KiB |
BIN
enbseries/menbnoise3.png
Normal file
|
After Width: | Height: | Size: 192 KiB |
|
|
@ -153,9 +153,95 @@ float3 EdgeView( float3 res, float2 coord )
|
||||||
mdy += GY[2][2]*depths[2][2];
|
mdy += GY[2][2]*depths[2][2];
|
||||||
mud = pow(mdx*mdx+mdy*mdy,0.5);
|
mud = pow(mdx*mdx+mdy*mdy,0.5);
|
||||||
float fade = 1.0-tex2D(SamplerDepth,coord).x;
|
float fade = 1.0-tex2D(SamplerDepth,coord).x;
|
||||||
mud *= saturate(pow(max(0,fade),edgevfadepow)*edgevfademult);
|
mud *= clamp(pow(max(0.0,fade),edgevfadepow)*edgevfademult,0.0,1.0);
|
||||||
mud = saturate(pow(max(0,mud),edgevpow)*edgevmult);
|
mud = clamp(pow(max(0.0,mud),edgevpow)*edgevmult,0.0,1.0);
|
||||||
return mud;
|
if ( edgevblend ) return res-(edgevinv?1.0-mud:mud);
|
||||||
|
return edgevinv?1.0-mud:mud;
|
||||||
|
}
|
||||||
|
/* luminance edge detection */
|
||||||
|
float3 EdgeDetect( 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)*comradius;
|
||||||
|
float mdx = 0, mdy = 0, mud = 0;
|
||||||
|
float3x3 lums;
|
||||||
|
float3 col = tex2D(SamplerColor,coord+float2(-1,-1)*bof).rgb;
|
||||||
|
lums[0][0] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(0,-1)*bof).rgb;
|
||||||
|
lums[0][1] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(1,-1)*bof).rgb;
|
||||||
|
lums[0][2] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(-1,0)*bof).rgb;
|
||||||
|
lums[1][0] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(0,0)*bof).rgb;
|
||||||
|
lums[1][1] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(1,0)*bof).rgb;
|
||||||
|
lums[1][2] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(-1,1)*bof).rgb;
|
||||||
|
lums[2][0] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(0,1)*bof).rgb;
|
||||||
|
lums[2][1] = luminance(col);
|
||||||
|
col = tex2D(SamplerColor,coord+float2(1,1)*bof).rgb;
|
||||||
|
lums[2][2] = luminance(col);
|
||||||
|
mdx += GX[0][0]*lums[0][0];
|
||||||
|
mdx += GX[0][1]*lums[0][1];
|
||||||
|
mdx += GX[0][2]*lums[0][2];
|
||||||
|
mdx += GX[1][0]*lums[1][0];
|
||||||
|
mdx += GX[1][1]*lums[1][1];
|
||||||
|
mdx += GX[1][2]*lums[1][2];
|
||||||
|
mdx += GX[2][0]*lums[2][0];
|
||||||
|
mdx += GX[2][1]*lums[2][1];
|
||||||
|
mdx += GX[2][2]*lums[2][2];
|
||||||
|
mdy += GY[0][0]*lums[0][0];
|
||||||
|
mdy += GY[0][1]*lums[0][1];
|
||||||
|
mdy += GY[0][2]*lums[0][2];
|
||||||
|
mdy += GY[1][0]*lums[1][0];
|
||||||
|
mdy += GY[1][1]*lums[1][1];
|
||||||
|
mdy += GY[1][2]*lums[1][2];
|
||||||
|
mdy += GY[2][0]*lums[2][0];
|
||||||
|
mdy += GY[2][1]*lums[2][1];
|
||||||
|
mdy += GY[2][2]*lums[2][2];
|
||||||
|
mud = pow(max(mdx*mdx+mdy*mdy,0.0),0.5);
|
||||||
|
mud = clamp(pow(max(mud,0.0),compow)*commult,0.0,1.0);
|
||||||
|
if ( comblend ) return res-(cominv?1.0-mud:mud);
|
||||||
|
return cominv?1.0-mud:mud;
|
||||||
|
}
|
||||||
|
/* linevision filter */
|
||||||
|
float3 LineView( 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 contfadepow = tod_ind(contfadepow);
|
||||||
|
float contfademult = tod_ind(contfademult);
|
||||||
|
float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*contradius;
|
||||||
|
float dep = depthlinear(coord);
|
||||||
|
float cont = depthlinear(coord+float2(-1,-1)*bof);
|
||||||
|
cont += depthlinear(coord+float2(0,-1)*bof);
|
||||||
|
cont += depthlinear(coord+float2(1,-1)*bof);
|
||||||
|
cont += depthlinear(coord+float2(-1,0)*bof);
|
||||||
|
cont += depthlinear(coord+float2(1,0)*bof);
|
||||||
|
cont += depthlinear(coord+float2(-1,1)*bof);
|
||||||
|
cont += depthlinear(coord+float2(0,1)*bof);
|
||||||
|
cont += depthlinear(coord+float2(1,1)*bof);
|
||||||
|
cont /= 8.0;
|
||||||
|
float mud = 0.0;
|
||||||
|
if ( abs(cont-dep) > (contthreshold*0.00001) ) mud = 1.0;
|
||||||
|
float fade = 1.0-tex2D(SamplerDepth,coord).x;
|
||||||
|
mud *= clamp(pow(max(0.0,fade),contfadepow)*contfademult,0.0,1.0);
|
||||||
|
mud = clamp(pow(max(0.0,mud),contpow)*contmult,0.0,1.0);
|
||||||
|
if ( contblend ) return res-(continv?1.0-mud:mud);
|
||||||
|
return continv?1.0-mud:mud;
|
||||||
|
}
|
||||||
|
/* fog filter */
|
||||||
|
float3 Limbo( float3 res, float2 coord )
|
||||||
|
{
|
||||||
|
float mud = clamp(pow(max(0.0,depthlinear(coord)),fogpow)*fogmult
|
||||||
|
+fogbump,0.0,1.0);
|
||||||
|
if ( foglimbo ) return fogcolor*mud;
|
||||||
|
return lerp(res,fogcolor,mud);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
Thank you Boris for not providing access to a normal buffer. Guesswork using
|
Thank you Boris for not providing access to a normal buffer. Guesswork using
|
||||||
|
|
@ -176,15 +262,19 @@ float3 pseudonormal( float dep, float2 coord )
|
||||||
normal.z = -normal.z;
|
normal.z = -normal.z;
|
||||||
return normalize(normal);
|
return normalize(normal);
|
||||||
}
|
}
|
||||||
/* Squeezed in are Depth Grading, Edgevision, Sharpen and ssao prepass */
|
float4 PS_DepthGrading( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
float4 PS_EdgePlusSSAOPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
|
||||||
{
|
{
|
||||||
float2 coord = IN.txcoord.xy;
|
float2 coord = IN.txcoord.xy;
|
||||||
float4 res = tex2D(SamplerColor,coord);
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
if ( sharpenable ) res.rgb = Sharpen(res.rgb,coord);
|
if ( sharpenable ) res.rgb = Sharpen(res.rgb,coord);
|
||||||
res.rgb = DepthGrade(res.rgb,coord);
|
res.rgb = DepthGrade(res.rgb,coord);
|
||||||
if ( edgevenable ) res.rgb = EdgeView(res.rgb,coord);
|
return res;
|
||||||
/* get occlusion using single-step Ray Marching with 64 samples */
|
}
|
||||||
|
/* this SSAO algorithm is honestly a big mess */
|
||||||
|
float4 PS_SSAOPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = IN.txcoord.xy;
|
||||||
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
float ssaofadepow = tod_ind(ssaofadepow);
|
float ssaofadepow = tod_ind(ssaofadepow);
|
||||||
float ssaofademult = tod_ind(ssaofademult);
|
float ssaofademult = tod_ind(ssaofademult);
|
||||||
if ( !ssaoenable ) return res;
|
if ( !ssaoenable ) return res;
|
||||||
|
|
@ -200,17 +290,17 @@ float4 PS_EdgePlusSSAOPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
else bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
||||||
float3 normal = pseudonormal(depth,coord);
|
float3 normal = pseudonormal(depth,coord);
|
||||||
float2 nc = coord*(bresl/256.0);
|
float2 nc = coord*(bresl/256.0);
|
||||||
float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*ssaoradius;
|
float2 bof = (1.0/bresl)*ssaoradius;
|
||||||
float2 nc2 = tex2D(SamplerNoise3,nc+48000.0*Timer.x*ssaonoise).xy;
|
float2 nc2 = tex2D(SamplerNoise3,nc+48000.0*Timer.x*ssaonoise).xy;
|
||||||
float3 rnormal = tex2D(SamplerNoise3,nc2).xyz*2.0-1.0;
|
float3 rnormal = tex2D(SamplerNoise3,nc2).xyz*2.0-1.0;
|
||||||
rnormal = normalize(rnormal);
|
rnormal = normalize(rnormal);
|
||||||
float occ = 0.0;
|
float occ = 0.0;
|
||||||
int i;
|
int i;
|
||||||
float3 sample;
|
float3 sample;
|
||||||
float sdepth, so, delta;
|
float sdepth, delta;
|
||||||
float sclamp = ssaoclamp/100000.0;
|
float so;
|
||||||
float sclampmin = ssaoclampmin/100000.0;
|
float sclamp = ssaoclamp/100000.0, sclampmin = ssaoclampmin/100000.0;
|
||||||
[unroll] for ( i=0; i<16; i++ )
|
[loop] for ( i=0; i<64; i++ )
|
||||||
{
|
{
|
||||||
sample = reflect(ssao_samples[i],rnormal);
|
sample = reflect(ssao_samples[i],rnormal);
|
||||||
sample *= sign(dot(normal,sample));
|
sample *= sign(dot(normal,sample));
|
||||||
|
|
@ -221,13 +311,23 @@ float4 PS_EdgePlusSSAOPrepass( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
if ( (delta > sclampmin) && (delta < sclamp) )
|
if ( (delta > sclampmin) && (delta < sclamp) )
|
||||||
occ += 1.0-delta;
|
occ += 1.0-delta;
|
||||||
}
|
}
|
||||||
float uocc = saturate(occ/16.0);
|
float uocc = saturate(occ/64.0);
|
||||||
float fade = 1.0-depth;
|
float fade = 1.0-depth;
|
||||||
uocc *= saturate(pow(max(0,fade),ssaofadepow)*ssaofademult);
|
uocc *= saturate(pow(max(0,fade),ssaofadepow)*ssaofademult);
|
||||||
uocc = saturate(pow(max(0,uocc),ssaopow)*ssaomult);
|
uocc = saturate(pow(max(0,uocc),ssaopow)*ssaomult+ssaobump);
|
||||||
res.a = saturate(1.0-(uocc*ssaoblend));
|
res.a = saturate(1.0-(uocc*ssaoblend));
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
float4 PS_EdgeFilters( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
|
{
|
||||||
|
float2 coord = IN.txcoord.xy;
|
||||||
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
|
if ( fogenable ) res.rgb = Limbo(res.rgb,coord);
|
||||||
|
if ( edgevenable ) res.rgb = EdgeView(res.rgb,coord);
|
||||||
|
if ( comenable ) res.rgb = EdgeDetect(res.rgb,coord);
|
||||||
|
if ( contenable ) res.rgb = LineView(res.rgb,coord);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
/* Distant hot air refraction. Not very realistic, but does the job. */
|
/* Distant hot air refraction. Not very realistic, but does the job. */
|
||||||
float2 DistantHeat( float2 coord )
|
float2 DistantHeat( float2 coord )
|
||||||
{
|
{
|
||||||
|
|
@ -276,35 +376,14 @@ float4 PS_Distortion( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
The blur passes use bilateral filtering to mostly preserve borders.
|
The blur pass uses bilateral filtering to mostly preserve borders.
|
||||||
An additional factor using difference of normals was tested, but the
|
An additional factor using difference of normals was tested, but the
|
||||||
performance decrease was too much, so it's gone forever.
|
performance decrease was too much, so it's gone forever.
|
||||||
|
|
||||||
|
This has been reverted into a single pass since separable blur seems to
|
||||||
|
cause some ugly artifacting.
|
||||||
*/
|
*/
|
||||||
float4 PS_SSAOBlurH( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
float4 PS_SSAOBlur( 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 = 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;
|
|
||||||
[unroll] for ( i=-15; i<=15; i++ )
|
|
||||||
{
|
|
||||||
sd = tex2D(SamplerDepth,coord+float2(i,0)*bof).x;
|
|
||||||
ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact);
|
|
||||||
sw = ds;
|
|
||||||
sw *= gauss16[abs(i)];
|
|
||||||
tw += sw;
|
|
||||||
res.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;
|
float2 coord = IN.txcoord.xy;
|
||||||
float4 res = tex2D(SamplerColor,coord);
|
float4 res = tex2D(SamplerColor,coord);
|
||||||
|
|
@ -314,20 +393,20 @@ float4 PS_SSAOBlurV( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
||||||
if ( ssaodebug ) return saturate(res.a);
|
if ( ssaodebug ) return saturate(res.a);
|
||||||
return res*res.a;
|
return res*res.a;
|
||||||
}
|
}
|
||||||
float bresl = ScreenSize.x*ScreenSize.w;
|
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
||||||
float bof = (1.0/bresl)*ssaobradius;
|
float2 bof = (1.0/bresl)*ssaobradius;
|
||||||
float isd, sd, ds, sw, tw = 0;
|
float isd, sd, ds, sw, tw = 0;
|
||||||
res.a = 0.0;
|
res.a = 0.0;
|
||||||
int i;
|
int i, j;
|
||||||
isd = tex2D(SamplerDepth,coord).x;
|
isd = tex2D(SamplerDepth,coord).x;
|
||||||
[unroll] for ( i=-15; i<=15; i++ )
|
[loop] for ( j=-7; j<=7; j++ ) [loop] for ( i=-7; i<=7; i++ )
|
||||||
{
|
{
|
||||||
sd = tex2D(SamplerDepth,coord+float2(0,i)*bof).x;
|
sd = tex2D(SamplerDepth,coord+float2(i,j)*bof).x;
|
||||||
ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact);
|
ds = 1.0/pow(1.0+abs(isd-sd),ssaobfact);
|
||||||
sw = ds;
|
sw = ds;
|
||||||
sw *= gauss16[abs(i)];
|
sw *= gauss8[abs(i)]*gauss8[abs(j)];
|
||||||
tw += sw;
|
tw += sw;
|
||||||
res.a += sw*tex2D(SamplerColor,coord+float2(0,i)*bof).a;
|
res.a += sw*tex2D(SamplerColor,coord+float2(i,j)*bof).a;
|
||||||
}
|
}
|
||||||
res.a /= tw;
|
res.a /= tw;
|
||||||
if ( ssaodebug ) return saturate(res.a);
|
if ( ssaodebug ) return saturate(res.a);
|
||||||
|
|
@ -339,7 +418,7 @@ technique PostProcess
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_EdgePlusSSAOPrepass();
|
PixelShader = compile ps_3_0 PS_EdgeFilters();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -356,7 +435,7 @@ technique PostProcess2
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_Distortion();
|
PixelShader = compile ps_3_0 PS_DepthGrading();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -373,7 +452,7 @@ technique PostProcess3
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_SSAOBlurH();
|
PixelShader = compile ps_3_0 PS_SSAOPrepass();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -390,7 +469,7 @@ technique PostProcess4
|
||||||
pass p0
|
pass p0
|
||||||
{
|
{
|
||||||
VertexShader = compile vs_3_0 VS_Pass();
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
PixelShader = compile ps_3_0 PS_SSAOBlurV();
|
PixelShader = compile ps_3_0 PS_Distortion();
|
||||||
DitherEnable = FALSE;
|
DitherEnable = FALSE;
|
||||||
ZEnable = FALSE;
|
ZEnable = FALSE;
|
||||||
CullMode = NONE;
|
CullMode = NONE;
|
||||||
|
|
@ -402,3 +481,20 @@ technique PostProcess4
|
||||||
SRGBWRITEENABLE = FALSE;
|
SRGBWRITEENABLE = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
technique PostProcess5
|
||||||
|
{
|
||||||
|
pass p0
|
||||||
|
{
|
||||||
|
VertexShader = compile vs_3_0 VS_Pass();
|
||||||
|
PixelShader = compile ps_3_0 PS_SSAOBlur();
|
||||||
|
DitherEnable = FALSE;
|
||||||
|
ZEnable = FALSE;
|
||||||
|
CullMode = NONE;
|
||||||
|
ALPHATESTENABLE = FALSE;
|
||||||
|
SEPARATEALPHABLENDENABLE = FALSE;
|
||||||
|
AlphaBlendEnable = FALSE;
|
||||||
|
StencilEnable = FALSE;
|
||||||
|
FogEnable = FALSE;
|
||||||
|
SRGBWRITEENABLE = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -19,37 +19,54 @@ static const float3x3 GY =
|
||||||
0, 0, 0,
|
0, 0, 0,
|
||||||
-1,-2,-1
|
-1,-2,-1
|
||||||
};
|
};
|
||||||
/* radius: 8, std dev: 6 */
|
/* radius: 8, std dev: 3 */
|
||||||
static const float gauss8[8] =
|
static const float gauss8[8] =
|
||||||
{
|
{
|
||||||
0.084247, 0.083085, 0.079694, 0.074348,
|
0.134598, 0.127325, 0.107778, 0.081638,
|
||||||
0.067460, 0.059533, 0.051099, 0.042657
|
0.055335, 0.033562, 0.018216, 0.008847
|
||||||
};
|
|
||||||
/* radius: 16, std dev: 13 */
|
|
||||||
static const float gauss16[16] =
|
|
||||||
{
|
|
||||||
0.040012, 0.039893, 0.039541, 0.038960,
|
|
||||||
0.038162, 0.037159, 0.035969, 0.034612,
|
|
||||||
0.033109, 0.031485, 0.029764, 0.027971,
|
|
||||||
0.026131, 0.024268, 0.022405, 0.020563
|
|
||||||
};
|
};
|
||||||
/* SSAO samples */
|
/* SSAO samples */
|
||||||
static const float3 ssao_samples[16] =
|
static const float3 ssao_samples[64] =
|
||||||
{
|
{
|
||||||
float3( 0.0000,-0.0002, 0.0000),float3(-0.0004, 0.0013, 0.0014),
|
float3(-0.0051, 0.0021, 0.0146),float3(-0.0197,-0.0213,-0.0116),
|
||||||
float3(-0.0030, 0.0048,-0.0034),float3( 0.0147, 0.0046,-0.0026),
|
float3( 0.0005,-0.0432,-0.0182),float3(-0.0011,-0.0586,-0.0217),
|
||||||
float3(-0.0097, 0.0275,-0.0092),float3(-0.0178,-0.0072, 0.0491),
|
float3(-0.0549, 0.0461, 0.0309),float3(-0.0448,-0.0764,-0.0306),
|
||||||
float3( 0.0227,-0.0431,-0.0681),float3( 0.1052, 0.0332,-0.0588),
|
float3(-0.0366, 0.0758,-0.0699),float3(-0.0770,-0.0707,-0.0686),
|
||||||
float3( 0.0997, 0.0056, 0.1473),float3(-0.1252, 0.2019, 0.0564),
|
float3( 0.1181,-0.0340,-0.0683),float3(-0.0647, 0.0356, 0.1377),
|
||||||
float3(-0.1054,-0.2072, 0.2271),float3(-0.0542, 0.3096, 0.2814),
|
float3(-0.1167, 0.1262, 0.0024),float3(-0.1353,-0.0861, 0.0971),
|
||||||
float3( 0.0072,-0.3534, 0.4035),float3(-0.0024,-0.2385, 0.6260),
|
float3(-0.0096, 0.0936, 0.1800),float3( 0.1311,-0.1013,-0.1429),
|
||||||
float3(-0.1940, 0.5722,-0.5602),float3(-0.0910,-0.7548,-0.6497)
|
float3(-0.1186,-0.0653, 0.1913),float3( 0.1641, 0.0260, 0.1868),
|
||||||
|
float3(-0.1225,-0.2319, 0.0424),float3( 0.1036,-0.2000, 0.1684),
|
||||||
|
float3( 0.1656, 0.2022,-0.1408),float3(-0.1809,-0.1673, 0.1922),
|
||||||
|
float3(-0.2485,-0.1236, 0.1750),float3( 0.1030,-0.0550, 0.3233),
|
||||||
|
float3(-0.0405, 0.3068, 0.1827),float3(-0.0576, 0.1632, 0.3327),
|
||||||
|
float3( 0.0392, 0.3583,-0.1505),float3( 0.0082, 0.2865, 0.2879),
|
||||||
|
float3( 0.0055,-0.2835, 0.3124),float3(-0.2733, 0.1991,-0.2776),
|
||||||
|
float3( 0.2667, 0.1127,-0.3486),float3(-0.3326, 0.2740,-0.1844),
|
||||||
|
float3( 0.2887,-0.3838, 0.0630),float3( 0.1088, 0.1546, 0.4629),
|
||||||
|
float3( 0.0977,-0.3565, 0.3595),float3(-0.4204, 0.0855, 0.3133),
|
||||||
|
float3(-0.2237,-0.4932, 0.0759),float3( 0.4245, 0.3169,-0.1891),
|
||||||
|
float3( 0.0084,-0.5682, 0.1062),float3(-0.1489,-0.5296,-0.2235),
|
||||||
|
float3( 0.0014,-0.4153,-0.4460),float3( 0.0300,-0.4392, 0.4437),
|
||||||
|
float3( 0.2627, 0.4518, 0.3704),float3(-0.4945, 0.3659, 0.2285),
|
||||||
|
float3(-0.2550,-0.5311, 0.3230),float3(-0.4477, 0.0828,-0.5151),
|
||||||
|
float3( 0.4682, 0.4531,-0.2644),float3(-0.1235,-0.0366, 0.7071),
|
||||||
|
float3( 0.3545, 0.4559, 0.4536),float3(-0.1037,-0.2199,-0.7095),
|
||||||
|
float3( 0.4269, 0.5299,-0.3510),float3( 0.7051,-0.1468,-0.3027),
|
||||||
|
float3( 0.4590,-0.5669,-0.3208),float3( 0.2330, 0.1264, 0.7680),
|
||||||
|
float3(-0.3954, 0.5619,-0.4622),float3( 0.5977,-0.5110, 0.3059),
|
||||||
|
float3(-0.5800,-0.6306, 0.0672),float3(-0.2211,-0.0332,-0.8460),
|
||||||
|
float3(-0.3808,-0.2238,-0.7734),float3(-0.5616, 0.6858,-0.1887),
|
||||||
|
float3(-0.2995, 0.5165,-0.7024),float3( 0.5042,-0.0537, 0.7885),
|
||||||
|
float3(-0.6477,-0.3691, 0.5938),float3(-0.3969, 0.8815, 0.0620),
|
||||||
|
float3(-0.4300,-0.8814,-0.0852),float3(-0.1683, 0.9379, 0.3033)
|
||||||
};
|
};
|
||||||
/* standard stuff */
|
/* standard stuff */
|
||||||
float4 ScreenSize;
|
float4 ScreenSize;
|
||||||
float ENightDayFactor;
|
float ENightDayFactor;
|
||||||
float EInteriorFactor;
|
float EInteriorFactor;
|
||||||
float4 Timer;
|
float4 Timer;
|
||||||
|
float FieldOfView;
|
||||||
float4 WeatherAndTime;
|
float4 WeatherAndTime;
|
||||||
/* this still doesn't do anything */
|
/* this still doesn't do anything */
|
||||||
extern float fWaterLevel;
|
extern float fWaterLevel;
|
||||||
|
|
@ -58,7 +75,7 @@ texture2D texColor;
|
||||||
texture2D texDepth;
|
texture2D texDepth;
|
||||||
texture2D texNoise3
|
texture2D texNoise3
|
||||||
<
|
<
|
||||||
string ResourceName = "menbnoise2.png";
|
string ResourceName = "menbnoise3.png";
|
||||||
>;
|
>;
|
||||||
texture2D texHeat
|
texture2D texHeat
|
||||||
<
|
<
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,175 @@ float edgevradius
|
||||||
string UIWidget = "Spinner";
|
string UIWidget = "Spinner";
|
||||||
float UIMin = 0.0;
|
float UIMin = 0.0;
|
||||||
> = {1.0};
|
> = {1.0};
|
||||||
|
bool edgevinv
|
||||||
|
<
|
||||||
|
string UIName = "Invert Edgevision";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
bool edgevblend
|
||||||
|
<
|
||||||
|
string UIName = "Blend Edgevision";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
/* use luma edge detection filter */
|
||||||
|
string str_com = "Edge Detect";
|
||||||
|
bool comenable
|
||||||
|
<
|
||||||
|
string UIName = "Enable Edge Detect";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
float compow
|
||||||
|
<
|
||||||
|
string UIName = "Edge Detect Contrast";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
float commult
|
||||||
|
<
|
||||||
|
string UIName = "Edge Detect Intensity";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
float comradius
|
||||||
|
<
|
||||||
|
string UIName = "Edge Detect Radius";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
bool cominv
|
||||||
|
<
|
||||||
|
string UIName = "Invert Edge Detect";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
bool comblend
|
||||||
|
<
|
||||||
|
string UIName = "Blend Edge Detect";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
/* use edge threshold filter aka "linevision" */
|
||||||
|
string str_cont = "Linevision";
|
||||||
|
bool contenable
|
||||||
|
<
|
||||||
|
string UIName = "Enable Linevision";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
/* factors */
|
||||||
|
float contfadepow_n
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Contrast Night";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {2.0};
|
||||||
|
float contfadepow_d
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Contrast Day";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {2.0};
|
||||||
|
float contfadepow_in
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Contrast Interior Night";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {2.0};
|
||||||
|
float contfadepow_id
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Contrast Interior Day";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {2.0};
|
||||||
|
float contfademult_n
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Intensity Night";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {500.0};
|
||||||
|
float contfademult_d
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Intensity Day";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {500.0};
|
||||||
|
float contfademult_in
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Intensity Interior Night";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {500.0};
|
||||||
|
float contfademult_id
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Fade Intensity Interior Day";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {500.0};
|
||||||
|
float contpow
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Contrast";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
float contmult
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Intensity";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {2.0};
|
||||||
|
float contradius
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Radius";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
float contthreshold
|
||||||
|
<
|
||||||
|
string UIName = "Linevision Threshold";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {0.05};
|
||||||
|
bool continv
|
||||||
|
<
|
||||||
|
string UIName = "Invert Linevision";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
bool contblend
|
||||||
|
<
|
||||||
|
string UIName = "Blend Linevision";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
/* fog filter */
|
||||||
|
string str_fog = "Custom Fog Filter";
|
||||||
|
bool fogenable
|
||||||
|
<
|
||||||
|
string UIName = "Enable Custom Fog";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
|
float fogpow
|
||||||
|
<
|
||||||
|
string UIName = "Fog Contrast";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
float fogmult
|
||||||
|
<
|
||||||
|
string UIName = "Fog Intensity";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
float UIMin = 0.0;
|
||||||
|
> = {1.0};
|
||||||
|
float fogbump
|
||||||
|
<
|
||||||
|
string UIName = "Fog Shift";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {0.0};
|
||||||
|
float3 fogcolor
|
||||||
|
<
|
||||||
|
string UIName = "Fog Color";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {1.0,1.0,1.0};
|
||||||
|
bool foglimbo
|
||||||
|
<
|
||||||
|
string UIName = "Limbo Mode";
|
||||||
|
string UIWidget = "Checkbox";
|
||||||
|
> = {false};
|
||||||
/* ssao filter */
|
/* ssao filter */
|
||||||
string str_ssao = "Ray Marching SSAO";
|
string str_ssao = "Ray Marching SSAO";
|
||||||
bool ssaoenable
|
bool ssaoenable
|
||||||
|
|
@ -267,6 +436,11 @@ float ssaopow
|
||||||
string UIWidget = "Spinner";
|
string UIWidget = "Spinner";
|
||||||
float UIMin = 0.0;
|
float UIMin = 0.0;
|
||||||
> = {1.5};
|
> = {1.5};
|
||||||
|
float ssaobump
|
||||||
|
<
|
||||||
|
string UIName = "SSAO Shift";
|
||||||
|
string UIWidget = "Spinner";
|
||||||
|
> = {0.0};
|
||||||
float ssaoblend
|
float ssaoblend
|
||||||
<
|
<
|
||||||
string UIName = "SSAO Blending";
|
string UIName = "SSAO Blending";
|
||||||
|
|
|
||||||
BIN
enbseries/menbvgaluma.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |