1
Fork 0

MariENB FROST 3.2.0b

This commit is contained in:
Marisa the Magician 2019-04-07 17:51:17 +02:00
commit e516bebcec
16 changed files with 173 additions and 453 deletions

View file

@ -277,9 +277,9 @@ AmbientLightingIntensitySunrise=0.61
AmbientLightingIntensityDay=0.87 AmbientLightingIntensityDay=0.87
AmbientLightingIntensitySunset=0.66 AmbientLightingIntensitySunset=0.66
AmbientLightingIntensityDusk=0.44 AmbientLightingIntensityDusk=0.44
AmbientLightingIntensityNight=0.21 AmbientLightingIntensityNight=0.13
AmbientLightingIntensityInteriorDay=0.22 AmbientLightingIntensityInteriorDay=0.15
AmbientLightingIntensityInteriorNight=0.19 AmbientLightingIntensityInteriorNight=0.12
[SSAO_SSIL] [SSAO_SSIL]
UseIndirectLighting=true UseIndirectLighting=true
ResolutionScale=1.0 ResolutionScale=1.0

View file

@ -1 +1 @@
3.1.1 BETA "Stay FROSTy" 3.2.0 BETA "Let Go"

View file

@ -107,13 +107,6 @@ float bloomradiusy
string UIWidget = "Spinner"; string UIWidget = "Spinner";
float UIMin = 0.0; float UIMin = 0.0;
> = {1.0}; > = {1.0};
float bloomtheta
<
string UIName = "Bloom Angle";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.0};
/* bloom tint/blueshift parameters */ /* bloom tint/blueshift parameters */
float3 blu_n float3 blu_n
< <
@ -279,83 +272,21 @@ float bloommixs
string UIName = "Bloom Single Pass Blend"; string UIName = "Bloom Single Pass Blend";
string UIWidget = "Spinner"; string UIWidget = "Spinner";
> = {1.0}; > = {1.0};
string str_bloomdirt = "Lens Dirt";
bool dirtenable
<
string UIName = "Enable Lens Dirt";
string UIWidget = "Checkbox";
> = {false};
float dirtmix1
<
string UIName = "Dirt Pass 1 Blend";
string UIWidget = "Spinner";
> = {0.0};
float dirtmix2
<
string UIName = "Dirt Pass 2 Blend";
string UIWidget = "Spinner";
> = {0.1};
float dirtmix3
<
string UIName = "Dirt Pass 3 Blend";
string UIWidget = "Spinner";
> = {1.2};
float dirtmix4
<
string UIName = "Dirt Pass 4 Blend";
string UIWidget = "Spinner";
> = {0.5};
float dirtmix5
<
string UIName = "Dirt Pass 5 Blend";
string UIWidget = "Spinner";
> = {0.25};
float dirtmix6
<
string UIName = "Dirt Pass 6 Blend";
string UIWidget = "Spinner";
> = {0.1};
float dirtmixs
<
string UIName = "Dirt Single Pass Blend";
string UIWidget = "Spinner";
> = {1.0};
float dirtsaturation
<
string UIName = "Dirt Saturation";
string UIWidget = "Spinner";
> = {1.0};
float ldirtpow
<
string UIName = "Dirt Texture Contrast";
string UIWidget = "Spinner";
> = {1.25};
float dirtpow
<
string UIName = "Dirt Contrast";
string UIWidget = "Spinner";
> = {1.25};
float ldirtfactor
<
string UIName = "Dirt Factor";
string UIWidget = "Spinner";
> = {1.5};
/* gaussian blur matrices */ /* gaussian blur matrices */
/* radius: 4, std dev: 1.5 */ /* radius: 4, std dev: 1.5 */
/*static const float gauss4[4] = static const float gauss4[4] =
{ {
0.270682, 0.216745, 0.111281, 0.036633 0.270682, 0.216745, 0.111281, 0.036633
};*/ };
/* radius: 8, std dev: 3 */ /* radius: 8, std dev: 3 */
static const float gauss8[8] = /*static const float gauss8[8] =
{ {
0.134598, 0.127325, 0.107778, 0.081638, 0.134598, 0.127325, 0.107778, 0.081638,
0.055335, 0.033562, 0.018216, 0.008847 0.055335, 0.033562, 0.018216, 0.008847
}; };*/
/* radius: 40, std dev: 15 */ /* radius: 40, std dev: 15 */
/*static const float gauss40[40] = static const float gauss40[40] =
{ {
0.026823, 0.026763, 0.026585, 0.026291, 0.026823, 0.026763, 0.026585, 0.026291,
0.025886, 0.025373, 0.024760, 0.024055, 0.025886, 0.025373, 0.024760, 0.024055,
@ -367,9 +298,9 @@ static const float gauss8[8] =
0.004697, 0.004139, 0.003630, 0.003170, 0.004697, 0.004139, 0.003630, 0.003170,
0.002756, 0.002385, 0.002055, 0.001763, 0.002756, 0.002385, 0.002055, 0.001763,
0.001506, 0.001280, 0.001084, 0.000913 0.001506, 0.001280, 0.001084, 0.000913
};*/ };
/* radius: 80, std dev: 30 */ /* radius: 80, std dev: 30 */
static const float gauss80[80] = /*static const float gauss80[80] =
{ {
0.013406, 0.013398, 0.013376, 0.013339, 0.013287, 0.013221, 0.013406, 0.013398, 0.013376, 0.013339, 0.013287, 0.013221,
0.013140, 0.013046, 0.012938, 0.012816, 0.012681, 0.012534, 0.013140, 0.013046, 0.012938, 0.012816, 0.012681, 0.012534,
@ -385,7 +316,7 @@ static const float gauss80[80] =
0.001192, 0.001107, 0.001027, 0.000952, 0.000881, 0.000815, 0.001192, 0.001107, 0.001027, 0.000952, 0.000881, 0.000815,
0.000753, 0.000694, 0.000640, 0.000589, 0.000542, 0.000497, 0.000753, 0.000694, 0.000640, 0.000589, 0.000542, 0.000497,
0.000456, 0.000418 0.000456, 0.000418
}; };*/
/* mathematical constants */ /* mathematical constants */
static const float pi = 3.1415926535898; static const float pi = 3.1415926535898;
@ -406,15 +337,6 @@ Texture2D RenderTarget64;
Texture2D RenderTarget32; Texture2D RenderTarget32;
Texture2D RenderTargetRGBA64F; Texture2D RenderTargetRGBA64F;
Texture2D TextureLens
<
#ifdef LENSDIRT_DDS
string ResourceName = "menblens.dds";
#else
string ResourceName = "menblens.png";
#endif
>;
SamplerState Sampler SamplerState Sampler
{ {
Filter = MIN_MAG_MIP_LINEAR; Filter = MIN_MAG_MIP_LINEAR;
@ -428,13 +350,6 @@ SamplerState Sampler2
AddressV = Clamp; AddressV = Clamp;
}; };
SamplerState SamplerLens
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Mirror;
AddressV = Mirror;
};
struct VS_INPUT_POST struct VS_INPUT_POST
{ {
float3 pos : POSITION; float3 pos : POSITION;
@ -533,14 +448,13 @@ float4 Anamorphic( float2 coord, Texture2D intex, float insz )
base = RenderTargetRGBA64F.Sample(Sampler,coord); base = RenderTargetRGBA64F.Sample(Sampler,coord);
int i; int i;
float sum = 0.0; float sum = 0.0;
float inc = flen/insz;
float2 pp; float2 pp;
float2 dir = float2(cos(bloomtheta*2*pi),sin(bloomtheta*2*pi)) [unroll] for ( i=-39; i<=39; i++ )
*flen/insz;
[unroll] for ( i=-79; i<=79; i++ )
{ {
pp = coord+dir*i; pp = coord+float2(i,0)*inc;
res += gauss80[abs(i)]*intex.Sample(Sampler,pp); res += gauss40[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss80[abs(i)]:0.0; sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss40[abs(i)]:0.0;
} }
res *= 1.0/sum; res *= 1.0/sum;
float3 flu = tod_ind(flu); float3 flu = tod_ind(flu);
@ -562,14 +476,13 @@ float4 PS_HorizontalBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0,
float4 res = float4(0.0,0.0,0.0,0.0); float4 res = float4(0.0,0.0,0.0,0.0);
int i; int i;
float sum = 0.0; float sum = 0.0;
float inc = bloomradiusx/insz;
float2 pp; float2 pp;
float2 dir = float2(cos(bloomtheta*2*pi),sin(bloomtheta*2*pi)) [unroll] for ( i=-3; i<=3; i++ )
*bloomradiusx/insz;
[unroll] for ( i=-7; i<=7; i++ )
{ {
pp = coord+dir*i; pp = coord+float2(i,0)*inc;
res += gauss8[abs(i)]*intex.Sample(Sampler,pp); res += gauss4[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss8[abs(i)]:0.0; sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss4[abs(i)]:0.0;
} }
res *= 1.0/sum; res *= 1.0/sum;
if ( alfenable ) res += Anamorphic(coord,intex,insz); if ( alfenable ) res += Anamorphic(coord,intex,insz);
@ -588,14 +501,13 @@ float4 PS_VerticalBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0,
base = RenderTargetRGBA64F.Sample(Sampler,coord); base = RenderTargetRGBA64F.Sample(Sampler,coord);
int i; int i;
float sum = 0.0; float sum = 0.0;
float inc = bloomradiusy/insz;
float2 pp; float2 pp;
float2 dir = float2(sin(bloomtheta*2*pi),-cos(bloomtheta*2*pi)) [unroll] for ( i=-3; i<=3; i++ )
*bloomradiusy/insz;
[unroll] for ( i=-7; i<=7; i++ )
{ {
pp = coord+dir*i; pp = coord+float2(0,i)*inc;
res += gauss8[abs(i)]*intex.Sample(Sampler,pp); res += gauss4[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.y>=0.0)&&(pp.y<1.0))?gauss8[abs(i)]:0.0; sum += ((pp.y>=0.0)&&(pp.y<1.0))?gauss4[abs(i)]:0.0;
} }
res *= 1.0/sum; res *= 1.0/sum;
float3 blu = tod_ind(blu); float3 blu = tod_ind(blu);
@ -622,30 +534,6 @@ float4 PS_PostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
res.rgb /= 6.0; res.rgb /= 6.0;
res.rgb = clamp(res.rgb,0.0,32768.0); res.rgb = clamp(res.rgb,0.0,32768.0);
res.a = 1.0; res.a = 1.0;
if ( !dirtenable ) return res;
/* crappy lens filter, useful when playing characters with glasses */
float2 ccoord = coord;
#ifdef ASPECT_LENSDIRT
ccoord.y = (coord.y-0.5)*ScreenSize.w+0.5;
#endif
float4 crap = TextureLens.Sample(SamplerLens,ccoord);
float4 mud = dirtmix1*RenderTarget1024.Sample(Sampler2,coord);
mud += dirtmix2*RenderTarget512.Sample(Sampler2,coord);
mud += dirtmix3*RenderTarget256.Sample(Sampler2,coord);
mud += dirtmix4*RenderTarget128.Sample(Sampler2,coord);
mud += dirtmix5*RenderTarget64.Sample(Sampler2,coord);
mud += dirtmix6*RenderTarget32.Sample(Sampler2,coord);
mud.rgb /= 6.0;
float3 hsv = rgb2hsv(mud.rgb);
hsv.y = clamp(hsv.y*dirtsaturation,0.0,1.0);
mud.rgb = clamp(hsv2rgb(hsv),0.0,32768.0);
mud.rgb = pow(mud.rgb,dirtpow);
float mudmax = luminance(mud.rgb);
float mudn = max(mudmax/(1.0+mudmax),0.0);
mudn = pow(mudn,max(ldirtpow-crap.a,0.0));
mud.rgb *= mudn*ldirtfactor*crap.rgb;
res += max(mud,0.0);
res.a = 1.0;
return res; return res;
} }
@ -655,24 +543,6 @@ float4 PS_SPostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
float4 res = bloommixs*RenderTarget128.Sample(Sampler2,coord); float4 res = bloommixs*RenderTarget128.Sample(Sampler2,coord);
res.rgb = clamp(res.rgb,0.0,32768.0); res.rgb = clamp(res.rgb,0.0,32768.0);
res.a = 1.0; res.a = 1.0;
if ( !dirtenable ) return res;
/* crappy lens filter, useful when playing characters with glasses */
float2 ccoord = coord;
#ifdef ASPECT_LENSDIRT
ccoord.y = (coord.y-0.5)*ScreenSize.w+0.5;
#endif
float4 crap = TextureLens.Sample(SamplerLens,ccoord);
float4 mud = dirtmixs*RenderTarget32.Sample(Sampler2,coord);
mud.rgb = pow(mud.rgb,dirtpow);
float3 hsv = rgb2hsv(mud.rgb);
hsv.y = clamp(hsv.y*dirtsaturation,0.0,1.0);
mud.rgb = clamp(hsv2rgb(hsv),0.0,32768.0);
float mudmax = luminance(mud.rgb);
float mudn = max(mudmax/(1.0+mudmax),0.0);
mudn = pow(mudn,max(ldirtpow-crap.a,0.0));
mud.rgb *= mudn*ldirtfactor*crap.rgb;
res += max(mud,0.0);
res.a = 1.0;
return res; return res;
} }

