[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