Noise functions

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)

noise functions are not yet implemented in those drivers.

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?

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?

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…

since that takes a textureslot? well, i guess they can make it that way, but they havent yet :slight_smile:

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.

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.

I want to use this 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);

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:
[b]I want to use this 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);

[/b]

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.