View file

@ -1,5 +1,5 @@
[ENBBLOOM.FX] [ENBBLOOM.FX]
TECHNIQUE=1 TECHNIQUE=2
Bloom Intensity Night=0.69 Bloom Intensity Night=0.69
Bloom Intensity Day=0.38 Bloom Intensity Day=0.38
Bloom Intensity Interior=0.53 Bloom Intensity Interior=0.53
@ -80,12 +80,12 @@ Anamorphic Bloom Blue Shift Interior Night=1.86
Anamorphic Bloom Blue Shift Interior Day=1.86 Anamorphic Bloom Blue Shift Interior Day=1.86
Anamorphic Bloom Contrast Interior Night=1.12 Anamorphic Bloom Contrast Interior Night=1.12
Anamorphic Bloom Contrast Interior Day=1.22 Anamorphic Bloom Contrast Interior Day=1.22
Bloom Pass 1 Blend=0.34 Bloom Pass 1 Blend=0.29
Bloom Pass 2 Blend=0.59 Bloom Pass 2 Blend=0.57
Bloom Pass 3 Blend=0.71 Bloom Pass 3 Blend=0.86
Bloom Pass 4 Blend=0.79 Bloom Pass 4 Blend=1.14
Bloom Pass 5 Blend=0.88 Bloom Pass 5 Blend=1.43
Bloom Pass 6 Blend=0.94 Bloom Pass 6 Blend=1.71
Enable Lens Dirt=false Enable Lens Dirt=false
Dirt Pass 1 Blend=0.08 Dirt Pass 1 Blend=0.08
Dirt Pass 2 Blend=0.25 Dirt Pass 2 Blend=0.25

