Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/cycles/kernel/shaders/node_voronoi_texture.osl15
-rw-r--r--intern/cycles/kernel/svm/svm_voronoi.h15
-rw-r--r--source/blender/gpu/shaders/material/gpu_shader_material_tex_voronoi.glsl15
3 files changed, 21 insertions, 24 deletions
diff --git a/intern/cycles/kernel/shaders/node_voronoi_texture.osl b/intern/cycles/kernel/shaders/node_voronoi_texture.osl
index 04d61c32f8a..b95abc7f362 100644
--- a/intern/cycles/kernel/shaders/node_voronoi_texture.osl
+++ b/intern/cycles/kernel/shaders/node_voronoi_texture.osl
@@ -175,14 +175,13 @@ void voronoi_distance_to_edge_1d(float w, float randomness, output float outDist
float cellPosition = floor(w);
float localPosition = w - cellPosition;
- float minDistance = 8.0;
- for (int i = -1; i <= 1; i++) {
- float cellOffset = float(i);
- float pointPosition = cellOffset + hash_float_to_float(cellPosition + cellOffset) * randomness;
- float distanceToPoint = distance(pointPosition, localPosition);
- minDistance = min(distanceToPoint, minDistance);
- }
- outDistance = minDistance;
+ float midPointPosition = hash_float_to_float(cellPosition) * randomness;
+ float leftPointPosition = -1.0 + hash_float_to_float(cellPosition - 1.0) * randomness;
+ float rightPointPosition = 1.0 + hash_float_to_float(cellPosition + 1.0) * randomness;
+ float distanceToMidLeft = distance((midPointPosition + leftPointPosition) / 2.0, localPosition);
+ float distanceToMidRight = distance((midPointPosition + rightPointPosition) / 2.0, localPosition);
+
+ outDistance = min(distanceToMidLeft, distanceToMidRight);
}
void voronoi_n_sphere_radius_1d(float w, float randomness, output float outRadius)
diff --git a/intern/cycles/kernel/svm/svm_voronoi.h b/intern/cycles/kernel/svm/svm_voronoi.h
index f0fc0068fa2..10d17403f65 100644
--- a/intern/cycles/kernel/svm/svm_voronoi.h
+++ b/intern/cycles/kernel/svm/svm_voronoi.h
@@ -144,14 +144,13 @@ ccl_device void voronoi_distance_to_edge_1d(float w, float randomness, float *ou
float cellPosition = floorf(w);
float localPosition = w - cellPosition;
- float minDistance = 8.0f;
- for (int i = -1; i <= 1; i++) {
- float cellOffset = i;
- float pointPosition = cellOffset + hash_float_to_float(cellPosition + cellOffset) * randomness;
- float distanceToPoint = fabsf(pointPosition - localPosition);
- minDistance = min(distanceToPoint, minDistance);
- }
- *outDistance = minDistance;
+ float midPointPosition = hash_float_to_float(cellPosition) * randomness;
+ float leftPointPosition = -1.0f + hash_float_to_float(cellPosition - 1.0f) * randomness;
+ float rightPointPosition = 1.0f + hash_float_to_float(cellPosition + 1.0f) * randomness;
+ float distanceToMidLeft = fabsf((midPointPosition + leftPointPosition) / 2.0f - localPosition);
+ float distanceToMidRight = fabsf((midPointPosition + rightPointPosition) / 2.0f - localPosition);
+
+ *outDistance = min(distanceToMidLeft, distanceToMidRight);
}
ccl_device void voronoi_n_sphere_radius_1d(float w, float randomness, float *outRadius)
diff --git a/source/blender/gpu/shaders/material/gpu_shader_material_tex_voronoi.glsl b/source/blender/gpu/shaders/material/gpu_shader_material_tex_voronoi.glsl
index 0d8847176c9..470ce1a1fa7 100644
--- a/source/blender/gpu/shaders/material/gpu_shader_material_tex_voronoi.glsl
+++ b/source/blender/gpu/shaders/material/gpu_shader_material_tex_voronoi.glsl
@@ -158,14 +158,13 @@ void node_tex_voronoi_distance_to_edge_1d(vec3 coord,
float cellPosition = floor(scaledCoord);
float localPosition = scaledCoord - cellPosition;
- float minDistance = 8.0;
- for (int i = -1; i <= 1; i++) {
- float cellOffset = float(i);
- float pointPosition = cellOffset + hash_float_to_float(cellPosition + cellOffset) * randomness;
- float distanceToPoint = voronoi_distance(pointPosition, localPosition, metric, exponent);
- minDistance = min(distanceToPoint, minDistance);
- }
- outDistance = minDistance;
+ float midPointPosition = hash_float_to_float(cellPosition) * randomness;
+ float leftPointPosition = -1.0 + hash_float_to_float(cellPosition - 1.0) * randomness;
+ float rightPointPosition = 1.0 + hash_float_to_float(cellPosition + 1.0) * randomness;
+ float distanceToMidLeft = distance((midPointPosition + leftPointPosition) / 2.0, localPosition);
+ float distanceToMidRight = distance((midPointPosition + rightPointPosition) / 2.0, localPosition);
+
+ outDistance = min(distanceToMidLeft, distanceToMidRight);
}
void node_tex_voronoi_n_sphere_radius_1d(vec3 coord,