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
AmbientLightingIntensitySunset=0.66
AmbientLightingIntensityDusk=0.44
AmbientLightingIntensityNight=0.21
AmbientLightingIntensityInteriorDay=0.22
AmbientLightingIntensityInteriorNight=0.19
AmbientLightingIntensityNight=0.13
AmbientLightingIntensityInteriorDay=0.15
AmbientLightingIntensityInteriorNight=0.12
[SSAO_SSIL]
UseIndirectLighting=true
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";
float UIMin = 0.0;
> = {1.0};
float bloomtheta
<
string UIName = "Bloom Angle";
string UIWidget = "Spinner";
float UIMin = 0.0;
float UIMax = 1.0;
> = {0.0};
/* bloom tint/blueshift parameters */
float3 blu_n
<
@ -279,83 +272,21 @@ float bloommixs
string UIName = "Bloom Single Pass Blend";
string UIWidget = "Spinner";
> = {1.0};
string str_bloomdirt = "Lens Dirt";
bool dirtenable
<
string UIName = "Enable Lens Dirt";
string UIWidget = "Checkbox";
> = {false};
float dirtmix1
<
string UIName = "Dirt Pass 1 Blend";
string UIWidget = "Spinner";
> = {0.0};
float dirtmix2
<
string UIName = "Dirt Pass 2 Blend";
string UIWidget = "Spinner";
> = {0.1};
float dirtmix3
<
string UIName = "Dirt Pass 3 Blend";
string UIWidget = "Spinner";
> = {1.2};
float dirtmix4
<
string UIName = "Dirt Pass 4 Blend";
string UIWidget = "Spinner";
> = {0.5};
float dirtmix5
<
string UIName = "Dirt Pass 5 Blend";
string UIWidget = "Spinner";
> = {0.25};
float dirtmix6
<
string UIName = "Dirt Pass 6 Blend";
string UIWidget = "Spinner";
> = {0.1};
float dirtmixs
<
string UIName = "Dirt Single Pass Blend";
string UIWidget = "Spinner";
> = {1.0};
float dirtsaturation
<
string UIName = "Dirt Saturation";
string UIWidget = "Spinner";
> = {1.0};
float ldirtpow
<
string UIName = "Dirt 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 */
/* radius: 4, std dev: 1.5 */
/*static const float gauss4[4] =
static const float gauss4[4] =
{
0.270682, 0.216745, 0.111281, 0.036633
};*/
};
/* radius: 8, std dev: 3 */
static const float gauss8[8] =
/*static const float gauss8[8] =
{
0.134598, 0.127325, 0.107778, 0.081638,
0.055335, 0.033562, 0.018216, 0.008847
};
};*/
/* radius: 40, std dev: 15 */
/*static const float gauss40[40] =
static const float gauss40[40] =
{
0.026823, 0.026763, 0.026585, 0.026291,
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.002756, 0.002385, 0.002055, 0.001763,
0.001506, 0.001280, 0.001084, 0.000913
};*/
};
/* radius: 80, std dev: 30 */
static const float gauss80[80] =
/*static const float gauss80[80] =
{
0.013406, 0.013398, 0.013376, 0.013339, 0.013287, 0.013221,
0.013140, 0.013046, 0.012938, 0.012816, 0.012681, 0.012534,
@ -385,7 +316,7 @@ static const float gauss80[80] =
0.001192, 0.001107, 0.001027, 0.000952, 0.000881, 0.000815,
0.000753, 0.000694, 0.000640, 0.000589, 0.000542, 0.000497,
0.000456, 0.000418
};
};*/
/* mathematical constants */
static const float pi = 3.1415926535898;
@ -406,15 +337,6 @@ Texture2D RenderTarget64;
Texture2D RenderTarget32;
Texture2D RenderTargetRGBA64F;
Texture2D TextureLens
<
#ifdef LENSDIRT_DDS
string ResourceName = "menblens.dds";
#else
string ResourceName = "menblens.png";
#endif
>;
SamplerState Sampler
{
Filter = MIN_MAG_MIP_LINEAR;
@ -428,13 +350,6 @@ SamplerState Sampler2
AddressV = Clamp;
};
SamplerState SamplerLens
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Mirror;
AddressV = Mirror;
};
struct VS_INPUT_POST
{
float3 pos : POSITION;
@ -533,14 +448,13 @@ float4 Anamorphic( float2 coord, Texture2D intex, float insz )
base = RenderTargetRGBA64F.Sample(Sampler,coord);
int i;
float sum = 0.0;
float inc = flen/insz;
float2 pp;
float2 dir = float2(cos(bloomtheta*2*pi),sin(bloomtheta*2*pi))
*flen/insz;
[unroll] for ( i=-79; i<=79; i++ )
[unroll] for ( i=-39; i<=39; i++ )
{
pp = coord+dir*i;
res += gauss80[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss80[abs(i)]:0.0;
pp = coord+float2(i,0)*inc;
res += gauss40[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss40[abs(i)]:0.0;
}
res *= 1.0/sum;
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);
int i;
float sum = 0.0;
float inc = bloomradiusx/insz;
float2 pp;
float2 dir = float2(cos(bloomtheta*2*pi),sin(bloomtheta*2*pi))
*bloomradiusx/insz;
[unroll] for ( i=-7; i<=7; i++ )
[unroll] for ( i=-3; i<=3; i++ )
{
pp = coord+dir*i;
res += gauss8[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss8[abs(i)]:0.0;
pp = coord+float2(i,0)*inc;
res += gauss4[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.x>=0.0)&&(pp.x<1.0))?gauss4[abs(i)]:0.0;
}
res *= 1.0/sum;
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);
int i;
float sum = 0.0;
float inc = bloomradiusy/insz;
float2 pp;
float2 dir = float2(sin(bloomtheta*2*pi),-cos(bloomtheta*2*pi))
*bloomradiusy/insz;
[unroll] for ( i=-7; i<=7; i++ )
[unroll] for ( i=-3; i<=3; i++ )
{
pp = coord+dir*i;
res += gauss8[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.y>=0.0)&&(pp.y<1.0))?gauss8[abs(i)]:0.0;
pp = coord+float2(0,i)*inc;
res += gauss4[abs(i)]*intex.Sample(Sampler,pp);
sum += ((pp.y>=0.0)&&(pp.y<1.0))?gauss4[abs(i)]:0.0;
}
res *= 1.0/sum;
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 = clamp(res.rgb,0.0,32768.0);
res.a = 1.0;
if ( !dirtenable ) return res;
/* crappy lens filter, useful when playing characters with glasses */
float2 ccoord = coord;
#ifdef ASPECT_LENSDIRT
ccoord.y = (coord.y-0.5)*ScreenSize.w+0.5;
#endif
float4 crap = TextureLens.Sample(SamplerLens,ccoord);
float4 mud = dirtmix1*RenderTarget1024.Sample(Sampler2,coord);
mud += dirtmix2*RenderTarget512.Sample(Sampler2,coord);
mud += dirtmix3*RenderTarget256.Sample(Sampler2,coord);
mud += dirtmix4*RenderTarget128.Sample(Sampler2,coord);
mud += dirtmix5*RenderTarget64.Sample(Sampler2,coord);
mud += dirtmix6*RenderTarget32.Sample(Sampler2,coord);
mud.rgb /= 6.0;
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;
}
@ -655,24 +543,6 @@ float4 PS_SPostPass( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
float4 res = bloommixs*RenderTarget128.Sample(Sampler2,coord);
res.rgb = clamp(res.rgb,0.0,32768.0);
res.a = 1.0;
if ( !dirtenable ) return res;
/* crappy lens filter, useful when playing characters with glasses */
float2 ccoord = coord;
#ifdef ASPECT_LENSDIRT
ccoord.y = (coord.y-0.5)*ScreenSize.w+0.5;
#endif
float4 crap = TextureLens.Sample(SamplerLens,ccoord);
float4 mud = dirtmixs*RenderTarget32.Sample(Sampler2,coord);
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;
}