View file

@ -266,12 +266,24 @@ bool frostalways
string UIWidget = "Checkbox"; string UIWidget = "Checkbox";
> = {false}; > = {false};
string str_focus = "Focusing Parameters"; string str_focus = "Focusing Parameters";
/* circle (triangle, actually) average focus */ /*
bool focuscircle focus modes:
-2 : mouse
-1 : manual
0 : center spot
1 : center + triangle
2 : 8x8 grid average
TODO
3 : 8x8 grid average of 8 closest points
4 : 8x8 grid average of 8 farthest points
*/
int focuscircle
< <
string UIName = "Enable Focus Triangle"; string UIName = "Focus Mode";
string UIWidget = "Checkbox"; string UIWidget = "Checkbox";
> = {true}; int UIMin = -2;
int UIMax = 2;
> = {1};
bool focusdisplay bool focusdisplay
< <
string UIName = "Display Focus Points"; string UIName = "Display Focus Points";
@ -853,6 +865,7 @@ float EInteriorFactor;
float4 TimeOfDay1; float4 TimeOfDay1;
float4 TimeOfDay2; float4 TimeOfDay2;
float4 DofParameters; float4 DofParameters;
float4 tempInfo2;
Texture2D TextureCurrent; Texture2D TextureCurrent;
Texture2D TexturePrevious; Texture2D TexturePrevious;
@ -1239,11 +1252,26 @@ float4 PS_Aperture( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
float4 PS_ReadFocus( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target float4 PS_ReadFocus( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{ {
if ( dofdisable ) return 0.0; if ( dofdisable ) return 0.0;
if ( focusmanual ) return focusmanualvalue; if ( focuscircle == -2 )
return TextureDepth.Sample(Sampler1,tempInfo2.zw).x;
if ( focuscircle < 0 ) return focusmanualvalue;
float focusmax = tod_ind(focusmax); float focusmax = tod_ind(focusmax);
float cfocus = min(TextureDepth.Sample(Sampler1,focuscenter).x, float cfocus = min(TextureDepth.Sample(Sampler1,focuscenter).x,
focusmax*0.001); focusmax*0.001);
if ( !focuscircle ) return cfocus; if ( focuscircle == 0 ) return cfocus;
if ( focuscircle == 2 )
{
int i, j;
float mfocus = 0.0;
float2 px;
[unroll] for( j=0; j<8; j++ ) [unroll] for( i=0; i<8; i++ )
{
px = float2((i+0.5)/8.0,(j+0.5)/8.0);
mfocus += min(TextureDepth.Sample(Sampler1,px).x,
focusmax*0.001);
}
return mfocus/64.0;
}
/* using polygons inscribed into a circle, in this case a triangle */ /* using polygons inscribed into a circle, in this case a triangle */
float focusradius = tod_ind(focusradius); float focusradius = tod_ind(focusradius);
float focusmix = tod_ind(focusmix); float focusmix = tod_ind(focusmix);
@ -1385,7 +1413,7 @@ float4 PS_DoFBorkeh( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
res /= tw; res /= tw;
return res; return res;
} }
float4 PS_DoFBorkehB( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target float4 PS_DoFPostBlur( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
{ {
float2 coord = IN.txcoord.xy; float2 coord = IN.txcoord.xy;
if ( dofdisable ) return TextureColor.Sample(Sampler1,coord); if ( dofdisable ) return TextureColor.Sample(Sampler1,coord);
@ -1474,8 +1502,27 @@ float4 PS_FrostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
res.rgb *= 1.0+bmp*dist; res.rgb *= 1.0+bmp*dist;
} }
else res = TextureColor.Sample(Sampler1,coord); else res = TextureColor.Sample(Sampler1,coord);
if ( !focusdisplay ) return res; if ( !focusdisplay || (focuscircle == -1) ) return res;
if ( focuscircle == -2 )
{
if ( distance(coord,tempInfo2.zw) < 0.01 )
res.rgb = float3(1,0,0);
return res;
}
if ( focuscircle == 2 )
{
int i, j;
float2 px;
[unroll] for( j=0; j<8; j++ ) [unroll] for( i=0; i<8; i++ )
{
px = float2((i+0.5)/8.0,(j+0.5)/8.0);
if ( distance(coord,px) < 0.005 )
res.rgb = float3(1,0,0);
}
return res;
}
if ( distance(coord,focuscenter) < 0.01 ) res.rgb = float3(1,0,0); if ( distance(coord,focuscenter) < 0.01 ) res.rgb = float3(1,0,0);
if ( focuscircle == 0 ) return res;
float cstep = (1.0/3.0); float cstep = (1.0/3.0);
float2 tcoord; float2 tcoord;
float focusradius = tod_ind(focusradius); float focusradius = tod_ind(focusradius);
@ -1585,6 +1632,14 @@ technique11 Prepass7
} }
} }
technique11 Prepass8 technique11 Prepass8
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_DoFPostBlur()));
}
}
technique11 Prepass9
{ {
pass p0 pass p0
{ {
@ -1662,7 +1717,7 @@ technique11 PrepassB8
pass p0 pass p0
{ {
SetVertexShader(CompileShader(vs_5_0,VS_Quad())); SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_DoFBorkehB())); SetPixelShader(CompileShader(ps_5_0,PS_DoFPostBlur()));
} }
} }
technique11 PrepassB9 technique11 PrepassB9

