[Bf-blender-cvs] [2dd0cb4964e] master: Fix T54801: incorrect render with zero weight transparent BSDFs.

Brecht Van Lommel noreply at git.blender.org
Sun May 6 02:09:19 CEST 2018


Commit: 2dd0cb4964e854985e746d457756a72e8c872360
Author: Brecht Van Lommel
Date:   Sun May 6 01:24:53 2018 +0200
Branches: master
https://developer.blender.org/rB2dd0cb4964e854985e746d457756a72e8c872360

Fix T54801: incorrect render with zero weight transparent BSDFs.

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

M	intern/cycles/kernel/closure/bsdf_transparent.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_transparent.h b/intern/cycles/kernel/closure/bsdf_transparent.h
index 79ee9dc4537..8fc7ef4dd4f 100644
--- a/intern/cycles/kernel/closure/bsdf_transparent.h
+++ b/intern/cycles/kernel/closure/bsdf_transparent.h
@@ -37,15 +37,22 @@ CCL_NAMESPACE_BEGIN
 
 ccl_device void bsdf_transparent_setup(ShaderData *sd, const float3 weight, int path_flag)
 {
+	/* Check cutoff weight. */
+	float sample_weight = fabsf(average(weight));
+	if(!(sample_weight >= CLOSURE_WEIGHT_CUTOFF)) {
+		return;
+	}
+
 	if(sd->flag & SD_TRANSPARENT) {
 		sd->closure_transparent_extinction += weight;
 
+		/* Add weight to existing transparent BSDF. */
 		for(int i = 0; i < sd->num_closure; i++) {
 			ShaderClosure *sc = &sd->closure[i];
 
 			if(sc->type == CLOSURE_BSDF_TRANSPARENT_ID) {
 				sc->weight += weight;
-				sc->sample_weight += fabsf(average(weight));
+				sc->sample_weight += sample_weight;
 				break;
 			}
 		}
@@ -61,11 +68,15 @@ ccl_device void bsdf_transparent_setup(ShaderData *sd, const float3 weight, int
 			sd->num_closure_left = 1;
 		}
 
-		ShaderClosure *bsdf = bsdf_alloc(sd, sizeof(ShaderClosure), weight);
+		/* Create new transparent BSDF. */
+		ShaderClosure *bsdf = closure_alloc(sd, sizeof(ShaderClosure), CLOSURE_BSDF_TRANSPARENT_ID, weight);
 
 		if(bsdf) {
+			bsdf->sample_weight = sample_weight;
 			bsdf->N = sd->N;
-			bsdf->type = CLOSURE_BSDF_TRANSPARENT_ID;
+		}
+		else if(path_flag & PATH_RAY_TERMINATE) {
+			sd->num_closure_left = 0;
 		}
 	}
 }



More information about the Bf-blender-cvs mailing list