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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
-
|
!
-
|
!
-
|
!
-
|
|
|
|
!
-
|
!
-
|
!
-
|
!
-
|
|
|
|
|
|
|
!
-
|
|
|
|
|
|
|
|
!
-
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
!
-
|
|
|
|
|
|
|
|
|
|
|
|
|
!
-
|
!
-
|
|
|
|
|
|
|
|
|
|
|
!
| float nhash21( vec2 n )
{
return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* 43758.5453);
}
vec2 nhash22( vec2 n )
{
return fract(sin(dot(n.xy, vec2(12.9898, 78.233)))* vec2(43758.5453,35458.5734));
}
vec2 shash22( vec2 p )
{
return nhash22(p)*2.0-1.0;
}
vec3 nhash33( vec3 p )
{
p = vec3( dot(p,vec3(127.1,311.7, 74.7)),
dot(p,vec3(269.5,183.3,246.1)),
dot(p,vec3(113.5,271.9,124.6)));
return fract(sin(p)*43758.5453123);
}
vec3 shash33( vec3 p )
{
return -1.0+2.0*nhash33(p);
}
vec2 smootherstep( vec2 t )
{
return t*t*t*(t*(t*6.0-15.0)+10.0);
}
float nhash11( float n )
{
return fract(sin(n)*43758.5453);
}
float nvnoise21( vec2 x )
{
vec2 p = floor(x);
vec2 f = fract(x);
f = smoothstep(0.0,1.0,f);
float n = p.x + p.y*57.0;
float res = mix( mix( nhash11(n+ 0.0), nhash11(n+ 1.0),f.x),
mix( nhash11(n+ 57.0), nhash11(n+ 58.0),f.x), f.y);
return res;
}
float nfbm21( vec2 p )
{
mat2 m = mat2( 0.80, 0.60, -0.60, 0.80 );
float f = 0.0;
f += 0.50000*nvnoise21( p ); p = m*p*2.02;
f += 0.25000*nvnoise21( p ); p = m*p*2.03;
f += 0.12500*nvnoise21( p ); p = m*p*2.01;
f += 0.06250*nvnoise21( p ); p = m*p*2.04;
f += 0.03125*nvnoise21( p );
return f / (0.5+0.25+0.125+0.06250+0.03125);
}
float sgnoise21( vec2 p )
{
vec2 i = floor( p );
vec2 f = fract( p );
vec2 u = smoothstep( 0.0, 1.0, f );
return mix( mix( dot( shash22( i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ),
dot( shash22( i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x),
mix( dot( shash22( i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ),
dot( shash22( i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y);
}
float ngnoise21( vec2 p )
{
return 0.5 + 0.5 * sgnoise21( p );
}
float sgnoise31( in vec3 p )
{
vec3 i = floor( p );
vec3 f = fract( p );
vec3 u = f*f*(3.0-2.0*f);
return mix( mix( mix( dot( shash33( i + vec3(0.0,0.0,0.0) ), f - vec3(0.0,0.0,0.0) ),
dot( shash33( i + vec3(1.0,0.0,0.0) ), f - vec3(1.0,0.0,0.0) ), u.x),
mix( dot( shash33( i + vec3(0.0,1.0,0.0) ), f - vec3(0.0,1.0,0.0) ),
dot( shash33( i + vec3(1.0,1.0,0.0) ), f - vec3(1.0,1.0,0.0) ), u.x), u.y),
mix( mix( dot( shash33( i + vec3(0.0,0.0,1.0) ), f - vec3(0.0,0.0,1.0) ),
dot( shash33( i + vec3(1.0,0.0,1.0) ), f - vec3(1.0,0.0,1.0) ), u.x),
mix( dot( shash33( i + vec3(0.0,1.0,1.0) ), f - vec3(0.0,1.0,1.0) ),
dot( shash33( i + vec3(1.0,1.0,1.0) ), f - vec3(1.0,1.0,1.0) ), u.x), u.y), u.z );
}
float ngnoise31( in vec3 p )
{
return 0.5 + 0.5 * sgnoise31( p );
}
float nfbm31( vec3 q )
{
const mat3 m = mat3( 0.00, 0.80, 0.60,
-0.80, 0.36, -0.48,
-0.60, -0.48, 0.64 );
float f = 0.0;
f = 0.5000*ngnoise31( q ); q = m*q*2.01;
f += 0.2500*ngnoise31( q ); q = m*q*2.02;
f += 0.1250*ngnoise31( q ); q = m*q*2.03;
f += 0.0625*ngnoise31( q ); q = m*q*2.01;
return f;
}
|