-
Notifications
You must be signed in to change notification settings - Fork 0
/
GradientDisplace.fs
60 lines (56 loc) · 1.32 KB
/
GradientDisplace.fs
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
58
59
60
/*
{
"CATEGORIES" : [
"icalvin102"
],
"DESCRIPTION" : "!!!work in progress!!! Creates a 2D-Gradientvector from a greyscale image and displaces the inputImage along this vector",
"ISFVSN" : "2",
"INPUTS" : [
{
"NAME" : "inputImage",
"TYPE" : "image"
},
{
"NAME" : "displace",
"TYPE" : "image"
},
{
"NAME" : "amount",
"TYPE" : "float",
"MAX" : 5,
"DEFAULT" : 0.01,
"MIN" : 0
},
{
"NAME" : "smooth",
"TYPE" : "bool"
}
],
"PASSES" : [
{
"DESCRIPTION" : "Main"
}
],
"CREDIT" : "icalvin102 (calvin@icalvin.de)"
}
*/
void main() {
vec2 uv = isf_FragNormCoord.xy;
vec3 e = vec3(1.0 / IMG_SIZE(displace).xy, 0.0);
vec3 gx = IMG_NORM_PIXEL(displace, uv + e.xz).rgb - IMG_NORM_PIXEL(displace, uv - e.xz).rgb;
vec3 gy = IMG_NORM_PIXEL(displace, uv + e.yz).rgb - IMG_NORM_PIXEL(displace, uv - e.yz).rgb;
//gx /= 2.0*e.x;
//gy /= 2.0*e.y;
if(smooth){
vec3 strength = IMG_NORM_PIXEL(displace, uv).rgb;
gx *= strength;
gy *= strength;
}
gx *= amount;
gy *= amount;
vec3 color = vec3(0.0);
color.r = IMG_NORM_PIXEL(inputImage, uv + vec2(gx.r, gy.r)).r;
color.g = IMG_NORM_PIXEL(inputImage, uv + vec2(gx.g, gy.g)).g;
color.b = IMG_NORM_PIXEL(inputImage, uv + vec2(gx.b, gy.b)).b;
gl_FragColor = vec4(color, 1.0);
}