diff options
author | Brecht Van Lommel <brecht@blender.org> | 2021-11-02 20:27:54 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2021-11-02 20:56:25 +0300 |
commit | 48e2a15160d276c8080cd8d4f6dc0ba752dbb410 (patch) | |
tree | 5552f66d7fa217a12bbdd4fbe0c1e9691c4fb36e /intern/cycles | |
parent | 978f2cb900b75110a3bc9dbcec9d4aeae5df4565 (diff) |
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.
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/kernel/osl/shaders/node_musgrave_texture.osl | 2 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/shaders/node_noise.h | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/fractal_noise.h | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/musgrave.h | 2 |
4 files changed, 10 insertions, 10 deletions
diff --git a/intern/cycles/kernel/osl/shaders/node_musgrave_texture.osl b/intern/cycles/kernel/osl/shaders/node_musgrave_texture.osl index 0e71ce74c29..6a688d654c9 100644 --- a/intern/cycles/kernel/osl/shaders/node_musgrave_texture.osl +++ b/intern/cycles/kernel/osl/shaders/node_musgrave_texture.osl @@ -697,7 +697,7 @@ shader node_musgrave_texture( output float Fac = 0.0) { float dimension = max(Dimension, 1e-5); - float octaves = clamp(Detail, 0.0, 16.0); + float octaves = clamp(Detail, 0.0, 15.0); float lacunarity = max(Lacunarity, 1e-5); vector3 s = Vector; diff --git a/intern/cycles/kernel/osl/shaders/node_noise.h b/intern/cycles/kernel/osl/shaders/node_noise.h index ab4cd7792cc..e8a71032171 100644 --- a/intern/cycles/kernel/osl/shaders/node_noise.h +++ b/intern/cycles/kernel/osl/shaders/node_noise.h @@ -90,7 +90,7 @@ float fractal_noise(float p, float details, float roughness) float amp = 1.0; float maxamp = 0.0; float sum = 0.0; - float octaves = clamp(details, 0.0, 16.0); + float octaves = clamp(details, 0.0, 15.0); int n = (int)octaves; for (int i = 0; i <= n; i++) { float t = safe_noise(fscale * p); @@ -119,7 +119,7 @@ float fractal_noise(vector2 p, float details, float roughness) float amp = 1.0; float maxamp = 0.0; float sum = 0.0; - float octaves = clamp(details, 0.0, 16.0); + float octaves = clamp(details, 0.0, 15.0); int n = (int)octaves; for (int i = 0; i <= n; i++) { float t = safe_noise(fscale * p); @@ -148,7 +148,7 @@ float fractal_noise(vector3 p, float details, float roughness) float amp = 1.0; float maxamp = 0.0; float sum = 0.0; - float octaves = clamp(details, 0.0, 16.0); + float octaves = clamp(details, 0.0, 15.0); int n = (int)octaves; for (int i = 0; i <= n; i++) { float t = safe_noise(fscale * p); @@ -177,7 +177,7 @@ float fractal_noise(vector4 p, float details, float roughness) float amp = 1.0; float maxamp = 0.0; float sum = 0.0; - float octaves = clamp(details, 0.0, 16.0); + float octaves = clamp(details, 0.0, 15.0); int n = (int)octaves; for (int i = 0; i <= n; i++) { float t = safe_noise(fscale * p); 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; |