0% found this document useful (0 votes)
16 views4 pages

Effect

Uploaded by

fvalenciaucho
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views4 pages

Effect

Uploaded by

fvalenciaucho
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

//ENBSeries: boris-vorontsov@yandex.ru, boris-vorontsov.narod.ru


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
THIS IS HLSL (HIGH LEVEL SHADER LANGUAGE) FILE FOR EXECUTING ADDITIONAL
HARDWARE EFFECTS. MAKE THE COPY BEFORE CHANGING IT!
*/

//keyboard controled variables


float tempF1;
float tempF2;
float tempF3;
float tempF4;
float tempF5;
float tempF6;
float tempF7;
float tempF8;
float tempF9;
float tempF0;

//global variables, already set before executing this code


float ScreenSize; //width of the display resolution (1024 f.e.)
float ScreenScaleY; //screen proportions (1.333 for 1024/768)
float4 ScreenBrightness;//rgba(0..1) color of the screen with time dependent
inertia
float ScreenBrightnessAdaptation;//(-10..10) for bloom it controls how much to dark
in the night or when scene is dark (user defined constant factor)
float bloomPower;//(0..10) actually used for bloom, but may be useful here (user
defined constant factor)
float useBloom;//(0 or 1) if bloom enabled by user

//textures
texture2D texColor;
texture2D texBloom;

sampler2D SamplerColor = sampler_state


{
Texture = <texColor>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = LINEAR;//NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture=FALSE;
};

sampler2D SamplerBloom = sampler_state


{
Texture = <texBloom>;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;//NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture=FALSE;
};

struct VS_OUTPUT_POST {
float4 vpos : POSITION;
float2 txcoord : TEXCOORD0;
};

struct VS_INPUT_POST {
float3 pos : POSITION;
float2 txcoord : TEXCOORD0;
};

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VS_OUTPUT_POST VS_PostProcess(VS_INPUT_POST IN)
{
VS_OUTPUT_POST OUT;

float4 pos=float4(IN.pos.x,IN.pos.y,IN.pos.z,1.0);

OUT.vpos=pos;
OUT.txcoord.xy=IN.txcoord.xy;

return OUT;
}

float4 PS_PostProcess(VS_OUTPUT_POST In) : COLOR


{

float2 offset[4]=
{
float2(-1.0,-1.0),
float2(-1.0, 1.0),
float2( 1.0, 1.0),
float2( 1.0,-1.0)

};
float4 res=0.0;
float4 coord=0.0;
coord.xy=In.txcoord.xy;
float4 origcolor=tex2D(SamplerColor, coord.xy);
float origgray=max(origcolor.r, max(origcolor.g, origcolor.b));
res+=origcolor;
float range=0.7*tempF9/ScreenSize;
for (int i=0; i<4; i++)
{

coord.xy=In.txcoord+offset[i]*range;
float4 color;
float gray;
color=tex2D(SamplerColor, coord.xy);
float4 colordiff=abs(origcolor-color);
gray=dot(colordiff.rgb,0.333);
float lerpfact=saturate(4.0*abs(gray)*color.a);//saturate
res+=lerp(origcolor, color, lerpfact);
}
res=res*0.2;

//res=origcolor;

coord.xy=In.txcoord.xy;
coord.w=2.5*tempF1;
float4 envcol1=tex2Dbias(SamplerColor, coord);
coord.w=3.5*tempF2;
float4 envcol2=tex2Dbias(SamplerColor, coord);
float4 envcol3=tex2D(SamplerBloom, coord.xy);
float4 bloom=envcol3;

float4 envcol=(envcol1+envcol2+envcol3)*0.777;

//envcol=tempF5*pow(envcol,tempF4);

//envcol=envcol*tempF7/(1.0+envcol*tempF8);

//envcol=dot(envcol.xyz,0.333);
//envcol=max(envcol.x, max(envcol.y, envcol.z));
float4 tempcol;//=max(envcol.x, max(envcol.y, envcol.z));
//envcol=lerp(tempcol, envcol, tempF3);

//tempcol.xyz=saturate(res.xyz-envcol.xyz);
//float diff=dot(tempcol.xyz, 0.333);

//float srcgray=dot(res.xyz,0.333);
//envcol.xyz=res.xyz-(tempF7*envcol.xyz)*(1.0-saturate(srcgray));

envcol=tempF5*pow(envcol,tempF4);
res=lerp(res, res*envcol, tempF6);
//res=res*tempF7/(1.0+res*tempF8);
//res+=tempF7*pow(bloom,4.0*tempF8);

//desaturate
float middlegray=(res.r+res.g+res.b)*0.333;
float3 diffcolor=res.rgb-middlegray;
res.rgb-=diffcolor*0.4*tempF0;

if (tempF3>1.1) res=origcolor;

res.a=1.0;
return res;
}

/*
float4 PS_PostProcess(VS_OUTPUT_POST In) : COLOR
{

float2 offset[4]=
{
float2(-1.0,-1.0),
float2(-1.0, 1.0),
float2( 1.0, 1.0),
float2( 1.0,-1.0)
};
float4 res=0.0;
float4 coord=0.0;
coord.xy=In.txcoord.xy;
float4 origcolor=tex2Dlod(SamplerColor, coord);
float origgray=max(origcolor.r, max(origcolor.g, origcolor.b));
res+=origcolor;
float range=tempF5*0.001;// /ScreenSize.x
for (int i=0; i<4; i++)
{
coord.xy=In.txcoord+offset[i]*range;
float4 color;
float gray;
color=tex2Dlod(SamplerColor, coord);
float4 colordiff=abs(origcolor-color);
gray=max(colordiff.r, max(colordiff.g, colordiff.b));
float lerpfact=saturate(tempF6*abs(gray));//saturate
res+=lerp(origcolor, color, lerpfact);
}
res=res/5.0;

res.a=1.0;
return res;
}
*/

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
technique PostProcess
{
pass P0
{
VertexShader = compile vs_2_0 VS_PostProcess();
PixelShader = compile ps_2_0 PS_PostProcess();

FogEnable=FALSE;
ALPHATESTENABLE=FALSE;
SEPARATEALPHABLENDENABLE=FALSE;
AlphaBlendEnable=FALSE;
FogEnable=FALSE;
SRGBWRITEENABLE=FALSE;
}
}

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy