blob: 6ffa6b59572e92c443d5aa6ce878ccf7e70a0b79 (
plain)
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
|
float wang_hash_noise(uint s)
{
s = (s ^ 61u) ^ (s >> 16u);
s *= 9u;
s = s ^ (s >> 4u);
s *= 0x27d4eb2du;
s = s ^ (s >> 15u);
return fract(float(s) / 4294967296.0);
}
void node_hair_info(float hair_length,
out float is_strand,
out float intercept,
out float length,
out float thickness,
out vec3 tangent,
out float random)
{
length = hair_length;
#ifdef HAIR_SHADER
is_strand = 1.0;
intercept = hairTime;
thickness = hairThickness;
tangent = normalize(worldNormal);
random = wang_hash_noise(
uint(hairStrandID)); /* TODO: could be precomputed per strand instead. */
#else
is_strand = 0.0;
intercept = 0.0;
thickness = 0.0;
tangent = vec3(1.0);
random = 0.0;
#endif
}
|