Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!tut.cis.ohio-state.edu!ucbvax!ucsfcgl!pixar!aaa From: aaa@pixar.UUCP (Tony Apodaca) Newsgroups: comp.graphics Subject: Re: Pixar's noise function Summary: Ken Perlin's 1985 Siggraph paper explains it all. Keywords: random numbers, Byte, elephants Message-ID: <3599@pixar.UUCP> Date: 29 Mar 89 23:27:39 GMT References: <2553@ssc-vax.UUCP> Reply-To: aaa@pixar.UUCP (Tony Apodaca) Organization: Pixar -- Marin County, California Lines: 47 In article <2553@ssc-vax.UUCP> coy@ssc-vax.UUCP (Stephen B Coy) writes: > Last night I saw the article in Byte about the Renderman >standard. In the sample source code the displacement function, dent(), >calls a function called noise()... > ...My question: Does anyone out there know what this >noise function really is? Three-dimensional simulated natural textures using pseudorandom functions were simultaneously and independently developed by Darwyn Peachey and Ken Perlin in 1984-5. Both have papers in the 1985 Siggraph Proceedings describing their systems. Perlin, in particular, describes in detail how noise() is implemented and can be used creatively to describe large classes of natural phenomena. Conceptually, noise() is a "stochastic three-dimensional function which is statistically invariant under rotation and translation and has a narrow bandpass limit in frequency" (paraphrased from [Perlin1985]). This means that you put three-space points in, and you get values back which are basically random. But if you put other nearby points in, you get values that are very similar. The differences are still random, but the maximum rate of change is controlled so that you can avoid aliasing. If you put a set of points in from a different region of space, you will get values out which have "the same amount" of randomness. If you have ever been interested in realistic computer graphics, do whatever it takes to get a look at Perlin's paper. In 1985, his pictures were absolutely astounding. In 1989, they are STILL astounding. >ps Anyone have any decent marble texture functions you'd like to > share? Perlin's paper has a simple marble texture function: /* assume marble_color() is a color lookup table function */ float turbulence(point p) { float t=0, scale=1; while(scale > pixelsize) { t += abs(noise(p / scale)*scale); scale /= 2; } return t; } color marble(point p) { float x = xcomp(p) + turbulence(p); return marble_color(sin(x)); } -- UUCP: {sun,ucbvax}!pixar!aaa Tony Apodaca ARPA,BITNET: aaa%pixar.uucp@sun.com Pixar, San Rafael, CA, USA