[Bf-blender-cvs] [4bff5a3c8e0] soc-2019-cycles-procedural: Refactor voronoi SVM code
OmarSquircleArt
noreply at git.blender.org
Mon Jun 24 18:36:53 CEST 2019
Commit: 4bff5a3c8e08e7d8c618618d8c41c475a1abb0b6
Author: OmarSquircleArt
Date: Mon Jun 24 18:37:28 2019 +0200
Branches: soc-2019-cycles-procedural
https://developer.blender.org/rB4bff5a3c8e08e7d8c618618d8c41c475a1abb0b6
Refactor voronoi SVM code
===================================================================
M intern/cycles/kernel/svm/svm_voronoi.h
===================================================================
diff --git a/intern/cycles/kernel/svm/svm_voronoi.h b/intern/cycles/kernel/svm/svm_voronoi.h
index 472294b1f21..7de205e6eb9 100644
--- a/intern/cycles/kernel/svm/svm_voronoi.h
+++ b/intern/cycles/kernel/svm/svm_voronoi.h
@@ -37,7 +37,6 @@ ccl_device float voronoi_distance_1d(float a,
}
ccl_device void voronoi_f1_1d(float w,
- float scale,
float exponent,
float jitter,
NodeVoronoiDistanceMetric metric,
@@ -45,11 +44,8 @@ ccl_device void voronoi_f1_1d(float w,
float3 *outColor,
float *outW)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float scaledCoord = w * scale;
- float cellPosition = floorf(scaledCoord);
- float localPosition = scaledCoord - cellPosition;
+ float cellPosition = floorf(w);
+ float localPosition = w - cellPosition;
float minDistance = 8.0f;
float targetOffset, targetPosition;
@@ -65,11 +61,10 @@ ccl_device void voronoi_f1_1d(float w,
}
*outDistance = minDistance;
*outColor = hash_float_01_float3(cellPosition + targetOffset);
- *outW = safe_divide(targetPosition + cellPosition, scale);
+ *outW = targetPosition + cellPosition;
}
ccl_device void voronoi_smooth_f1_1d(float w,
- float scale,
float smoothness,
float exponent,
float jitter,
@@ -78,12 +73,8 @@ ccl_device void voronoi_smooth_f1_1d(float w,
float3 *outColor,
float *outW)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
- smoothness = max(smoothness, 1.0f);
-
- float scaledCoord = w * scale;
- float cellPosition = floorf(scaledCoord);
- float localPosition = scaledCoord - cellPosition;
+ float cellPosition = floorf(w);
+ float localPosition = w - cellPosition;
float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f);
float smoothDistance = 0.0f;
@@ -99,11 +90,10 @@ ccl_device void voronoi_smooth_f1_1d(float w,
}
*outDistance = -logf(smoothDistance) / smoothness;
*outColor = smoothColor / smoothDistance;
- *outW = safe_divide(cellPosition + smoothPosition / smoothDistance, scale);
+ *outW = cellPosition + smoothPosition / smoothDistance;
}
ccl_device void voronoi_f2_1d(float w,
- float scale,
float exponent,
float jitter,
NodeVoronoiDistanceMetric metric,
@@ -111,11 +101,8 @@ ccl_device void voronoi_f2_1d(float w,
float3 *outColor,
float *outW)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float scaledCoord = w * scale;
- float cellPosition = floorf(scaledCoord);
- float localPosition = scaledCoord - cellPosition;
+ float cellPosition = floorf(w);
+ float localPosition = w - cellPosition;
float distanceF1 = 8.0f;
float distanceF2 = 8.0f;
@@ -142,16 +129,13 @@ ccl_device void voronoi_f2_1d(float w,
}
*outDistance = distanceF2;
*outColor = hash_float_01_float3(cellPosition + offsetF2);
- *outW = safe_divide(positionF2 + cellPosition, scale);
+ *outW = positionF2 + cellPosition;
}
-ccl_device void voronoi_distance_to_edge_1d(float w, float scale, float jitter, float *outDistance)
+ccl_device void voronoi_distance_to_edge_1d(float w, float jitter, float *outDistance)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float scaledCoord = w * scale;
- float cellPosition = floorf(scaledCoord);
- float localPosition = scaledCoord - cellPosition;
+ float cellPosition = floorf(w);
+ float localPosition = w - cellPosition;
float minDistance = 8.0f;
for (int i = -1; i <= 1; i++) {
@@ -163,13 +147,10 @@ ccl_device void voronoi_distance_to_edge_1d(float w, float scale, float jitter,
*outDistance = minDistance;
}
-ccl_device void voronoi_n_sphere_radius_1d(float w, float scale, float jitter, float *outRadius)
+ccl_device void voronoi_n_sphere_radius_1d(float w, float jitter, float *outRadius)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float scaledCoord = w * scale;
- float cellPosition = floorf(scaledCoord);
- float localPosition = scaledCoord - cellPosition;
+ float cellPosition = floorf(w);
+ float localPosition = w - cellPosition;
float closestPoint;
float closestPointOffset;
@@ -221,20 +202,16 @@ ccl_device float voronoi_distance_2d(float2 a,
return 0.0f;
}
-ccl_device void voronoi_f1_2d(float3 coord,
- float scale,
+ccl_device void voronoi_f1_2d(float2 coord,
float exponent,
float jitter,
NodeVoronoiDistanceMetric metric,
float *outDistance,
float3 *outColor,
- float3 *outPosition)
+ float2 *outPosition)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float2 scaledCoord = make_float2(coord.x, coord.y) * scale;
- float2 cellPosition = floor(scaledCoord);
- float2 localPosition = scaledCoord - cellPosition;
+ float2 cellPosition = floor(coord);
+ float2 localPosition = coord - cellPosition;
float minDistance = 8.0f;
float2 targetOffset, targetPosition;
@@ -253,26 +230,20 @@ ccl_device void voronoi_f1_2d(float3 coord,
}
*outDistance = minDistance;
*outColor = hash_float2_01_float3(cellPosition + targetOffset);
- float2 scaledPosition = safe_divide_float2_float(targetPosition + cellPosition, scale);
- *outPosition = make_float3(scaledPosition.x, scaledPosition.y, 0.0f);
+ *outPosition = targetPosition + cellPosition;
}
-ccl_device void voronoi_smooth_f1_2d(float3 coord,
- float scale,
+ccl_device void voronoi_smooth_f1_2d(float2 coord,
float smoothness,
float exponent,
float jitter,
NodeVoronoiDistanceMetric metric,
float *outDistance,
float3 *outColor,
- float3 *outPosition)
+ float2 *outPosition)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
- smoothness = max(smoothness, 1.0f);
-
- float2 scaledCoord = make_float2(coord.x, coord.y) * scale;
- float2 cellPosition = floor(scaledCoord);
- float2 localPosition = scaledCoord - cellPosition;
+ float2 cellPosition = floor(coord);
+ float2 localPosition = coord - cellPosition;
float3 smoothColor = make_float3(0.0f, 0.0f, 0.0f);
float smoothDistance = 0.0f;
@@ -291,25 +262,19 @@ ccl_device void voronoi_smooth_f1_2d(float3 coord,
}
*outDistance = -logf(smoothDistance) / smoothness;
*outColor = smoothColor / smoothDistance;
- float2 scaledPosition = safe_divide_float2_float(cellPosition + smoothPosition / smoothDistance,
- scale);
- *outPosition = make_float3(scaledPosition.x, scaledPosition.y, 0.0f);
+ *outPosition = cellPosition + smoothPosition / smoothDistance;
}
-ccl_device void voronoi_f2_2d(float3 coord,
- float scale,
+ccl_device void voronoi_f2_2d(float2 coord,
float exponent,
float jitter,
NodeVoronoiDistanceMetric metric,
float *outDistance,
float3 *outColor,
- float3 *outPosition)
+ float2 *outPosition)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float2 scaledCoord = make_float2(coord.x, coord.y) * scale;
- float2 cellPosition = floor(scaledCoord);
- float2 localPosition = scaledCoord - cellPosition;
+ float2 cellPosition = floor(coord);
+ float2 localPosition = coord - cellPosition;
float distanceF1 = 8.0f;
float distanceF2 = 8.0f;
@@ -339,20 +304,13 @@ ccl_device void voronoi_f2_2d(float3 coord,
}
*outDistance = distanceF2;
*outColor = hash_float2_01_float3(cellPosition + offsetF2);
- float2 scaledPosition = safe_divide_float2_float(positionF2 + cellPosition, scale);
- *outPosition = make_float3(scaledPosition.x, scaledPosition.y, 0.0f);
+ *outPosition = positionF2 + cellPosition;
}
-ccl_device void voronoi_distance_to_edge_2d(float3 coord,
- float scale,
- float jitter,
- float *outDistance)
+ccl_device void voronoi_distance_to_edge_2d(float2 coord, float jitter, float *outDistance)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float2 scaledCoord = make_float2(coord.x, coord.y) * scale;
- float2 cellPosition = floor(scaledCoord);
- float2 localPosition = scaledCoord - cellPosition;
+ float2 cellPosition = floor(coord);
+ float2 localPosition = coord - cellPosition;
float2 vectorToClosest;
float minDistance = 8.0f;
@@ -388,16 +346,10 @@ ccl_device void voronoi_distance_to_edge_2d(float3 coord,
*outDistance = minDistance;
}
-ccl_device void voronoi_n_sphere_radius_2d(float3 coord,
- float scale,
- float jitter,
- float *outRadius)
+ccl_device void voronoi_n_sphere_radius_2d(float2 coord, float jitter, float *outRadius)
{
- jitter = clamp(jitter, 0.0f, 1.0f);
-
- float2 scaledCoord = make_float2(coord.x, coord.y) * scale;
- float2 cellPosition = floor(scaledCoord);
- float2 localPosition = scaledCoord - cellPosition;
+ float2 cellPosition = floor(coord);
+ float2 localPosition = coord - cellPosition;
float2 closestPoint;
float2 closestPointOffset;
@@ -457,7 +409,6 @@ ccl_device float voronoi_distance_3d(float3 a,
}
ccl_device void voronoi_f1_3d(float3 coord,
- float scale,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list