PDA

View Full Version : Noise functions



mikeman
04-14-2004, 06:19 AM
Can anyone explain to me how to use the noise functions?Whatever the input is,the output is always 0.0

I'm using GFX5200 (56.64 drivers)

Corrail
04-14-2004, 06:46 AM
noise functions are not yet implemented in those drivers.

mikeman
04-14-2004, 06:51 AM
I was afraid of that.Do you know if they're going to support it in future drivers or i have to buy a new card?

Mazy
04-14-2004, 06:58 AM
its very possible that you dont get HW accelerated noise in current generation cards. ATI has noise implemented but that throws the shader to software render. Why not upload a 3d texture and lookup until we know that noise works in hw?

Corrail
04-14-2004, 08:57 AM
Why not upload a 3d texture and lookup until we know that noise works in hw?
Why isn't it possible that the driver does exactly this for you? So noise can also be used...

Mazy
04-14-2004, 12:54 PM
since that takes a textureslot? well, i guess they can make it that way, but they havent yet :)

Humus
04-15-2004, 08:46 AM
I'm not sure the texture way would be conformant. It would be a repeating noise function. I think the spec requests a non-repeating noise function.

simongreen
04-15-2004, 01:32 PM
Well, all noise implementations repeat at some point, it's just a question of what the period is.

We do have pixel shader implementations of real Perlin noise, but they take about 40 instructions. For now I recommend people just use 3D texture lookups.


Originally posted by Humus:
I'm not sure the texture way would be conformant. It would be a repeating noise function. I think the spec requests a non-repeating noise function.

Hampel
04-18-2004, 04:42 AM
I want to use this Perlin Noise (http://mrl.nyu.edu/~perlin/noise) implementation for CPU based noise calculations. But this is a function from R^3 to R.

What would be the best way, to extend it for the GLSL suggested noise functions:


float noise1(float);
float noise1(vec2);
float noise1(vec3);
float noise1(vec4);


vec2 noise2(float);
vec2 noise2(vec2);
vec2 noise2(vec3);
vec2 noise2(vec4);


vec3 noise3(float);
vec3 noise3(vec2);
vec3 noise3(vec3);
vec3 noise3(vec4);


vec4 noise4(float);
vec4 noise4(vec2);
vec4 noise4(vec3);
vec4 noise4(vec4);

simongreen
04-21-2004, 04:45 PM
Usually vector-valued noise is implemented on top of scalar noise by simply evaluating the noise function several times at n random offset positions, e.g.:

vec3 noise3(vec3 p)
{
return vec3(noise(p),
noise(p + vec3(31, 72, 54),
noise(p + vec3(156, 87, 99));
}

This is obviously n times more expensive than scalar noise.

Perlin doesn't give the code, but the algorithm can be extended to other dimensions.


Originally posted by Hampel:
I want to use this Perlin Noise (http://mrl.nyu.edu/~perlin/noise) implementation for CPU based noise calculations. But this is a function from R^3 to R.

What would be the best way, to extend it for the GLSL suggested noise functions:


float noise1(float);
float noise1(vec2);
float noise1(vec3);
float noise1(vec4);


vec2 noise2(float);
vec2 noise2(vec2);
vec2 noise2(vec3);
vec2 noise2(vec4);


vec3 noise3(float);
vec3 noise3(vec2);
vec3 noise3(vec3);
vec3 noise3(vec4);


vec4 noise4(float);
vec4 noise4(vec2);
vec4 noise4(vec3);
vec4 noise4(vec4);