179 lines
4.4 KiB
HLSL
179 lines
4.4 KiB
HLSL
/*
|
|
menbeffectfilters.fx : MariENB base shader routines.
|
|
(C)2013-2014 Marisa Kirisame, UnSX Team.
|
|
Part of MariENB, the personal ENB of Marisa.
|
|
Released under the MIT License.
|
|
*/
|
|
VS_OUTPUT_POST VS_Pass( VS_INPUT_POST IN )
|
|
{
|
|
VS_OUTPUT_POST OUT;
|
|
OUT.vpos = float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);
|
|
OUT.txcoord0.xy = IN.txcoord0.xy;
|
|
return OUT;
|
|
}
|
|
/* MariENB shader */
|
|
float4 PS_Mari( VS_OUTPUT_POST IN, float2 vPos : VPOS ) : COLOR
|
|
{
|
|
float2 coord = IN.txcoord0.xy;
|
|
float4 res = tex2D(_s0,coord);
|
|
float tod = ENightDayFactor;
|
|
float ind = EInteriorFactor;
|
|
/* screen mud goes here */
|
|
if ( softbloom )
|
|
{
|
|
float2 bresl = float2(ScreenSize.x,ScreenSize.x*ScreenSize.w);
|
|
float2 bof = float2(1.0/bresl.x,1.0/bresl.y)*softbloomsmp;
|
|
int i,j;
|
|
if ( softbloomlv == 1 )
|
|
{
|
|
for ( i=-2; i<=2; i++ )
|
|
for ( j=-2; j<=2; j++ )
|
|
res += gauss5[abs(i)][abs(j)]
|
|
*tex2D(_s3,coord+float2(i,j)
|
|
*bof)*EBloomAmount;
|
|
}
|
|
else if ( softbloomlv == 2 )
|
|
{
|
|
for ( i=-3; i<=3; i++ )
|
|
for ( j=-3; j<=3; j++ )
|
|
res += gauss7[abs(i)][abs(j)]
|
|
*tex2D(_s3,coord+float2(i,j)
|
|
*bof)*EBloomAmount;
|
|
}
|
|
else
|
|
{
|
|
for ( i=-1; i<=1; i++ )
|
|
for ( j=-1; j<=1; j++ )
|
|
res += gauss3[abs(i)][abs(j)]
|
|
*tex2D(_s3,coord+float2(i,j)
|
|
*bof)*EBloomAmount;
|
|
}
|
|
}
|
|
else
|
|
res += tex2D(_s3,coord)*EBloomAmount;
|
|
float4 adapt = tex2D(_s4,0.5);
|
|
/* adaptation */
|
|
if ( aenable )
|
|
{
|
|
float adapts = clamp((adapt.r+adapt.g+adapt.b)/3.0,0.0,50.0);
|
|
float amin = lerp(lerp(amin_n,amin_d,tod),lerp(amin_in,amin_id,
|
|
tod),ind);
|
|
float amax = lerp(lerp(amax_n,amax_d,tod),lerp(amax_in,amax_id,
|
|
tod),ind);
|
|
res.rgb = res.rgb/(adapts*amax+amin);
|
|
}
|
|
/* tone mapping */
|
|
if ( tmenable )
|
|
{
|
|
float tone = lerp(lerp(tone_n,tone_d,tod),lerp(tone_in,tone_id,
|
|
tod),ind);
|
|
float tovr = lerp(lerp(tovr_n,tovr_d,tod),lerp(tovr_in,tovr_id,
|
|
tod),ind);
|
|
res.rgb = (res.rgb*(1+res.rgb/tovr))/(res.rgb+tone);
|
|
}
|
|
/* palette texture */
|
|
if ( palenable )
|
|
{
|
|
float palb = lerp(lerp(palb_n,palb_d,tod),lerp(palb_in,palb_id,
|
|
tod),ind);
|
|
res.rgb = saturate(res.rgb);
|
|
float3 bright = adapt.rgb/(adapt.rgb+1.0);
|
|
float brights = (bright.r+bright.g+bright.b)/3.0;
|
|
float3 pal = float3(tex2D(_s7,float2(res.r,brights)).r,
|
|
tex2D(_s7,float2(res.g,brights)).g,
|
|
tex2D(_s7,float2(res.b,brights)).b);
|
|
res.rgb = res.rgb*(1.0-palb)+pal.rgb*palb;
|
|
}
|
|
res.a = 1.0;
|
|
return res;
|
|
|
|
}
|
|
/*
|
|
So... let me get this straight... rather than simply switching techniques,
|
|
Boris just compiles the program twice with and without this macro, then
|
|
toggling "UseEffect" switches between each variation? What the fuck?
|
|
*/
|
|
#ifndef ENB_FLIPTECHNIQUE
|
|
technique Shader_D6EC7DD1
|
|
#else
|
|
technique Shader_ORIGINALPOSTPROCESS
|
|
#endif
|
|
{
|
|
pass p0
|
|
{
|
|
VertexShader = compile vs_3_0 VS_Pass();
|
|
PixelShader = compile ps_3_0 PS_Mari();
|
|
ColorWriteEnable = ALPHA|RED|GREEN|BLUE;
|
|
ZEnable = FALSE;
|
|
ZWriteEnable = FALSE;
|
|
CullMode = NONE;
|
|
AlphaTestEnable = FALSE;
|
|
AlphaBlendEnable = FALSE;
|
|
SRGBWRITEENABLE = FALSE;
|
|
}
|
|
}
|
|
#ifndef ENB_FLIPTECHNIQUE
|
|
technique Shader_ORIGINALPOSTPROCESS
|
|
#else
|
|
technique Shader_D6EC7DD1
|
|
#endif
|
|
{
|
|
pass p0
|
|
{
|
|
VertexShader = compile vs_3_0 VS_Pass();
|
|
/*
|
|
>2014
|
|
>inline assembly
|
|
Have to keep this part intact, sadly
|
|
Boris what the fuck have you done
|
|
*/
|
|
PixelShader = asm
|
|
{
|
|
ps_3_0
|
|
def c6,0,0,0,0
|
|
def c7,0.212500006,0.715399981,0.0720999986,1
|
|
dcl_texcoord v0.xy
|
|
dcl_2d s0
|
|
dcl_2d s1
|
|
dcl_2d s2
|
|
rcp r0.x,c2.y
|
|
texld r1,v0,s2
|
|
mul r0.yz,r1.xxyw,c1.y
|
|
rcp r0.w,r0.y
|
|
mul r0.z,r0.w,r0.z
|
|
texld r1,v0,s1
|
|
mul r1.xyz,r1,c1.y
|
|
dp3 r0.w,c7,r1
|
|
mul r1.w,r0.w,r0.z
|
|
mad r0.z,r0.z,r0.w,c7.w
|
|
rcp r0.z,r0.z
|
|
mad r0.x,r1.w,r0.x,c7.w
|
|
mul r0.x,r0.x,r1.w
|
|
mul r0.x,r0.z,r0.x
|
|
cmp r0.x,-r0.w,c6.x,r0.x
|
|
rcp r0.z,r0.w
|
|
mul r0.z,r0.z,r0.x
|
|
add_sat r0.x,-r0.x,c2.x
|
|
texld r2,v0,s0
|
|
mul r2.xyz,r2,c1.y
|
|
mul r2.xyz,r0.x,r2
|
|
mad r1.xyz,r1,r0.z,r2
|
|
dp3 r0.x,r1,c7
|
|
mov r1.w,c7.w
|
|
lrp r2,c3.x,r1,r0.x
|
|
mad r1,r0.x,c4,-r2
|
|
mad r1,c4.w,r1,r2
|
|
mad r1,c3.w,r1,-r0.y
|
|
mad r0,c3.z,r1,r0.y
|
|
add r1,-r0,c5
|
|
mad oC0,c5.w,r1,r0
|
|
};
|
|
ColorWriteEnable = ALPHA|RED|GREEN|BLUE;
|
|
ZEnable = FALSE;
|
|
ZWriteEnable = FALSE;
|
|
CullMode = NONE;
|
|
AlphaTestEnable = FALSE;
|
|
AlphaBlendEnable = FALSE;
|
|
SRGBWRITEENABLE = FALSE;
|
|
}
|
|
}
|