1 |
{ |
2 |
Carpet function. |
3 |
|
4 |
Scale pattern to tuft size. |
5 |
|
6 |
A1 - tuft red color |
7 |
A2 - tuft green color |
8 |
A3 - tuft blue color |
9 |
A4 - degree of variation |
10 |
} |
11 |
{ carpet tuft position } |
12 |
{ Varies from [(1-A4),1] based on Perlin 3D noise function, a random wave |
13 |
function over 3D space, with scalar value everywhere between about -1 and 1. |
14 |
Sense of this is 0 means bottom of tuft and 1 means top (carpet surface). } |
15 |
carpt = 1 - A4*(.5+.5*noise3(Px,Py,Pz)); |
16 |
{ exponent for carpet color } |
17 |
{ Takes [(1-A4),1] range and maps it to [1,(1+4*A4)] for # interreflections } |
18 |
carpe = 1 + 4*(1-carpt); |
19 |
{ coefficient (with fuzzies) } |
20 |
{ Takes square of carpt as general shading coefficient (self-shadowing) |
21 |
and multiplies by some fractal noise hovering around 1 with a base frequency |
22 |
10 times the tuft frequency (fuzzies). The noneg() function guarantees |
23 |
positive results for outlying values of the noise functions. } |
24 |
coef = noneg( carpt*carpt * (1 + .25*A4*fnoise3(Px*10,Py*10,Pz*10)) ); |
25 |
{ carpet color } |
26 |
{ Final color is shading coefficient times carpet color raised to the power |
27 |
of the number of interreflections, which causes both darkening and |
28 |
deepening of color in between tufts. } |
29 |
carpr = coef * A1^carpe; |
30 |
carpg = coef * A2^carpe; |
31 |
carpb = coef * A3^carpe; |