[Bf-blender-cvs] [b15270ccf75] cycles-x: Merge branch 'master' into cycles-x

Brecht Van Lommel noreply at git.blender.org
Wed Jul 28 19:50:17 CEST 2021


Commit: b15270ccf752a899d62657c0654bfa1b3165288c
Author: Brecht Van Lommel
Date:   Wed Jul 28 19:34:45 2021 +0200
Branches: cycles-x
https://developer.blender.org/rBb15270ccf752a899d62657c0654bfa1b3165288c

Merge branch 'master' into cycles-x

===================================================================



===================================================================

diff --cc intern/cycles/kernel/kernel_accumulate.h
index e04e1378346,61653d328f1..f749a4b2afa
--- a/intern/cycles/kernel/kernel_accumulate.h
+++ b/intern/cycles/kernel/kernel_accumulate.h
@@@ -82,31 -151,123 +82,36 @@@ ccl_device_inline void bsdf_eval_mul3(B
  
  ccl_device_inline float3 bsdf_eval_sum(const BsdfEval *eval)
  {
 -#ifdef __PASSES__
 -  if (eval->use_light_pass) {
 -    return eval->diffuse + eval->glossy + eval->transmission + eval->volume;
 -  }
 -  else
 -#endif
 -    return eval->diffuse;
 +  return eval->diffuse + eval->glossy;
  }
  
 -/* Path Radiance
 - *
 - * We accumulate different render passes separately. After summing at the end
 - * to get the combined result, it should be identical. We definite directly
 - * visible as the first non-transparent hit, while indirectly visible are the
 - * bounces after that. */
 -
 -ccl_device_inline void path_radiance_init(KernelGlobals *kg, PathRadiance *L)
 +ccl_device_inline float3 bsdf_eval_diffuse_glossy_ratio(const BsdfEval *eval)
  {
 -  /* clear all */
 -#ifdef __PASSES__
 -  L->use_light_pass = kernel_data.film.use_light_pass;
 -
 -  if (kernel_data.film.use_light_pass) {
 -    L->indirect = zero_float3();
 -    L->direct_emission = zero_float3();
 -
 -    L->color_diffuse = zero_float3();
 -    L->color_glossy = zero_float3();
 -    L->color_transmission = zero_float3();
 -
 -    L->direct_diffuse = zero_float3();
 -    L->direct_glossy = zero_float3();
 -    L->direct_transmission = zero_float3();
 -    L->direct_volume = zero_float3();
 -
 -    L->indirect_diffuse = zero_float3();
 -    L->indirect_glossy = zero_float3();
 -    L->indirect_transmission = zero_float3();
 -    L->indirect_volume = zero_float3();
 -
 -    L->transparent = 0.0f;
 -    L->emission = zero_float3();
 -    L->background = zero_float3();
 -    L->ao = zero_float3();
 -    L->shadow = zero_float3();
 -    L->mist = 0.0f;
 -
 -    L->state.diffuse = zero_float3();
 -    L->state.glossy = zero_float3();
 -    L->state.transmission = zero_float3();
 -    L->state.volume = zero_float3();
 -    L->state.direct = zero_float3();
 -  }
 -  else
 -#endif
 -  {
 -    L->transparent = 0.0f;
 -    L->emission = zero_float3();
 -  }
 -
 -#ifdef __SHADOW_TRICKS__
 -  L->path_total = zero_float3();
 -  L->path_total_shaded = zero_float3();
 -  L->shadow_background_color = zero_float3();
 -  L->shadow_throughput = 0.0f;
 -  L->shadow_transparency = 1.0f;
 -  L->has_shadow_catcher = 0;
 -#endif
 -
 -#ifdef __DENOISING_FEATURES__
 -  L->denoising_normal = zero_float3();
 -  L->denoising_albedo = zero_float3();
 -  L->denoising_depth = 0.0f;
 -#endif
 +  /* Ratio of diffuse and glossy to recover proportions for writing to render pass.
 +   * We assume reflection, transmission and volume scatter to be exclusive. */
 +  return safe_divide_float3_float3(eval->diffuse, eval->diffuse + eval->glossy);
  }
  
 -ccl_device_inline void path_radiance_bsdf_bounce(KernelGlobals *kg,
 -                                                 PathRadianceState *L_state,
 -                                                 ccl_addr_space float3 *throughput,
 -                                                 BsdfEval *bsdf_eval,
 -                                                 float bsdf_pdf,
 -                                                 int bounce,
 -                                                 int bsdf_label)
 -{
 -  float inverse_pdf = 1.0f / bsdf_pdf;
 -
 -#ifdef __PASSES__
 -  if (kernel_data.film.use_light_pass) {
 -    if (bounce == 0 && !(bsdf_label & LABEL_TRANSPARENT)) {
 -      /* first on directly visible surface */
 -      float3 value = *throughput * inverse_pdf;
 -
 -      L_state->diffuse = bsdf_eval->diffuse * value;
 -      L_state->glossy = bsdf_eval->glossy * value;
 -      L_state->transmission = bsdf_eval->transmission * value;
 -      L_state->volume = bsdf_eval->volume * value;
 -
 -      *throughput = L_state->diffuse + L_state->glossy + L_state->transmission + L_state->volume;
 +/* --------------------------------------------------------------------
 + * Clamping
 + *
 + * Clamping is done on a per-contribution basis so that we can write directly
 + * to render buffers instead of using per-thread memory, and to avoid the
 + * impact of clamping on other contributions. */
  
 -      L_state->direct = *throughput;
 -    }
 -    else {
 -      /* transparent bounce before first hit, or indirectly visible through BSDF */
 -      float3 sum = (bsdf_eval_sum(bsdf_eval) + bsdf_eval->transparent) * inverse_pdf;
 -      *throughput *= sum;
 -    }
 +ccl_device_forceinline void kernel_accum_clamp(const KernelGlobals *kg, float3 *L, int bounce)
 +{
++#ifdef __KERNEL_DEBUG_NAN__
++  if (!isfinite3_safe(*L)) {
++    kernel_assert(!"Cycles sample with non-finite value detected");
+   }
 -  else
+ #endif
 -  {
 -    *throughput *= bsdf_eval->diffuse * inverse_pdf;
 -  }
 -}
 +  /* Make sure all components are finite, allowing the contribution to be usable by adaptive
 +   * sampling convergence check, but also to make it so render result never causes issues with
 +   * post-processing. */
 +  *L = ensure_finite3(*L);
  
  #ifdef __CLAMP_SAMPLE__
 -ccl_device_forceinline void path_radiance_clamp(KernelGlobals *kg, float3 *L, int bounce)
 -{
    float limit = (bounce > 0) ? kernel_data.integrator.sample_clamp_indirect :
                                 kernel_data.integrator.sample_clamp_direct;
    float sum = reduce_add(fabs(*L));
diff --cc intern/cycles/kernel/kernel_types.h
index 4a1a4c6eb4f,f9ea3a2d0a8..165c1337b53
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@@ -104,49 -125,67 +104,53 @@@ CCL_NAMESPACE_BEGI
  #  define __VOLUME_RECORD_ALL__
  #endif /* __KERNEL_CPU__ */
  
 -#ifdef __KERNEL_CUDA__
 -#  ifdef __SPLIT_KERNEL__
 -#    undef __BRANCHED_PATH__
 -#  endif
 -#endif /* __KERNEL_CUDA__ */
 -
  #ifdef __KERNEL_OPTIX__
  #  undef __BAKING__
 -#  undef __BRANCHED_PATH__
  #endif /* __KERNEL_OPTIX__ */
  
 -#ifdef __KERNEL_OPENCL__
 -#endif /* __KERNEL_OPENCL__ */
 -
  /* Scene-based selective features compilation. */
 -#ifdef __NO_CAMERA_MOTION__
 -#  undef __CAMERA_MOTION__
 -#endif
 -#ifdef __NO_OBJECT_MOTION__
 -#  undef __OBJECT_MOTION__
 -#endif
 -#ifdef __NO_HAIR__
 -#  undef __HAIR__
 -#endif
 -#ifdef __NO_VOLUME__
 -#  undef __VOLUME__
 -#  undef __VOLUME_SCATTER__
 -#endif
 -#ifdef __NO_SUBSURFACE__
 -#  undef __SUBSURFACE__
 -#endif
 -#ifdef __NO_BAKING__
 -#  undef __BAKING__
 -#endif
 -#ifdef __NO_BRANCHED_PATH__
 -#  undef __BRANCHED_PATH__
 -#endif
 -#ifdef __NO_PATCH_EVAL__
 -#  undef __PATCH_EVAL__
 -#endif
 -#ifdef __NO_TRANSPARENT__
 -#  undef __TRANSPARENT_SHADOWS__
 -#endif
 -#ifdef __NO_SHADOW_TRICKS__
 -#  undef __SHADOW_TRICKS__
 -#endif
 -#ifdef __NO_PRINCIPLED__
 -#  undef __PRINCIPLED__
 -#endif
 -#ifdef __NO_DENOISING__
 -#  undef __DENOISING_FEATURES__
 -#endif
 -#ifdef __NO_SHADER_RAYTRACE__
 -#  undef __SHADER_RAYTRACE__
 +#ifdef __KERNEL_FEATURES__
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_CAMERA_MOTION)
 +#    undef __CAMERA_MOTION__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_OBJECT_MOTION)
 +#    undef __OBJECT_MOTION__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_HAIR)
 +#    undef __HAIR__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_VOLUME)
 +#    undef __VOLUME__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_SUBSURFACE)
 +#    undef __SUBSURFACE__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_BAKING)
 +#    undef __BAKING__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_PATCH_EVALUATION)
 +#    undef __PATCH_EVAL__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_TRANSPARENT)
 +#    undef __TRANSPARENT_SHADOWS__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_SHADOW_CATCHER)
 +#    undef __SHADOW_CATCHER__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_PRINCIPLED)
 +#    undef __PRINCIPLED__
 +#  endif
 +#  if !(__KERNEL_FEATURES & KERNEL_FEATURE_DENOISING)
 +#    undef __DENOISING_FEATURES__
 +#  endif
  #endif
  
+ #ifdef WITH_CYCLES_DEBUG_NAN
+ #  define __KERNEL_DEBUG_NAN__
+ #endif
+ 
 +/* Features that enable others */
 +
  #if defined(__SUBSURFACE__) || defined(__SHADER_RAYTRACE__)
  #  define __BVH_LOCAL__
  #endif



More information about the Bf-blender-cvs mailing list