File: common.effect

package info (click to toggle)
obs-advanced-masks 1.5.4-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,056 kB
  • sloc: ansic: 8,058; cpp: 1,661; sh: 153; makefile: 28
file content (57 lines) | stat: -rw-r--r-- 1,553 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

#define PI180 0.0174533f
#define SQRT3 0.5773503f
#define LUM_R 0.299f
#define LUM_G 0.587f
#define LUM_B 0.114f
#define SIN30 0.5f
#define COS30 0.8660254f
#define PI  3.141592654f
#define PI2 6.283185307f
#define mod(x, y) (x - y * floor(x / y))

// Convert pre-multiplied rgba values
// to linear rgba.
float4 pmrgba_to_rgba(float4 color)
{
	return saturate(float4(color.rgb / color.a, color.a));
}

float4 adjust_brightness(float4 color, float brightness)
{
	return saturate(float4(color.rgb + brightness, color.a));
}

float4 adjustments(float4 color, float b, float c, float s, float hue_shift) {
	// Calculate Contrast Value
	float ca = c < 0.0f ? 1.0f / (-c + 1.0f) : (c + 1.0f);

	// Calculate Saturation Values
	float s_r = (1.0f - s) * LUM_R;
	float s_g = (1.0f - s) * LUM_G;
	float s_b = (1.0f - s) * LUM_B;

	float3 col = float3(
		ca * (s_r + s) * color.r + ca * s_g * color.g + ca * s_b * color.b + b,
		ca * s_r * color.r + ca * (s_g + s) * color.g + ca * s_b * color.b + b,
		ca * s_r * color.r + ca * s_g * color.g + ca * (s_b + s) * color.b + b
	);
	
	// Calculate Hue shift values
	float half_angle = 0.5f * hue_shift * PI180;
	float rq = SQRT3 * sin(half_angle);
	float cross = rq * rq;
	float sq = 2.0f * cross;
	float d = 2.0f * (0.5f - sq);
	float w_imag = rq * cos(half_angle);
	float a_l = 2.0f * (cross + w_imag);
	float b_l = 2.0f * (cross - w_imag);
	
	
	return saturate(float4(
		col.r * d   + col.g * a_l + col.b * b_l,
		col.r * b_l + col.g * d   + col.b * a_l,
		col.r * a_l + col.g * b_l + col.b * d,
		color.a
	));
}