Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brecht@blender.org>2021-11-02 20:27:54 +0300
committerBrecht Van Lommel <brecht@blender.org>2021-11-02 20:56:25 +0300
commit48e2a15160d276c8080cd8d4f6dc0ba752dbb410 (patch)
tree5552f66d7fa217a12bbdd4fbe0c1e9691c4fb36e /intern/cycles/kernel/svm
parent978f2cb900b75110a3bc9dbcec9d4aeae5df4565 (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/svm')
-rw-r--r--intern/cycles/kernel/svm/fractal_noise.h8
-rw-r--r--intern/cycles/kernel/svm/musgrave.h2
2 files changed, 5 insertions, 5 deletions
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;