| 1 |
greg |
1.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;
|