[Bf-blender-cvs] [489b853] experimental-build: Another compile fix for the experimental Cycles build Sorry for the noise, it built fine on my system.

Lukas Stockner noreply at git.blender.org
Thu Oct 22 22:23:38 CEST 2015


Commit: 489b85302959da2525058e37c7e49e4cc34226a6
Author: Lukas Stockner
Date:   Thu Oct 22 22:22:14 2015 +0200
Branches: experimental-build
https://developer.blender.org/rB489b85302959da2525058e37c7e49e4cc34226a6

Another compile fix for the experimental Cycles build
Sorry for the noise, it built fine on my system.

Squashed commit of the following:

commit 606fc4d6ee1f403b22320ef6f2baef58600ba410
Author: Lukas Stockner <lukas.stockner at freenet.de>
Date:   Thu Oct 22 16:47:03 2015 +0200

    Experimental build with some rather unstable Cycles changes

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

M	intern/cycles/app/cycles_xml.cpp
M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/blender_object.cpp
M	intern/cycles/blender/blender_session.cpp
M	intern/cycles/blender/blender_shader.cpp
M	intern/cycles/blender/blender_util.h
M	intern/cycles/kernel/CMakeLists.txt
M	intern/cycles/kernel/kernel_bake.h
M	intern/cycles/kernel/kernel_emission.h
M	intern/cycles/kernel/kernel_light.h
M	intern/cycles/kernel/kernel_path.h
M	intern/cycles/kernel/kernel_path_branched.h
M	intern/cycles/kernel/kernel_path_surface.h
M	intern/cycles/kernel/kernel_shader.h
M	intern/cycles/kernel/kernel_textures.h
M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/osl/background.cpp
M	intern/cycles/kernel/osl/osl_closures.cpp
M	intern/cycles/kernel/osl/osl_closures.h
M	intern/cycles/kernel/osl/osl_services.cpp
M	intern/cycles/kernel/osl/osl_shader.cpp
M	intern/cycles/kernel/shaders/CMakeLists.txt
A	intern/cycles/kernel/shaders/node_ies_light.osl
M	intern/cycles/kernel/shaders/stdosl.h
M	intern/cycles/kernel/svm/svm.h
M	intern/cycles/kernel/svm/svm_closure.h
A	intern/cycles/kernel/svm/svm_ies.h
M	intern/cycles/kernel/svm/svm_image.h
M	intern/cycles/kernel/svm/svm_types.h
M	intern/cycles/render/buffers.cpp
M	intern/cycles/render/film.cpp
M	intern/cycles/render/film.h
M	intern/cycles/render/image.cpp
M	intern/cycles/render/image.h
M	intern/cycles/render/light.cpp
M	intern/cycles/render/light.h
M	intern/cycles/render/nodes.cpp
M	intern/cycles/render/nodes.h
M	intern/cycles/render/scene.h
M	intern/cycles/render/tile.cpp
M	intern/cycles/render/tile.h
M	intern/cycles/util/CMakeLists.txt
A	intern/cycles/util/util_hilbert.h
M	intern/cycles/util/util_math.h
M	intern/opencolorio/fallback_impl.cc
M	intern/opencolorio/gpu_shader_display_transform.glsl
M	intern/opencolorio/ocio_capi.cc
M	intern/opencolorio/ocio_capi.h
M	intern/opencolorio/ocio_impl.h
M	intern/opencolorio/ocio_impl_glsl.cc
M	release/scripts/startup/nodeitems_builtins.py
M	source/blender/blenkernel/BKE_node.h
M	source/blender/blenkernel/intern/colortools.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/text.c
M	source/blender/editors/interface/interface_templates.c
M	source/blender/editors/space_node/drawnode.c
M	source/blender/imbuf/intern/colormanagement.c
M	source/blender/makesdna/DNA_color_types.h
M	source/blender/makesdna/DNA_node_types.h
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/intern/rna_color.c
M	source/blender/makesrna/intern/rna_nodetree.c
M	source/blender/nodes/CMakeLists.txt
M	source/blender/nodes/NOD_shader.h
M	source/blender/nodes/NOD_static_types.h
A	source/blender/nodes/shader/nodes/node_shader_ies_light.c
A	source/blender/nodes/shader/nodes/node_shader_shadow_catcher.c

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

