Cycles / OSL:

* Updates for noise_turbulence, to match svm function.
This commit is contained in:
Thomas Dinges 2012-09-02 16:06:18 +00:00
parent e1bca6cfc4
commit b26d19a7b8
3 changed files with 26 additions and 7 deletions

@ -35,7 +35,7 @@ float noise(point p, string basis, float distortion, float detail)
p += r;
}
fac = noise_turbulence(p, basis, (int)detail, hard);
fac = noise_turbulence(p, basis, detail, hard);
return fac;

@ -212,14 +212,17 @@ float noise_wave(string wave, float a)
/* Turbulence */
float noise_turbulence(point p, string basis, int octaves, int hard)
float noise_turbulence(point p, string basis, float octaves, int hard)
{
float fscale = 1.0;
float amp = 1.0;
float sum = 0.0;
int i;
int i, n;
octaves = clamp(octaves, 0.0, 16.0);
n = (int)octaves;
for (i = 0; i <= octaves; i++) {
for (i = 0; i <= n; i++) {
float t = noise_basis(fscale * p, basis);
if (hard)
@ -229,10 +232,26 @@ float noise_turbulence(point p, string basis, int octaves, int hard)
amp *= 0.5;
fscale *= 2.0;
}
float rmd = octaves - floor(octaves);
sum *= ((float)(1 << octaves) / (float)((1 << (octaves + 1)) - 1));
if(rmd != 0.0) {
float t = noise_basis(fscale*p, basis);
return sum;
if(hard)
t = fabs(2.0*t - 1.0);
float sum2 = sum + t*amp;
sum *= ((float)(1 << n)/(float)((1 << (n+1)) - 1));
sum2 *= ((float)(1 << (n+1))/(float)((1 << (n+2)) - 1));
return (1.0 - rmd)*sum + rmd*sum2;
}
else {
sum *= ((float)(1 << n)/(float)((1 << (n+1)) - 1));
return sum;
}
}
/* Utility */

@ -38,7 +38,7 @@ float wave(point p, float scale, string type, float detail, float distortion, fl
}
if(distortion != 0.0) {
n = n +(distortion * noise_turbulence(p*dscale, "Perlin", (int)detail, 0));
n = n +(distortion * noise_turbulence(p*dscale, "Perlin", detail, 0));
}
result = noise_wave("Sine", n);