[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56657] branches/soc-2011-tomato: Merging r56645 through r56656 from trunk into soc-2011-tomato

Sergey Sharybin sergey.vfx at gmail.com
Fri May 10 14:38:19 CEST 2013


Revision: 56657
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56657
Author:   nazgul
Date:     2013-05-10 12:38:19 +0000 (Fri, 10 May 2013)
Log Message:
-----------
Merging r56645 through r56656 from trunk into soc-2011-tomato

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56645
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56656

Modified Paths:
--------------
    branches/soc-2011-tomato/intern/cycles/blender/blender_shader.cpp
    branches/soc-2011-tomato/intern/cycles/kernel/shaders/node_rgb_ramp.osl
    branches/soc-2011-tomato/intern/cycles/kernel/svm/svm_ramp.h
    branches/soc-2011-tomato/intern/cycles/render/graph.cpp
    branches/soc-2011-tomato/intern/cycles/render/graph.h
    branches/soc-2011-tomato/intern/cycles/render/nodes.cpp
    branches/soc-2011-tomato/intern/cycles/render/nodes.h
    branches/soc-2011-tomato/intern/cycles/render/shader.cpp
    branches/soc-2011-tomato/release/scripts/startup/bl_operators/node.py
    branches/soc-2011-tomato/source/blender/blenkernel/intern/mesh.c
    branches/soc-2011-tomato/source/blender/blenlib/BLI_math_geom.h
    branches/soc-2011-tomato/source/blender/blenlib/intern/edgehash.c
    branches/soc-2011-tomato/source/blender/blenlib/intern/math_geom.c
    branches/soc-2011-tomato/source/blender/compositor/nodes/COM_GroupNode.cpp
    branches/soc-2011-tomato/source/blender/compositor/nodes/COM_GroupNode.h
    branches/soc-2011-tomato/source/blender/editors/interface/resources.c
    branches/soc-2011-tomato/source/blender/editors/mesh/mesh_data.c
    branches/soc-2011-tomato/source/blender/editors/space_file/file_draw.c
    branches/soc-2011-tomato/source/blender/render/intern/source/pipeline.c

Property Changed:
----------------
    branches/soc-2011-tomato/
    branches/soc-2011-tomato/source/blender/editors/interface/interface.c
    branches/soc-2011-tomato/source/blender/editors/space_outliner/


Property changes on: branches/soc-2011-tomato
___________________________________________________________________
Modified: svn:mergeinfo
   - /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/vgroup_modifiers:38694-39989
/trunk/blender:36831-56644
   + /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/vgroup_modifiers:38694-39989
/trunk/blender:36831-56656

Modified: branches/soc-2011-tomato/intern/cycles/blender/blender_shader.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/blender/blender_shader.cpp	2013-05-10 12:35:31 UTC (rev 56656)
+++ branches/soc-2011-tomato/intern/cycles/blender/blender_shader.cpp	2013-05-10 12:38:19 UTC (rev 56657)
@@ -193,6 +193,7 @@
 		RGBRampNode *ramp = new RGBRampNode();
 		BL::ShaderNodeValToRGB b_ramp_node(b_node);
 		colorramp_to_array(b_ramp_node.color_ramp(), ramp->ramp, RAMP_TABLE_SIZE);