View file

@ -1,5 +1,5 @@
[ENBBLOOM.FX]
TECHNIQUE=1
TECHNIQUE=2
Bloom Intensity Night=0.69
Bloom Intensity Day=0.38
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 Contrast Interior Night=1.12
Anamorphic Bloom Contrast Interior Day=1.22
Bloom Pass 1 Blend=0.34
Bloom Pass 2 Blend=0.59
Bloom Pass 3 Blend=0.71
Bloom Pass 4 Blend=0.79
Bloom Pass 5 Blend=0.88
Bloom Pass 6 Blend=0.94
Bloom Pass 1 Blend=0.29
Bloom Pass 2 Blend=0.57
Bloom Pass 3 Blend=0.86
Bloom Pass 4 Blend=1.14
Bloom Pass 5 Blend=1.43
Bloom Pass 6 Blend=1.71
Enable Lens Dirt=false
Dirt Pass 1 Blend=0.08
Dirt Pass 2 Blend=0.25

View file

@ -266,12 +266,24 @@ bool frostalways
string UIWidget = "Checkbox";
> = {false};
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";
> = {true};
int UIMin = -2;
int UIMax = 2;
> = {1};
bool focusdisplay
<
string UIName = "Display Focus Points";
@ -853,6 +865,7 @@ float EInteriorFactor;
float4 TimeOfDay1;
float4 TimeOfDay2;
float4 DofParameters;
float4 tempInfo2;
Texture2D TextureCurrent;
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
{
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 cfocus = min(TextureDepth.Sample(Sampler1,focuscenter).x,
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 */
float focusradius = tod_ind(focusradius);
float focusmix = tod_ind(focusmix);
@ -1385,7 +1413,7 @@ float4 PS_DoFBorkeh( VS_OUTPUT_POST IN, float4 v0 : SV_Position0 ) : SV_Target
res /= tw;
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;
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;
}
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 ( focuscircle == 0 ) return res;
float cstep = (1.0/3.0);
float2 tcoord;
float focusradius = tod_ind(focusradius);
@ -1585,6 +1632,14 @@ technique11 Prepass7
}
}
technique11 Prepass8
{
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_DoFPostBlur()));
}
}
technique11 Prepass9
{
pass p0
{
@ -1662,7 +1717,7 @@ technique11 PrepassB8
pass p0
{
SetVertexShader(CompileShader(vs_5_0,VS_Quad()));
SetPixelShader(CompileShader(ps_5_0,PS_DoFBorkehB()));
SetPixelShader(CompileShader(ps_5_0,PS_DoFPostBlur()));
}
}
technique11 PrepassB9

View file

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

View file

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

View file

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

View file

@ -34,25 +34,19 @@ float2 sres
> = {0.0,0.0};
/*
palette type:
-2 : Standard VGA 256-color palette
-1 : disable
0 : CGA (320x200 4-color, or 640x200 monochrome)
1 : EGA (320x200, 16 colors)
2 : RGB2 (64-color quarter VGA palette, used in AOS)
3 : RGB323 (8-bit RGB, I don't think this was a real thing)
4 : VGA (256 colors, standard palette)
5 : Doom (256 colors, does not cover a lot)
6 : Quake I (256 colors, covers even less)
7 : RGB4 (4bpc, I also don't think this was ever used in real hardware)
8 : RGB565 (ol' 16-bit "true color")
9 : RGB6 (typical screens incapable of 8bpc)
3 : VGA (256 colors)
4 : RGB565 (ol' 16-bit "true color")
*/
int paltype
<
string UIName = "Palette Type";
string UIWidget = "Spinner";
int UIMin = -1;
int UIMax = 9;
int UIMax = 4;
> = {1};
/*
CGA palette to use:
@ -83,6 +77,32 @@ int egapal
int UIMin = 0;
int UIMax = 1;
> = {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:
-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)
};
#undef d
/*
palettes
don't touch unless you know what you're doing
*/
#define d(x) x/3.0
static const float3 cga1l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(2)),
float3(d(2),d(0),d(2)),
float3(d(2),d(2),d(2))
};
static const float3 cga1h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(3)),
float3(d(3),d(1),d(3)),
float3(d(3),d(3),d(3))
};
static const float3 cga2l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(0)),
float3(d(2),d(0),d(0)),
float3(d(2),d(1),d(0))
};
static const float3 cga2h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(1)),
float3(d(3),d(1),d(1)),
float3(d(3),d(2),d(1))
};
static const float3 cga3l[4] =
{
float3(d(0),d(0),d(0)),
float3(d(0),d(2),d(2)),
float3(d(2),d(0),d(0)),
float3(d(2),d(2),d(2))
};
static const float3 cga3h[4] =
{
float3(d(0),d(0),d(0)),
float3(d(1),d(3),d(3)),
float3(d(3),d(1),d(1)),
float3(d(3),d(3),d(3))
};
static const float3 stdega[16] =
{
float3(d(0),d(0),d(0)),
float3(d(2),d(0),d(0)),
float3(d(0),d(2),d(0)),
float3(d(2),d(1),d(0)),
float3(d(0),d(0),d(2)),
float3(d(2),d(0),d(2)),
float3(d(0),d(2),d(2)),
float3(d(2),d(2),d(2)),
float3(d(1),d(1),d(1)),
float3(d(3),d(1),d(1)),
float3(d(1),d(3),d(1)),
float3(d(3),d(3),d(1)),
float3(d(1),d(1),d(3)),
float3(d(3),d(1),d(3)),
float3(d(1),d(3),d(3)),
float3(d(3),d(3),d(3))
};
#undef d
#define d(x) x/256.0
static const float3 aosega[16] =
{
float3(d( 0),d( 0),d( 0)),
float3(d(128),d( 0),d( 0)),
float3(d( 32),d(128),d( 0)),
float3(d(160),d( 64),d( 32)),
float3(d( 0),d( 32),d( 88)),
float3(d( 60),d( 0),d( 88)),
float3(d( 16),d(160),d(208)),
float3(d( 88),d( 88),d( 88)),
float3(d( 32),d( 32),d( 32)),
float3(d(256),d( 64),d( 64)),
float3(d( 72),d(256),d( 64)),
float3(d(256),d(224),d( 60)),
float3(d( 48),d(128),d(256)),
float3(d(192),d( 48),d(256)),
float3(d( 72),d(224),d(256)),
float3(d(256),d(256),d(256)),
};
#undef d
/* gauss stuff */
float gauss3[3] =
{
@ -439,13 +371,13 @@ Texture2D TextureDots
<
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
<
@ -559,75 +491,10 @@ float4 ReducePrepass( in float4 col, in float2 coord )
*/
float4 ReduceCGA( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
if ( cgapal == 0 )
{
dac.a = (dac.r+dac.g+dac.b)/3.0;
return (dac.a>0.5);
}
float dist = 2.0;
int idx = 0;
if ( cgapal == 1 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga1l[i]);
}
color.rgb = cga1l[idx];
}
else if ( cgapal == 2 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga1h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga1h[i]);
}
color.rgb = cga1h[idx];
}
else if ( cgapal == 3 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga2l[i]);
}
color.rgb = cga2l[idx];
}
else if ( cgapal == 4 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga2h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga2h[i]);
}
color.rgb = cga2h[idx];
}
else if ( cgapal == 5 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3l[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga3l[i]);
}
color.rgb = cga3l[idx];
}
else if ( cgapal == 6 )
{
[unroll] for ( int i=0; i<4; i++ )
if ( distance(dac.rgb,cga3h[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,cga3h[i]);
}
color.rgb = cga3h[idx];
}
return color;
float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float2 lc = float2((dac.r+cgapal)/7.0,
dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureCGA.Sample(SamplerLUT,lc);
}
/*
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 dac = ReducePrepass(color,coord);
float dist = 2.0;
int idx = 0;
if ( egapal == 0 )
{
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,stdega[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,stdega[i]);
}
color.rgb = stdega[idx];
}
else
{
[unroll] for ( int i=0; i<16; i++ )
if ( distance(dac.rgb,aosega[i]) < dist )
{
idx = i;
dist = distance(dac.rgb,aosega[i]);
}
color.rgb = aosega[idx];
}
return color;
float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float2 lc = float2((dac.r+egapal)/2.0,
dac.g/64.0+floor(dac.b*64.0)/64.0);
return TextureEGA.Sample(SamplerLUT,lc);
}
/* A two bits per channel mode that can usually fit VGA mode 13h and mode x */
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;
return color;
}
/* Effectively has 256 colours, with a magenta tint due to precision loss */
float4 ReduceRGB323( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*float3(8.0,4.0,8.0))/float3(8.0,4.0,8.0);
return color;
}
/* 4096 colours, no actual graphics hardware existed that used 4bpc, though */
float4 ReduceRGB4( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*16.0)/16.0;
return color;
}
/*
The classic 16-bit colour mode everyone from my generation would remember,
especially that subtle green tint and the banding due to lack of dithering
@ -695,38 +528,12 @@ float4 ReduceRGB565( in float4 color, in float2 coord )
/float3(32.0,64.0,32.0);
return color;
}
/*
If you see no difference when using this, then it could be because your
own screen is already 6bpc. This is the case for a lot of LCDs, both old
and modern. 8bpc tends to be the norm on IPS, though. 10bpc is the next
step, but for now it's only used internally in video codecs for more
efficient compression with lower quality loss. I seem to recall that in
most *nix systems such as Linux it's possible to have 10bpc already with
NVIDIA, but it causes compatibility issues with a lot of programs.
*/
float4 ReduceRGB6( in float4 color, in float2 coord )
{
float4 dac = ReducePrepass(color,coord);
color.rgb = trunc(dac.rgb*64.0)/64.0;
return color;
}
/* 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);
}
/* Various VGA 256-colour palettes */
float4 ReduceVGA( in float4 color, in float2 coord )
{
float4 dac = clamp(ReducePrepass(color,coord)+0.005,0.005,0.995);
float2 lc = float2(dac.r,dac.g/64.0+floor(dac.b*64.0)/64.0);
float2 lc = float2((dac.r+vgapal)/15.0,
dac.g/64.0+floor(dac.b*64.0)/64.0);
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);
else if ( paltype == 1 ) res = ReduceEGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 2 ) res = ReduceRGB2(tcol,(coord*rresl)/sresl);
else if ( paltype == 3 ) res = ReduceRGB323(tcol,(coord*rresl)/sresl);
else if ( paltype == 4 ) res = ReduceVGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 5 ) res = ReduceDoom(tcol,(coord*rresl)/sresl);
else if ( paltype == 6 ) res = ReduceQuake(tcol,(coord*rresl)/sresl);
else if ( paltype == 7 ) res = ReduceRGB4(tcol,(coord*rresl)/sresl);
else if ( paltype == 8 ) res = ReduceRGB565(tcol,(coord*rresl)/sresl);
else if ( paltype == 9 ) res = ReduceRGB6(tcol,(coord*rresl)/sresl);
else if ( paltype == 3 ) res = ReduceVGA(tcol,(coord*rresl)/sresl);
else if ( paltype == 4 ) res = ReduceRGB565(tcol,(coord*rresl)/sresl);
else res = tcol;
if ( ncoord.x < 0 || ncoord.x >= 1 || ncoord.y < 0 || ncoord.y >= 1 )
res *= 0;

View file

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