From e50ed90e4dff3a01fd5e3211f3571a34e1d6855d Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 23 Nov 2017 16:10:38 +0100 Subject: Fix T53348: Cycles difference between gradient texture on CPU and GPU. --- intern/cycles/kernel/svm/svm_gradient.h | 5 ++++- source/blender/gpu/shaders/gpu_shader_material.glsl | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/intern/cycles/kernel/svm/svm_gradient.h b/intern/cycles/kernel/svm/svm_gradient.h index 53d7b4f812c..74e36e70427 100644 --- a/intern/cycles/kernel/svm/svm_gradient.h +++ b/intern/cycles/kernel/svm/svm_gradient.h @@ -46,7 +46,10 @@ ccl_device float svm_gradient(float3 p, NodeGradientType type) return atan2f(y, x) / M_2PI_F + 0.5f; } else { - float r = fmaxf(1.0f - sqrtf(x*x + y*y + z*z), 0.0f); + /* Bias a little bit for the case where p is a unit length vector, + * to get exactly zero instead of a small random value depending + * on float precision. */ + float r = fmaxf(0.999999f - sqrtf(x*x + y*y + z*z), 0.0f); if(type == NODE_BLEND_QUADRATIC_SPHERE) return r*r; diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl index 4ac69119a6c..0a63fc216a0 100644 --- a/source/blender/gpu/shaders/gpu_shader_material.glsl +++ b/source/blender/gpu/shaders/gpu_shader_material.glsl @@ -2971,7 +2971,10 @@ float calc_gradient(vec3 p, int gradient_type) return atan(y, x) / (M_PI * 2) + 0.5; } else { - float r = max(1.0 - sqrt(x * x + y * y + z * z), 0.0); + /* Bias a little bit for the case where p is a unit length vector, + * to get exactly zero instead of a small random value depending + * on float precision. */ + float r = max(0.999999 - sqrt(x * x + y * y + z * z), 0.0); if (gradient_type == 5) { /* quadratic sphere */ return r * r; } -- cgit v1.2.3