+		ramp->interpolate = b_ramp_node.color_ramp().interpolation() != BL::ColorRamp::interpolation_CONSTANT;
 		node = ramp;
 	}
 	else if (b_node.is_a(&RNA_ShaderNodeRGB)) {

Modified: branches/soc-2011-tomato/intern/cycles/kernel/shaders/node_rgb_ramp.osl
===================================================================
--- branches/soc-2011-tomato/intern/cycles/kernel/shaders/node_rgb_ramp.osl	2013-05-10 12:35:31 UTC (rev 56656)
+++ branches/soc-2011-tomato/intern/cycles/kernel/shaders/node_rgb_ramp.osl	2013-05-10 12:38:19 UTC (rev 56657)
@@ -22,6 +22,7 @@
 shader node_rgb_ramp(
 	color ramp_color[RAMP_TABLE_SIZE] = {0.0},
 	float ramp_alpha[RAMP_TABLE_SIZE] = {0.0},
+	int ramp_interpolate = 1,
 
 	float Fac = 0.0,
 	output color Color = 0.0,
@@ -38,7 +39,7 @@
 	Color = ramp_color[i];
 	Alpha = ramp_alpha[i];
 
-	if (t > 0.0) {
+	if (ramp_interpolate && t > 0.0) {
 		Color = (1.0 - t) * Color + t * ramp_color[i + 1];
 		Alpha = (1.0 - t) * Alpha + t * ramp_alpha[i + 1];
 	}

Modified: branches/soc-2011-tomato/intern/cycles/kernel/svm/svm_ramp.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/kernel/svm/svm_ramp.h	2013-05-10 12:35:31 UTC (rev 56656)
+++ branches/soc-2011-tomato/intern/cycles/kernel/svm/svm_ramp.h	2013-05-10 12:38:19 UTC (rev 56657)
@@ -21,7 +21,7 @@
 
 CCL_NAMESPACE_BEGIN
 
-__device float4 rgb_ramp_lookup(KernelGlobals *kg, int offset, float f)
+__device float4 rgb_ramp_lookup(KernelGlobals *kg, int offset, float f, bool interpolate)
 {
 	f = clamp(f, 0.0f, 1.0f)*(RAMP_TABLE_SIZE-1);
 
@@ -31,7 +31,7 @@
 
 	float4 a = fetch_node_float(kg, offset+i);
 
-	if(t > 0.0f)
+	if(interpolate && t > 0.0f)
 		a = (1.0f - t)*a + t*fetch_node_float(kg, offset+i+1);
 
 	return a;
@@ -39,12 +39,13 @@
 
 __device void svm_node_rgb_ramp(KernelGlobals *kg, ShaderData *sd, float *stack, uint4 node, int *offset)
 {
-	uint fac_offset = node.y;
-	uint color_offset = node.z;
-	uint alpha_offset = node.w;
+	uint fac_offset, color_offset, alpha_offset;
+	uint interpolate = node.z;
 
+	decode_node_uchar4(node.y, &fac_offset, &color_offset, &alpha_offset, NULL);
+
 	float fac = stack_load_float(stack, fac_offset);
-	float4 color = rgb_ramp_lookup(kg, *offset, fac);
+	float4 color = rgb_ramp_lookup(kg, *offset, fac, interpolate);
 
 	if(stack_valid(color_offset))
 		stack_store_float3(stack, color_offset, float4_to_float3(color));
@@ -63,9 +64,9 @@
 	float fac = stack_load_float(stack, fac_offset);
 	float3 color = stack_load_float3(stack, color_offset);
 
-	float r = rgb_ramp_lookup(kg, *offset, color.x).x;
-	float g = rgb_ramp_lookup(kg, *offset, color.y).y;
-	float b = rgb_ramp_lookup(kg, *offset, color.z).z;
+	float r = rgb_ramp_lookup(kg, *offset, color.x, true).x;
+	float g = rgb_ramp_lookup(kg, *offset, color.y, true).y;
+	float b = rgb_ramp_lookup(kg, *offset, color.z, true).z;
 
 	color = (1.0f - fac)*color + fac*make_float3(r, g, b);
 	stack_store_float3(stack, out_offset, color);
@@ -82,9 +83,9 @@
 	float fac = stack_load_float(stack, fac_offset);
 	float3 color = stack_load_float3(stack, color_offset);
 
-	float r = rgb_ramp_lookup(kg, *offset, (color.x + 1.0f)*0.5f).x;
-	float g = rgb_ramp_lookup(kg, *offset, (color.y + 1.0f)*0.5f).y;
-	float b = rgb_ramp_lookup(kg, *offset, (color.z + 1.0f)*0.5f).z;
+	float r = rgb_ramp_lookup(kg, *offset, (color.x + 1.0f)*0.5f, true).x;
+	float g = rgb_ramp_lookup(kg, *offset, (color.y + 1.0f)*0.5f, true).y;
+	float b = rgb_ramp_lookup(kg, *offset, (color.z + 1.0f)*0.5f, true).z;
 
 	color = (1.0f - fac)*color + fac*make_float3(r*2.0f - 1.0f, g*2.0f - 1.0f, b*2.0f - 1.0f);
 	stack_store_float3(stack, out_offset, color);

Modified: branches/soc-2011-tomato/intern/cycles/render/graph.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/graph.cpp	2013-05-10 12:35:31 UTC (rev 56656)
+++ branches/soc-2011-tomato/intern/cycles/render/graph.cpp	2013-05-10 12:38:19 UTC (rev 56657)
@@ -312,10 +312,14 @@
 	}
 }
 
-void ShaderGraph::remove_proxy_nodes(vector<bool>& removed)
+void ShaderGraph::remove_unneeded_nodes()
 {
+	vector<bool> removed(nodes.size(), false);
+	bool any_node_removed = false;
+	
+	/* find and unlink proxy nodes */
 	foreach(ShaderNode *node, nodes) {
-		if (node->special_type == SHADER_SPECIAL_TYPE_PROXY) {
+		if(node->special_type == SHADER_SPECIAL_TYPE_PROXY) {
 			ProxyNode *proxy = static_cast<ProxyNode*>(node);
 			ShaderInput *input = proxy->inputs[0];
 			ShaderOutput *output = proxy->outputs[0];
@@ -327,7 +331,7 @@
 			ShaderOutput *from = input->link;
 			
 			/* bypass the proxy node */
-			if (from) {
+			if(from) {
 				disconnect(input);
 				foreach(ShaderInput *to, links) {
 					disconnect(to);
@@ -345,6 +349,7 @@
 			}
 			
 			removed[proxy->id] = true;
+			any_node_removed = true;
 		}
 
 		/* remove useless mix closures nodes */
@@ -360,7 +365,7 @@
 
 				foreach(ShaderInput *input, inputs) {
 					disconnect(input);
-					if (output)
+					if(output)
 						connect(output, input);
 				}
 			}
@@ -378,33 +383,47 @@
 					vector<ShaderInput*> inputs = mix->outputs[0]->links;
 					
 					foreach(ShaderInput *sock, mix->inputs)
-					if(sock->link)
-						disconnect(sock);
+						if(sock->link)
+							disconnect(sock);
 
 					foreach(ShaderInput *input, inputs) {
 						disconnect(input);
-						if (output)
-						connect(output, input);
+						if(output)
+							connect(output, input);
 					}
 				}
 				/* Factor 1.0 */
-				else if (mix->inputs[0]->value.x == 1.0f) {
+				else if(mix->inputs[0]->value.x == 1.0f) {
 					ShaderOutput *output = mix->inputs[2]->link;
 					vector<ShaderInput*> inputs = mix->outputs[0]->links;
 					
 					foreach(ShaderInput *sock, mix->inputs)
-					if(sock->link)
-						disconnect(sock);
+						if(sock->link)
+							disconnect(sock);
 
 					foreach(ShaderInput *input, inputs) {
 						disconnect(input);
-						if (output)
+						if(output)
 							connect(output, input);
 					}
 				}
 			}
 		}
 	}
+
+	/* remove nodes */
+	if (any_node_removed) {
+		list<ShaderNode*> newnodes;
+
+		foreach(ShaderNode *node, nodes) {
+			if(!removed[node->id])
+				newnodes.push_back(node);
+			else
+				delete node;
+		}
+
+		nodes = newnodes;
+	}
 }
 
 void ShaderGraph::break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack)
@@ -433,27 +452,17 @@
 
 void ShaderGraph::clean()
 {
+	/* remove proxy and unnecessary mix nodes */
+	remove_unneeded_nodes();
+
 	/* we do two things here: find cycles and break them, and remove unused
 	 * nodes that don't feed into the output. how cycles are broken is
 	 * undefined, they are invalid input, the important thing is to not crash */
 
-	vector<bool> removed(nodes.size(), false);
 	vector<bool> visited(nodes.size(), false);
 	vector<bool> on_stack(nodes.size(), false);
 	
 	list<ShaderNode*> newnodes;
-	
-	/* remove proxy nodes */
-	remove_proxy_nodes(removed);
-	
-	foreach(ShaderNode *node, nodes) {
-		if(!removed[node->id])
-			newnodes.push_back(node);
-		else
-			delete node;
-	}
-	nodes = newnodes;
-	newnodes.clear();
 
 	/* break cycles */
 	break_cycles(output(), visited, on_stack);
@@ -464,7 +473,7 @@
 			foreach(ShaderInput *to, node->inputs) {
 				ShaderOutput *from = to->link;
 
-				if (from) {
+				if(from) {
 					to->link = NULL;
 					from->links.erase(remove(from->links.begin(), from->links.end(), to), from->links.end());
 				}

Modified: branches/soc-2011-tomato/intern/cycles/render/graph.h
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/graph.h	2013-05-10 12:35:31 UTC (rev 56656)
+++ branches/soc-2011-tomato/intern/cycles/render/graph.h	2013-05-10 12:38:19 UTC (rev 56657)
@@ -239,6 +239,7 @@
 	void connect(ShaderOutput *from, ShaderInput *to);
 	void disconnect(ShaderInput *to);
 
+	void remove_unneeded_nodes();
 	void finalize(bool do_bump = false, bool do_osl = false, bool do_multi_closure = false);
 
 protected:
@@ -247,7 +248,6 @@
 	void find_dependencies(set<ShaderNode*>& dependencies, ShaderInput *input);
 	void copy_nodes(set<ShaderNode*>& nodes, map<ShaderNode*, ShaderNode*>& nnodemap);
 
-	void remove_proxy_nodes(vector<bool>& removed);
 	void break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack);
 	void clean();
 	void bump_from_displacement();

Modified: branches/soc-2011-tomato/intern/cycles/render/nodes.cpp
===================================================================
--- branches/soc-2011-tomato/intern/cycles/render/nodes.cpp	2013-05-10 12:35:31 UTC (rev 56656)
+++ branches/soc-2011-tomato/intern/cycles/render/nodes.cpp	2013-05-10 12:38:19 UTC (rev 56657)
@@ -3175,6 +3175,8 @@
 	add_input("Fac", SHADER_SOCKET_FLOAT);
 	add_output("Color", SHADER_SOCKET_COLOR);
 	add_output("Alpha", SHADER_SOCKET_FLOAT);
+
+	interpolate = true;
 }
 
 void RGBRampNode::compile(SVMCompiler& compiler)
@@ -3189,7 +3191,12 @@
 	if(!alpha_out->links.empty())
 		compiler.stack_assign(alpha_out);
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list