Академический Документы
Профессиональный Документы
Культура Документы
//CHOOSE EFFECTS
#define USE_SPLITSCREEN
0
//[0 or 1] Splitscreen: Disables all eff
ects on the right half of the screen to show changes.
#define USE_FXAA
0
//[0 or 1] FXAA: Detects aliased/jagged
edges and slightly blurs them, using the FXAA technique.
#define USE_DEPTHBUFFER_OUTPUT 0
//[0 or 1] Depth Buffer Output: Shows yo
u the pixel depth, this is for debugging or depth map creation only.
#define USE_TILTSHIFT
0
//[0 or 1] Tilt Shift: Photographic effe
ct which blurs the screen to simulate focus. Results in game world looking tiny
when viewed from above.
#define USE_LUT
0
//[0 or 1] Color Lookup Table: Uses a gr
adient texture to adjust the colors of the image.
#define USE_LENSDIRT
0
//[0 or 1] Lensdirt: Simulates a dirty c
amera lens. IMPORTANT: bloom threshold and amount have influence on the intensit
y of the dirt!
#define USE_GAUSSIAN_ANAMFLARE 1
//[0 or 1] Gaussian Anamflare: Applies a
horizontal light beam to bright pixels.
#define USE_BLOOM
1
//[0 or 1] Bloom: Makes bright lights bl
eed their light into their surroundings. NOT the SweetFX way to do bloom but a m
ore proper way.
#define USE_SSAO
0
//[0 or 1] SSAO: Enables Screen-Space Am
bient Occlusion, a non-physically correct but realistic shading algorithm
#define USE_PETKAGTADOF
0
//[0 or 1] Matso DOF: Enables PetkaGtA's
Depth of Field, originally of Blender.
#define USE_MATSODOF
0
//[0 or 1] Matso DOF: Enables Matso's De
pth of Field.
#define USE_GP65CJ042DOF
0
//[0 or 1] gp65cj042 DOF: Enables Depth
of Field shader, this version is originally by user gp65cj042, ME uses an optimi
zed version by me (Marty McFly).
#define USE_EXPLOSION
0
//[0 or 1] Explosion : Scatters the pixe
ls, making the image look fuzzy.
#define USE_CARTOON
0
//[0 or 1] Cartoon : "Toon"s the image.
#define USE_SHARPENING
1
//[0 or 1] Sharpen: Sharps the image but
may increase aliasing
#define USE_LEVELS
1
//[0 or 1] Levels : Sets a new black and
white point. This increases contrast but causes clipping. Use Curves instead if
you want to avoid that.
#define USE_TECHNICOLOR
0
//[0 or 1] Technicolor : Attempts to mim
ic the look of an old movie using the Technicolor three-strip color process. Alg
orithm from prod80
#define USE_SWFX_TECHNICOLOR
0
//[0 or 1] Technicolor : Attempts to mim
ic the look of an old movie using the Technicolor three-strip color process. Alg
orithm from SweetFX
#define USE_DPX
0
//[0 or 1] Cineon DPX : Should make the
image look like it's been converted to DXP Cineon - basically it's another movie
-like look similar to technicolor.
#define USE_MONOCHROME
0
//[0 or 1] Monochrome : Monochrome makes
rything but colors from a fixed hue mid and the range around it. Similiar to Sin
City but much better. Thanks, prod80!
//FXAA
#define FXAANum
2
//[2,4,6,8] Number of FXAA passe
s. 8 ist highest but costs a tremendous amount of performance.
#define FXAASearchSteps
16
//[2 to 64] Number of algorithm
samples. Performance affecting texture fetches are FXAANum * FXAASearchSteps so
be careful with changing both values.
#define FXAAEdgeThreshold
0.03
//[0.010 to 0.100] Minimum amoun
t of local contrast to determine pixel as "aliased"
#define FXAAEdgeThresholdMin
0.06
//[0.010 to 0.100] Darkness thre
shold. Trims the algorithm from processing darks.
#define FXAASubpixCap
0.875
//[0.5 to 1.0] Choose the amount
of sub-pixel aliasing removal.
#define FXAASubpixTrim
0.09
//[0.5 to 1.0] Choose the amount
of sub-pixel aliasing removal.
#define FXAASearchThreshold
0.25
//[0.1 to 0.4] If local contrast
is lower than that, pixel is determined as "done".
//TILT SHIFT
#define TiltShiftAxis
0.0
//[0.0 to 90.0] Rotation of Tilt
shift axis. 0.0 means horizontal focus line, 90.0 means vertical.
#define TiltShiftOffset
0.5
//[0.0 to 1.0] Position of Tilt
Shift axis. 0.5 is screen center. You may adjust this value when changing the ax
is value.
#define TiltShiftCurve
2.0
//[0.0 to 2.0] Power of Tilt Shi
ft blurring.
#define TiltShiftMult
2.0
//[1.0 to 7.0] Multiplicator if
Tilt Shift blurring. Do not set too high, otherwise the single blur taps are vis
ible.
//LENSDIRT
#define fLensdirtIntensity
dirt.
2.0
#define threshold
2.5
//[0.8 to 2.0] Threshold for bok
eh brightening. Above this value, everything gets much much brighter. 1.0 is max
imum value for LDR games like GTASA, higher values work only on HDR games like S
kyrim etc.
#define gain
0.1
//[0.1 to 2.0] Amount of brighte
ning for pixels brighter than threshold.
#define bias
0.2
//[0.1 to 2.0] bokeh bias.
#define fringe
0.5
//[0.0 to 1.0] Amount of chromat
ic abberation
#define znear
100.0
//[20 to 200] camera clipping st
art.
#define zfar
3500.0
//[1500 to 8000] camera clipping
end.
#define feather
1.1
//[0.1 to 2.0] pentagon shape fe
ather.
//MATSO DEPTH OF FIELD
#define USE_CHROMA_DOF
1
//[0 or 1] Enables Chromatic Abb
eration.
#define USE_SMOOTH_DOF
1
//[0 or 1] Enables smoother DOF
#define USE_BOKEH_DOF
1
//[0 or 1] Enables Bokeh DOF. Di
sabling it screws the shape up, leave it on
#define USE_AUTOFOCUS
1
//[0 or 1] Enables Autofocus
#define CHROMA_POW
65.0
//[10 to 100] Controls amount of
chromatic abberation
#define DOF_SCALE
2356.1944901923449288469825374596 //LEAVE IT
#define FIRST_PASS
2
//LEAVE IT
#define SECOND_PASS
3
//LEAVE IT
#define THIRD_PASS
0
//LEAVE IT
#define FOURTH_PASS
1
//LEAVE IT
#define DOF(sd,sf)
fApertureScale * smoothstep(fApertureBias, fAper
tureCutoff, abs(sd - sf)) //LEAVE IT
#define fvChroma
float3(0.995, 1.000, 1.005) //Displacement of co
lors for chromatic abberation. 1.0 is original position
#define fBaseRadius
0.9
#define fFalloffRadius
1.8
#define fChromaPower
1.0
#define fvTexelSize
float2(1.0 / 1920.0, 1.0 / 1080.0)
#define fFocusBias
0.045
#define fApertureScale
0.004
#define fApertureCutoff
0.25
#define fApertureBias
0.07
#define fBokehCurve
8.0
#define fBokehLight
0.012
//GP65CJ042 DEPTH OF FIELD
#define NOT_BLURRING_SKY_MODE 0
//[0 or 1] Prevents the DOF of b
lurring the sky. Probably doesn't work on 0.076 due to SA's stupid depth calcula
tion
#define DEPTH_OF_FIELD_QULITY 7
//[0 to 7] 0: only slight gaussi
an farblur but no bokeh. 1-7 bokeh blur, higher means better quality of blur but
less fps.
#define AUTO_FOCUS
0
//[0 or 1] Enables automatic foc
al plane detection, for focussing FocusPoint is used.
#define TILT_SHIFT
0
//[0 or 1] Enables Tilt shifting
. Google it!
#define POLYGONAL_BOKEH
1
//[0 or 1] Enables polygonal bok
eh shape, e.g. POLYGON_NUM 5 means pentagonal bokeh shape. Setting this value to
0 results in circular bokeh shape.
#define POLYGON_NUM
8
//[3 to 9] Controls the amount p
10.5
//CARTOON
#define CartoonPower
1.5
//[0.1 to 10.0] Amount of effect
you want.
#define CartoonEdgeSlope
1.5
//[0.1 to 8.0] Raise this to fil
ter out fainter edges. You might need to increase the power to compensate. Whole
numbers are faster.
//SHARPEN
#define SharpBias
0.35
pen offset is (used to compare neighbor pixels
#define SharpStrength
0.65
ning you want.
#define SharpClamp
0.03
ning to a maximum amount to prevent aliasing
//LEVELS
#define Levels_black_point
16
//[0 to 255] The black point is
the new black - literally. Everything darker than this will become completely bl
//DPX
#define DPXRed
8.0
//[1.0 to 15.0] Amount of DPX ap
plies on Red color channel
#define DPXGreen
8.0
//[1.0 to 15.0] ""
#define DPXBlue
8.0
//[1.0 to 15.0] ""
#define DPXColorGamma
2.5
//[0.1 to 2.5] Adjusts the color
fulness of the effect in a manner similar to Vibrance. 1.0 is neutral.
#define DPXSaturation
3.0
//[0.0 to 8.0] Adjust saturation
of the effect. 1.0 is neutral.
#define DPXRedC
0.36
//[0.60 to 0.20]
#define DPXGreenC
0.36
//[0.60 to 0.20]
#define DPXBlueC
0.34
//[0.60 to 0.20]
#define DPXBlend
0.2
//[0.00 to 1.00] How strong the
effect should be.
//LIFTGAMMAGAIN
#define RGB_Lift
float3(1.100, 1.100, 1.100) //[0.000 to 2.000]
Adjust shadows for Red, Green and Blue.
#define RGB_Gamma
float3(1.100, 1.100, 1.100) //[0.000 to 2.000]
Adjust midtones for Red, Green and Blue
#define RGB_Gain
float3(1.200, 1.200, 1.200) //[0.000 to 2.000]
Adjust highlights for Red, Green and Blue
//TONEMAP
#define Gamma
1.000
//[0.000 to 2.000] Adjust midton
es. 1.000 is neutral. This setting does exactly the same as the one in Lift Gamm
a Gain, only with less control.
#define Exposure
0.000
//[-1.000 to 1.000] Adjust expos
ure
#define Saturation
0.015
//[-1.000 to 1.000] Adjust satur
ation
#define Bleach
0.000
//[0.000 to 1.000] Brightens the
6
//[1 to 6] Mode of postprocessin
2 uses V2 values etc
0.05
0.125
1.0
1.0
6.0
0.36
0.29
8.0
2.5
3.2
180.0
#define
#define
#define
#define
//
#define
#define
#define
#define
#define
//
#define
#define
#define
#define
#define
#define
#define
//
#define
#define
#define
#define
#define
#define
#define
#define
EAdaptationMinV3
EAdaptationMaxV3
EToneMappingCurveV3
EToneMappingOversaturationV3
0.001
0.025
30.0
111160.0
EAdaptationMinV4
EAdaptationMaxV4
EBrightnessCurveV4
EBrightnessMultiplierV4
EBrightnessToneMappingCurveV4
0.2
0.125
0.7
0.45
0.3
EAdaptationMinV5
EAdaptationMaxV5
EToneMappingCurveV5
EIntensityContrastV5
EColorSaturationV5
HCompensateSatV5
EToneMappingOversaturationV5
0.08
0.20
8
3.475
4
2
180.0
EBrightnessV6Day
EIntensityContrastV6Day
EColorSaturationV6Day
HCompensateSatV6Day
EAdaptationMinV6Day
EAdaptationMaxV6Day
EToneMappingCurveV6Day
EToneMappingOversaturationV6Day
2.5
1.5
2.0
3.0
0.64
0.24
8
2500.0
//COLORMOOD
#define fRatio
coloring you want
#define moodR
ed colors shall be boosted
#define moodG
reen colors shall be boosted
#define moodB
lue colors shall be boosted
2.0
1.0
1.1
0.5
//CROSSPROCESS
#define CrossContrast
0.95
se values should explain their functions
#define CrossSaturation
1.12
#define CrossBrightness
-0.052
#define CrossAmount
1.0
//FILMICPASS
#define Strenght
0.725
color curve altering
#define BaseGamma
1.6
#define Fade
0.2
t to imitate faded image
#define Contrast
1.0
#define FSaturation
-0.15
#define FBleach
0.005
s more contrasted and less colorful image
#define FRedCurve
6.0
#define FGreenCurve
6.0
#define FBlueCurve
6.0
#define BaseCurve
1.5
#define EffectGammaR
1.0
#define EffectGammaG
#define EffectGammaB
#define EffectGamma
#define Linearization
lor curve
//REINHARD TONEMAP
#define ReinhardWhitepoint
h everything is pure white
#define ReinhardScale
tonemapping
1.0
1.0
0.75
1.3
4.0
0.5
0.78
1.05
// Saturation
// Gamma for Red color c
1.05
1.05
0.50
0.50
0.50
-0.08
// ...
// ...
// Brightness for Red co
-0.08
-0.08
// ...
// ...
1.0
//GODRAYS
#define GODRAYDEPTHCHECK
1
//[0 or 1] if 1, only pixels wit
h depth = 1 get godrays, this prevents white objects from getting godray source
which would normally happen in LDR
#define GodraySamples
128
//[2^x format] How many samples
the godrays get
#define GodrayDecay
0.96
//[0.5 to 0.9999] How fast they
decay. It's logarithmic, 1.0 means infinite long rays which will cover whole scr
een
#define GodrayExposure
1.0
//[0.7 to 1.5] Upscales the godr
ay's brightness
#define GodrayWeight
1.25
//[0.8 to 1.7] weighting
#define GodrayDensity
1.0
//[0.2 to 2.0] Density of rays,
higher means more and brighter rays
#define GodrayThreshold
0.9
//[0.6 to 1.0] Minimum brightnes
s an object must have to cast godrays
//ANAMORPHIC LENSFLARE
#define ANAMFLAREDEPTHCHECK
1
//[0 or 1] if 1, only pixels wit
h depth = 1 get an anamflare, this prevents white objects from getting flare sou
#define VignetteBorder
6.5
//STANDARDVIGNETTE
#define EVignetteAmount
ariable name
#define EVignetteCurve
ariable name
#define EVignetteRadius
ariable name
#define VIGNCOLORING
e, RGB controls below.
#define VIGNREDAMOUNT
#define VIGNGREENAMOUNT
#define VIGNBLUEAMOUNT
2.9
1.5
0.8
0.0
5.0
0.0
//COLOR HUE FX
#define USE_COLORSAT
0
//[0 or 1] This will use origina
l color saturation as an added limiter to the strength of the effect
#define hueMid
0.6
//[0.0 to 1.0] Hue (rotation aro
und the color wheel) of the color which you want to keep
#define hueRange
0.1
//[0.0 to 1.0] Range of differen
t hue's around the hueMid that will also kept. Using a max range of 1.0 will all
ow the reverse of the effect where it will only filter a specific hue to B&W
#define satLimit
2.9
//[0.0 to 4.0] Saturation contro
l, better keep it higher than 0 for strong colors in contrast to the gray stuff
around
#define fxcolorMix
0.8
//[0.0 to 1.0] Interpolation bet
ween the original and the effect, 0 means full original image, 1 means full grey
-color image.
//+++++++++++++++++++++++++++++
uniform float4 Timer < string source = "framecount";>;
uniform float4 Timer2 < string source = "timer";>;
#define ScreenSize float4(BUFFER_WIDTH, BUFFER_RCP_WIDTH, float(BUFFER_WIDTH) /
float(BUFFER_HEIGHT), float(BUFFER_HEIGHT) / float(BUFFER_WIDTH)) //x=Width, y=1
/Width, z=ScreenScaleY, w=1/ScreenScaleY
static const float3 LumCoeff = float3(0.212656, 0.715158, 0.072186);
static const float PI = 3.1415972;
//textures
texture2D texColor : COLOR;
texture texColorHDR1 { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; MipLevels =
7; Format = RGBA32F;}; //ping
texture texColorHDR2 { Width = BUFFER_WIDTH; Height = BUFFER_HEIGHT; MipLevels =
7; Format = RGBA32F;}; //pong
texture2D texDepth : DEPTH;
texture texBloom1 { Width
Format = RGBA32F;};
texture texBloom2 { Width
= 1;Format = RGBA32F;};
texture texBloom3 { Width
= 1;Format = RGBA32F;};
texture texBloom4 { Width
= 1;Format = RGBA32F;};
MaxMipLevel=8;
MipMapLodBias=0;
};
sampler2D SamplerDepth
{
Texture = texDepth;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture=FALSE;
MaxMipLevel=0;
MipMapLodBias=0;
};
sampler2D SamplerNoise
{
Texture = texNoise;
MinFilter = POINT;
MagFilter = POINT;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture=FALSE;
MaxMipLevel=0;
MipMapLodBias=0;
};
sampler2D SamplerDirt
{
Texture = texDirt;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture=FALSE;
MaxMipLevel=0;
MipMapLodBias=0;
};
sampler2D SamplerLut
{
Texture = texLut;
MinFilter = LINEAR;
MagFilter = LINEAR;
MipFilter = NONE;
AddressU = Clamp;
AddressV = Clamp;
SRGBTexture=FALSE;
MaxMipLevel=0;
MipMapLodBias=0;
};
sampler
sampler
sampler
sampler
SamplerBloom1
SamplerBloom2
SamplerBloom3
SamplerBloom4
{
{
{
{
Texture
Texture
Texture
Texture
=
=
=
=
texBloom1;
texBloom2;
texBloom3;
texBloom4;
};
};
};
};
}
float2 rand(float2 coord) //generating noise/pattern texture for dithering
{
float noiseX = ((frac(3.0-coord.x*(ScreenSize.x/0.2))*3.25)+(frac(coord.
y*(ScreenSize.x*ScreenSize.z/0.2))*3.75))*0.1-0.2;
float noiseY = ((frac(3.0-coord.x*(ScreenSize.x/0.2))*3.75)+(frac(coord.
y*(ScreenSize.x*ScreenSize.z/0.2))*3.25))*0.1-0.2;
return float2(noiseX,noiseY);
}
#define fFlareAxis
0
// blur axis
//people should not change that due to changes I made to the shader (blur in y d
irection so vertical flares would get no blur
//too lazy to adapt that so I'll keep it here
float3 BrightPass(float2 tex)
{
float3 c = tex2D(SamplerColorHDR2, tex).rgb;
float3 bC = max(c - float3(fFlareLuminance, fFlareLuminance, fFlareLumin
ance), 0.0);
float bright = dot(bC, 1.0);
bright = smoothstep(0.0f, 0.5, bright);
float3 result = lerp(0.0, c, bright);
#if (ANAMFLAREDEPTHCHECK == 1)
float checkdepth = tex2D(SamplerDepth, tex).x;
if(checkdepth < 0.9999) result = 0;
#endif
return result;
}
float3 AnamorphicSample(int axis, float2 tex, float blur)
{
tex = 2.0 * tex - 1.0;
if (!axis) tex.x /= -blur;
else tex.y /= -blur;
tex = 0.5 * tex + 0.5;
return BrightPass(tex);
}
float mod(float x, float y)
{
return x - y * floor (x/y);
}
float smootherstep(float edge0, float edge1, float x)
{
x = clamp((x - edge0)/(edge1 - edge0), 0.0, 1.0);
return x*x*x*(x*(x*6 - 15) + 10);
}
float3 Hue(in float3 RGB)
{
// Based on work by Sam Hocevar and Emil Persson
float Epsilon = 1e-10;
float4 P = (RGB.g < RGB.b) ? float4(RGB.bg, -1.0, 2.0/3.0) : float4(RGB.gb, 0
.0, -1.0/3.0);
float4 Q = (RGB.r < P.x) ? float4(P.xyw, RGB.r) : float4(RGB.r, P.yzx);
float C = Q.x - min(Q.w, Q.y);
float H = abs((Q.w - Q.y) / (6 * C + Epsilon) + Q.z);
return float3(H, C, Q.x);
}
/*
float4 ChromaticAberrationPass(float2 tex, float outOfFocus)
{
float d = distance(tex, float2(0.5, 0.5));
float f = smoothstep(fBaseRadius, fFalloffRadius, d + outOfFocus * d);
float3 chroma = pow(f + fvChroma, fChromaPower);
float2 tr = ((2.0 * tex - 1.0) * chroma.r) * 0.5 + 0.5;
float2 tg = ((2.0 * tex - 1.0) * chroma.g) * 0.5 + 0.5;
float2 tb = ((2.0 * tex - 1.0) * chroma.b) * 0.5 + 0.5;
float3 color = float3(tex2D(SamplerColor, tr).r, tex2D(SamplerColor, tg)
.g, tex2D(SamplerColor, tb).b) * (1.0 - f);
return float4(color, 1.0);
}
*/
float4 ChromaticAberrationFocusPass(float2 tex, float outOfFocus, sampler inputs
ampler)
{
float3 chroma = pow(fvChroma, CHROMA_POW * outOfFocus);
float2 tr = ((2.0 * tex - 1.0) * chroma.r) * 0.5 + 0.5;
float2 tg = ((2.0 * tex - 1.0) * chroma.g) * 0.5 + 0.5;
float2 tb = ((2.0 * tex - 1.0) * chroma.b) * 0.5 + 0.5;
float3 color = float3(tex2D(inputsampler, tr).r, tex2D(inputsampler, tg)
.g, tex2D(inputsampler, tb).b) * (1.0 - outOfFocus);
return float4(color, 1.0);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Passes
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
float penta(float2 coords) //pentagonal shape
{
float scale = float(rings) - 1.5;
float4 HS0 = float4( -20.0, -15.0, -15.0,
float4 HS1 = float4( -20.0, -15.0, -15.0,
float4 HS2 = float4( -20.0, -15.0, -15.0,
float4 HS3 = float4( -20.0, -15.0, -15.0,
float4 HS4 = float4( -20.0, -15.0, -15.0,
float4 HS5 = float4( -20.0, -15.0, -15.0,
-20.0);
-20.0);
-20.0);
-20.0);
-20.0);
-20.0);
ower));
float2 greennegative_mul = tcol.rg * (1.0 / (greenNegativeAmount * Techn
iPower));
float2 bluenegative_mul = tcol.rb * (1.0 / (blueNegativeAmount * Techni
Power));
float rednegative = dot( redorangefilter, rednegative_mul );
float greennegative = dot( greenfilter, greennegative_mul );
float bluenegative = dot( magentafilter2, bluenegative_mul );
float3 redoutput = rednegative.rrr + cyanfilter;
float3 greenoutput = greennegative.rrr + magentafilter;
float3 blueoutput = bluenegative.rrr + yellowfilter;
float3 result = redoutput * greenoutput * blueoutput;
colorInput.rgb = lerp(tcol, result, TechniAmount);
return colorInput;
}
float3 DPXPass(float3 InputColor){
float3x3 RGB =
float3x3(
2.67147117265996,-1.26723605786241,-0.410995602172227,
-1.02510702934664,1.98409116241089,0.0439502493584124,
0.0610009456429445,-0.223670750812863,1.15902104167061
);
float3x3 XYZ =
float3x3(
0.500303383543316,0.338097573222739,0.164589779545857,
0.257968894274758,0.676195259144706,0.0658358459823868,
0.0234517888692628,0.1126992737203,0.866839673124201
);
float DPXContrast = 0.1;
float DPXGamma = 1.0;
float RedCurve = DPXRed;
float GreenCurve = DPXGreen;
float BlueCurve = DPXBlue;
float3 RGB_Curve = float3(DPXRed,DPXGreen,DPXBlue);
float3 RGB_C = float3(DPXRedC,DPXGreenC,DPXBlueC);
float3 B = InputColor.rgb;
B = pow(B, 1.0/DPXGamma);
B = B * (1.0 - DPXContrast) + (0.5 * DPXContrast);
float3 Btemp = (1.0 / (1.0 + exp(RGB_Curve / 2.0)));
B = ((1.0 / (1.0 + exp(-RGB_Curve * (B - RGB_C)))) / (-2.0 * Btemp + 1.0
)) + (-Btemp / (-2.0 * Btemp + 1.0));
float value = max(max(B.r, B.g), B.b);
float3 color = B / value;
color = saturate(color);
color = pow(color, 1.0/DPXColorGamma);
float3 c0 = color * value;
c0 = mul(XYZ, c0);
float luma = dot(c0, float3(0.30, 0.59, 0.11)); //Use BT 709 instead?
c0 = (1.0 - DPXSaturation) * luma + DPXSaturation * c0;
c0 = mul(RGB, c0);
InputColor.rgb = lerp(InputColor.rgb, c0, DPXBlend);
return InputColor;
}
float3 LiftGammaGainPass( float3 colorInput )
{
// -- Get input -float3 color = colorInput.rgb;
// -- Lift -color = color * (1.5-0.5 * RGB_Lift) + 0.5 * RGB_Lift - 0.5;
color = saturate(color); //isn't strictly necessary, but doesn't cost pe
rformance.
// -- Gain --
color *= RGB_Gain;
// -- Gamma -colorInput.rgb = pow(color, 1.0 / RGB_Gamma); //Gamma
// -- Return output -//return (colorInput);
return saturate(colorInput);
}
float3 TonemapPass( float3 colorInput )
{
float3 color = colorInput.rgb;
color = saturate(color - Defog * FogColor); // Defog
color *= pow(2.0f, Exposure); // Exposure
color = pow(color, Gamma);
ection in main.h ?
#if Curves_mode == 0
float xstep = step(x,0.5);
float xstep_shift = (xstep - 0.5);
float shifted_x = x + xstep_shift;
#else
float3 xstep = step(x,0.5);
float3 xstep_shift = (xstep - 0.5);
float3 shifted_x = x + xstep_shift;
#endif
x = abs(xstep - sqrt(-shifted_x * shifted_x + shifted_x) ) - xstep_shift
;
//x = abs(step(x,0.5)-sqrt(-(x+step(x,0.5)-0.5)*(x+step(x,0.5)-0.5)+(x+s
tep(x,0.5)-0.5)))-(step(x,0.5)-0.5); //single line version of the above
//x = 0.5 + (sign(x-0.5)) * sqrt(0.25-(x-trunc(x*2))*(x-trunc(x*2))); //
worse
/* // if/else - even worse
if (x-0.5)
x = 0.5-sqrt(0.25-x*x);
else
x = 0.5+sqrt(0.25-(x-1)*(x-1));
*/
//x = (abs(step(0.5,x)-clamp( 1-sqrt(1-abs(step(0.5,x)- frac(x*2%1)) * a
bs(step(0.5,x)- frac(x*2%1))),0 ,1))+ step(0.5,x) )*0.5; //worst so far
//TODO: Check if I could use an abs split instead of step. It might be m
ore efficient
Curves_contrast_blend = Curves_contrast * 0.5; //I divide by two to give
it a strength closer to the other curves.
#endif
// -- Curve 11 -#if Curves_formula == 11 //Cubic catmull
float a = 1.00; //control point 1
float b = 0.00; //start point
float c = 1.00; //endpoint
float d = 0.20; //control point 2
x = 0.5 * ((-a + 3*b -3*c + d)*x*x*x + (2*a -5*b + 4*c - d)*x*x + (-a+c)
*x + 2*b); //A customizable cubic catmull-rom spline
#endif
// -- Curve 12 -#if Curves_formula == 12 //Cubic Bezier spline
float a = 0.00; //start point
float b = 0.00; //control point 1
float c = 1.00; //control point 2
float d = 1.00; //endpoint
float
float
float
float
float
//x =
r = (1-x);
r2 = r*r;
r3 = r2 * r;
x2 = x*x;
x3 = x2*x;
dot(float4(a,b,c,d),float4(r3,3*r2*x,3*r*x2,x3));
a
b
c
d
=
=
=
=
float3 ab =
float3 bc =
float3 cd =
float3 abbc
float3 bccd
float3 dest
x = dest;
#endif
float3(0.00,0.00,0.00);
float3(0.25,0.15,0.85);
float3(0.75,0.85,0.15);
float3(1.00,1.00,1.00);
lerp(a,b,x);
lerp(b,c,x);
lerp(c,d,x);
= lerp(ab,bc,x);
= lerp(bc,cd,x);
= lerp(abbc,bccd,x);
//start point
//control point 1
//control point 2
//endpoint
//
//
//
//
//
//
point
point
point
point
point
point
between a and b
between b and c
between c and d
between ab and bc
between bc and cd
on the bezier-curve
float c = FBlueCurve;
float d = BaseCurve;
float
float
float
float
y
z
w
v
=
=
=
=
1.0
1.0
1.0
1.0
/
/
/
/
(1.0
(1.0
(1.0
(1.0
+
+
+
+
exp(a
exp(b
exp(c
exp(d
/
/
/
/
2.0));
2.0));
2.0));
2.0));
float3 C = B;
D.r = (1.0 / (1.0 + exp(-a * (D.r - 0.5))) - y) / (1.0 - 2.0 * y);
D.g = (1.0 / (1.0 + exp(-b * (D.g - 0.5))) - z) / (1.0 - 2.0 * z);
D.b = (1.0 / (1.0 + exp(-c * (D.b - 0.5))) - w) / (1.0 - 2.0 * w);
D = pow(D, 1.0 / EffectGamma);
float3 Di = 1.0 - D;
D = lerp(D, Di, FBleach);
D.r = pow(abs(D.r), 1.0 / EffectGammaR);
D.g = pow(abs(D.g), 1.0 / EffectGammaG);
D.b = pow(abs(D.b), 1.0 / EffectGammaB);
if (D.r < 0.5)
C.r = (2.0 * D.r - 1.0) * (B.r - B.r * B.r) + B.r;
else
C.r = (2.0 * D.r - 1.0) * (sqrt(B.r) - B.r) + B.r;
if (D.g < 0.5)
C.g = (2.0 * D.g else
C.g = (2.0 * D.g //if (AgainstAllAutority)
if (D.b < 0.5)
C.b = (2.0 * D.b else
C.b = (2.0 * D.b -
}
float3 ColormodPass( float3 color )
{
color.xyz = (color.xyz - dot(color.xyz,
olor.xyz, 0.333);
color.xyz = saturate(color.xyz);
color.x = (pow(color.x, ColormodGammaR)
+ ColormodBrightnessR;
color.y = (pow(color.y, ColormodGammaG)
+ ColormodBrightnessB;
color.z = (pow(color.z, ColormodGammaB)
+ ColormodBrightnessB;
return color;
}
vertline1
vertline2
vertline3
vertline4
vertline5
horzline1
horzline2
horzline3
horzline4
horzline5
=
=
=
=
=
=
=
=
=
=
(mod(dithet.x,
(mod(dithet.x+1,
(mod(dithet.x+1,
(mod(dithet.x+1,
(mod(dithet.x-1,
(mod(dithet.y,
(mod(dithet.y+1,
(mod(dithet.y,
(mod(dithet.y+1,
(mod(dithet.y-1,
2.0));
2.0));
4.0));
4.0));
4.0));
2.0));
2.0));
4.0));
4.0));
4.0));
float vertline3a =
float horzline3a =
(mod(dithet.x+3,
(mod(dithet.y+2,
float
float
float
float
float
float
float
=
=
=
=
=
=
=
dithone
dithtwo
diththree
dithfour
dithfive
dithsix
dithsixy
4.0));
4.0));
vertline1 + horzline2;
vertline2 + horzline1;
vertline3 + horzline3;
vertline4 + horzline5;
vertline3 + horzline3;
vertline3 + horzline3;
vertline3a + horzline3a;
.
v
.
x
.
v
X
g
o
.
X
g
.
x
.
v
.
v
o
.
o
g
o
.
.
v
.
x
.
v
X
g
o
.
X
g
.
x
.
v
.
v
o
.
o
g
o
.
.
v
.
x
.
v
X
g
o
.
X
g
.
x
.
v
.
v
float3 dithapick;
float3 XX, oo, vv, xx, gg;
o
.
o
g
o
.
XX
vv
xx
oo
gg
=
=
=
=
=
0.018f;
0.02f;
0.015f;
-0.003f;
-60.93f;
ditherX = dithone;
if (ditherX.b < 1.0f) ditherX.rgb = 0;
else
ditherX.rgb = XX.rgb;
ditherx = diththree;
if (ditherx.r > 1.3f) ditherx.rgb = 0;
else
ditherx.rgb = xx.rgb;
.
v
.
x
.
v
X
g
o
.
X
g
ditherv = dithone;
if (ditherv.b < 0.7f) ditherv.rgb = vv.rgb;
else
ditherv.rgb = 0;
dithero = dithsix;
if (dithero.r > 2.2f) dithero.rgb = 0;
else
dithero.rgb = -0.018f;
ditherg = dithsixy;
if (ditherg.r > 2.2f) ditherg.rgb = 0;
else
ditherg.rgb = -0.006f;
dithapick = ditherv;
dithapick = ditherx + ditherX + ditherv + ditherg + dithero;
// This is the stupidest set of hacks ever to get just this stupid dithe
r
// pattern. It obviously could be done better, but eh.......
// i'm bad at math :(
// Matrix numbers....
float3 dithonme;
float3 dithonyou;
//dithonyou = dithapick.r +
dithapick.b = dithapick.r;
dithonme.r = colorInput.r +
dithonme.g = colorInput.g +
dithonme.b = colorInput.b +
dithapick.g + dithapick.b;
dithapick.r;
dithapick.g;
dithapick.b;
reduceme.r
reduceme.r
reduceme.r
reduceme.r
*= radooct;
= int(floor(reduceme.r));
/= radooct;
= pow(reduceme.r, why);
reduceme.g
reduceme.g
reduceme.g
reduceme.g
reduceme.g
= pow(colorInput.g, why);
*= radooct * 2;
= int(floor(reduceme.g));
/= radooct * 2;
= pow(reduceme.g, why);
reduceme.b
reduceme.b
reduceme.b
reduceme.b
reduceme.b
= pow(colorInput.b, why);
*= radooct;
= int(floor(reduceme.b));
/= radooct;
= pow(reduceme.b, why);
colorInput.rgb = reduceme.rgb;
// END REDUCTION
//
colorInput.r *= 1.1;
return colorInput;
}
#define
#define
#define
#define
#define
#define
#define
#define
COP
YRI
GHT
BY
MAR
TY
MC
FLY
/*
float4 LeiFX_Filter( float4 colorInput, float2 tex )
{
//return colorInput;
float2 pixelsize
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
;
float2 kick = pixelsize;
// Sample things.
float blendy;
jag :(
float blenda;
float blendfactor;
float3 pixel1 = tex2D(SamplerColor, tex + float2((pixelsize.x * 0.47), 0
)).rgb;
float3 pixel2 = tex2D(SamplerColor, tex + float2(-pixelsize.x * 1.3, 0))
.rgb;
float3 pixel0 = tex2D(SamplerColor, tex + float2(0, 0)).rgb;
float3 pixelblend;
= max(colorInput.rgb,
pow(colorInput.r, 1.0
pow(colorInput.g, 1.0
pow(colorInput.b, 1.0
0);
/ leifx_gamma);
/ leifx_gamma);
/ leifx_gamma);
return colorInput;
}
float4 GaussBlur22(float2 coord, sampler tex, float mult, float lodlevel, int ax
is) //texcoord, texture, blurmult in pixels, tex2dlod level, axis (0=horiz, 1=ve
rt)
{
float4 sum = 0;
float weight[11] = {0.082607, 0.080977, 0.076276, 0.069041, 0.060049, 0.
050187, 0.040306, 0.031105, 0.023066, 0.016436, 0.011254};
for(int i=1; i < 11; i++)
{
if(axis == 0)
{
sum
+= tex2Dlod(tex, float4(coord.xy
FFER_RCP_WIDTH * mult,0),0,lodlevel)) * weight[i];
sum
+= tex2Dlod(tex, float4(coord.xy
FFER_RCP_WIDTH * mult,0),0,lodlevel)) * weight[i];
}
if(axis == 1)
{
sum
+= tex2Dlod(tex, float4(coord.xy
BUFFER_RCP_HEIGHT * mult),0,lodlevel)) * weight[i];
sum
+= tex2Dlod(tex, float4(coord.xy
BUFFER_RCP_HEIGHT * mult),0,lodlevel)) * weight[i];
}
}
sum
+ float2(i * BU
- float2(i * BU
+ float2(0,i *
- float2(0,i *
return sum;
}
float3 colorhuefx_prod80( float3 color )
{
float3 fxcolor = saturate( color.xyz );
float greyVal = dot( fxcolor.xyz, LumCoeff.xyz );
float3 HueSat = Hue( fxcolor.xyz );
float colorHue = HueSat.x;
float colorInt = HueSat.z - HueSat.y * 0.5;
float colorSat = HueSat.y / ( 1.0 - abs( colorInt * 2.0 - 1.0 ) * 1e-10
);
//When color intensity not based on original saturation level
if ( USE_COLORSAT == 0 ) colorSat = 1.0f;
float
float
float
float
hueMin_1
hueMax_1
hueMin_2
hueMax_2
=
=
=
=
hueMid - hueRange;
hueMid + hueRange;
0.0f;
0.0f;
hueMid )
fxcolor.xyz, smootherst
));
<= hueMax_1 )
fxcolor.xyz, ( 1.0f - s
float2 pixelSize=ScreenSize.y;
pixelSize.y*=ScreenSize.z;
pixelSize.xy *= 2;
float4 bloom=0.0;
float2 bloomuv;
float2 offset[4]=
{
float2(1.0, 1.0),
float2(1.0, 1.0),
float2(-1.0, 1.0),
float2(-1.0, -1.0)
};
for (int i=0; i<4; i++)
{
bloomuv.xy=offset[i]*pixelSize.xy;
bloomuv.xy=IN.txcoord.xy + bloomuv.xy;
float4 tempbloom=tex2D(SamplerColorLDR, bloomuv.xy);
tempbloom.w = max(0,dot(tempbloom.xyz,0.333)-fAnamFlareThreshold
);
tempbloom.xyz = max(0, tempbloom.xyz-fBloomThreshold);
bloom+=tempbloom;
}
bloom *= 0.25;
return bloom;
}
float4 PS_BloomPass1(VS_OUTPUT_POST IN) : COLOR
{
float2 pixelSize=ScreenSize.y;
pixelSize.y*=ScreenSize.z;
pixelSize.xy *= 4;
float4 bloom=0.0;
float2 bloomuv;
float2 offset[8]=
{
float2(1.0, 1.0),
float2(0.0, -1.0),
float2(-1.0, 1.0),
float2(-1.0, -1.0),
float2(0.0, 1.0),
float2(0.0, -1.0),
float2(1.0, 0.0),
float2(-1.0, 0.0)
};
for (int i=0; i<8; i++)
{
bloomuv.xy=offset[i]*pixelSize.xy;
bloomuv.xy=IN.txcoord.xy + bloomuv.xy;
0)
w = 1.0 + abs(offset[i]); // weight blur for better effect
ds = tex2D(SamplerDepth, coord.xy).x;
offs = DOF(ds, sf);
#if (USE_BOKEH_DOF == 1)
// my own pseudo-bokeh weighting
float b = GrayScale(ct.rgb) + length(ct.rgb) + 0.1;
float w = pow(b, fBokehCurve) + abs(offset[i]);
#endif
#endif
tcol += ct * w;
wValue += w;
}
tcol /= wValue;
#if (USE_SPLITSCREEN==1)
return (IN.txcoord.x > 0.5) ? tex2D(SamplerColorHDR1, IN.txcoord) : tcol;
#endif
res.xyz = tcol.xyz;
res.w = 1.0;
return res;
}
float4 PS_ProcessPass_FastDoF2(VS_OUTPUT_POST IN) : COLOR
{
float4 res;
float2 coord = IN.txcoord.xy;
float4 tcol = tex2D(SamplerColorHDR2, coord.xy);
float sd = tex2D(SamplerDepth, coord).x;
int axis = SECOND_PASS;
float sf = 0;
#if (USE_AUTOFOCUS == 1)
sf = tex2D(SamplerDepth, 0.5).x;
#endif
#if ( USE_SMOOTH_DOF == 1)
sf -= fFocusBias * 2.0;
#else
sf -= fFocusBias;
#endif
float outOfFocus = DOF(sd, sf);
float offset[4] = { -1.282, -0.524, 0.524, 1.282 };
float2 tdirs[4] = { float2(1.0, 0.0), float2(0.0, 1.0), float2(0.707, 0.
707), float2(-0.707, 0.707) };
//float2 taps[4] = { float2(-1.282, 0.524), float2(0.524, -1.282), float
2(-1.282, -0.524), float2(0.524, 1.282) };
float blur = DOF_SCALE * outOfFocus;
#if (USE_BOKEH_DOF==1)
float wValue = (1.0 + pow(length(tcol.rgb) + 0.1, fBokehCurve)) * (1.0 fBokehLight); // special recipe from papa Matso ;)
#else
float wValue = 1.0;
#endif
tdirs[axis].x *= fvTexelSize.x;
tdirs[axis].y *= fvTexelSize.y;
#if( USE_BOKEH_DOF == 1)
blur *= 0.25;
#endif
for (int i = 0; i < 4; i++)
{
//float2 t = taps[i] * fvTexelSize;
float2 tdir = offset[i] * tdirs[axis] * blur;
//float2 tdir = blur * (tdirs[axis] + t);
coord.xy = IN.txcoord.xy + tdir.xy;
#if (USE_CHROMA_DOF == 1)
float4 ct = ChromaticAberrationFocusPass(coord.xy, outOfFocus, S
amplerColorHDR2);
#else
float4 ct = tex2D(SamplerColorHDR2, coord.xy);
#endif
#if (USE_BOKEH_DOF ==
float
#else
float
float
0)
w = 1.0 + abs(offset[i]); // weight blur for better effect
ds = tex2D(SamplerDepth, coord.xy).x;
offs = DOF(ds, sf);
#if (USE_BOKEH_DOF == 1)
// my own pseudo-bokeh weighting
float b = GrayScale(ct.rgb) + length(ct.rgb) + 0.1;
float w = pow(b, fBokehCurve) + abs(offset[i]);
#endif
#endif
tcol += ct * w;
wValue += w;
}
tcol /= wValue;
#if (USE_SPLITSCREEN==1)
return (IN.txcoord.x > 0.5) ? tex2D(SamplerColorHDR2, IN.txcoord) : tcol;
#endif
res.xyz = tcol.xyz;
res.w = 1.0;
return res;
}
float4 PS_ProcessPass_FastDoF3(VS_OUTPUT_POST IN) : COLOR
{
float4 res;
float2 coord = IN.txcoord.xy;
float4 tcol = tex2D(SamplerColorHDR1, coord.xy);
float sd = tex2D(SamplerDepth, coord).x;
int axis = THIRD_PASS;
float sf = 0;
#if (USE_AUTOFOCUS == 1)
sf = tex2D(SamplerDepth, 0.5).x;
#endif
#if ( USE_SMOOTH_DOF == 1)
sf -= fFocusBias * 2.0;
#else
sf -= fFocusBias;
#endif
float outOfFocus = DOF(sd, sf);
float offset[4] = { -1.282, -0.524, 0.524, 1.282 };
float2 tdirs[4] = { float2(1.0, 0.0), float2(0.0, 1.0), float2(0.707, 0.
707), float2(-0.707, 0.707) };
//float2 taps[4] = { float2(-1.282, 0.524), float2(0.524, -1.282), float
2(-1.282, -0.524), float2(0.524, 1.282) };
float blur = DOF_SCALE * outOfFocus;
#if (USE_BOKEH_DOF==1)
float wValue = (1.0 + pow(length(tcol.rgb) + 0.1, fBokehCurve)) * (1.0 fBokehLight); // special recipe from papa Matso ;)
#else
float wValue = 1.0;
#endif
tdirs[axis].x *= fvTexelSize.x;
tdirs[axis].y *= fvTexelSize.y;
#if( USE_BOKEH_DOF == 1)
blur *= 0.25;
#endif
for (int i = 0; i < 4; i++)
{
//float2 t = taps[i] * fvTexelSize;
float2 tdir = offset[i] * tdirs[axis] * blur;
//float2 tdir = blur * (tdirs[axis] + t);
coord.xy = IN.txcoord.xy + tdir.xy;
#if (USE_CHROMA_DOF == 1)
float4 ct = ChromaticAberrationFocusPass(coord.xy, outOfFocus, S
amplerColorHDR1);
#else
float4 ct = tex2D(SamplerColorHDR1, coord.xy);
#endif
#if (USE_BOKEH_DOF ==
float
#else
float
float
0)
w = 1.0 + abs(offset[i]); // weight blur for better effect
ds = tex2D(SamplerDepth, coord.xy).x;
offs = DOF(ds, sf);
#if (USE_BOKEH_DOF == 1)
// my own pseudo-bokeh weighting
float b = GrayScale(ct.rgb) + length(ct.rgb) + 0.1;
float w = pow(b, fBokehCurve) + abs(offset[i]);
#endif
#endif
tcol += ct * w;
wValue += w;
}
tcol /= wValue;
#if (USE_SPLITSCREEN==1)
return (IN.txcoord.x > 0.5) ? tex2D(SamplerColorHDR1, IN.txcoord) : tcol;
#endif
res.xyz = tcol.xyz;
res.w = 1.0;
return res;
}
float4 PS_ProcessPass_FastDoF4(VS_OUTPUT_POST IN) : COLOR
{
float4 res;
float2 coord = IN.txcoord.xy;
float4 tcol = tex2D(SamplerColorHDR2, coord.xy);
float sd = tex2D(SamplerDepth, coord).x;
int axis = FOURTH_PASS;
float sf = 0;
#if (USE_AUTOFOCUS == 1)
sf = tex2D(SamplerDepth, 0.5).x;
#endif
#if ( USE_SMOOTH_DOF == 1)
sf -= fFocusBias * 2.0;
#else
sf -= fFocusBias;
#endif
float outOfFocus = DOF(sd, sf);
float offset[4] = { -1.282, -0.524, 0.524, 1.282 };
float2 tdirs[4] = { float2(1.0, 0.0), float2(0.0, 1.0), float2(0.707, 0.
707), float2(-0.707, 0.707) };
//float2 taps[4] = { float2(-1.282, 0.524), float2(0.524, -1.282), float
2(-1.282, -0.524), float2(0.524, 1.282) };
float blur = DOF_SCALE * outOfFocus;
#if (USE_BOKEH_DOF==1)
float wValue = (1.0 + pow(length(tcol.rgb) + 0.1, fBokehCurve)) * (1.0 fBokehLight); // special recipe from papa Matso ;)
#else
float wValue = 1.0;
#endif
tdirs[axis].x *= fvTexelSize.x;
tdirs[axis].y *= fvTexelSize.y;
#if( USE_BOKEH_DOF == 1)
blur *= 0.25;
#endif
for (int i = 0; i < 4; i++)
{
//float2 t = taps[i] * fvTexelSize;
float2 tdir = offset[i] * tdirs[axis] * blur;
//float2 tdir = blur * (tdirs[axis] + t);
coord.xy = IN.txcoord.xy + tdir.xy;
#if (USE_CHROMA_DOF == 1)
float4 ct = ChromaticAberrationFocusPass(coord.xy, outOfFocus, S
amplerColorHDR2);
#else
float4 ct = tex2D(SamplerColorHDR2, coord.xy);
#endif
#if (USE_BOKEH_DOF ==
float
#else
float
float
0)
w = 1.0 + abs(offset[i]); // weight blur for better effect
ds = tex2D(SamplerDepth, coord.xy).x;
offs = DOF(ds, sf);
#if (USE_BOKEH_DOF == 1)
// my own pseudo-bokeh weighting
float b = GrayScale(ct.rgb) + length(ct.rgb) + 0.1;
float w = pow(b, fBokehCurve) + abs(offset[i]);
#endif
#endif
tcol += ct * w;
wValue += w;
}
tcol /= wValue;
#if (USE_SPLITSCREEN==1)
return (IN.txcoord.x > 0.5) ? tex2D(SamplerColorHDR2, IN.txcoord) : tcol;
#endif
res.xyz = tcol.xyz;
res.w = 1.0;
return res;
}
#endif
#if( USE_GP65CJ042DOF == 1)
float4 PS_GPDOFFocus(VS_OUTPUT_POST IN) : COLOR
{
float4 res;
float2 coord=IN.txcoord.xy;
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return tex2D(SamplerColorHDR1, coord.xy);
#endif
float2 uvsrc=FocusPoint;
float2 pixelSize=ScreenSize.y;
pixelSize.y*=ScreenSize.z;
const float2 offset[4]=
{
float2(0.0, 1.0),
float2(0.0, -1.0),
float2(1.0, 0.0),
float2(-1.0, 0.0)
};
float resdepth=linearlizeDepth(tex2D(SamplerDepth, uvsrc.xy).x);
for (int i=0; i<4; i++)
{
uvsrc.xy=uvsrc.xy;
uvsrc.xy+=offset[i] * pixelSize.xy * FocusSampleRange;
#if (NOT_BLURRING_SKY_MODE==1)
resdepth+=linearlizeDepth(tex2D(SamplerDepth, uvsrc).x);
#else
resdepth+=min(linearlizeDepth(tex2D(SamplerDepth, uvsrc)
.x), DepthClip);
#endif
}
resdepth*=0.2;
float scenefocus=resdepth;
#if (AUTO_FOCUS == 0)
scenefocus = ManualFocusDepth; //+1 damit es bei 0 nicht 0 ist denn 1 is
t das Niedrigste was sein kann ohne bugs
#endif
{
float4 res;
float2 coord=IN.txcoord.xy;
float4 origcolor=tex2D(SamplerColorHDR2, coord.xy);
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return origcolor;
#endif
float centerDepth=origcolor.w;
float2 pixelSize=ScreenSize.y;
pixelSize.y*=ScreenSize.z;
float blurAmount=abs(centerDepth * 2.0 - 1.0);
float discRadius=blurAmount * float(DEPTH_OF_FIELD_QULITY);
discRadius*=RadiusSacleMultipiler;
discRadius*=(centerDepth < 0.5) ? (1.0 / max(NearBlurCurve, 1.0)) : 1.0;
res.xyz=origcolor.xyz;
res.w=dot(res.xyz, 0.3333);
res.w=max((res.w - BokehBrightnessThreshold) * BokehBrightnessMultipiler
, 0.0);
res.xyz*=1.0 + res.w*blurAmount;
res.w=1.0;
int sampleCycle=0;
int sampleCycleCounter=0;
int sampleCounterInCycle=0;
#if ( POLYGONAL_BOKEH == 1)
float basedAngle=360.0 / POLYGON_NUM;
float2 currentVertex;
float2 nextVertex;
int
dofTaps=DEPTH_OF_FIELD_QULITY * (DEPTH_OF_FIELD_QULITY +
1) * POLYGON_NUM / 2.0;
#else
int
dofTaps=DEPTH_OF_FIELD_QULITY * (DEPTH_OF_FIELD_QULITY +
1) * 4;
#endif
for(int i=0; i < dofTaps; i++)
{
if(sampleCounterInCycle % (sampleCycle+1) == 0
{
sampleCounterInCycle=0;
sampleCycleCounter++;
#if ( POLYGONAL_BOKEH == 1)
sampleCycle+=POLYGON_NUM;
currentVertex.xy=float2(1.0 , 0.0);
sincos(basedAngle* 0.017453292, nextVertex.y, ne
xtVertex.x);
#else
sampleCycle+=8;
#endif
}
sampleCounterInCycle++;
#if (POLYGONAL_BOKEH==1)
float sampleAngle=basedAngle / float(sampleCycleCounter)
* sampleCounterInCycle;
float remainAngle=frac(sampleAngle / basedAngle) * based
Angle;
if(remainAngle == 0)
{
currentVertex=nextVertex;
sincos((sampleAngle + basedAngle) * 0.017453292
, nextVertex.y, nextVertex.x);
}
float2 sampleOffset=lerp(currentVertex.xy, nextVertex.xy
, remainAngle / basedAngle);
#else
float sampleAngle=0.78539816 / float(sampleCycleCounter)
* sampleCounterInCycle;
float2 sampleOffset;
sincos(sampleAngle, sampleOffset.y, sampleOffset.x);
#endif
sampleOffset*=sampleCycleCounter / float(DEPTH_OF_FIELD_QULITY);
float2 coordLow=coord.xy + (pixelSize.xy * sampleOffset.xy * di
scRadius);
float4 tap=tex2D(SamplerColorHDR2, coordLow.xy);
float weight=(tap.w >= centerDepth) ? 1.0 : abs(tap.w * 2.0 - 1.
0);
float luma=dot(tap.xyz, 0.3333);
float brightMultipiler=max((luma - BokehBrightnessThreshold) * B
okehBrightnessMultipiler, 0.0);
tap.xyz*=1.0 + brightMultipiler*abs(tap.w*2.0 - 1.0);
weight*=1.0 + BokehBias * pow(float(sampleCycleCounter)/float(DE
PTH_OF_FIELD_QULITY), BokehBiasCurve);
res.xyz+=tap.xyz * weight;
res.w+=weight;
}
res.xyz /= res.w;
res.w=centerDepth;
return res;
}
float4 PS_GPDOFGaussianH(VS_OUTPUT_POST IN) : COLOR
{
float2 coord=IN.txcoord.xy;
float2 pixelSize=ScreenSize.y;
pixelSize.y*=ScreenSize.z;
float4 origcolor=tex2D(SamplerColorHDR1, coord.xy);
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return origcolor;
#endif
float depth=origcolor.w;
float blurAmount=abs(depth*2.0 - 1.0);
#if (DEPTH_OF_FIELD_QULITY > 0)
blurAmount*=(depth < 0.5) ? (1.0 / max(NearBlurCurve, 1.0)) : 1.
0;
blurAmount=smoothstep(0.15, 1.0, blurAmount);
#endif
blurAmount *= BokehPostBlur;
float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.054054054
1,
0.0162162162};
float4 res=origcolor * weight[0];
for(int i=1; i < 5; i++)
{
res+=tex2D(SamplerColorHDR1, coord.xy + float2(i*pixelSize.x*blu
rAmount, 0)) * weight[i];
res+=tex2D(SamplerColorHDR1, coord.xy - float2(i*pixelSize.x*blu
rAmount, 0)) * weight[i];
}
res.w=depth;
return res;
}
float4 PS_GPDOFGaussianV(VS_OUTPUT_POST IN) : COLOR
{
float2 coord=IN.txcoord.xy;
float2 pixelSize=ScreenSize.y;
pixelSize.y*=ScreenSize.z;
float4 origcolor=tex2D(SamplerColorHDR2, coord.xy);
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return origcolor;
#endif
float depth=origcolor.w;
float blurAmount=abs(depth*2.0 - 1.0);
#if (DEPTH_OF_FIELD_QULITY > 0)
blurAmount*=(depth < 0.5) ? (1.0 / max(NearBlurCurve, 1.0)) : 1.
0;
blurAmount=smoothstep(0.15, 1.0, blurAmount);
#endif
blurAmount *= BokehPostBlur;
float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.054054054
1,
0.0162162162};
float4 res=origcolor * weight[0];
for(int i=1; i < 5; i++)
{
res+=tex2D(SamplerColorHDR2, coord.xy + float2(0, i*pixelSize.y*
blurAmount)) * weight[i];
res+=tex2D(SamplerColorHDR2, coord.xy - float2(0, i*pixelSize.y*
blurAmount)) * weight[i];
}
res.w=depth;
return res;
}
#endif
float4 PS_Colors(VS_OUTPUT_POST IN) : COLOR
{
//global variables
float2 pixelsize
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
= tex2D(SamplerColorHDR1, IN.txcoord.xy);
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
#if (USE_CARTOON == 1)
color.xyz = CartoonPass(color.xyz, IN.txcoord.xy, pixelsize.xy);
#endif
//colors
#if (USE_LUT == 1)
color.x = tex2D(SamplerLut, float2(color.x, 1.0)).x;
color.y = tex2D(SamplerLut, float2(color.y, 1.0)).y;
color.z = tex2D(SamplerLut, float2(color.z, 1.0)).z;
#endif
#if (USE_LEVELS== 1)
color.xyz = LevelsPass(color.xyz);
#endif
#if (USE_TECHNICOLOR == 1)
color.xyz = TechniPass_prod80(color.xyz);
#endif
#if (USE_SWFX_TECHNICOLOR == 1)
color.xyz = TechnicolorPass(color.xyz);
#endif
#if (USE_DPX == 1)
color.xyz = DPXPass(color.xyz);
#endif
#if (USE_MONOCHROME == 1)
color.xyz = dot(color.xyz, 0.333);
#endif
#if (USE_LIFTGAMMAGAIN == 1)
color.xyz = LiftGammaGainPass(color.xyz);
#endif
#if (USE_TONEMAP == 1)
color.xyz = TonemapPass(color.xyz);
#endif
#if (USE_VIBRANCE == 1)
color.xyz = VibrancePass(color.xyz);
#endif
#if (USE_CURVES == 1)
color.xyz = CurvesPass(color.xyz);
#endif
#if (USE_SEPIA == 1)
color.xyz = SepiaPass(color.xyz);
#endif
#if (USE_SKYRIMTONEMAP == 1)
color.xyz = SkyrimTonemapPass(color.xyz);
#endif
#if (USE_COLORMOOD == 1)
color.xyz = MoodPass(color.xyz);
#endif
#if (USE_CROSSPROCESS == 1)
color.xyz = CrossPass(color.xyz);
#endif
#if (USE_FILMICPASS == 1)
color.xyz = FilmPass(color.xyz);
#endif
#if (USE_REINHARDLINEAR == 1)
color.xyz = ReinhardLinearToneMapping(color.xyz);
#endif
#if (USE_REINHARD == 1)
color.xyz = ReinhardToneMapping(color.xyz);
#endif
#if (USE_HPD == 1)
color.xyz = HaarmPeterDuikerFilmicToneMapping(color.xyz);
#endif
#if (USE_FILMICCURVE == 1)
color.xyz = CustomToneMapping(color.xyz);
#endif
#if (USE_COLORMOD == 1)
color.xyz = ColormodPass(color.xyz);
#endif
#if (USE_SPHERICALTONEMAP == 1)
color.xyz = SphericalPass(color.xyz);
#endif
#if (USE_LEIFX == 1)
color = LeiFX_Reduct(color, IN.txcoord.xy);
#endif
return color;
}
float4 PS_Distort(VS_OUTPUT_POST IN) : COLOR
{
//global variables
float2 pixelsize
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
float depth
= tex2D(SamplerColorHDR2, IN.txcoord.xy);
= tex2D(SamplerDepth, IN.txcoord.xy).x;
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
float4 coord=0.0;
coord.xy=IN.txcoord.xy;
coord.w=0.0;
float3 eta = float3(1.0+ChromaticAmount*0.9,1.0+ChromaticAmount*0.6,1.0+
ChromaticAmount*0.3);
float2 center;
center.x = coord.x-0.5;
center.y = coord.y-0.5;
float LensZoom = 1.0/LensSize;
float r2 = (IN.txcoord.x-0.5) * (IN.txcoord.x-0.5) + (IN.txcoord.y-0.5)
* (IN.txcoord.y-0.5);
float f = 0;
if( LensDistortionCubic == 0.0){
f = 1 + r2 * LensDistortion;
}else{
f = 1 + r2 * (LensDistortion + LensDistortionCubic * sqrt(r2));
};
float x = f*LensZoom*(coord.x-0.5)+0.5;
float y = f*LensZoom*(coord.y-0.5)+0.5;
float2 rCoords = (f*eta.r)*LensZoom*(center.xy*0.5)+0.5;
float2 gCoords = (f*eta.g)*LensZoom*(center.xy*0.5)+0.5;
float2 bCoords = (f*eta.b)*LensZoom*(center.xy*0.5)+0.5;
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
float depth
= tex2D(SamplerColorHDR2, IN.txcoord.xy);
= tex2D(SamplerDepth, IN.txcoord.xy).x;
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
#if( USE_GODRAYS == 1)
float2 ScreenLightPos = float2(0.5, 0.5);
float2 texCoord = IN.txcoord.xy;
float2 deltaTexCoord = (texCoord.xy - ScreenLightPos.xy);
deltaTexCoord *= 1.0 / (float)GodraySamples * GodrayDensity;
float illuminationDecay = 1.0;
for(int g = 0; g < GodraySamples; g++) {
texCoord -= deltaTexCoord;;
float4 sample2 = tex2D(SamplerColorHDR2, texCoord.xy);
float sampledepth = tex2D(SamplerDepth, texCoord.xy).x;
sample2.w = saturate(dot(sample2.xyz, 0.3333) - GodrayThreshold)
;
sample2.r *= 1.0;
sample2.g *= 0.95;
sample2.b *= 0.85;
sample2 *= illuminationDecay * GodrayWeight;
#if (GODRAYDEPTHCHECK == 1)
if(sampledepth>0.9999) color.xyz += sample2.xyz*sample2.w;
#else
color += sample2;
#endif
illuminationDecay *= GodrayDecay;
}
#endif
#if (USE_LENZFLARE == 1)
float3 lfoffset[19]={
#if (LENZDEPTHCHECK == 1)
float templensdepth = tex2D(SamplerDepth, lfcoord.xy).x;
if(templensdepth < 0.9999) lenstemp1 = 0;
#endif
lenstemp1 = max(0,lenstemp1.xyz - LenzThreshold);
lenstemp1 *= lffactors[i].xyz*templensmult;
lenstemp += lenstemp1;
}
color.xyz += lenstemp.xyz*LenzIntensity;
#endif
#if(USE_ANAMFLARE == 1)
float3 anamFlare = AnamorphicSample(0, IN.txcoord.xy, fFlareBlur) * fFla
reTint;
float gaussweight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.0540
540541, 0.0162162162};
for(int z=0; z < 5; z++)
{
anamFlare+=AnamorphicSample(0, IN.txcoord.xy + float2(0, z * pix
elsize.y), fFlareBlur) * fFlareTint* gaussweight[z];
anamFlare+=AnamorphicSample(0, IN.txcoord.xy - float2(0, z * pix
elsize.y), fFlareBlur) * fFlareTint* gaussweight[z];
}
color.xyz += anamFlare * fFlareIntensity;
#endif
#if (USE_BLOOM == 1)
float3 colorbloom=0;
//colorbloom.xyz += tex2D(SamplerBloom1, IN.txcoord.xy).xyz*1.0;
//colorbloom.xyz += tex2D(SamplerBloom2, IN.txcoord.xy).xyz*2.0;
colorbloom.xyz += tex2D(SamplerBloom3, IN.txcoord.xy).xyz*1.0;
colorbloom.xyz += tex2D(SamplerBloom5, IN.txcoord.xy).xyz*9.0;
colorbloom.xyz *= 0.1;
colorbloom.xyz = saturate(colorbloom.xyz);
float colorbloomgray = dot(colorbloom.xyz, 0.333);
colorbloom.xyz = lerp(colorbloomgray, colorbloom.xyz, fBloomSaturation);
colorbloom.xyz *= fBloomTint;
float colorgray = dot(color.xyz, 0.333);
if(BLOOM_MIXMODE == 1) color.xyz =
if(BLOOM_MIXMODE == 2) color.xyz =
if(BLOOM_MIXMODE == 3) color.xyz =
,(1.0f - (1.0f - saturate(colorbloom.xyz))
0))),1.0)));
if(BLOOM_MIXMODE == 4) color.xyz =
#endif
color.xyz + colorbloom.xyz;
1-(1-color.xyz)*(1-colorbloom.xyz);
max(0.0f,max(color.xyz,lerp(color.xyz
*(1.0f - saturate(colorbloom.xyz * 1.
max(color.xyz, colorbloom.xyz);
#if(USE_GAUSSIAN_ANAMFLARE == 1)
float3 anamflare = tex2D(SamplerBloom5, IN.txcoord.xy).w*2*fAnamFlareCol
or;
anamflare.xyz = max(anamflare.xyz,0);
color.xyz += pow(anamflare.xyz,1/fAnamFlareCurve);
#endif
#if(USE_LENSDIRT == 1)
float lensdirtmult = dot(tex2D(SamplerBloom5, IN.txcoord.xy).xyz,0.333);
float3 dirttex = tex2D(SamplerDirt, IN.txcoord.xy).xyz;
float3 lensdirt = dirttex.xyz*lensdirtmult*fLensdirtIntensity;
color.xyz += lensdirt.xyz;
#endif
return color;
}
float4 PS_Image(VS_OUTPUT_POST IN) : COLOR
{
//global variables
float2 pixelsize
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
= tex2D(SamplerColorHDR1, IN.txcoord.xy);
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
#if (USE_SHARPENING == 1)
color.xyz = SharpPass(color.xyz, IN.txcoord.xy, pixelsize.xy);
#endif
//color.xyz = abs(frac(Timer.x*0.9999)-0.5);
#if(USE_GRAIN == 1)
float GrainTimerSeed = abs(frac(Timer.x*(1.0-fGrainMotion))-0.5);
float2 GrainTexCoordSeed = cos(IN.txcoord.y*1.235229)+tan(IN.txcoord.x/1
.97) * 0.1;
float2 GrainSeed1 = GrainTexCoordSeed + float2( 0.0, GrainTimerSeed );
float2 GrainSeed2 = GrainTexCoordSeed + float2( GrainTimerSeed, 0.0 );
float2 GrainSeed3 = GrainTexCoordSeed + float2( GrainTimerSeed, GrainTim
erSeed );
float GrainNoise1 = random( GrainSeed1 );
float GrainNoise2 = random( GrainSeed2 );
float GrainNoise3 = random( GrainSeed3 );
float GrainNoise4 = ( GrainNoise1 + GrainNoise2 + GrainNoise3 ) * 0.3333
33333;
float3 GrainNoise = float3( GrainNoise4, GrainNoise4, GrainNoise4 );
float3 GrainColor = float3( GrainNoise1, GrainNoise2, GrainNoise3 );
float ColorLuma = dot(color.xyz, 0.333);
float GrainIntensityMult = GrainIntensityMid;
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
= tex2D(SamplerColorHDR2, IN.txcoord.xy);
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
#if (USE_LEIFX == 1)
color = LeiFX_Gamma(color,IN.txcoord.xy);
#endif
#if (USE_EXPLOSION == 1)
color.xyz = ExplosionPass(color.xyz, IN.txcoord.xy, pixelsize.xy);
#endif
#if (USE_SINCITY == 1)
float sinlumi = dot(color.rgb, float3(0.30f,0.59f,0.11f));
if(color.r > (color.g + 0.2f) && color.r > (color.b + 0.025f))
{
color.rgb = float3(sinlumi, 0, 0)*1.5;
}
else
{
color.rgb = sinlumi;
}
#endif
#if (USE_COLORHUEFX == 1)
color.xyz = colorhuefx_prod80(color.xyz);
#endif
#if (USE_BORISVIGNETTE==1)
float2 uv=(IN.txcoord-0.5)*EVignetteRadius;
float vignetteold=saturate(dot(uv.xy, uv.xy));
vignetteold=pow(vignetteold, EVignetteCurve);
#if (VIGNCOLORING==1)
float3 EVignetteColor=float3(VIGNREDAMOUNT, VIGNGREENAMOUNT, VIGNBLUEAM
OUNT);
#else
float3 EVignetteColor=float3(0.0, 0.0, 0.0);
#endif
color.xyz=lerp(color.xyz, EVignetteColor, vignetteold*EVignetteAmount);
#endif
#if (USE_HD6_VIGNETTE==1)
float rovigpwr = CircularPower; //for a circular vignette
float2 sqvigpwr = float2( SquareTop, SquareBottom ); // for the top and
bottom of the screen
float vsatstrength = ColorDistortion; // color distortion
float vignettepow = ContrastSharpen; // increases the contrast and sharp
ness
float vstrengthatnight = VignetteBorder;
float2 inTex = IN.txcoord;
float vhnd = 0.5;
float4 voriginal = color;
float4 vcolor = voriginal;
vcolor.xyz=1;
inTex -= 0.5; // center
inTex.y += 0.01; // offset from the center
float vignette = saturate(1.0 - dot( inTex, inTex ));
vcolor *= pow( vignette, vignettepow );
float4 rvigtex = vcolor;
rvigtex.xyz = pow( vcolor.xyz, 1 );
rvigtex.xyz = lerp(float3(0.5, 0.5, 0.5), rvigtex.xyz, 2.25); // contras
t
rvigtex.xyz = lerp(float3(1,1,1),rvigtex.xyz,rovigpwr); // strength of t
he circular vinetty
//darken the top and bottom
float4 vigtex = vcolor;
vcolor.xyz = float3(1,1,1);
#if (LEFTANDRIGHT==1)
float3 topv = min((inTex.x+0.5)*2,1.5) * 2; // top
float3 botv = min(((0-inTex.x)+0.5)*2,1.5) * 2; // botton
topv= lerp(float3(1,1,1), topv, sqvigpwr.x);
botv= lerp(float3(1,1,1), botv, sqvigpwr.y);
vigtex.xyz = (topv)*(botv);
#endif
#if (TOPANDBOTTOM==1)
float3 topv = min((inTex.y+0.5)*2,1.5) * 2; // top
float3 botv = min(((0-inTex.y)+0.5)*2,1.5) * 2; // botton
topv= lerp(float3(1,1,1), topv, sqvigpwr.x);
botv= lerp(float3(1,1,1), botv, sqvigpwr.y);
vigtex.xyz = (topv)*(botv);
#endif
#if (CORNERDARKEN==1)
float3 rightv = min((inTex.x+0.5)*2,1.5) * 2;
float3 leftv = min(((0-inTex.x)+0.5)*2,1.5) * 2;
float3 topv = min((inTex.y+0.5)*2,1.5) * 2;
float3 botv = min(((0-inTex.y)+0.5)*2,1.5) * 2;
rightv= lerp(float3(1,1,1), rightv, sqvigpwr.y);
leftv= lerp(float3(1,1,1), leftv, sqvigpwr.x);
topv= lerp(float3(1,1,1), topv, sqvigpwr.x);
botv= lerp(float3(1,1,1), botv, sqvigpwr.y);
vigtex.xyz = (topv)*(botv)*(rightv)*(leftv);
#endif
// mix the two types of vignettes
vigtex.xyz*=rvigtex.xyz;
vigtex.xyz = lerp(vigtex.xyz,float3(1,1,1),(vhnd-vstrengthatnight*vhnd))
; //for a dark screen
vigtex.xyz = min(vigtex.xyz,1);
vigtex.xyz = max(vigtex.xyz,0);
float3 vtintensity = dot(voriginal.xyz, float3(0.2125, 0.7154, 0.0721));
color.xyz = lerp(vtintensity, voriginal.xyz, ((((1-(vigtex.xyz*2))+2)-1)
*vsatstrength)+1 );
color.xyz *= (vigtex.xyz);
#endif
#if (USE_BORDER==1)
float2 distancefromcenter = abs(IN.txcoord.xy - 0.5);
bool2 screen_border = step(0.5 - pixelsize,distancefromcenter);
color.xyz = (!dot(screen_border, 1.0)) ? color.xyz : 0.0;
#endif
#if (USE_MOVIEBARS == 1)
color.xyz = IN.txcoord.y > 0.12 && IN.txcoord.y < 0.88 ? color.xyz : 0.0
;
#endif
#if(USE_DEPTHBUFFER_OUTPUT == 1)
color.xyz = pow(saturate(tex2D(SamplerDepth, IN.txcoord.xy).x),50);
#endif
return color;
}
float2 aorand(in float2 coord) //generating noise/pattern texture for dithering
{
float noiseX = ((frac(1.0-coord.x*(BUFFER_WIDTH/2.0))*0.25)+(frac(coord.
y*(BUFFER_HEIGHT/2.0))*0.75))*2.0-1.0;
float noiseY = ((frac(1.0-coord.x*(BUFFER_WIDTH/2.0))*0.75)+(frac(coord.
y*(BUFFER_HEIGHT/2.0))*0.25))*2.0-1.0;
return float2(noiseX,noiseY)*0.01;
}
float4 PS_SSAOGen(VS_OUTPUT_POST IN) : COLOR
{
//global variables
float2 pixelsize
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
= tex2D(SamplerColorHDR1, IN.txcoord.xy);
;
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
if(tex2D(SamplerDepth, IN.txcoord.xy).x > 0.999) return float4(color.xyz
, 0.5);
float offsetScale = SSAO_Range/10000;
float fSSAODepthClip = 10000000.0;
=
=
=
=
=
=
=
=
=
hao * vRotation.y
-hao * vRotation.y
-vRotation.x;
-hao * vRotation.y
hao * vRotation.x
-vRotation.y;
vRotation.x;
vRotation.y;
vRotation.z;
* vRotation.y + vRotation.z;
* vRotation.x;
* vRotation.x;
* vRotation.x + vRotation.z;
ffsetScaleStep);
//Rotate the offset vector
float3 vRotatedOffset = mul(vOffset, matRotate);
//Center pixel's coordinates in screen space
float3 vSamplePos = float3(IN.txcoord.xy, fSceneDepthP);
//Offset sample point
vSamplePos += float3(vRotatedOffset.xy, vRotatedOffset.z * fScen
eDepthP);
//Read sample point depth
float fSceneDepthS = linearlizeDepth(tex2Dlod(SamplerDepth, floa
t4(vSamplePos.xy,0,0)).x);
//Discard if depth equals max
if (fSceneDepthS >= fSSAODepthClip)
fAccessibility += 1.0f;
else {
//Compute accessibility factor
float fDepthDist = fSceneDepthP - fSceneDepthS;
float fRangeIsInvalid = saturate(fDepthDist);
if(abs(fDepthDist)<SSAO_SampleRangeClipMin) fRangeIsInva
lid = 1.0;
if(abs(fDepthDist)>SSAO_SampleRangeClipMax) fRangeIsInva
lid = 1.0;
fAccessibility += lerp(fSceneDepthS > vSamplePos.z, 0.5f
, fRangeIsInvalid);
}
}
//Compute average accessibility
fAccessibility = fAccessibility / Sample_Scaled;
#if(SSAO_DepthFade==1)
fAccessibility = lerp(fAccessibility,0.5,SceneDepthScaled);
#endif
color.w = fAccessibility;
return color;
}
float4 PS_SSAOBlurH(VS_OUTPUT_POST IN) : COLOR
{
//global variables
float2 pixelsize
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
= tex2D(SamplerColorHDR2, IN.txcoord.xy);
;
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
float weight[11] = {0.082607, 0.080977, 0.076276, 0.069041, 0.060049, 0.
050187, 0.040306, 0.031105, 0.023066, 0.016436, 0.011254};
color.a *= weight[0];
= float2(ScreenSize.y,ScreenSize.y*ScreenSize.z)
float4 color
= tex2D(SamplerColorHDR1, IN.txcoord.xy);
;
#if (USE_SPLITSCREEN == 1)
if(IN.txcoord.x > 0.5) return color;
#endif
float weight[11] = {0.082607, 0.080977, 0.076276, 0.069041, 0.060049, 0.
050187, 0.040306, 0.031105, 0.023066, 0.016436, 0.011254};
color.a *= weight[0];
for(int i=1; i < 11; i++)
{
color.a += tex2D(SamplerColorHDR1, IN.txcoord.xy + float2(i * pi
xelsize.y * SSAO_Smoothening, 0)).a * weight[i];
color.a += tex2D(SamplerColorHDR1, IN.txcoord.xy - float2(i * pi
xelsize.y * SSAO_Smoothening, 0)).a * weight[i];
}
float AOresult = color.a;
AOresult -= 0.5;
if(AOresult < 0) AOresult *= SSAO_DarkeningAmount;
if(AOresult > 0) AOresult *= SSAO_BrighteningAmount;
AOresult = 2.0*saturate(AOresult+0.5);
#if(SSAO_Debug == 0)
color.xyz *= AOresult;
#else
color.xyz = AOresult*0.5;
#endif
color.a = 1.0;
return color;
}
float4 PS_TiltShiftCoC(VS_OUTPUT_POST IN) : COLOR
{
float4 color;
pos.xy, float2(-1,-1), r
pos.xy, float2( 1,-1), r
pos.xy, float2(-1, 1), r
pos.xy, float2( 1, 1), r
pos.xy, float2(-1,-1), r
pos.xy, float2( 1,-1), r
pos.xy, float2(-1, 1), r
pos.xy, float2( 1, 1), r
VertexShader = VS_PostProcess;
PixelShader = PS_BloomPass3;
RenderTarget = texBloom4;
}
pass BloomPass4
{
VertexShader = VS_PostProcess;
PixelShader = PS_BloomPass4;
RenderTarget = texBloom5;
}
#endif
pass MasterEffectInitHDR
{
VertexShader = VS_PostProcess;
PixelShader = PS_EmptyPassInit;
RenderTarget = texColorHDR1;
}
#if (USE_SSAO == 1)
pass SSAOGen
{
VertexShader = VS_PostProcess;
PixelShader = PS_SSAOGen; //tex2
RenderTarget = texColorHDR2;
}
pass SSAOBlurH
{
VertexShader = VS_PostProcess;
PixelShader = PS_SSAOBlurH; //tex1
RenderTarget = texColorHDR1;
}
pass SSAOBlurV
{
VertexShader = VS_PostProcess;
PixelShader = PS_SSAOBlurV; //tex2
RenderTarget = texColorHDR2;
}
pass EmptyHDR1
{
VertexShader = VS_PostProcess;
PixelShader = PS_EmptyPassHDR1;
RenderTarget = texColorHDR1;
}
#endif
#if (USE_GP65CJ042DOF == 0 && USE_MATSODOF == 0 && USE_PETKAGTADOF == 1)
pass PETKADOF
{
VertexShader = VS_PostProcess;
PixelShader = PS_ProcessDoFBokeh;
RenderTarget = texColorHDR2;
} //tex2
pass EmptyHDR2
{
VertexShader = VS_PostProcess;
PixelShader = PS_EmptyPassHDR1;
RenderTarget = texColorHDR1;
}
#endif
#if (USE_GP65CJ042DOF == 0 && USE_MATSODOF == 1 && USE_PETKAGTADOF == 0)
pass MATSODOF1
{
VertexShader = VS_PostProcess;
PixelShader = PS_ProcessPass_FastDoF1; //tex2
RenderTarget = texColorHDR2;
}
pass MATSODOF2
{
VertexShader = VS_PostProcess;
PixelShader = PS_ProcessPass_FastDoF2; //tex1
RenderTarget = texColorHDR1;
}
pass MATSODOF3
{
VertexShader = VS_PostProcess;
PixelShader = PS_ProcessPass_FastDoF3; //tex2
RenderTarget = texColorHDR2;
}
pass MATSODOF4
{
VertexShader = VS_PostProcess;
PixelShader = PS_ProcessPass_FastDoF4; //tex1
RenderTarget = texColorHDR1;
}
#endif
#if (USE_GP65CJ042DOF == 1 && USE_MATSODOF == 0 && USE_PETKAGTADOF == 0)
pass GPDOF1
{
VertexShader = VS_PostProcess;
PixelShader = PS_GPDOFFocus;//tex2
RenderTarget = texColorHDR2;
}
pass GPDOF2
{
VertexShader = VS_PostProcess;
PixelShader = PS_GPDOFBokehblur;//tex1
RenderTarget = texColorHDR1;
}
pass GPDOF3
{
VertexShader = VS_PostProcess;
PixelShader = PS_GPDOFGaussianH;//tex2
RenderTarget = texColorHDR2;
}
pass GPDOF4
{
VertexShader = VS_PostProcess;
PixelShader = PS_GPDOFGaussianV;//tex1
RenderTarget = texColorHDR1;
}
#endif
#if(USE_TILTSHIFT == 1)
pass TiltShiftCoC
{
VertexShader = VS_PostProcess;
PixelShader = PS_TiltShiftCoC; //tex2
RenderTarget = texColorHDR2;
}
pass TiltShiftH
{
VertexShader = VS_PostProcess;
PixelShader = PS_TiltShiftH; //tex1
RenderTarget = texColorHDR1;
}
pass TiltShiftV
{
VertexShader = VS_PostProcess;
PixelShader = PS_TiltShiftV; //tex2
RenderTarget = texColorHDR2;
}
pass EmptyHDR3
{
VertexShader = VS_PostProcess;
PixelShader = PS_EmptyPassHDR1;
RenderTarget = texColorHDR1;
}
#endif
pass Image
{
VertexShader = VS_PostProcess;
PixelShader = PS_Image; //tex2
RenderTarget = texColorHDR2;
}
#if (USE_CHROMATICABBERATION == 1)
pass Distort
{
VertexShader = VS_PostProcess;
PixelShader = PS_Distort; //tex1
RenderTarget = texColorHDR1;
}
pass EmptyHDR4
{
VertexShader = VS_PostProcess;
PixelShader = PS_EmptyPassHDR2;
RenderTarget = texColorHDR2;
}
#endif
pass Lighting
{
VertexShader = VS_PostProcess;
PixelShader = PS_Lighting;
RenderTarget = texColorHDR1;
} //tex1
pass Colors
{
VertexShader = VS_PostProcess;
PixelShader = PS_Colors;
RenderTarget = texColorHDR2;
}//tex2
#if(USE_FXAA == 1)
#if(FXAANum == 2 || FXAANum == 4 || FXAANum == 6 || FXAANum == 8)
pass FXAA1
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA2;
RenderTarget = texColorHDR1;
}
pass FXAA2
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA1;
RenderTarget = texColorHDR2;
}
#endif
#if(FXAANum == 4 || FXAANum == 6 || FXAANum == 8)
pass FXAA3
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA2;
RenderTarget = texColorHDR1;
}
pass FXAA4
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA1;
RenderTarget = texColorHDR2;
}
#endif
#if(FXAANum == 6 || FXAANum == 8)
pass FXAA5
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA2;
RenderTarget = texColorHDR1;
}
pass FXAA6
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA1;
RenderTarget = texColorHDR2;
}
#endif
#if(FXAANum == 8)
pass FXAA7
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA2;
RenderTarget = texColorHDR1;
}
pass FXAA8
{
VertexShader = VS_PostProcess;
PixelShader = PS_FXAA1;
RenderTarget = texColorHDR2;
}
#endif
#endif
pass Overlay
{
VertexShader = VS_PostProcess;
PixelShader = PS_Overlay;
}//nix
}