[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