[Bf-blender-cvs] [9098fab439a] cycles_path_guiding: Merge branch 'master' into cycles_path_guiding

Brecht Van Lommel noreply at git.blender.org
Fri Sep 2 18:52:58 CEST 2022


Commit: 9098fab439ab9caa791d1b10d695eb3cfb1b55a7
Author: Brecht Van Lommel
Date:   Fri Sep 2 18:21:15 2022 +0200
Branches: cycles_path_guiding
https://developer.blender.org/rB9098fab439ab9caa791d1b10d695eb3cfb1b55a7

Merge branch 'master' into cycles_path_guiding

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



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

diff --cc intern/cycles/integrator/path_trace_work_cpu.cpp
index 2f0219b29c3,518ef3185f9..13eafdeeb4a
--- a/intern/cycles/integrator/path_trace_work_cpu.cpp
+++ b/intern/cycles/integrator/path_trace_work_cpu.cpp
@@@ -6,7 -6,6 +6,7 @@@
  #include "device/cpu/kernel.h"
  #include "device/device.h"
  
- #include "kernel/film/write_passes.h"
++#include "kernel/film/write.h"
  #include "kernel/integrator/path_state.h"
  
  #include "integrator/pass_accessor_cpu.h"
diff --cc intern/cycles/kernel/closure/bsdf.h
index 1bb7f2f0591,02cf8bfe3e2..ed03d1617d8
--- a/intern/cycles/kernel/closure/bsdf.h
+++ b/intern/cycles/kernel/closure/bsdf.h
@@@ -215,36 -172,22 +215,34 @@@ ccl_device_inline int bsdf_sample(Kerne
        break;
      case CLOSURE_BSDF_GLOSSY_TOON_ID:
        label = bsdf_glossy_toon_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      // double check if this is valid
 +      *sampled_roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
        break;
      case CLOSURE_BSDF_HAIR_REFLECTION_ID:
 -      label = bsdf_hair_reflection_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      label = bsdf_hair_reflection_sample(
 +          sc, Ng, sd->I, randu, randv, eval, omega_in, pdf, sampled_roughness);
 +      *eta = 1.0f;
        break;
      case CLOSURE_BSDF_HAIR_TRANSMISSION_ID:
 -      label = bsdf_hair_transmission_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      label = bsdf_hair_transmission_sample(
 +          sc, Ng, sd->I, randu, randv, eval, omega_in, pdf, sampled_roughness);
 +      *eta = 1.0f;
        break;
      case CLOSURE_BSDF_HAIR_PRINCIPLED_ID:
 -      label = bsdf_principled_hair_sample(kg, sc, sd, randu, randv, eval, omega_in, pdf);
 +      label = bsdf_principled_hair_sample(
 +          kg, sc, sd, randu, randv, eval, omega_in, pdf, sampled_roughness, eta);
        break;
- #  ifdef __PRINCIPLED__
      case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID:
        label = bsdf_principled_diffuse_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      *sampled_roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
        break;
      case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID:
        label = bsdf_principled_sheen_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      *sampled_roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
        break;
- #  endif /* __PRINCIPLED__ */
  #endif
      default:
        label = LABEL_NONE;
@@@ -283,268 -226,6 +281,264 @@@
    return label;
  }
  
 +ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg,
 +                                          const ShaderClosure *sc,
 +                                          float2 *roughness,
 +                                          float *eta)
 +{
 +  const MicrofacetBsdf *bsdf;
 +  bool refractive = false;
 +  float alpha = 1.0f;
 +  switch (sc->type) {
 +    case CLOSURE_BSDF_DIFFUSE_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +#ifdef __SVM__
 +    case CLOSURE_BSDF_OREN_NAYAR_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +#  ifdef __OSL__
 +    case CLOSURE_BSDF_PHONG_RAMP_ID:
 +      alpha = phong_ramp_exponent_to_roughness(((ccl_private const PhongRampBsdf *)sc)->exponent);
 +      *roughness = make_float2(alpha, alpha);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_DIFFUSE_RAMP_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +#  endif
 +    case CLOSURE_BSDF_TRANSLUCENT_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_REFLECTION_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(0.0f, 0.0f);
 +      *eta = bsdf->ior;
 +      break;
 +    case CLOSURE_BSDF_REFRACTION_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(0.0f, 0.0f);
 +      // do we need to inverse eta??
 +      *eta = bsdf->ior;
 +      break;
 +    case CLOSURE_BSDF_TRANSPARENT_ID:
 +      *roughness = make_float2(0.0f, 0.0f);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_GGX_ID:
 +    case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
 +    case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
 +    case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
 +      refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID;
 +      *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
 +      *eta = bsdf->ior;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
 +      *eta = bsdf->ior;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
 +    case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
 +      refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID;
 +      *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior;
 +      break;
 +    case CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID:
 +      bsdf = (ccl_private const MicrofacetBsdf *)sc;
 +      *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_ASHIKHMIN_VELVET_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_DIFFUSE_TOON_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_GLOSSY_TOON_ID:
 +      // double check if this is valid
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_HAIR_REFLECTION_ID:
 +      *roughness = make_float2(((ccl_private HairBsdf *)sc)->roughness1,
 +                               ((ccl_private HairBsdf *)sc)->roughness2);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_HAIR_TRANSMISSION_ID:
 +      *roughness = make_float2(((ccl_private HairBsdf *)sc)->roughness1,
 +                               ((ccl_private HairBsdf *)sc)->roughness2);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_HAIR_PRINCIPLED_ID:
 +      alpha = ((ccl_private PrincipledHairBSDF *)sc)->m0_roughness;
 +      *roughness = make_float2(alpha, alpha);
 +      *eta = ((ccl_private PrincipledHairBSDF *)sc)->eta;
 +      break;
- #  ifdef __PRINCIPLED__
 +    case CLOSURE_BSDF_PRINCIPLED_DIFFUSE_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +    case CLOSURE_BSDF_PRINCIPLED_SHEEN_ID:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
- #  endif /* __PRINCIPLED__ */
 +#endif
 +    default:
 +      *roughness = make_float2(1.0f, 1.0f);
 +      *eta = 1.0f;
 +      break;
 +  }
 +}
 +
 +ccl_device_inline int bsdf_label(const KernelGlobals kg,
 +                                 const ShaderClosure *sc,
 +                                 const bool is_transmission)
 +{
 +  /* For curves use the smooth normal, particularly for ribbons the geometric
 +   * normal gives too much darkening otherwise. */
 +  int label;
 +  MicrofacetBsdf *bsdf;
 +  switch (sc->type) {
 +    case CLOSURE_BSDF_DIFFUSE_ID:
 +    case CLOSURE_BSSRDF_BURLEY_ID:
 +    case CLOSURE_BSSRDF_RANDOM_WALK_ID:
 +    case CLOSURE_BSSRDF_RANDOM_WALK_FIXED_RADIUS_ID:
 +      label = LABEL_REFLECT | LABEL_DIFFUSE;
 +      break;
 +#ifdef __SVM__
 +    case CLOSURE_BSDF_OREN_NAYAR_ID:
 +      label = LABEL_REFLECT | LABEL_DIFFUSE;
 +      break;
 +#  ifdef __OSL__
 +    case CLOSURE_BSDF_PHONG_RAMP_ID:
 +      label = LABEL_REFLECT | LABEL_GLOSSY;
 +      break;
 +    case CLOSURE_BSDF_DIFFUSE_RAMP_ID:
 +      label = LABEL_REFLECT | LABEL_DIFFUSE;
 +      break;
 +#  endif
 +    case CLOSURE_BSDF_TRANSLUCENT_ID:
 +      label = LABEL_TRANSMIT | LABEL_DIFFUSE;
 +      break;
 +    case CLOSURE_BSDF_REFLECTION_ID:
 +      label = LABEL_REFLECT | LABEL_SINGULAR;
 +      break;
 +    case CLOSURE_BSDF_REFRACTION_ID:
 +      label = LABEL_TRANSMIT | LABEL_SINGULAR;
 +      break;
 +    case CLOSURE_BSDF_TRANSPARENT_ID:
 +      label = LABEL_TRANSMIT | LABEL_TRANSPARENT;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_GGX_ID:
 +    case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
 +    case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
 +      bsdf = (MicrofacetBsdf *)sc;
 +      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
 +        label = LABEL_REFLECT | LABEL_SINGULAR;
 +      else
 +        label = LABEL_REFLECT | LABEL_GLOSSY;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
 +      bsdf = (MicrofacetBsdf *)sc;
 +      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
 +        label = LABEL_TRANSMIT | LABEL_SINGULAR;
 +      else
 +        label = LABEL_TRANSMIT | LABEL_GLOSSY;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
 +      bsdf = (MicrofacetBsdf *)sc;
 +      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
 +        label = LABEL_REFLECT | LABEL_SINGULAR;
 +      else
 +        label = LABEL_REFLECT | LABEL_GLOSSY;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
 +    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
 +      if (is_transmission)
 +        label = LABEL_TRANSMIT | LABEL_GLOSSY;
 +      else
 +        label = LABEL_REFLECT | LABEL_GLOSSY;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
 +      bsdf = (MicrofacetBsdf *)sc;
 +      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
 +        label = LABEL_REFLECT | LABEL_SINGULAR;
 +      else
 +        label = LABEL_REFLECT | LABEL_GLOSSY;
 +      break;
 +    case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID:
 +      

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list