diff --git a/intern/cycles/app/cycles_xml.cpp b/intern/cycles/app/cycles_xml.cpp
index edea8cd..457b10a 100644
--- a/intern/cycles/app/cycles_xml.cpp
+++ b/intern/cycles/app/cycles_xml.cpp
@@ -515,6 +515,9 @@ static void xml_read_shader_graph(const XMLReadState& state, Shader *shader, pug
 			xml_read_enum(&wave->type, WaveTextureNode::type_enum, node, "type");
 			snode = wave;
 		}
+		else if(string_iequals(node.name(), "ies_light")) {
+			snode = new IESLightNode();
+		}
 		else if(string_iequals(node.name(), "normal")) {
 			NormalNode *normal = new NormalNode();
 			xml_read_float3(&normal->direction, node, "direction");
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index c313983..e9bbd90 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -54,6 +54,7 @@ enum_bvh_types = (
 enum_filter_types = (
     ('BOX', "Box", "Box filter"),
     ('GAUSSIAN', "Gaussian", "Gaussian filter"),
+    ('BLACKMAN_HARRIS', "Blackman-Harris", "Blackman-Harris filter"),
     )
 
 enum_aperture_types = (
@@ -91,6 +92,7 @@ enum_tile_order = (
     ('LEFT_TO_RIGHT', "Left to Right", "Render from left to right"),
     ('TOP_TO_BOTTOM', "Top to Bottom", "Render from top to bottom"),
     ('BOTTOM_TO_TOP', "Bottom to Top", "Render from bottom to top"),
+    ('HILBERT', "Hilbert Curve", "Render along a hilbert curve"),
     )
 
 enum_use_layer_samples = (
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index 1159380..596f414 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -150,6 +150,8 @@ void BlenderSync::sync_light(BL::Object b_parent, int persistent_id[OBJECT_PERSI
 	light->co = transform_get_column(&tfm, 3);
 	light->dir = -transform_get_column(&tfm, 2);
 
+	light->tfm = tfm;
+
 	/* shader */
 	vector<uint> used_shaders;
 
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 088748c..c729fb4 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -447,6 +447,7 @@ void BlenderSession::render()
 		/* add passes */
 		vector<Pass> passes;
 		Pass::add(PASS_COMBINED, passes);
+		Pass::add(PASS_SHADOWCATCHER, passes);
 
 		if(session_params.device.advanced_shading) {
 
diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp
index 2beeaa5..cfb1f8a 100644
--- a/intern/cycles/blender/blender_shader.cpp
+++ b/intern/cycles/blender/blender_shader.cpp
@@ -328,6 +328,9 @@ static ShaderNode *add_node(Scene *scene,
 	else if(b_node.is_a(&RNA_ShaderNodeHoldout)) {
 		node = new HoldoutNode();
 	}
+	else if(b_node.is_a(&RNA_ShaderNodeShadowCatcher)) {
+		node = new ShadowCatcherNode();
+	}
 	else if(b_node.is_a(&RNA_ShaderNodeBsdfAnisotropic)) {
 		BL::ShaderNodeBsdfAnisotropic b_aniso_node(b_node);
 		AnisotropicBsdfNode *aniso = new AnisotropicBsdfNode();
@@ -719,6 +722,13 @@ static ShaderNode *add_node(Scene *scene,
 		get_tex_mapping(&sky->tex_mapping, b_sky_node.texture_mapping());
 		node = sky;
 	}
+	else if(b_node.is_a(&RNA_ShaderNodeIESLight)) {
+		BL::ShaderNodeIESLight b_ies_node(b_node);
+		IESLightNode *ies = new IESLightNode();
+		ies->filename = blender_absolute_path(b_data, b_ntree, b_ies_node.filepath());
+		ies->ies = get_text_content(b_ies_node.ies().ptr);
+		node = ies;
+	}
 	else if(b_node.is_a(&RNA_ShaderNodeNormalMap)) {
 		BL::ShaderNodeNormalMap b_normal_map_node(b_node);
 		NormalMapNode *nmap = new NormalMapNode();
diff --git a/intern/cycles/blender/blender_util.h b/intern/cycles/blender/blender_util.h
index bd1c37a..6f80efd 100644
--- a/intern/cycles/blender/blender_util.h
+++ b/intern/cycles/blender/blender_util.h
@@ -347,6 +347,19 @@ static inline string blender_absolute_path(BL::BlendData b_data, BL::ID b_id, co
 	return path;
 }
 
+static inline string get_text_content(PointerRNA ptr)
+{
+	if(ptr.data == NULL)
+		return "";
+
+	string content;
+	BL::Text::lines_iterator iter;
+	iter.begin(ptr);
+	for(iter.begin(ptr); iter; ++iter)
+		content += iter->body() + "\n";
+	return content;
+}
+
 /* Texture Space */
 
 static inline void mesh_texture_space(BL::Mesh b_mesh, float3& loc, float3& size)
diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt
index b44e917..82a3592 100644
--- a/intern/cycles/kernel/CMakeLists.txt
+++ b/intern/cycles/kernel/CMakeLists.txt
@@ -103,6 +103,7 @@ set(SRC_SVM_HEADERS
 	svm/svm_geometry.h
 	svm/svm_gradient.h
 	svm/svm_hsv.h
+	svm/svm_ies.h
 	svm/svm_image.h
 	svm/svm_invert.h
 	svm/svm_light_path.h
diff --git a/intern/cycles/kernel/kernel_bake.h b/intern/cycles/kernel/kernel_bake.h
index 0cb5646..49bf97f 100644
--- a/intern/cycles/kernel/kernel_bake.h
+++ b/intern/cycles/kernel/kernel_bake.h
@@ -241,7 +241,7 @@ ccl_device void kernel_bake_evaluate(KernelGlobals *kg, ccl_global uint4 *input,
 	/* light passes */
 	PathRadiance L;
 
-	shader_setup_from_sample(kg, &sd, P, Ng, I, shader, object, prim, u, v, t, time, bounce, transparent_bounce);
+	shader_setup_from_sample(kg, &sd, P, Ng, I, shader, object, prim, u, v, t, time, bounce, transparent_bounce, LAMP_NONE);
 	sd.I = sd.N;
 
 	/* update differentials */
@@ -449,11 +449,9 @@ ccl_device void kernel_shader_evaluate(KernelGlobals *kg, ccl_global uint4 *inpu
 	else { // SHADER_EVAL_BACKGROUND
 		/* setup ray */
 		Ray ray;
-		float u = __uint_as_float(in.x);
-		float v = __uint_as_float(in.y);
 
 		ray.P = make_float3(0.0f, 0.0f, 0.0f);
-		ray.D = equirectangular_to_direction(u, v);
+		ray.D = make_float3(__uint_as_float(in.x), __uint_as_float(in.y), __uint_as_float(in.z));
 		ray.t = 0.0f;
 #ifdef __CAMERA_MOTION__
 		ray.time = 0.5f;
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index de9e8d7..717a3be 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -51,7 +51,7 @@ ccl_device_noinline float3 direct_emissive_eval(KernelGlobals *kg,
 	else
 #endif
 	{
-		shader_setup_from_sample(kg, sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, ls->u, ls->v, t, time, bounce+1, transparent_bounce);
+		shader_setup_from_sample(kg, sd, ls->P, ls->Ng, I, ls->shader, ls->object, ls->prim, ls->u, ls->v, t, time, bounce+1, transparent_bounce, ls->lamp);
 
 		ls->Ng = ccl_fetch(sd, Ng);
 
@@ -71,6 +71,58 @@ ccl_device_noinline float3 direct_emissive_eval(KernelGlobals *kg,
 	return eval;
 }
 
+ccl_device_noinline bool direct_emission_shaderless(KernelGlobals *kg,
+	ShaderData *sd, LightSample *ls, Ray *ray, float3 *light_eval
+#ifdef __SPLIT_KERNEL__
+	, ShaderData *sd_DL
+#endif
+	)
+{
+	if(ls->pdf == 0.0f)
+		return false;
+
+	/* todo: implement */
+	differential3 dD = differential3_zero();
+
+	/* evaluate closure */
+	*light_eval = direct_emissive_eval(kg, ls, -ls->D, dD, ls->t, ccl_fetch(sd, time), 0, 0
+#ifdef __SPLIT_KERNEL__
+	                                         ,sd_DL
+#endif
+	                                  )
+	            * fmaxf(dot(ls->D, ccl_fetch(sd, N)), 0.0f) / ls->pdf;
+
+	if(is_zero(*light_eval))
+		return false;
+
+	if(ls->shader & SHADER_CAST_SHADOW) {
+		/* setup ray */
+		bool transmit = (dot(ccl_fetch(sd, Ng), ls->D) < 0.0f);
+		ray->P = ray_offset(sd->P, (transmit)? -ccl_fetch(sd, Ng): ccl_fetch(sd, Ng));
+
+		if(ls->t == FLT_MAX) {
+			/* distant light */
+			ray->D = ls->D;
+			ray->t = ls->t;
+		}
+		else {
+			/* other lights, avoid self-intersection */
+			ray->D = ray_offset(ls->P, ls->Ng) - ray->P;
+			ray->D = normalize_len(ray->D, &ray->t);
+		}
+
+		ray->dP = ccl_fetch(sd, dP);
+		ray->dD = differential3_zero();
+	}
+	else {
+		/* signal to not cast shadow ray */
+		ray->t = 0.0f;
+	}
+
+	return true;
+}
+
+/* The argument sd_DL is meaningful only for split kernel. Other uses can just pass NULL */
 ccl_device_noinline bool direct_emission(KernelGlobals *kg, ShaderData *sd,
 	LightSample *ls, Ray *ray, BsdfEval *eval, bool *is_lamp,
 	int bounce, int transparent_bounce
@@ -290,7 +342,7 @@ ccl_device_noinline float3 indirect_background(KernelGlobals *kg, ccl_addr_space
 	/* check if background light exists or if we should skip pdf */
 	int res = kernel_data.integrator.pdf_background_res;
 
-	if(!(state->flag & PATH_RAY_MIS_SKIP) && res) {
+	if(!(state->flag & PATH_RAY_MIS_SKIP) && (res || kernel_data.integrator.num_portals)) {
 		/* multiple importance sampling, get background light pdf for ray
 		 * direction, and compute weight with respect to BSDF pdf */
 		float pdf = background_light_pdf(kg, ray->P, ray->D);
diff --git a/intern/cycles/kernel/kernel_light.h b/intern/cycles/kernel/kernel_light.h
index 7590ec2..12fec80 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -371,97 +371,266 @@ ccl_device float3 background_portal_sample(KernelGlobals *kg,
 	return make_float3(0.0f, 0.0f, 0.0f);
 }
 
+ccl_device_inline float2 direction_to_rectified(float3 D, float3 ex, float3 ey, float3 N)
+{
+	float d = 1.0f / dot(D, N);
+	float x = dot(D, ex) * d;
+	float y = dot(D, ey) * d;
+	return make_float2((atanf(x) + M_PI_2_F)*M_1_PI_F, (atanf(y) + M_PI_2_F)*M_1_PI_F);
+}
+
+ccl_device_inline float3 rectified_to_direction(float u, float v)
+{
+	float lx = tanf(M_PI_F*u - M_PI_2_F);
+	float ly = tanf(M_PI_F*v - M_PI_2_F);
+	return make_float3(lx, ly, 1.0f) / sqrtf(lx*lx + ly*ly + 1.0f);
+}
+
+/* Returns the sum of the rectanble [0, 0]*[xi, yi] */
+#define SUM_LOOKUP(xi, yi) (((xi) > 0 && (yi) > 0)? kernel_tex_fetch(__light_background_conditional_cdf, (portal*res + (yi) - 1)*res + (xi) - 1).y : 0.0f)
+#define BI_LERP(xi, xf, yi, yf) ((1.0f - (xf)) * ((1.0f - (yf)) * SUM_LOOKUP((xi)  , (yi)) + (yf) * SUM_LOOKUP((xi)  , (yi)+1)) \
+                                       + (xf)  * ((1.0f - (yf)) * SUM_LOOKUP((xi)+1, (yi)) + (yf) * SUM_LOOKUP((xi)+1, (yi)+1)))
+#define Y_LERP(xi, yi, yf) ((1.0f - (yf)) * SUM_LOOKUP((xi), (yi)) + (yf) * SUM_LOOKUP((xi), (yi)+1))
+/* Returns the sum of the rectangle [lx, ly]*[hx, hy] */
+ccl_device_inline float rectified_area(KernelGlobals *kg, int portal, float lx, float ly, float hx, float hy)
+{
+	int res = kernel

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list