Cycles / OSL:

* More small improvements: return immediately, and use "else if".
This commit is contained in:
Thomas Dinges 2013-03-10 00:42:47 +00:00
parent 5ac628fb47
commit 56538ea685
4 changed files with 37 additions and 42 deletions

@ -49,37 +49,37 @@ shader node_math(
if (type == "Add")
Value = Value1 + Value2;
if (type == "Subtract")
else if (type == "Subtract")
Value = Value1 - Value2;
if (type == "Multiply")
else if (type == "Multiply")
Value = Value1 * Value2;
if (type == "Divide")
else if (type == "Divide")
Value = safe_divide(Value1, Value2);
if (type == "Sine")
else if (type == "Sine")
Value = sin(Value1);
if (type == "Cosine")
else if (type == "Cosine")
Value = cos(Value1);
if (type == "Tangent")
else if (type == "Tangent")
Value = tan(Value1);
if (type == "Arcsine")
else if (type == "Arcsine")
Value = asin(Value1);
if (type == "Arccosine")
else if (type == "Arccosine")
Value = acos(Value1);
if (type == "Arctangent")
else if (type == "Arctangent")
Value = atan(Value1);
if (type == "Power")
else if (type == "Power")
Value = pow(Value1, Value2);
if (type == "Logarithm")
else if (type == "Logarithm")
Value = safe_log(Value1, Value2);
if (type == "Minimum")
else if (type == "Minimum")
Value = min(Value1, Value2);
if (type == "Maximum")
else if (type == "Maximum")
Value = max(Value1, Value2);
if (type == "Round")
else if (type == "Round")
Value = floor(Value1 + 0.5);
if (type == "Less Than")
else if (type == "Less Than")
Value = Value1 < Value2;
if (type == "Greater Than")
else if (type == "Greater Than")
Value = Value1 > Value2;
if (Clamp)

@ -18,24 +18,22 @@
float voronoi_distance(string distance_metric, vector d, float e)
{
float result = 0.0;
if (distance_metric == "Distance Squared")
result = dot(d, d);
return dot(d, d);
if (distance_metric == "Actual Distance")
result = length(d);
return length(d);
if (distance_metric == "Manhattan")
result = fabs(d[0]) + fabs(d[1]) + fabs(d[2]);
return fabs(d[0]) + fabs(d[1]) + fabs(d[2]);
if (distance_metric == "Chebychev")
result = max(fabs(d[0]), max(fabs(d[1]), fabs(d[2])));
return max(fabs(d[0]), max(fabs(d[1]), fabs(d[2])));
if (distance_metric == "Minkovsky 1/2")
result = sqrt(fabs(d[0])) + sqrt(fabs(d[1])) + sqrt(fabs(d[1]));
return sqrt(fabs(d[0])) + sqrt(fabs(d[1])) + sqrt(fabs(d[1]));
if (distance_metric == "Minkovsky 4")
result = sqrt(sqrt(dot(d * d, d * d)));
return sqrt(sqrt(dot(d * d, d * d)));
if (distance_metric == "Minkovsky")
result = pow(pow(fabs(d[0]), e) + pow(fabs(d[1]), e) + pow(fabs(d[2]), e), 1.0 / e);
return pow(pow(fabs(d[0]), e) + pow(fabs(d[1]), e) + pow(fabs(d[2]), e), 1.0 / e);
return result;
return 0.0;
}
/* Voronoi / Worley like */
@ -207,24 +205,24 @@ float noise_wave(string wave, float a)
float result = 0.0;
if (wave == "Sine") {
result = 0.5 + 0.5 * sin(a);
return 0.5 + 0.5 * sin(a);
}
else if (wave == "Saw") {
if (wave == "Saw") {
float b = 2 * M_PI;
int n = (int)(a / b);
a -= n * b;
if (a < 0) a += b;
result = a / b;
return a / b;
}
else if (wave == "Tri") {
if (wave == "Tri") {
float b = 2 * M_PI;
float rmax = 1.0;
result = rmax - 2.0 * fabs(floor((a * (1.0 / b)) + 0.5) - (a * (1.0 / b)));
return rmax - 2.0 * fabs(floor((a * (1.0 / b)) + 0.5) - (a * (1.0 / b)));
}
return result;
return 0.0;
}
/* Turbulence */

@ -29,23 +29,23 @@ shader node_vector_math(
Vector = Vector1 + Vector2;
Value = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2])) / 3.0;
}
if (type == "Subtract") {
else if (type == "Subtract") {
Vector = Vector1 - Vector2;
Value = (abs(Vector[0]) + abs(Vector[1]) + abs(Vector[2])) / 3.0;
}
if (type == "Average") {
else if (type == "Average") {
Value = length(Vector1 + Vector2);
Vector = normalize(Vector1 + Vector2);
}
if (type == "Dot Product") {
else if (type == "Dot Product") {
Value = dot(Vector1, Vector2);
}
if (type == "Cross Product") {
else if (type == "Cross Product") {
vector c = cross(Vector1, Vector2);
Value = length(c);
Vector = normalize(c);
}
if (type == "Normalize") {
else if (type == "Normalize") {
Value = length(Vector1);
Vector = normalize(Vector1);
}

@ -27,7 +27,6 @@ float wave(point p, float scale, string type, float detail, float distortion, fl
float y = p[1] * scale;
float z = p[2] * scale;
float result = 0.0;
float n = 0.0;
if (type == "Bands") {
@ -40,9 +39,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", detail, 0));
}
result = noise_wave("Sine", n);
return result;
return noise_wave("Sine", n);
}
shader node_wave_texture(
@ -63,6 +60,6 @@ shader node_wave_texture(
p = transform(mapping, p);
Fac = wave(p, Scale, Type, Detail, Distortion, DetailScale);
Color = color(Fac, Fac, Fac);
Color = Fac;
}