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/kernel/osl/shaders | |
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/kernel/osl/shaders')
-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 |
2 files changed, 5 insertions, 5 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); |