[Bf-blender-cvs] [d23da4133f2] temp-cycles-denoising: Merge remote-tracking branch 'origin/master' into temp-cycles-denoising

Lukas Stockner noreply at git.blender.org
Mon Mar 27 18:49:33 CEST 2017


Commit: d23da4133f28e4010ded9217f33ab8d6fa97b879
Author: Lukas Stockner
Date:   Mon Mar 27 18:20:46 2017 +0200
Branches: temp-cycles-denoising
https://developer.blender.org/rBd23da4133f28e4010ded9217f33ab8d6fa97b879

Merge remote-tracking branch 'origin/master' into temp-cycles-denoising

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



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

diff --cc intern/cycles/kernel/kernel_accumulate.h
index d1a26778aab,823d30dde78..06728415c15
--- a/intern/cycles/kernel/kernel_accumulate.h
+++ b/intern/cycles/kernel/kernel_accumulate.h
@@@ -652,6 -591,23 +653,23 @@@ ccl_device_inline float path_radiance_s
  	}
  	return 1.0f;
  }
+ 
+ /* Calculate final light sum and transparency for shadow catcher object. */
+ ccl_device_inline float3 path_radiance_sum_shadowcatcher(KernelGlobals *kg,
+                                                          const PathRadiance *L,
 -                                                         ccl_addr_space float* L_transparent)
++                                                         float* alpha)
+ {
+ 	const float shadow = path_radiance_sum_shadow(L);
+ 	float3 L_sum;
+ 	if(kernel_data.background.transparent) {
 -		*L_transparent = shadow;
++		*alpha = 1.0f-shadow;
+ 		L_sum = make_float3(0.0f, 0.0f, 0.0f);
+ 	}
+ 	else {
+ 		L_sum = L->shadow_color * shadow;
+ 	}
+ 	return L_sum;
+ }
  #endif
  
  CCL_NAMESPACE_END
diff --cc intern/cycles/kernel/kernel_passes.h
index 22e2e7943f0,ed523696571..eae8e666481
--- a/intern/cycles/kernel/kernel_passes.h
+++ b/intern/cycles/kernel/kernel_passes.h
@@@ -342,83 -199,5 +342,79 @@@ ccl_device_inline void kernel_write_lig
  #endif
  }
  
 +ccl_device_inline void kernel_write_result(KernelGlobals *kg, ccl_global float *buffer,
 +	int sample, PathRadiance *L, float alpha, bool is_shadow_catcher)
 +{
 +	int split_passes = (kernel_data.film.denoising_flags & DENOISING_USE_SPLIT_PASSES);
 +
 +	if(L) {
 +		float3 L_sum;
 +#ifdef __SHADOW_TRICKS__
 +		if(is_shadow_catcher) {
- 			float shadow = path_radiance_sum_shadow(L);
- 			L_sum = L->shadow_color * shadow;
- 			if(kernel_data.background.transparent) {
- 				alpha = 1.0f - shadow;
- 			}
++			L_sum = path_radiance_sum_shadowcatcher(kg, L, &alpha);
 +		}
 +		else
 +#endif  /* __SHADOW_TRICKS__ */
 +		{
 +			L_sum = path_radiance_clamp_and_sum(kg, L);
 +		}
 +
 +		kernel_write_pass_float4(buffer, sample, make_float4(L_sum.x, L_sum.y, L_sum.z, alpha));
 +
 +		kernel_write_light_passes(kg, buffer, L, sample);
 +
 +#ifdef __DENOISING_FEATURES__
 +		if(kernel_data.film.pass_denoising_data) {
 +#  ifdef __SHADOW_TRICKS__
 +			kernel_write_denoising_shadow(kg, buffer, sample, average(L->path_total), average(L->path_total_shaded));
 +#  else
 +			kernel_write_denoising_shadow(kg, buffer, sample, 0.0f, 0.0f);
 +#  endif
 +			if(kernel_data.film.pass_denoising_clean) {
 +				float3 noisy, clean;
 +				path_radiance_split_denoising(kg, L, &noisy, &clean);
 +				kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 20, sample, noisy);
 +				if(split_passes && !(sample & 1)) {
 +					kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 26, sample, noisy);
 +				}
 +				kernel_write_pass_float3_unaligned(buffer + kernel_data.film.pass_denoising_clean, sample, clean);
 +			}
 +			else {
 +				kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 20, sample, L_sum);
 +				if(split_passes && !(sample & 1)) {
 +					kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 26, sample, L_sum);
 +				}
 +			}
 +
 +			kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data, sample, L->denoising_normal);
 +			kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 6, sample, L->denoising_albedo);
 +			kernel_write_pass_float_variance(buffer + kernel_data.film.pass_denoising_data + 12, sample, L->denoising_depth);
 +		}
 +#endif  /* __DENOISING_FEATURES__ */
 +	}
 +	else {
 +		kernel_write_pass_float4(buffer, sample, make_float4(0.0f, 0.0f, 0.0f, 0.0f));
 +
 +#ifdef __DENOISING_FEATURES__
 +		if(kernel_data.film.pass_denoising_data) {
 +			kernel_write_denoising_shadow(kg, buffer, sample, 0.0f, 0.0f);
 +
 +			kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 20, sample, make_float3(0.0f, 0.0f, 0.0f));
 +			if(split_passes && !(sample & 1)) {
 +				kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 26, sample, make_float3(0.0f, 0.0f, 0.0f));
 +			}
 +
 +			kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data, sample, make_float3(0.0f, 0.0f, 0.0f));
 +			kernel_write_pass_float3_variance(buffer + kernel_data.film.pass_denoising_data + 6, sample, make_float3(0.0f, 0.0f, 0.0f));
 +			kernel_write_pass_float_variance(buffer + kernel_data.film.pass_denoising_data + 12, sample, 0.0f);
 +
 +			if(kernel_data.film.pass_denoising_clean) {
 +				kernel_write_pass_float3_unaligned(buffer + kernel_data.film.pass_denoising_clean, sample, make_float3(0.0f, 0.0f, 0.0f));
 +			}
 +		}
 +#endif  /* __DENOISING_FEATURES__ */
 +	}
 +}
 +
  CCL_NAMESPACE_END




More information about the Bf-blender-cvs mailing list