1 |
{ |
2 |
Adobe texture. |
3 |
|
4 |
Applies to any large, flat surface. |
5 |
|
6 |
A1 - overall magnitude |
7 |
} |
8 |
|
9 |
{ Basic texture is scaled gradient of 3D Perlin noise function. |
10 |
Additional perturbation is added when in_crack is true. } |
11 |
dx = A1 * noise3a(Px, Py, Pz) + if(in_crack, cdx, 0); |
12 |
dy = A1 * noise3b(Px, Py, Pz) + if(in_crack, cdy, 0); |
13 |
dz = A1 * noise3c(Px, Py, Pz) + if(in_crack, cdz, 0); |
14 |
|
15 |
{ First, compute crack coordinate system, which is at 3 times original |
16 |
bump scale and has additional fractal noise through in for irregularity |
17 |
over an even larger scale. } |
18 |
fn3 = fnoise3(Px, Py, Pz); |
19 |
cu = Px/3 + fn3/30; |
20 |
cv = Py/3 + fn3/30; |
21 |
cw = Pz/3 + fn3/30; |
22 |
|
23 |
{ Test in_crack returns true (positive) when sum of [-1,1] Perlin noise in |
24 |
crack coordinate system is about -.4 times the fractal noise function at |
25 |
the same point. } |
26 |
in_crack = inside(-.02, noise3(cu, cv, cw) + .4*fnoise3(cu, cv, cw), .02); |
27 |
|
28 |
{ Final crack perturbation is 5 times as large as normal gradient at that |
29 |
point in Perlin function, meaning it will yank the surface normal one way |
30 |
or the other along that wiggly line where in_crack is true, yielding an |
31 |
apparent discontinuity in the surface. } |
32 |
cdx = 5*A1*noise3a(cu, cv, cw); |
33 |
cdy = 5*A1*noise3b(cu, cv, cw); |
34 |
cdz = 5*A1*noise3c(cu, cv, cw); |