Commit: b0dc151dc3ba866109c1b05096557fddda5dc349
Author: Lukas Stockner
Date:   Fri Apr 14 00:13:44 2017 +0200
Branches: temp-cycles-denoising
https://developer.blender.org/rBb0dc151dc3ba866109c1b05096557fddda5dc349

Cycles Denoising: Move closure classification to a separate function

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

M       intern/cycles/kernel/closure/bsdf.h
M       intern/cycles/kernel/kernel_passes.h
M       intern/cycles/kernel/svm/svm_types.h

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

diff --git a/intern/cycles/kernel/closure/bsdf.h 
b/intern/cycles/kernel/closure/bsdf.h
index 9139b99353a..4dea651ae4d 100644
--- a/intern/cycles/kernel/closure/bsdf.h
+++ b/intern/cycles/kernel/closure/bsdf.h
@@ -1,4 +1,4 @@
-/*
+#/*
  * Copyright 2011-2013 Blender Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -379,5 +379,23 @@ ccl_device bool bsdf_merge(ShaderClosure *a, ShaderClosure 
*b)
 #endif
 }
 
+/* Classifies a closure as diffuse-like or specular-like.
+ * This is needed for the denoising feature pass generation,
+ * which are written on the first bounce where more than 25%
+ * of the sampling weight belongs to diffuse-line closures. */
+ccl_device_inline bool bsdf_is_specular_like(ShaderClosure *sc)
+{
+       if(CLOSURE_IS_BSDF_TRANSPARENT(sc->type)) {
+               return true;
+       }
+
+       if(CLOSURE_IS_BSDF_MICROFACET(sc->type)) {
+               MicrofacetBsdf *bsdf = (MicrofacetBsdf*) sc;
+               return (bsdf->alpha_x*bsdf->alpha_y <= 0.075f*0.075f);
+       }
+
+       return false;
+}
+
 CCL_NAMESPACE_END
 
diff --git a/intern/cycles/kernel/kernel_passes.h 
b/intern/cycles/kernel/kernel_passes.h
index eae8e666481..989c4883e52 100644
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@ -163,20 +163,10 @@ ccl_device_inline void 
kernel_update_denoising_features(KernelGlobals *kg,
                if(!CLOSURE_IS_BSDF_OR_BSSRDF(sc->type))
                        continue;
 
-               /* Classify closures into diffuse-like and specular-like 
closures.
-                * This is pretty arbitrary, but some distinction has to be 
made. */
-               bool is_specular = (sc->type == CLOSURE_BSDF_TRANSPARENT_ID);
-               if(CLOSURE_IS_BSDF_MICROFACET(sc->type)) {
-                       MicrofacetBsdf *bsdf = (MicrofacetBsdf*) sc;
-                       if(bsdf->alpha_x*bsdf->alpha_y <= 0.075f*0.075f) {
-                               is_specular = true;
-                       }
-               }
-
                /* All closures contribute to the normal feature, but only 
diffuse-like ones to the albedo. */
                normal += sc->N * sc->sample_weight;
                sum_weight += sc->sample_weight;
-               if(!is_specular) {
+               if(!bsdf_is_specular_like(sc)) {
                        albedo += sc->weight;
                        sum_nonspecular_weight += sc->sample_weight;
                }
diff --git a/intern/cycles/kernel/svm/svm_types.h 
b/intern/cycles/kernel/svm/svm_types.h
index 95920d5906c..6287e9b70a3 100644
--- a/intern/cycles/kernel/svm/svm_types.h
+++ b/intern/cycles/kernel/svm/svm_types.h
@@ -454,6 +454,7 @@ typedef enum ClosureType {
 #define CLOSURE_IS_BSDF_GLOSSY(type) (type >= CLOSURE_BSDF_REFLECTION_ID && 
type <= CLOSURE_BSDF_HAIR_REFLECTION_ID)
 #define CLOSURE_IS_BSDF_TRANSMISSION(type) (type >= 
CLOSURE_BSDF_TRANSLUCENT_ID && type <= CLOSURE_BSDF_HAIR_TRANSMISSION_ID)
 #define CLOSURE_IS_BSDF_BSSRDF(type) (type == CLOSURE_BSDF_BSSRDF_ID)
+#define CLOSURE_IS_BSDF_TRANSPARENT(type) (type == CLOSURE_BSDF_TRANSPARENT_ID)
 #define CLOSURE_IS_BSDF_ANISOTROPIC(type) (type >= 
CLOSURE_BSDF_MICROFACET_GGX_ANISO_ID && type <= 
CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ANISO_ID)
 #define CLOSURE_IS_BSDF_MULTISCATTER(type) (type == 
CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID ||\
                                             type == 
CLOSURE_BSDF_MICROFACET_MULTI_GGX_ANISO_ID || \

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to