View file

@ -43,9 +43,9 @@ Focus Triangle Angle=0.5
Focus Triangle Radius Night=9.0 Focus Triangle Radius Night=9.0
Focus Triangle Radius Day=12.0 Focus Triangle Radius Day=12.0
Focus Triangle Radius Interior=10.5 Focus Triangle Radius Interior=10.5
Focus Triangle Blending Night=0.6 Focus Triangle Blending Night=0.75
Focus Triangle Blending Day=0.7 Focus Triangle Blending Day=0.9
Focus Triangle Blending Interior=0.6 Focus Triangle Blending Interior=0.8
Focus Maximum Depth Night=990.0 Focus Maximum Depth Night=990.0
Focus Maximum Depth Day=994.0 Focus Maximum Depth Day=994.0
Focus Maximum Depth Interior=988.0 Focus Maximum Depth Interior=988.0
@ -70,19 +70,19 @@ DOF Fixed Focus Shift Interior=-0.01
DOF Fixed Focus Blend Night=1.0 DOF Fixed Focus Blend Night=1.0
DOF Fixed Focus Blend Day=1.0 DOF Fixed Focus Blend Day=1.0
DOF Fixed Focus Blend Interior=1.0 DOF Fixed Focus Blend Interior=1.0
DOF Fixed Unfocus Intensity Night=1.2 DOF Fixed Unfocus Intensity Night=1.49
DOF Fixed Unfocus Intensity Day=1.4 DOF Fixed Unfocus Intensity Day=1.39
DOF Fixed Unfocus Intensity Interior=1.3 DOF Fixed Unfocus Intensity Interior=1.43
DOF Fixed Unfocus Contrast Night=125.0 DOF Fixed Unfocus Contrast Night=125.0
DOF Fixed Unfocus Contrast Day=220.0 DOF Fixed Unfocus Contrast Day=220.0
DOF Fixed Unfocus Contrast Interior=165.0 DOF Fixed Unfocus Contrast Interior=165.0
DOF Fixed Unfocus Shift Night=-0.7 DOF Fixed Unfocus Shift Night=-1.06
DOF Fixed Unfocus Shift Day=-0.9 DOF Fixed Unfocus Shift Day=-1.1
DOF Fixed Unfocus Shift Interior=-0.8 DOF Fixed Unfocus Shift Interior=-1.08
DOF Fixed Unfocus Blend Night=1.0 DOF Fixed Unfocus Blend Night=1.0
DOF Fixed Unfocus Blend Day=1.0 DOF Fixed Unfocus Blend Day=1.0
DOF Fixed Unfocus Blend Interior=1.0 DOF Fixed Unfocus Blend Interior=1.0
DOF Fixed Use Cutoff=false DOF Fixed Use Cutoff=true
Disable DOF=false Disable DOF=false
DOF Gather Blur Radius=8.0 DOF Gather Blur Radius=8.0
Debug Depth=false Debug Depth=false
@ -100,19 +100,19 @@ 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.9 SSAO Fade Contrast Night=0.6
SSAO Fade Contrast Day=0.8 SSAO Fade Contrast Day=0.7
SSAO Fade Contrast Interior=0.85 SSAO Fade Contrast Interior=0.65
SSAO Fade Intensity Night=10.5 SSAO Fade Intensity Night=10.5
SSAO Fade Intensity Day=12.5 SSAO Fade Intensity Day=12.5
SSAO Fade Intensity Interior=11.5 SSAO Fade Intensity Interior=11.5
SSAO Intensity=3.0 SSAO Intensity=1.25
SSAO Contrast=1.5 SSAO Contrast=0.65
SSAO Blending=0.8 SSAO Blending=0.8
SSAO Blur=true SSAO Blur=true
SSAO Bilateral Factor=1500.0 SSAO Bilateral Factor=1500.0
SSAO Range=20.0 SSAO Range=20.0
SSAO Range Min=0.0 SSAO Range Min=1.0
SSAO Blur Radius=1.0 SSAO Blur Radius=1.0
Debug SSAO=false Debug SSAO=false
SSAO Use Less Samples=true SSAO Use Less Samples=true
@ -184,9 +184,10 @@ Frost Factor Night=1.16
Frost Factor Interior=0.27 Frost Factor Interior=0.27
DOF Bilateral Factor=20.0 DOF Bilateral Factor=20.0
DOF Bilateral Radius=1.0 DOF Bilateral Radius=1.0
DOF Blur Radius=6.0 DOF Blur Radius=10.0
DOF Blur Chromatic Aberration=1.5 DOF Blur Chromatic Aberration=1.5
Focus Plane Horizontal Tilt Center=0.5 Focus Plane Horizontal Tilt Center=0.5
Focus Plane Vertical Tilt Center=0.5 Focus Plane Vertical Tilt Center=0.5
Focus Plane Horizontal Tilt=0.0 Focus Plane Horizontal Tilt=0.0
Focus Plane Vertical Tilt=0.0 Focus Plane Vertical Tilt=0.0
Focus Mode=1

