ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cal/cal/noise3.cal
Revision: 1.2
Committed: Wed Nov 21 17:45:45 2018 UTC (5 years, 6 months ago) by greg
Branch: MAIN
CVS Tags: rad5R4, rad5R3, HEAD
Changes since 1.1: +15 -11 lines
Log Message:
Minor fixes/improvements

File Contents

# User Rev Content
1 greg 1.2 { RCSid $Id$ }
2     { 3-D Perlin Noise function }
3 greg 1.1
4 greg 1.2 frac(x):x-floor(x);
5    
6     hermite(p0,p1,r0,r1,t) : p0 * ((2*t-3)*t*t+1) +
7 greg 1.1 p1 * (-2*t+3)*t*t +
8     r0 * (((t-2)*t+1)*t) +
9     r1 * ((t-1)*t*t);
10    
11 greg 1.2 rand3a(x,y,z) : 1-2*rand(.69692*x+.35084*y+.26765*z);
12     rand3b(x,y,z) : 1-2*rand(.05393*x+.96196*y+.28617*z);
13     rand3c(x,y,z) : 1-2*rand(.04234*x+.46180*y+.54550*z);
14     rand3d(x,y,z) : 1-2*rand(.07211*x+.76411*y+.95567*z);
15 greg 1.1
16 greg 1.2 noise_3(xl,xd,xu,yl,yd,yu,zl,zd,zu) :
17 greg 1.1 hermite(
18     hermite(
19     hermite(rand3d(xl,yl,zl),
20     rand3d(xu,yl,zl),
21     rand3a(xl,yl,zl),
22     rand3a(xu,yl,zl),
23     xd),
24     hermite(rand3d(xl,yu,zl),
25     rand3d(xu,yu,zl),
26     rand3a(xl,yu,zl),
27     rand3a(xu,yu,zl),
28     xd),
29     (1-xd)*rand3b(xl,yl,zl)+
30     xd*rand3b(xu,yl,zl),
31     (1-xd)*rand3b(xl,yu,zl)+
32     xd*rand3b(xu,yu,zl),
33     yd),
34     hermite(
35     hermite(rand3d(xl,yl,zu),
36     rand3d(xu,yl,zu),
37     rand3a(xl,yl,zu),
38     rand3a(xu,yl,zu),
39     xd),
40     hermite(rand3d(xl,yu,zu),
41     rand3d(xu,yu,zu),
42     rand3a(xl,yu,zu),
43     rand3a(xu,yu,zu),
44     xd),
45     (1-xd)*rand3b(xl,yl,zu)+
46     xd*rand3b(xu,yl,zu),
47     (1-xd)*rand3b(xl,yu,zu)+
48     xd*rand3b(xu,yu,zu),
49     yd),
50     (1-yd)*((1-xd)*rand3c(xl,yl,zl) +
51     xd*rand3c(xu,yl,zl)) +
52     yd*((1-xd)*rand3c(xl,yu,zl) +
53     xd*rand3c(xu,yu,zl)),
54     (1-yd)*((1-xd)*rand3c(xl,yl,zu) +
55     xd*rand3c(xu,yl,zu)) +
56     yd*((1-xd)*rand3c(xl,yu,zu) +
57     xd*rand3c(xu,yu,zu)),
58     zd);
59 greg 1.2
60    
61     noise3(x,y,z) : noise_3( floor(x),frac(x),ceil(x),
62     floor(y),frac(y),ceil(y),
63     floor(z),frac(z),ceil(z) );