From 48e2a15160d276c8080cd8d4f6dc0ba752dbb410 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 2 Nov 2021 18:27:54 +0100 Subject: Fix T77681, T92634: noise texture artifacts with high detail We run into float precision issues here, clamp the number of octaves to one less, which has little to no visual difference. This was empirically determined to work up to 16 before, but with additional inputs like roughness only 15 appears to work. Also adds misisng clamp for the geometry nodes implementation. --- intern/cycles/kernel/svm/fractal_noise.h | 8 ++++---- intern/cycles/kernel/svm/musgrave.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'intern/cycles/kernel/svm') diff --git a/intern/cycles/kernel/svm/fractal_noise.h b/intern/cycles/kernel/svm/fractal_noise.h index b955d626dde..8256a24c751 100644 --- a/intern/cycles/kernel/svm/fractal_noise.h +++ b/intern/cycles/kernel/svm/fractal_noise.h @@ -27,7 +27,7 @@ ccl_device_noinline float fractal_noise_1d(float p, float octaves, float roughne float amp = 1.0f; float maxamp = 0.0f; float sum = 0.0f; - octaves = clamp(octaves, 0.0f, 16.0f); + octaves = clamp(octaves, 0.0f, 15.0f); int n = float_to_int(octaves); for (int i = 0; i <= n; i++) { float t = noise_1d(fscale * p); @@ -56,7 +56,7 @@ ccl_device_noinline float fractal_noise_2d(float2 p, float octaves, float roughn float amp = 1.0f; float maxamp = 0.0f; float sum = 0.0f; - octaves = clamp(octaves, 0.0f, 16.0f); + octaves = clamp(octaves, 0.0f, 15.0f); int n = float_to_int(octaves); for (int i = 0; i <= n; i++) { float t = noise_2d(fscale * p); @@ -85,7 +85,7 @@ ccl_device_noinline float fractal_noise_3d(float3 p, float octaves, float roughn float amp = 1.0f; float maxamp = 0.0f; float sum = 0.0f; - octaves = clamp(octaves, 0.0f, 16.0f); + octaves = clamp(octaves, 0.0f, 15.0f); int n = float_to_int(octaves); for (int i = 0; i <= n; i++) { float t = noise_3d(fscale * p); @@ -114,7 +114,7 @@ ccl_device_noinline float fractal_noise_4d(float4 p, float octaves, float roughn float amp = 1.0f; float maxamp = 0.0f; float sum = 0.0f; - octaves = clamp(octaves, 0.0f, 16.0f); + octaves = clamp(octaves, 0.0f, 15.0f); int n = float_to_int(octaves); for (int i = 0; i <= n; i++) { float t = noise_4d(fscale * p); diff --git a/intern/cycles/kernel/svm/musgrave.h b/intern/cycles/kernel/svm/musgrave.h index 85e32eee638..a37ca9eb8eb 100644 --- a/intern/cycles/kernel/svm/musgrave.h +++ b/intern/cycles/kernel/svm/musgrave.h @@ -737,7 +737,7 @@ ccl_device_noinline int svm_node_tex_musgrave(KernelGlobals kg, float gain = stack_load_float_default(stack, gain_stack_offset, defaults2.z); dimension = fmaxf(dimension, 1e-5f); - detail = clamp(detail, 0.0f, 16.0f); + detail = clamp(detail, 0.0f, 15.0f); lacunarity = fmaxf(lacunarity, 1e-5f); float fac; -- cgit v1.2.3