MariENB FO4 3.0.0a
This commit is contained in:
parent
1917a1cbb8
commit
dbcdd398df
33 changed files with 6568 additions and 13 deletions
111
enbseries/enbadaptation.fx
Normal file
111
enbseries/enbadaptation.fx
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
/* This shader intentionally left unchanged */
|
||||
float4 AdaptationParameters;
|
||||
Texture2D TextureCurrent;
|
||||
Texture2D TexturePrevious;
|
||||
SamplerState Sampler0
|
||||
{
|
||||
Filter = MIN_MAG_MIP_POINT;
|
||||
AddressU = Clamp;
|
||||
AddressV = Clamp;
|
||||
};
|
||||
struct VS_INPUT_POST
|
||||
{
|
||||
float3 pos : POSITION;
|
||||
float2 txcoord : TEXCOORD0;
|
||||
};
|
||||
struct VS_OUTPUT_POST
|
||||
{
|
||||
float4 pos : SV_POSITION;
|
||||
float2 txcoord0 : TEXCOORD0;
|
||||
};
|
||||
VS_OUTPUT_POST VS_Quad(VS_INPUT_POST IN,
|
||||
uniform float sizeX, uniform float sizeY)
|
||||
{
|
||||
VS_OUTPUT_POST OUT;
|
||||
float4 pos;
|
||||
pos.xyz = IN.pos.xyz;
|
||||
pos.w = 1.0;
|
||||
OUT.pos = pos;
|
||||
float2 offset;
|
||||
offset.x = sizeX;
|
||||
offset.y = sizeY;
|
||||
OUT.txcoord0.xy = IN.txcoord.xy+offset.xy;
|
||||
return OUT;
|
||||
}
|
||||
float4 PS_Downsample(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
|
||||
{
|
||||
float4 res;
|
||||
float2 pos, coord;
|
||||
float4 curr = 0.0, currmax = 0.0;
|
||||
const float scale = 1.0/16.0, step = 1.0/16.0, halfstep = 0.5/16.0;
|
||||
pos.x = -0.5+halfstep;
|
||||
for (int x=0; x<16; x++)
|
||||
{
|
||||
pos.y = -0.5+halfstep;
|
||||
for (int y=0; y<16; y++)
|
||||
{
|
||||
coord = pos.xy*scale;
|
||||
float4 tempcurr = TextureCurrent.Sample(Sampler0,
|
||||
IN.txcoord0.xy+coord.xy);
|
||||
currmax = max(currmax,tempcurr);
|
||||
curr += tempcurr;
|
||||
pos.y += step;
|
||||
}
|
||||
pos.x += step;
|
||||
}
|
||||
curr /= 256.0;
|
||||
res = curr;
|
||||
res = max(res.x,max(res.y,res.z));
|
||||
res.w = 1.0;
|
||||
return res;
|
||||
}
|
||||
float4 PS_Adaptation(VS_OUTPUT_POST IN, float4 v0 : SV_Position0) : SV_Target
|
||||
{
|
||||
float4 res;
|
||||
float prev = TexturePrevious.Sample(Sampler0,IN.txcoord0.xy).x;
|
||||
float2 pos;
|
||||
float curr = 0.0, currmax = 0.0;
|
||||
const float step = 1.0/16.0, halfstep = 0.5/16.0;
|
||||
pos.x = halfstep;
|
||||
for (int x=0; x<16; x++)
|
||||
{
|
||||
pos.y = halfstep;
|
||||
for (int y=0; y<16; y++)
|
||||
{
|
||||
float tempcurr = TextureCurrent.Sample(Sampler0,
|
||||
IN.txcoord0.xy+pos.xy).x;
|
||||
currmax = max(currmax,tempcurr);
|
||||
curr += tempcurr;
|
||||
pos.y += step;
|
||||
}
|
||||
pos.x += step;
|
||||
}
|
||||
curr /= 256.0;
|
||||
curr = lerp(curr,currmax,AdaptationParameters.z);
|
||||
res = lerp(prev,curr,AdaptationParameters.w);
|
||||
res = max(res,0.001);
|
||||
res = min(res,16384.0);
|
||||
float valmax, valcut;
|
||||
valmax = max(res.x,max(res.y,res.z));
|
||||
valcut = max(valmax,AdaptationParameters.x);
|
||||
valcut = min(valcut,AdaptationParameters.y);
|
||||
res *= valcut/(valmax+0.000000001);
|
||||
res.w = 1.0;
|
||||
return res;
|
||||
}
|
||||
technique11 Downsample
|
||||
{
|
||||
pass p0
|
||||
{
|
||||
SetVertexShader(CompileShader(vs_5_0,VS_Quad(0.0,0.0)));
|
||||
SetPixelShader(CompileShader(ps_5_0,PS_Downsample()));
|
||||
}
|
||||
}
|
||||
technique11 Draw
|
||||
{
|
||||
pass p0
|
||||
{
|
||||
SetVertexShader(CompileShader(vs_5_0,VS_Quad(0.0,0.0)));
|
||||
SetPixelShader(CompileShader(ps_5_0,PS_Adaptation()));
|
||||
}
|
||||
}
|
||||
Reference in a new issue