ProjectArcade

Форк
0
112 строк · 3.3 Кб
1
// hq4x filter from https://www.shadertoy.com/view/MslGRS
2

3
#include "ReShadeUI.fxh"
4

5
uniform float s < __UNIFORM_SLIDER_FLOAT1
6
	ui_min = 0.1; ui_max = 10.0;
7
	ui_label = "Strength";
8
	ui_tooltip = "Strength of the effect";
9
> = 1.5;
10
uniform float mx < __UNIFORM_SLIDER_FLOAT1
11
	ui_min = 0.0; ui_max = 1.0;
12
	ui_label = "Smoothing";
13
> = 1.0;
14
uniform float k < __UNIFORM_SLIDER_FLOAT1
15
	ui_min = -2.0; ui_max = 0.0;
16
	ui_label = "Weight Decrease Factor";
17
> = -1.10;
18
uniform float max_w < __UNIFORM_SLIDER_FLOAT1
19
	ui_min = 0.0; ui_max = 1.0;
20
	ui_label = "Max Filter Weight";
21
> = 0.75;
22
uniform float min_w < __UNIFORM_SLIDER_FLOAT1
23
	ui_min = 0.0; ui_max = 1.0;
24
	ui_label = "Min Filter Weight";
25
> = 0.03;
26
uniform float lum_add < __UNIFORM_SLIDER_FLOAT1
27
	ui_min = 0.0; ui_max = 1.0;
28
	ui_label = "Effects Smoothing";
29
> = 0.33;
30

31
#include "ReShade.fxh"
32

33
float3 PS_HQ4X(float4 pos : SV_Position, float2 uv : TexCoord) : SV_Target
34
{
35
	float x = s * BUFFER_RCP_WIDTH;
36
	float y = s * BUFFER_RCP_HEIGHT;
37

38
	const float3 dt = 1.0 * float3(1.0, 1.0, 1.0);
39

40
	float2 dg1 = float2( x, y);
41
	float2 dg2 = float2(-x, y);
42

43
	float2 sd1 = dg1 * 0.5;
44
	float2 sd2 = dg2 * 0.5;
45

46
	float2 ddx = float2(x, 0.0);
47
	float2 ddy = float2(0.0, y);
48

49
	float4 t1 = float4(uv - sd1, uv - ddy);
50
	float4 t2 = float4(uv - sd2, uv + ddx);
51
	float4 t3 = float4(uv + sd1, uv + ddy);
52
	float4 t4 = float4(uv + sd2, uv - ddx);
53
	float4 t5 = float4(uv - dg1, uv - dg2);
54
	float4 t6 = float4(uv + dg1, uv + dg2);
55

56
	float3 c  = tex2D(ReShade::BackBuffer, uv).rgb;
57

58
	float3 i1 = tex2D(ReShade::BackBuffer, t1.xy).rgb;
59
	float3 i2 = tex2D(ReShade::BackBuffer, t2.xy).rgb;
60
	float3 i3 = tex2D(ReShade::BackBuffer, t3.xy).rgb;
61
	float3 i4 = tex2D(ReShade::BackBuffer, t4.xy).rgb;
62

63
	float3 o1 = tex2D(ReShade::BackBuffer, t5.xy).rgb;
64
	float3 o3 = tex2D(ReShade::BackBuffer, t6.xy).rgb;
65
	float3 o2 = tex2D(ReShade::BackBuffer, t5.zw).rgb;
66
	float3 o4 = tex2D(ReShade::BackBuffer, t6.zw).rgb;
67

68
	float3 s1 = tex2D(ReShade::BackBuffer, t1.zw).rgb;
69
	float3 s2 = tex2D(ReShade::BackBuffer, t2.zw).rgb;
70
	float3 s3 = tex2D(ReShade::BackBuffer, t3.zw).rgb;
71
	float3 s4 = tex2D(ReShade::BackBuffer, t4.zw).rgb;
72

73
	float ko1 = dot(abs(o1 - c), dt);
74
	float ko2 = dot(abs(o2 - c), dt);
75
	float ko3 = dot(abs(o3 - c), dt);
76
	float ko4 = dot(abs(o4 - c), dt);
77

78
	float k1=min(dot(abs(i1 - i3), dt), max(ko1, ko3));
79
	float k2=min(dot(abs(i2 - i4), dt), max(ko2, ko4));
80

81
	float w1 = k2; if (ko3 < ko1) w1 *= ko3 / ko1;
82
	float w2 = k1; if (ko4 < ko2) w2 *= ko4 / ko2;
83
	float w3 = k2; if (ko1 < ko3) w3 *= ko1 / ko3;
84
	float w4 = k1; if (ko2 < ko4) w4 *= ko2 / ko4;
85

86
	c = (w1 * o1 + w2 * o2 + w3 * o3 + w4 * o4 + 0.001 * c) / (w1 + w2 + w3 + w4 + 0.001);
87
	w1 = k * dot(abs(i1 - c) + abs(i3 - c), dt) / (0.125 * dot(i1 + i3, dt) + lum_add);
88
	w2 = k * dot(abs(i2 - c) + abs(i4 - c), dt) / (0.125 * dot(i2 + i4, dt) + lum_add);
89
	w3 = k * dot(abs(s1 - c) + abs(s3 - c), dt) / (0.125 * dot(s1 + s3, dt) + lum_add);
90
	w4 = k * dot(abs(s2 - c) + abs(s4 - c), dt) / (0.125 * dot(s2 + s4, dt) + lum_add);
91

92
	w1 = clamp(w1 + mx, min_w, max_w);
93
	w2 = clamp(w2 + mx, min_w, max_w);
94
	w3 = clamp(w3 + mx, min_w, max_w);
95
	w4 = clamp(w4 + mx, min_w, max_w);
96

97
	return (
98
		w1 * (i1 + i3) +
99
		w2 * (i2 + i4) +
100
		w3 * (s1 + s3) +
101
		w4 * (s2 + s4) +
102
		c) / (2.0 * (w1 + w2 + w3 + w4) + 1.0);
103
}
104

105
technique HQ4X
106
{
107
	pass
108
	{
109
		VertexShader = PostProcessVS;
110
		PixelShader = PS_HQ4X;
111
	}
112
}
113

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.