View file

@ -431,12 +431,6 @@ int dither
int UIMin = 0; int UIMin = 0;
int UIMax = 4; int UIMax = 4;
> = {4}; > = {4};
string str_bloom = "Bloom Settings";
bool bloomlighten
<
string UIName = "Use Lighten Blend";
string UIWidget = "Checkbox";
> = {false};
string str_debug = "Debugging"; string str_debug = "Debugging";
bool bloomdebug bool bloomdebug
< <
@ -846,16 +840,13 @@ float4 PS_Draw( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
float2 adapt = Adaptation(coord); float2 adapt = Adaptation(coord);
if ( bloomdebug ) res.rgb *= 0; if ( bloomdebug ) res.rgb *= 0;
float3 bcol = mud.rgb*ENBParams01.x; float3 bcol = mud.rgb*ENBParams01.x;
if ( bloomlighten ) res.rgb += bcol;
res.rgb = float3(max(res.r,bcol.r),max(res.g,bcol.g),
max(res.b,bcol.b));
else res.rgb += bcol;
if ( aenable ) res.rgb *= adapt.x; if ( aenable ) res.rgb *= adapt.x;
if ( nbt && ne ) res.rgb = FilmGrain(res.rgb,coord); if ( nbt && ne ) res.rgb = FilmGrain(res.rgb,coord);
if ( vtmapenable ) res.rgb = TonemapGame(res.rgb); if ( vtmapenable ) res.rgb = TonemapGame(res.rgb);
if ( vgradeenable ) res.rgb = GradingGame(res.rgb,adapt.y); if ( vgradeenable ) res.rgb = GradingGame(res.rgb,adapt.y);
#ifndef SKYRIMSE #ifndef SKYRIMSE
res.rgb = pow(res.rgb,1.0/2.2); res.rgb = pow(max(res.rgb,0.0),1.0/2.2);
#endif #endif
if ( tmapenable ) res.rgb = Tonemap(res.rgb); if ( tmapenable ) res.rgb = Tonemap(res.rgb);
if ( gradeenable1 ) res.rgb = GradingRGB(res.rgb); if ( gradeenable1 ) res.rgb = GradingRGB(res.rgb);

View file

@ -2,11 +2,11 @@
TECHNIQUE=1 TECHNIQUE=1
Enable Grain=true Enable Grain=true
Grain Speed=25.0 Grain Speed=25.0
Grain Intensity=1.34 Grain Intensity=1.57
Grain Saturation=-0.64 Grain Saturation=-0.64
Grain Two-Pass=true Grain Two-Pass=true
Grain Blending Mode=3 Grain Blending Mode=3
Grain Dark Mask Contrast=24.369999 Grain Dark Mask Contrast=29.74
Grain Two-Pass Factor=0.04 Grain Two-Pass Factor=0.04
Grain Magnification=13.3, 19.6, 17.4 Grain Magnification=13.3, 19.6, 17.4
Grain Pass 1 Magnification=2.05, 3.11, 2.22 Grain Pass 1 Magnification=2.05, 3.11, 2.22

View file

@ -34,25 +34,19 @@ float2 sres
> = {0.0,0.0}; > = {0.0,0.0};
/* /*
palette type: palette type:
-2 : Standard VGA 256-color palette
-1 : disable -1 : disable
0 : CGA (320x200 4-color, or 640x200 monochrome) 0 : CGA (320x200 4-color, or 640x200 monochrome)
1 : EGA (320x200, 16 colors) 1 : EGA (320x200, 16 colors)
2 : RGB2 (64-color quarter VGA palette, used in AOS) 2 : RGB2 (64-color quarter VGA palette, used in AOS)
3 : RGB323 (8-bit RGB, I don't think this was a real thing) 3 : VGA (256 colors)
4 : VGA (256 colors, standard palette) 4 : RGB565 (ol' 16-bit "true color")
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 int paltype
< <
string UIName = "Palette Type"; string UIName = "Palette Type";
string UIWidget = "Spinner"; string UIWidget = "Spinner";
int UIMin = -1; int UIMin = -1;
int UIMax = 9; int UIMax = 4;
> = {1}; > = {1};
/* /*
CGA palette to use: CGA palette to use:
@ -83,6 +77,32 @@ int egapal
int UIMin = 0; int UIMin = 0;
int UIMax = 1; int UIMax = 1;
> = {0}; > = {0};
/*
VGA palette to use:
0 : Standard VGA
1 : Amulets & Armor
2 : Blood
3 : Doom
4 : Duke Nukem 3D
5 : Hacx 2.0
6 : Heretic
7 : Hexen
8 : Hexen 2
9 : Quake
10 : Quake 2
11 : Rise of the Triad
12 : Shadow Warrior
13 : Strife
14 : Wolfenstein 3D
TODO Project .Blank palette (when the design is finished)
*/
int vgapal
<
string UIName = "VGA Palette";
string UIWidget = "Spinner";
int UIMin = 0;
int UIMax = 14;
> = {0};
/* /*
Dithering mode: Dithering mode:
-1 : No dithering, just raw banding -1 : No dithering, just raw banding
@ -333,94 +353,6 @@ static const float ordered8[64] =
d(42),d(26),d(38),d(22),d(41),d(25),d(37),d(21) d(42),d(26),d(38),d(22),d(41),d(25),d(37),d(21)
}; };
#undef d #undef d
/*
palettes
don't touch unless you know what you're doing
*/
#define d(x) x/3.0
static const float3 cga1l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(2)),
float3(d(2),d(0),d(2)),
float3(d(2),d(2),d(2))
};
static const float3 cga1h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(3)),
float3(d(3),d(1),d(3)),
float3(d(3),d(3),d(3))
};
static const float3 cga2l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(0)),
float3(d(2),d(0),d(0)),
float3(d(2),d(1),d(0))
};
static const float3 cga2h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(1)),
float3(d(3),d(1),d(1)),
float3(d(3),d(2),d(1))
};
static const float3 cga3l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(2)),
float3(d(2),d(0),d(0)),
float3(d(2),d(2),d(2))
};
static const float3 cga3h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(3)),
float3(d(3),d(1),d(1)),
float3(d(3),d(3),d(3))
};
static const float3 stdega[16] =
{
float3(d(0),d(0),d(0)),
float3(d(2),d(0),d(0)),
float3(d(0),d(2),d(0)),
float3(d(2),d(1),d(0)),
float3(d(0),d(0),d(2)),
float3(d(2),d(0),d(2)),
float3(d(0),d(2),d(2)),
float3(d(2),d(2),d(2)),
float3(d(1),d(1),d(1)),
float3(d(3),d(1),d(1)),
float3(d(1),d(3),d(1)),
float3(d(3),d(3),d(1)),
float3(d(1),d(1),d(3)),
float3(d(3),d(1),d(3)),
float3(d(1),d(3),d(3)),
float3(d(3),d(3),d(3))
};
#undef d
#define d(x) x/256.0
static const float3 aosega[16] =
{
float3(d( 0),d( 0),d( 0)),
float3(d(128),d( 0),d( 0)),
float3(d( 32),d(128),d( 0)),
float3(d(160),d( 64),d( 32)),
float3(d( 0),d( 32),d( 88)),
float3(d( 60),d( 0),d( 88)),
float3(d( 16),d(160),d(208)),
float3(d( 88),d( 88),d( 88)),
float3(d( 32),d( 32),d( 32)),
float3(d(256),d( 64),d( 64)),
float3(d( 72),d(256),d( 64)),
float3(d(256),d(224),d( 60)),
float3(d( 48),d(128),d(256)),
float3(d(192),d( 48),d(256)),
float3(d( 72),d(224),d(256)),
float3(d(256),d(256),d(256)),
};
#undef d
/* gauss stuff */ /* gauss stuff */
float gauss3[3] = float gauss3[3] =
{ {
@ -439,13 +371,13 @@ Texture2D TextureDots
< <
string ResourceName = "menbdots.png"; string ResourceName = "menbdots.png";
>; >;
Texture2D TextureDoom Texture2D TextureCGA
< <
string ResourceName = "menbdoomlut.png"; string ResourceName = "menbcgalut.png";
>; >;
Texture2D TextureQuake Texture2D TextureEGA
< <
string ResourceName = "menbquakelut.png"; string ResourceName = "menbegalut.png";
>; >;
Texture2D TextureVGA Texture2D TextureVGA
< <
@ -559,75 +491,10 @@ float4 ReducePrepass( in float4 col, in float2 coord )
*/ */
float4 ReduceCGA( in float4 color, in float2 coord ) float4 ReduceCGA( in float4 color, in float2 coord )
{ {
float4 dac = ReducePrepass(color,coord); float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
if ( cgapal == 0 ) float2 lc = float2((dac.r+cgapal)/7.0,
{ dac.g/64.0+floor(dac.b*64.0)/64.0);
dac.a = (dac.r+dac.g+dac.b)/3.0; return TextureCGA.Sample(SamplerLUT,lc);
return (dac.a>0.5);
}
float dist = 2.0;
int idx = 0;
if ( cgapal == 1 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga1l[i]);
}
color.rgb = cga1l[idx];
}
else if ( cgapal == 2 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga1h[i]);
}
color.rgb = cga1h[idx];
}
else if ( cgapal == 3 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga2l[i]);
}
color.rgb = cga2l[idx];
}
else if ( cgapal == 4 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga2h[i]);
}
color.rgb = cga2h[idx];
}
else if ( cgapal == 5 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga3l[i]);
}
color.rgb = cga3l[idx];
}
else if ( cgapal == 6 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga3h[i]);
}
color.rgb = cga3h[idx];
}
return color;
} }
/* /*
EGA technically only had the 320x200 16-colour graphic mode, but when VGA EGA technically only had the 320x200 16-colour graphic mode, but when VGA
@ -637,30 +504,10 @@ float4 ReduceCGA( in float4 color, in float2 coord )
*/ */
float4 ReduceEGA( in float4 color, in float2 coord ) float4 ReduceEGA( in float4 color, in float2 coord )
{ {
float4 dac = ReducePrepass(color,coord); float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float dist = 2.0; float2 lc = float2((dac.r+egapal)/2.0,
int idx = 0; dac.g/64.0+floor(dac.b*64.0)/64.0);
if ( egapal == 0 ) return TextureEGA.Sample(SamplerLUT,lc);
{
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,stdega[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,stdega[i]);
}
color.rgb = stdega[idx];
}
else
{
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,aosega[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,aosega[i]);
}
color.rgb = aosega[idx];
}
return color;
} }
/* A two bits per channel mode that can usually fit VGA mode 13h and mode x */ /* 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 ReduceRGB2( in float4 color, in float2 coord )
@ -669,20 +516,6 @@ float4 ReduceRGB2( in float4 color, in float2 coord )
color.rgb = trunc(dac.rgb*4.0)/4.0; color.rgb = trunc(dac.rgb*4.0)/4.0;
return color; 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, 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 especially that subtle green tint and the banding due to lack of dithering
@ -695,38 +528,12 @@ float4 ReduceRGB565( in float4 color, in float2 coord )
/float3(32.0,64.0,32.0); /float3(32.0,64.0,32.0);
return color; return color;
} }
/* /* Various VGA 256-colour palettes */
If you see no difference when using this, then it could be because your
own screen is already 6bpc. This is the case for a lot of LCDs, both old
and modern. 8bpc tends to be the norm on IPS, though. 10bpc is the next
step, but for now it's only used internally in video codecs for more
efficient compression with lower quality loss. I seem to recall that in
most *nix systems such as Linux it's possible to have 10bpc already with
NVIDIA, but it causes compatibility issues with a lot of programs.
*/
float4 ReduceRGB6( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*64.0)/64.0;
return color;
}
/* Various VGA 256-colour palettes: Doom, Quake I, and the standard. */
float4 ReduceDoom( in float4 color, in float2 coord )
{
float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureDoom.Sample(SamplerLUT,lc);
}
float4 ReduceQuake( in float4 color, in float2 coord )
{
float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureQuake.Sample(SamplerLUT,lc);
}
float4 ReduceVGA( in float4 color, in float2 coord ) float4 ReduceVGA( in float4 color, in float2 coord )
{ {
float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995); float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0); float2 lc = float2((dac.r+vgapal)/15.0,
dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureVGA.Sample(SamplerLUT,lc); return TextureVGA.Sample(SamplerLUT,lc);
} }
@ -758,13 +565,8 @@ float4 PS_Retro( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
if ( paltype == 0 ) res = ReduceCGA(tcol,(coord*rresl)/sresl); if ( paltype == 0 ) res = ReduceCGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 1 ) res = ReduceEGA(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 == 2 ) res = ReduceRGB2(tcol,(coord*rresl)/sresl);
else if ( paltype == 3 ) res = ReduceRGB323(tcol,(coord*rresl)/sresl); else if ( paltype == 3 ) res = ReduceVGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 4 ) res = ReduceVGA(tcol,(coord*rresl)/sresl); else if ( paltype == 4 ) res = ReduceRGB565(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; else res = tcol;
if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 ) if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 )
res *= 0; res *= 0;

