[Bf-blender-cvs] [7d291fae0f5] temp-studio-sprite-fright-cycles: Cycles: Ensure finite displacement and background evaluation
Sergey Sharybin
noreply at git.blender.org
Wed Sep 29 17:18:22 CEST 2021
Commit: 7d291fae0f5ba6e301c4aa9c4a9492f94fd0f175
Author: Sergey Sharybin
Date: Wed Sep 29 14:31:18 2021 +0200
Branches: temp-studio-sprite-fright-cycles
https://developer.blender.org/rB7d291fae0f5ba6e301c4aa9c4a9492f94fd0f175
Cycles: Ensure finite displacement and background evaluation
Avoids possible numerical issues in the path tracing kernel, which
is most important for displacement as non-finite values in BVH can
lead to infinite node recursion during traversal.
Differential Revision: https://developer.blender.org/D12690
===================================================================
M intern/cycles/kernel/kernel_bake.h
===================================================================
diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index 7da890b908d..0f85963ff99 100644
--- a/intern/cycles/kernel/kernel_bake.h
+++ b/intern/cycles/kernel/kernel_bake.h
@@ -470,6 +470,16 @@ ccl_device void kernel_displace_evaluate(KernelGlobals *kg,
object_inverse_dir_transform(kg, &sd, &D);
+#ifdef __KERNEL_DEBUG_NAN__
+ if (!isfinite3_safe(D)) {
+ kernel_assert(!"Cycles displacement with non-finite value detected");
+ }
+#endif
+
+ /* Ensure finite displacement, preventing BVH from becoming degenerate and avoiding possible
+ * traversal issues caused by non-finite math. */
+ D = ensure_finite3(D);
+
/* write output */
output[i] += make_float4(D.x, D.y, D.z, 0.0f);
}
@@ -508,6 +518,15 @@ ccl_device void kernel_background_evaluate(KernelGlobals *kg,
shader_eval_surface(kg, &sd, &state, NULL, path_flag | PATH_RAY_EMISSION);
float3 color = shader_background_eval(&sd);
+#ifdef __KERNEL_DEBUG_NAN__
+ if (!isfinite3_safe(color)) {
+ kernel_assert(!"Cycles background with non-finite value detected");
+ }
+#endif
+
+ /* Ensure finite color, avoiding possible numerical instabilities in the path tracing kernels. */
+ color = ensure_finite3(color);
+
/* write output */
output[i] += make_float4(color.x, color.y, color.z, 0.0f);
}
More information about the Bf-blender-cvs
mailing list