mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
Code correction in Functions.cpp
Updated global shader example files.
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
/*************************************************************
|
||||
LumaSharpen version 1.5.0 for Reshade 3.x
|
||||
by Christian Cann Schuldt Jensen ~ CeeJay.dk
|
||||
|
||||
It blurs the original pixel with the surrounding pixels and then subtracts this blur to sharpen the image.
|
||||
It does this in luma to avoid color artifacts and allows limiting the maximum sharpning to avoid or lessen halo artifacts.
|
||||
This is similar to using Unsharp Mask in Photoshop.
|
||||
|
||||
Adapted to sfall by Mr.Stalin
|
||||
*************************************************************/
|
||||
|
||||
// Strength of the sharpening
|
||||
// min 0.1, max 3.0
|
||||
#define sharp_strength 0.75
|
||||
|
||||
// Limits maximum amount of sharpening a pixel receives. This helps avoid "haloing" artifacts which would otherwise occur when you raised the strength too much
|
||||
// min 0.0, max 1.0, step 0.005
|
||||
#define sharp_clamp 0.035
|
||||
|
||||
// Offset bias adjusts the radius of the sampling pattern. I designed the pattern for an offset bias of 1.0, but feel free to experiment
|
||||
// min 0.0, max 6.0
|
||||
#define offset_bias 1.0
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Developer settings //
|
||||
//------------------------------------------------------//
|
||||
|
||||
#define CoefLuma float3(0.2126, 0.7152, 0.0722) // BT.709 & sRBG luma coefficient (Monitors and HD Television)
|
||||
//#define CoefLuma float3(0.299, 0.587, 0.114) // BT.601 luma coefficient (SD Television)
|
||||
//#define CoefLuma float3(1.0/3.0, 1.0/3.0, 1.0/3.0) // Equal weight coefficient
|
||||
|
||||
sampler s0;
|
||||
|
||||
float2 rcpres; // pixel size
|
||||
|
||||
float4 LumaSharpenPS(float4 color : COLOR0, float2 tex : TEXCOORD) : COLOR0
|
||||
{
|
||||
// Get the original pixel
|
||||
float3 ori = tex2D(s0, tex).rgb; // ori = original pixel
|
||||
|
||||
// Combining the strength and luma multipliers
|
||||
float3 sharp_strength_luma = (CoefLuma * sharp_strength); // I'll be combining even more multipliers with it later on
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Sampling patterns //
|
||||
//------------------------------------------------------//
|
||||
float3 blur_ori;
|
||||
|
||||
// [ NW, , NE ] Each texture lookup (except ori)
|
||||
// [ ,ori, ] samples 4 pixels
|
||||
// [ SW, , SE ]
|
||||
|
||||
// -- Pattern 2 -- A 9 tap gaussian using 4+1 texture fetches.
|
||||
//
|
||||
// -- Gaussian filter --
|
||||
// [ .25, .50, .25] [ 1 , 2 , 1 ]
|
||||
// [ .50, 1, .50] = [ 2 , 4 , 2 ]
|
||||
// [ .25, .50, .25] [ 1 , 2 , 1 ]
|
||||
|
||||
blur_ori = tex2D(s0, tex + float2(rcpres.x, -rcpres.y) * 0.5 * offset_bias).rgb; // South East
|
||||
blur_ori += tex2D(s0, tex - rcpres * 0.5 * offset_bias).rgb; // South West
|
||||
blur_ori += tex2D(s0, tex + rcpres * 0.5 * offset_bias).rgb; // North East
|
||||
blur_ori += tex2D(s0, tex - float2(rcpres.x, -rcpres.y) * 0.5 * offset_bias).rgb; // North West
|
||||
blur_ori *= 0.25; // Divide by 4 the number of texture fetches
|
||||
|
||||
// -- Pattern 3 -- An experimental 17 tap gaussian using 4+1 texture fetches.
|
||||
// Wider is less sensitive to noise but also to fine details.
|
||||
// -- Gaussian filter --
|
||||
// [ , 4 , 6 , , ]
|
||||
// [ ,16 ,24 ,16 , 4 ]
|
||||
// [ 6 ,24 , ,24 , 6 ]
|
||||
// [ 4 ,16 ,24 ,16 , ]
|
||||
// [ , , 6 , 4 , ]
|
||||
|
||||
//blur_ori = tex2D(s0, tex + rcpres * float2(0.4, -1.2) * offset_bias).rgb; // South South East
|
||||
//blur_ori += tex2D(s0, tex - rcpres * float2(1.2, 0.4) * offset_bias).rgb; // West South West
|
||||
//blur_ori += tex2D(s0, tex + rcpres * float2(1.2, 0.4) * offset_bias).rgb; // East North East
|
||||
//blur_ori += tex2D(s0, tex - rcpres * float2(0.4, -1.2) * offset_bias).rgb; // North North West
|
||||
//blur_ori *= 0.25; // Divide by the number of texture fetches
|
||||
//sharp_strength_luma *= 0.51;
|
||||
|
||||
// -- Pattern 4 -- A 9 tap high pass (pyramid filter) using 4+1 texture fetches.
|
||||
// Pyramid has a slightly more aggresive look
|
||||
// -- Gaussian filter --
|
||||
// [ .50, .50, .50] [ 1 , 1 , 1 ]
|
||||
// [ .50, , .50] = [ 1 , , 1 ]
|
||||
// [ .50, .50, .50] [ 1 , 1 , 1 ]
|
||||
|
||||
//blur_ori = tex2D(s0, tex + float2(0.5 * rcpres.x, -rcpres.y * offset_bias)).rgb; // South South East
|
||||
//blur_ori += tex2D(s0, tex + float2(offset_bias * -rcpres.x, 0.5 * -rcpres.y)).rgb; // West South West
|
||||
//blur_ori += tex2D(s0, tex + float2(offset_bias * rcpres.x, 0.5 * rcpres.y)).rgb; // East North East
|
||||
//blur_ori += tex2D(s0, tex + float2(0.5 * -rcpres.x, rcpres.y * offset_bias)).rgb; // North North West
|
||||
////blur_ori += (2 * ori); // Probably not needed. Only serves to lessen the effect.
|
||||
//blur_ori /= 4.0; // Divide by the number of texture fetches
|
||||
//sharp_strength_luma *= 0.666; // Adjust strength to aproximate the strength of pattern 2
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Sharpen //
|
||||
//------------------------------------------------------//
|
||||
|
||||
// Calculate the sharpening --
|
||||
float3 sharp = ori - blur_ori; // Subtracting the blurred image from the original image
|
||||
|
||||
// Adjust strength of the sharpening and clamp it
|
||||
float4 sharp_strength_luma_clamp = float4(sharp_strength_luma * (0.5 / sharp_clamp), 0.5); // Roll part of the clamp into the dot
|
||||
|
||||
//sharp_luma = saturate((0.5 / sharp_clamp) * sharp_luma + 0.5); // scale up and clamp
|
||||
float sharp_luma = saturate(dot(float4(sharp, 1.0), sharp_strength_luma_clamp)); // Calculate the luma, adjust the strength, scale up and clamp
|
||||
sharp_luma = (sharp_clamp * 2.0) * sharp_luma - sharp_clamp; // scale down
|
||||
|
||||
// Combining the values to get the final sharpened pixel
|
||||
float3 outputcolor = ori + sharp_luma; // Add the sharpening to the the original.
|
||||
|
||||
//------------------------------------------------------//
|
||||
// Returning the output //
|
||||
//------------------------------------------------------//
|
||||
|
||||
// Show sharpening pattern
|
||||
// Visualize the strength of the sharpen\nThis is useful for seeing what areas the sharpning affects the most
|
||||
//outputcolor = saturate(0.5 + (sharp_luma * 4.0)).rrr; //outputcolor = abs(sharp * 4.0);
|
||||
|
||||
return float4(saturate(outputcolor), 1);
|
||||
}
|
||||
|
||||
technique LumaSharpen
|
||||
{
|
||||
pass P0 { PixelShader = compile ps_2_0 LumaSharpenPS(); }
|
||||
}
|
||||
@@ -31,11 +31,16 @@ sampler BloomSampler : samplerstate
|
||||
AddressV = Clamp;
|
||||
};
|
||||
|
||||
// Variables that set the width and height of the current game resolution from sfall
|
||||
float w;
|
||||
float h;
|
||||
// Variables that set the width and height of the current game resolution from sfall (only for global shaders)
|
||||
int w;
|
||||
int h;
|
||||
|
||||
// the pixel size is computed as: 1.0f / resolution
|
||||
float2 rcpRes;
|
||||
|
||||
// system ticks (received from sfall)
|
||||
//int tickcount;
|
||||
|
||||
static const float2 resolution = float2(w, h);
|
||||
static const float2 wPass = float2(1, 0);
|
||||
static const float2 hPass = float2(0, 1);
|
||||
|
||||
@@ -60,7 +65,7 @@ float4 BlurDeltaPassPS(float2 uv : TEXCOORD0, uniform float2 delta) : COLOR0
|
||||
float3 sumColor = (tex2D(s0, uv).rgb);
|
||||
float brightness = Brightness(sumColor);
|
||||
|
||||
delta *= (1 / resolution);
|
||||
delta *= rcpRes;
|
||||
float totalWeight = 1;
|
||||
|
||||
float2 pointUV = uv + delta;
|
||||
@@ -72,8 +77,8 @@ float4 BlurDeltaPassPS(float2 uv : TEXCOORD0, uniform float2 delta) : COLOR0
|
||||
return float4((sumColor / totalWeight), 1);
|
||||
}
|
||||
|
||||
static const float2 wDelta = float2(1, 0) * (1 / resolution);
|
||||
static const float2 hDelta = float2(0, 1) * (1 / resolution);
|
||||
static const float2 wDelta = float2(1, 0) * rcpRes;
|
||||
static const float2 hDelta = float2(0, 1) * rcpRes;
|
||||
|
||||
float4 BlurPS(float4 color : COLOR0, float2 uv : TEXCOORD0) : COLOR0
|
||||
{
|
||||
@@ -166,8 +171,8 @@ static const float sharpenVal0 = (Sharpen * (1.5 + EdgeSharpen));
|
||||
static const float sharpenVal1 = ((sharpenVal0 - 1) / 8.0);
|
||||
|
||||
// pixel "width"
|
||||
static const float px = (1.0 / w);
|
||||
static const float py = (1.0 / h);
|
||||
static const float px = rcpRes.x;
|
||||
static const float py = rcpRes.y;
|
||||
|
||||
// for the blur filter
|
||||
#define mean 1.0
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Shader from Media Player Classic - Home Cinema
|
||||
// Adapted to sfall by Mr.Stalin
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Sharpen filter setting
|
||||
//
|
||||
@@ -6,24 +9,14 @@
|
||||
// max: Sharpen 1.75, EdgeSharpen -0.5 (1.5, -0.25)
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
#define Sharpen 0.5
|
||||
#define EdgeSharpen 1.5
|
||||
#define EdgeSharpen 1.1
|
||||
|
||||
|
||||
texture sharpenTex;
|
||||
sampler s0;
|
||||
|
||||
sampler SharpenSampler : samplerstate
|
||||
{
|
||||
Texture = sharpenTex;
|
||||
MinFilter = Linear;
|
||||
MagFilter = Linear;
|
||||
AddressU = Clamp;
|
||||
AddressV = Clamp;
|
||||
};
|
||||
|
||||
// Variables that set the width and height of the current game resolution from sfall
|
||||
float w;
|
||||
float h;
|
||||
float2 rcpres; // pixel size
|
||||
|
||||
static const float CoefBlur = (Sharpen * 0.5);
|
||||
static const float CoefOrig = (1 + CoefBlur);
|
||||
@@ -34,8 +27,8 @@ static const float sharpenVal0 = (Sharpen * (1.5 + EdgeSharpen));
|
||||
static const float sharpenVal1 = ((sharpenVal0 - 1) / 8.0);
|
||||
|
||||
// pixel "width"
|
||||
static const float px = (1.0 / w);
|
||||
static const float py = (1.0 / h);
|
||||
static const float px = rcpres.x;
|
||||
static const float py = rcpres.y;
|
||||
|
||||
// for the blur filter
|
||||
#define mean 1.0
|
||||
|
||||
Reference in New Issue
Block a user