View file

@ -27,17 +27,17 @@ Curve Chromatic Aberration=0.7
Curve Zooming=50.200008 Curve Zooming=50.200008
Curve Distortion=0.0 Curve Distortion=0.0
Curve Sampling Soften=0.0 Curve Sampling Soften=0.0
Enable Blur=false Enable Blur=true
Blur Sampling Range=0.15 Blur Sampling Range=0.15
Enable Sharp=false Enable Sharp=true
Sharp Sampling Range=0.35 Sharp Sampling Range=0.38
Sharpening Amount=3.0 Sharpening Amount=1.37
Enable Shift=false Enable Shift=false
Shift Sampling Range=0.6 Shift Sampling Range=0.6
Luma Sharpen Enable=true Luma Sharpen Enable=true
Luma Sharpen Radius=0.8 Luma Sharpen Radius=0.8
Luma Sharpen Clamp=0.1 Luma Sharpen Clamp=0.05
Luma Sharpen Blending=6.0 Luma Sharpen Blending=8.0
Emulated Resolution Width=0.0 Emulated Resolution Width=0.0
Emulated Resolution Height=0.0 Emulated Resolution Height=0.0
Zoom Factor X=0.0 Zoom Factor X=0.0
@ -45,3 +45,4 @@ Zoom Factor Y=0.0
Chroma Key Red=0, 1, 0 Chroma Key Red=0, 1, 0
Chroma Key Green=1.0 Chroma Key Green=1.0
Chroma Key Blue=0.0 Chroma Key Blue=0.0
VGA Palette=0

BIN
enbseries/menbcgalut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

BIN
enbseries/menbegalut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 509 KiB

Before After
Before After