diff options
Diffstat (limited to 'intern/cycles/kernel/shaders')
-rw-r--r-- | intern/cycles/kernel/shaders/node_image_texture.osl | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/node_math.osl | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/node_musgrave_texture.osl | 25 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/node_noise_texture.osl | 17 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/node_texture.h | 106 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/node_voronoi_texture.osl | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/node_wave_texture.osl | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/shaders/stdosl.h | 14 |
8 files changed, 46 insertions, 130 deletions
diff --git a/intern/cycles/kernel/shaders/node_image_texture.osl b/intern/cycles/kernel/shaders/node_image_texture.osl index 526a87525cd..46a02cab32e 100644 --- a/intern/cycles/kernel/shaders/node_image_texture.osl +++ b/intern/cycles/kernel/shaders/node_image_texture.osl @@ -26,7 +26,7 @@ point map_to_tube(vector dir) { float u, v; v = (dir[2] + 1.0) * 0.5; - float len = sqrt(dir[0]*dir[0] + dir[1]*dir[1]); + float len = sqrt(dir[0] * dir[0] + dir[1] * dir[1]); if (len > 0.0) { u = (1.0 - (atan2(dir[0] / len, dir[1] / len) / M_PI)) * 0.5; } @@ -40,8 +40,8 @@ point map_to_sphere(vector dir) { float len = length(dir); float v, u; - if(len > 0.0) { - if(dir[0] == 0.0 && dir[1] == 0.0) { + if (len > 0.0) { + if (dir[0] == 0.0 && dir[1] == 0.0) { u = 0.0; /* Othwise domain error. */ } else { diff --git a/intern/cycles/kernel/shaders/node_math.osl b/intern/cycles/kernel/shaders/node_math.osl index bbc008b4299..7eef97fd7e8 100644 --- a/intern/cycles/kernel/shaders/node_math.osl +++ b/intern/cycles/kernel/shaders/node_math.osl @@ -93,8 +93,8 @@ shader node_math( Value = Value1 > Value2; else if (type == "Modulo") Value = safe_modulo(Value1, Value2); - else if (type == "Absolute") - Value = fabs(Value1); + else if (type == "Absolute") + Value = fabs(Value1); if (Clamp) Value = clamp(Value, 0.0, 1.0); diff --git a/intern/cycles/kernel/shaders/node_musgrave_texture.osl b/intern/cycles/kernel/shaders/node_musgrave_texture.osl index a349dc8cb9a..4f95dec910a 100644 --- a/intern/cycles/kernel/shaders/node_musgrave_texture.osl +++ b/intern/cycles/kernel/shaders/node_musgrave_texture.osl @@ -26,7 +26,7 @@ * from "Texturing and Modelling: A procedural approach" */ -float noise_musgrave_fBm(point p, string basis, float H, float lacunarity, float octaves) +float noise_musgrave_fBm(point p, float H, float lacunarity, float octaves) { float rmd; float value = 0.0; @@ -54,7 +54,7 @@ float noise_musgrave_fBm(point p, string basis, float H, float lacunarity, float * octaves: number of frequencies in the fBm */ -float noise_musgrave_multi_fractal(point p, string basis, float H, float lacunarity, float octaves) +float noise_musgrave_multi_fractal(point p, float H, float lacunarity, float octaves) { float rmd; float value = 1.0; @@ -83,7 +83,7 @@ float noise_musgrave_multi_fractal(point p, string basis, float H, float lacunar * offset: raises the terrain from `sea level' */ -float noise_musgrave_hetero_terrain(point p, string basis, float H, float lacunarity, float octaves, float offset) +float noise_musgrave_hetero_terrain(point p, float H, float lacunarity, float octaves, float offset) { float value, increment, rmd; float pwHL = pow(lacunarity, -H); @@ -118,8 +118,8 @@ float noise_musgrave_hetero_terrain(point p, string basis, float H, float lacuna * offset: raises the terrain from `sea level' */ -float noise_musgrave_hybrid_multi_fractal(point p, string basis, float H, - float lacunarity, float octaves, float offset, float gain) +float noise_musgrave_hybrid_multi_fractal(point p, float H, float lacunarity, + float octaves, float offset, float gain) { float result, signal, weight, rmd; float pwHL = pow(lacunarity, -H); @@ -156,8 +156,8 @@ float noise_musgrave_hybrid_multi_fractal(point p, string basis, float H, * offset: raises the terrain from `sea level' */ -float noise_musgrave_ridged_multi_fractal(point p, string basis, float H, - float lacunarity, float octaves, float offset, float gain) +float noise_musgrave_ridged_multi_fractal(point p, float H, float lacunarity, + float octaves, float offset, float gain) { float result, signal, weight; float pwHL = pow(lacunarity, -H); @@ -201,7 +201,6 @@ shader node_musgrave_texture( float dimension = max(Dimension, 1e-5); float octaves = clamp(Detail, 0.0, 16.0); float lacunarity = max(Lacunarity, 1e-5); - string Basis = "Perlin"; float intensity = 1.0; point p = Vector; @@ -212,15 +211,15 @@ shader node_musgrave_texture( p = p * Scale; if (Type == "Multifractal") - Fac = intensity * noise_musgrave_multi_fractal(p, Basis, dimension, lacunarity, octaves); + Fac = intensity * noise_musgrave_multi_fractal(p, dimension, lacunarity, octaves); else if (Type == "fBM") - Fac = intensity * noise_musgrave_fBm(p, Basis, dimension, lacunarity, octaves); + Fac = intensity * noise_musgrave_fBm(p, dimension, lacunarity, octaves); else if (Type == "Hybrid Multifractal") - Fac = intensity * noise_musgrave_hybrid_multi_fractal(p, Basis, dimension, lacunarity, octaves, Offset, Gain); + Fac = intensity * noise_musgrave_hybrid_multi_fractal(p, dimension, lacunarity, octaves, Offset, Gain); else if (Type == "Ridged Multifractal") - Fac = intensity * noise_musgrave_ridged_multi_fractal(p, Basis, dimension, lacunarity, octaves, Offset, Gain); + Fac = intensity * noise_musgrave_ridged_multi_fractal(p, dimension, lacunarity, octaves, Offset, Gain); else if (Type == "Hetero Terrain") - Fac = intensity * noise_musgrave_hetero_terrain(p, Basis, dimension, lacunarity, octaves, Offset); + Fac = intensity * noise_musgrave_hetero_terrain(p, dimension, lacunarity, octaves, Offset); Color = color(Fac, Fac, Fac); } diff --git a/intern/cycles/kernel/shaders/node_noise_texture.osl b/intern/cycles/kernel/shaders/node_noise_texture.osl index dabc0b6843f..e83e5b5b211 100644 --- a/intern/cycles/kernel/shaders/node_noise_texture.osl +++ b/intern/cycles/kernel/shaders/node_noise_texture.osl @@ -19,23 +19,23 @@ /* Noise */ -float noise(point p, string basis, float distortion, float detail, float fac, color Color) +float noise(point p, float distortion, float detail, float fac, color Color) { point r; int hard = 0; if (distortion != 0.0) { - r[0] = noise_basis(p + point(13.5), basis) * distortion; - r[1] = noise_basis(p, basis) * distortion; - r[2] = noise_basis(p - point(13.5), basis) * distortion; + r[0] = safe_noise(p + point(13.5), "unsigned") * distortion; + r[1] = safe_noise(p, "unsigned") * distortion; + r[2] = safe_noise(p - point(13.5), "unsigned") * distortion; p += r; } - fac = noise_turbulence(p, basis, detail, hard); + fac = noise_turbulence(p, detail, hard); - Color = color(fac, noise_turbulence(point(p[1], p[0], p[2]), basis, detail, hard), - noise_turbulence(point(p[1], p[2], p[0]), basis, detail, hard)); + Color = color(fac, noise_turbulence(point(p[1], p[0], p[2]), detail, hard), + noise_turbulence(point(p[1], p[2], p[0]), detail, hard)); return fac; } @@ -55,7 +55,6 @@ shader node_noise_texture( if (use_mapping) p = transform(mapping, p); - string Basis = "Perlin"; - Fac = noise(p * Scale, Basis, Distortion, Detail, Fac, Color); + Fac = noise(p * Scale, Distortion, Detail, Fac, Color); } diff --git a/intern/cycles/kernel/shaders/node_texture.h b/intern/cycles/kernel/shaders/node_texture.h index 5f9cd5afa47..fc2cfdcd55c 100644 --- a/intern/cycles/kernel/shaders/node_texture.h +++ b/intern/cycles/kernel/shaders/node_texture.h @@ -14,32 +14,6 @@ * limitations under the License. */ -/* Voronoi Distances */ - -float voronoi_distance(string distance_metric, vector d, float e) -{ -#if 0 - if (distance_metric == "Distance Squared") -#endif - return dot(d, d); -#if 0 - if (distance_metric == "Actual Distance") - return length(d); - if (distance_metric == "Manhattan") - return fabs(d[0]) + fabs(d[1]) + fabs(d[2]); - if (distance_metric == "Chebychev") - return max(fabs(d[0]), max(fabs(d[1]), fabs(d[2]))); - if (distance_metric == "Minkovsky 1/2") - return sqrt(fabs(d[0])) + sqrt(fabs(d[1])) + sqrt(fabs(d[1])); - if (distance_metric == "Minkovsky 4") - return sqrt(sqrt(dot(d * d, d * d))); - if (distance_metric == "Minkovsky") - return pow(pow(fabs(d[0]), e) + pow(fabs(d[1]), e) + pow(fabs(d[2]), e), 1.0 / e); - - return 0.0; -#endif -} - /* Voronoi / Worley like */ color cellnoise_color(point p) @@ -51,7 +25,7 @@ color cellnoise_color(point p) return color(r, g, b); } -void voronoi(point p, string distance_metric, float e, float da[4], point pa[4]) +void voronoi(point p, float e, float da[4], point pa[4]) { /* returns distances in da and point coords in pa */ int xx, yy, zz, xi, yi, zi; @@ -71,7 +45,7 @@ void voronoi(point p, string distance_metric, float e, float da[4], point pa[4]) point ip = point(xx, yy, zz); point vp = (point)cellnoise_color(ip); point pd = p - (vp + ip); - float d = voronoi_distance(distance_metric, pd, e); + float d = dot(pd, pd); vp += point(xx, yy, zz); @@ -111,46 +85,6 @@ void voronoi(point p, string distance_metric, float e, float da[4], point pa[4]) } } -float voronoi_Fn(point p, int n) -{ - float da[4]; - point pa[4]; - - voronoi(p, "Distance Squared", 0, da, pa); - - return da[n]; -} - -float voronoi_FnFn(point p, int n1, int n2) -{ - float da[4]; - point pa[4]; - - voronoi(p, "Distance Squared", 0, da, pa); - - return da[n2] - da[n1]; -} - -float voronoi_F1(point p) { return voronoi_Fn(p, 0); } -float voronoi_F2(point p) { return voronoi_Fn(p, 1); } -float voronoi_F3(point p) { return voronoi_Fn(p, 2); } -float voronoi_F4(point p) { return voronoi_Fn(p, 3); } -float voronoi_F1F2(point p) { return voronoi_FnFn(p, 0, 1); } - -float voronoi_Cr(point p) -{ - /* crackle type pattern, just a scale/clamp of F2-F1 */ - float t = 10.0 * voronoi_F1F2(p); - return (t > 1.0) ? 1.0 : t; -} - -float voronoi_F1S(point p) { return 2.0 * voronoi_F1(p) - 1.0; } -float voronoi_F2S(point p) { return 2.0 * voronoi_F2(p) - 1.0; } -float voronoi_F3S(point p) { return 2.0 * voronoi_F3(p) - 1.0; } -float voronoi_F4S(point p) { return 2.0 * voronoi_F4(p) - 1.0; } -float voronoi_F1F2S(point p) { return 2.0 * voronoi_F1F2(p) - 1.0; } -float voronoi_CrS(point p) { return 2.0 * voronoi_Cr(p) - 1.0; } - /* Noise Bases */ float safe_noise(point p, string type) @@ -172,39 +106,9 @@ float safe_noise(point p, string type) return f; } -float noise_basis(point p, string basis) -{ - if (basis == "Perlin") - return safe_noise(p, "unsigned"); - if (basis == "Voronoi F1") - return voronoi_F1S(p); - if (basis == "Voronoi F2") - return voronoi_F2S(p); - if (basis == "Voronoi F3") - return voronoi_F3S(p); - if (basis == "Voronoi F4") - return voronoi_F4S(p); - if (basis == "Voronoi F2-F1") - return voronoi_F1F2S(p); - if (basis == "Voronoi Crackle") - return voronoi_CrS(p); - if (basis == "Cell Noise") - return cellnoise(p); - - return 0.0; -} - -/* Soft/Hard Noise */ - -float noise_basis_hard(point p, string basis, int hard) -{ - float t = noise_basis(p, basis); - return (hard) ? fabs(2.0 * t - 1.0) : t; -} - /* Turbulence */ -float noise_turbulence(point p, string basis, float details, int hard) +float noise_turbulence(point p, float details, int hard) { float fscale = 1.0; float amp = 1.0; @@ -215,7 +119,7 @@ float noise_turbulence(point p, string basis, float details, int hard) n = (int)octaves; for (i = 0; i <= n; i++) { - float t = noise_basis(fscale * p, basis); + float t = safe_noise(fscale * p, "unsigned"); if (hard) t = fabs(2.0 * t - 1.0); @@ -228,7 +132,7 @@ float noise_turbulence(point p, string basis, float details, int hard) float rmd = octaves - floor(octaves); if (rmd != 0.0) { - float t = noise_basis(fscale * p, basis); + float t = safe_noise(fscale * p, "unsigned"); if (hard) t = fabs(2.0 * t - 1.0); diff --git a/intern/cycles/kernel/shaders/node_voronoi_texture.osl b/intern/cycles/kernel/shaders/node_voronoi_texture.osl index df169599d08..29e143ae207 100644 --- a/intern/cycles/kernel/shaders/node_voronoi_texture.osl +++ b/intern/cycles/kernel/shaders/node_voronoi_texture.osl @@ -37,7 +37,7 @@ shader node_voronoi_texture( float da[4]; point pa[4]; - voronoi(p * Scale, "Distance Squared", 1.0, da, pa); + voronoi(p * Scale, 1.0, da, pa); /* Colored output */ if (Coloring == "Intensity") { diff --git a/intern/cycles/kernel/shaders/node_wave_texture.osl b/intern/cycles/kernel/shaders/node_wave_texture.osl index a95752fc592..569f284cbac 100644 --- a/intern/cycles/kernel/shaders/node_wave_texture.osl +++ b/intern/cycles/kernel/shaders/node_wave_texture.osl @@ -31,7 +31,7 @@ float wave(point p, string type, float detail, float distortion, float dscale) } if (distortion != 0.0) { - n = n + (distortion * noise_turbulence(p * dscale, "Perlin", detail, 0)); + n = n + (distortion * noise_turbulence(p * dscale, detail, 0)); } return 0.5 + 0.5 * sin(n); } diff --git a/intern/cycles/kernel/shaders/stdosl.h b/intern/cycles/kernel/shaders/stdosl.h index 6babe98717c..697a1756119 100644 --- a/intern/cycles/kernel/shaders/stdosl.h +++ b/intern/cycles/kernel/shaders/stdosl.h @@ -249,7 +249,21 @@ point rotate (point p, float angle, point a, point b) { vector axis = normalize (b - a); float cosang, sinang; + /* Older OSX has major issues with sincos() function, + * it's likely a big in OSL or LLVM. For until we've + * updated to new versions of this libraries we'll + * use a workaround to prevent possible crashes on all + * the platforms. + * + * Shouldn't be that bad because it's mainly used for + * anisotropic shader where angle is usually constant. + */ +#if 0 sincos (angle, sinang, cosang); +#else + sinang = sin (angle); + cosang = cos (angle); +#endif float cosang1 = 1.0 - cosang; float x = axis[0], y = axis[1], z = axis[2]; matrix M = matrix (x * x + (1.0 - x * x) * cosang, |