[Bf-blender-cvs] [4a24903] bake-cycles: Cycles-Bake: incorporate the barebones to eval different shaders in kernel_shader_evaluate

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


Commit: 4a249035bf29a4b23e3c38e4c198c7a1095cdfe9
Author: Dalai Felinto
Date:   Mon Jan 20 22:56:54 2014 -0200
https://developer.blender.org/rB4a249035bf29a4b23e3c38e4c198c7a1095cdfe9

Cycles-Bake: incorporate the barebones to eval different shaders in
kernel_shader_evaluate

(we should rename this file by the way)

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

M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/kernel/kernel_displace.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/render/bake.h

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

diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index dd6e101..b2427e3 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -313,7 +313,7 @@ static ShaderEvalType get_shader_type(const string& pass_type)
 	else if (strcmp(shader_type, "EMIT")==0)
 		return SHADER_EVAL_EMISSION;
 	else if (strcmp(shader_type, "ENVIRONMENT")==0)
-		return SHADER_EVAL_BACKGROUND;
+		return SHADER_EVAL_ENVIRONMENT;
 	else if (strcmp(shader_type, "AO")==0)
 		return SHADER_EVAL_AO;
 	else if (strcmp(shader_type, "SHADOW")==0)
@@ -327,8 +327,7 @@ static ShaderEvalType get_shader_type(const string& pass_type)
 	else if (strcmp(shader_type, "REFLECTION")==0)
 		*/
 	else
-		return SHADER_EVAL_BACKGROUND;
-		//return SHADER_EVAL_NONE;
+		return SHADER_EVAL_BAKE;
 }
 
 static BL::RenderResult begin_render_result(BL::RenderEngine b_engine, int x, int y, int w, int h, const char *layername)
diff --git a/intern/cycles/kernel/kernel_displace.h b/intern/cycles/kernel/kernel_displace.h
index 1935f72..158da82 100644
--- a/intern/cycles/kernel/kernel_displace.h
+++ b/intern/cycles/kernel/kernel_displace.h
@@ -16,8 +16,78 @@
 
 CCL_NAMESPACE_BEGIN
 
+
+ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input, ccl_global float4 *output, ShaderEvalType type, int i)
+{
+	ShaderData sd;
+	uint4 in = input[i];
+	float3 out;
+
+	int object = in.x;
+	int prim = in.y;
+	float u = __uint_as_float(in.z);
+	float v = __uint_as_float(in.w);
+
+	/* TODO: I need to offset the prim for the object/mesh
+	   if I have more than one object in the scene */
+	float3 P = triangle_point_MT(kg, prim, u, v);
+
+	if (prim == -1) {
+		/* write output */
+		output[i] = make_float4(0.0f);
+		return;
+	}
+
+	switch (type) {
+		case SHADER_EVAL_COMBINED:
+		{
+			/* TODO */
+			break;
+		}
+		case SHADER_EVAL_EMISSION:
+		{
+			/* TODO */
+			break;
+		}
+		case SHADER_EVAL_AO:
+		{
+			/* TODO */
+			break;
+		}
+		case SHADER_EVAL_ENVIRONMENT:
+		{
+			/* TODO */
+			break;
+		}
+		case SHADER_EVAL_NORMAL:
+		{
+			/* TODO: the normal needs to be
+			   evaluated inside the shader */
+			int shader;
+			out = triangle_normal_MT(kg, prim, &shader);
+			break;
+		}
+		case SHADER_EVAL_BAKE:
+		default:
+		{
+			/* no real shader, returning the position of the verts for debugging */
+			out = normalize(P);
+			break;
+		}
+	}
+
+	/* write output */
+	output[i] = make_float4(out.x, out.y, out.z, 0.0f);
+	return;
+}
+
 ccl_device void kernel_shader_evaluate(KernelGlobals *kg, ccl_global uint4 *input, ccl_global float4 *output, ShaderEvalType type, int i)
 {
+	if (type >= SHADER_EVAL_BAKE) {
+		kernel_bake_evaluate(kg, input, output, type, i);
+		return;
+	}
+
 	ShaderData sd;
 	uint4 in = input[i];
 	float3 out;
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 7c2e2b3..209b0a4 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -161,6 +161,10 @@ typedef uint RNG;
 typedef enum ShaderEvalType {
 	SHADER_EVAL_DISPLACE,
 	SHADER_EVAL_BACKGROUND,
+	/* bake types */
+	SHADER_EVAL_BAKE, /* no real shade, it's used in the code to
+	                   * differentiate the type of shader eval from the above
+	                   */
 	SHADER_EVAL_COMBINED,
 	SHADER_EVAL_DEPTH,
 	SHADER_EVAL_MIST,
@@ -189,6 +193,7 @@ typedef enum ShaderEvalType {
 	SHADER_EVAL_REFRACTION,
 	SHADER_EVAL_SPECULAR,
 	SHADER_EVAL_REFLECTION,
+	SHADER_EVAL_ENVIRONMENT,
 } ShaderEvalType;
 
 /* Path Tracing
diff --git a/intern/cycles/render/bake.h b/intern/cycles/render/bake.h
index ee633f4..10ae9e7 100644
--- a/intern/cycles/render/bake.h
+++ b/intern/cycles/render/bake.h
@@ -98,9 +98,6 @@ private:
 	BakeData *bake_data;
 };
 
-
-//void do_bake(BL::Object b_object, const string& pass_type, BakePixel pixel_array[], int num_pixels, int depth, float pixels[]);
-
 CCL_NAMESPACE_END
 
 #endif /* __BAKE_H__ */




More information about the Bf-blender-cvs mailing list