Jump to content

## Recommended Posts

Ahoy there!!! A quick question...

I'm writing VEX noise functions but is a bit confused with Curl Noise functions. It's not like that I didnt get it. Of course I get it but is stuck in this weird functions in voplib.h. Here's what I'm stuck with....

Down below is the Code. why is xDiffNoise yDiffNoise and zDiffNoise there anyways. I couldnt find a function that's making use of it. Maybe I'm missing some. But please somebody explain it to me. Just to say... I'm writing a Curl Vex Function with all the Noise options.

Thanks.

noisevec = onoise(pos*freq - offset, turb, rough, atten) * amp;
xDiffNoise = onoise(xDiff*freq - offset, turb, rough, atten) * amp;
yDiffNoise = onoise(yDiff*freq - offset, turb, rough, atten) * amp;
zDiffNoise = onoise(zDiff*freq - offset, turb, rough, atten) * amp;

#### Share this post

##### Share on other sites

Those are used to sample finite differences of the noise, in order to find the gradient vector of the scalar noise.

#### Share this post

##### Share on other sites
On 10/8/2019 at 1:00 PM, Poetsofthefall said:

why is xDiffNoise yDiffNoise and zDiffNoise there anyways. I couldnt find a function that's making use of it.

I'm pretty sure you'll find where they are used if you search voplib.h for them again

Edited by anim
• 1

#### Share this post

##### Share on other sites
```float eps = chf('epsilon');         // Default 0.01
float magnitude = chf('magnitude'); // Default 1.0
vector p = v@P;                     // Noise Initial Position
float freq = 1.0;                   // Noise Frequency
vector offset = chv('offset');      // Noise Offset
p = p * freq - offset;              // Final Noise Position

vector dx = {0, 0, 0};  dx = eps;
vector dy = {0, 0, 0};  dy = eps;
vector dz = {0, 0, 0};  dz = eps;
vector fxdxn;   vector fxdxp;   vector fxdyn;
vector fxdyp;   vector fxdzn;   vector fxdzp;

// Evaluate the noise in a local neighborhood for finite differences
fxdxn = noise(p-dx);    fxdxp = noise(p+dx);    fxdyn = noise(p-dy);
fxdyp = noise(p+dy);    fxdzn = noise(p-dz);    fxdzp = noise(p+dz);

// Compute curl from the cross product
vector curl;
curl = (fxdyp - fxdyn) - (fxdzp - fxdzn);
curl = (fxdzp - fxdzn) - (fxdxp - fxdxn);
curl = (fxdxp - fxdxn) - (fxdyp - fxdyn);

float scale = magnitude * (1.0 / (2.0 * eps));
curl *= scale;

@P += curl;```

If it's helpful, here's what a basic curl noise function looks like.

You could replace the noise() calls with whichever scalar noise you prefer.

#### Share this post

##### Share on other sites
23 hours ago, jkunz07 said:
```
float eps = chf('epsilon');         // Default 0.01
float magnitude = chf('magnitude'); // Default 1.0
vector p = v@P;                     // Noise Initial Position
float freq = 1.0;                   // Noise Frequency
vector offset = chv('offset');      // Noise Offset
p = p * freq - offset;              // Final Noise Position

vector dx = {0, 0, 0};  dx = eps;
vector dy = {0, 0, 0};  dy = eps;
vector dz = {0, 0, 0};  dz = eps;
vector fxdxn;   vector fxdxp;   vector fxdyn;
vector fxdyp;   vector fxdzn;   vector fxdzp;

// Evaluate the noise in a local neighborhood for finite differences
fxdxn = noise(p-dx);    fxdxp = noise(p+dx);    fxdyn = noise(p-dy);
fxdyp = noise(p+dy);    fxdzn = noise(p-dz);    fxdzp = noise(p+dz);

// Compute curl from the cross product
vector curl;
curl = (fxdyp - fxdyn) - (fxdzp - fxdzn);
curl = (fxdzp - fxdzn) - (fxdxp - fxdxn);
curl = (fxdxp - fxdxn) - (fxdyp - fxdyn);

float scale = magnitude * (1.0 / (2.0 * eps));
curl *= scale;

@P += curl;```

If it's helpful, here's what a basic curl noise function looks like.

You could replace the noise() calls with whichever scalar noise you prefer.

Will check it STRAIGHT AWAY. Thanks many lot.

## Create an account or sign in to comment

You need to be a member in order to leave a comment

## Create an account

Sign up for a new account in our community. It's easy!

Register a new account

## Sign in

Already have an account? Sign in here.

Sign In Now

×
• Donations

• Leaderboard