MariENB FROST 3.2.0b
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
3.1.1 BETA "Stay FROSTy"
|
3.2.0 BETA "Let Go"
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 24 KiB |
BIN
enbseries/menbegalut.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 1.7 MiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 509 KiB |