[Bf-blender-cvs] [eaad6cc] bake-cycles: Cycles-Bake: light passes: barebones, but not working

Dalai Felinto noreply at git.blender.org
Wed Apr 23 02:46:51 CEST 2014


Commit: eaad6cc8000d9b6a67855121c80690073aab1bf0
Author: Dalai Felinto
Date:   Wed Jan 22 21:54:28 2014 -0200
https://developer.blender.org/rBeaad6cc8000d9b6a67855121c80690073aab1bf0

Cycles-Bake: light passes: barebones, but not working

see description of the problem in
kernel_displace.h :: compute_light_pass()

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

M	intern/cycles/kernel/kernel_displace.h

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

diff --git a/intern/cycles/kernel/kernel_displace.h b/intern/cycles/kernel/kernel_displace.h
index 091e87c..56b9654 100644
--- a/intern/cycles/kernel/kernel_displace.h
+++ b/intern/cycles/kernel/kernel_displace.h
@@ -18,6 +18,51 @@ CCL_NAMESPACE_BEGIN
 
 #include "kernel_primitive.h"
 
+ccl_device void compute_light_pass(KernelGlobals *kg, ShaderData *sd, PathRadiance *L)
+{
+	RNG rng;
+	PathState hit_state;
+	Ray hit_ray;
+
+	/* initialize */
+	float3 throughput = make_float3(1.0f, 1.0f, 1.0f);
+
+	path_radiance_init(L, kernel_data.film.use_light_pass);
+
+	/* TODO: copy bounce and other settings from scene */
+	path_state_init(kg, &hit_state, &rng, 0);
+
+	hit_state.flag |= PATH_RAY_BSSRDF_ANCESTOR;
+	hit_state.rng_offset += PRNG_BOUNCE_NUM;
+
+	/* PROBLEM:
+	 1) Do I need to call shader_eval_surface()?
+	 2) kernel_path_integrate_lighting() is returning pure black for all the PathRadiance data
+	 */
+
+	shader_eval_surface(kg, sd, 0.f, 0, SHADER_CONTEXT_MAIN);
+	kernel_path_integrate_lighting(kg, &rng, sd, &throughput, &hit_state, L, &hit_ray);
+}
+
+ccl_device bool is_light_pass(ShaderEvalType type)
+{
+	switch (type) {
+		case SHADER_EVAL_COMBINED:
+		case SHADER_EVAL_SHADOW:
+		case SHADER_EVAL_DIFFUSE_DIRECT:
+		case SHADER_EVAL_GLOSSY_DIRECT:
+		case SHADER_EVAL_TRANSMISSION_DIRECT:
+		case SHADER_EVAL_SUBSURFACE_DIRECT:
+		case SHADER_EVAL_DIFFUSE_INDIRECT:
+		case SHADER_EVAL_GLOSSY_INDIRECT:
+		case SHADER_EVAL_TRANSMISSION_INDIRECT:
+		case SHADER_EVAL_SUBSURFACE_INDIRECT:
+			return true;
+		default:
+			return false;
+	}
+}
+
 ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input, ccl_global float4 *output, ShaderEvalType type, int i)
 {
 	ShaderData sd;
@@ -46,9 +91,16 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input,
 	int bounce = 0;
 	int segment = ~0;
 
+	/* light passes */
+	PathRadiance L;
+
 	/* TODO, disable the closures we won't need */
 	shader_setup_from_sample(kg, &sd, P, Ng, I, shader, object, prim, u, v, t, time, bounce, segment);
 
+	if (is_light_pass(type)){
+		compute_light_pass(kg, &sd, &L);
+	}
+
 	switch (type) {
 		/* data passes */
 		case SHADER_EVAL_NORMAL:
@@ -111,16 +163,60 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input,
 
 		/* light passes */
 		case SHADER_EVAL_AO:
+		{
+			/* TODO */
+			break;
+		}
 		case SHADER_EVAL_COMBINED:
+		{
+			out = path_radiance_sum(kg, &L);
+			break;
+		}
 		case SHADER_EVAL_SHADOW:
+		{
+			out = make_float3(L.shadow.x, L.shadow.y, L.shadow.z);
+			break;
+		}
 		case SHADER_EVAL_DIFFUSE_DIRECT:
+		{
+			out = L.direct_diffuse;
+			break;
+		}
 		case SHADER_EVAL_GLOSSY_DIRECT:
+		{
+			out = L.direct_glossy;
+			break;
+		}
 		case SHADER_EVAL_TRANSMISSION_DIRECT:
+		{
+			out = L.direct_transmission;
+			break;
+		}
 		case SHADER_EVAL_SUBSURFACE_DIRECT:
+		{
+			out = L.direct_subsurface;
+			break;
+		}
 		case SHADER_EVAL_DIFFUSE_INDIRECT:
+		{
+			out = L.indirect_diffuse;
+			break;
+		}
 		case SHADER_EVAL_GLOSSY_INDIRECT:
+		{
+			out = L.indirect_glossy;
+			break;
+		}
 		case SHADER_EVAL_TRANSMISSION_INDIRECT:
+		{
+			out = L.indirect_transmission;
+			break;
+		}
 		case SHADER_EVAL_SUBSURFACE_INDIRECT:
+		{
+			out = L.indirect_subsurface;
+			break;
+		}
 
 		/* extra */
 		case SHADER_EVAL_ENVIRONMENT:




More information about the Bf-blender-cvs mailing list