[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