From 340cbc7f153737fbd228bdf35b0cabb450decb1f Mon Sep 17 00:00:00 2001 From: OmarSquircleArt Date: Thu, 3 Sep 2020 18:56:27 +0200 Subject: Fix T79803: Wrong Distance To Edge 1D Voronoi The current 1D Voronoi implementation for the Distance to Edge option computes the distance to the cells instead. This patch fixes that and compute the distance to the edge. Reviewed By: JacquesLucke, brecht Differential Revision: https://developer.blender.org/D8634 --- intern/cycles/kernel/shaders/node_voronoi_texture.osl | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'intern/cycles/kernel/shaders') 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) -- cgit v1.2.3