Cycles / Shader graph: Fallback to Sharp closures for very small roughness.

We fallback to Sharp closures for Glossy, Glass and Refraction nodes now, in case the Roughness input is disconnected and 0 (< 1e-4f to be exact).
This way we gain a few percentages of performance, in case the user did not manually set the closure type to "Sharp" in the UI.

Sharp will probably be removed from the UI as a followup, not needed anymore with this internal optimization.

Original idea by Lukas Stockner(Differential Revision: https://developer.blender.org/D1439), code implementation by myself.
This commit is contained in:
Thomas Dinges
2015-11-18 18:47:56 +01:00
parent 836c69c92f
commit 0639ba8ea5
4 changed files with 59 additions and 1 deletions

View File

@@ -354,7 +354,13 @@ void ShaderGraph::copy_nodes(set<ShaderNode*>& nodes, map<ShaderNode*, ShaderNod
}
}
}
/* Graph simplification */
/* ******************** */
/* Step 1: Remove unused nodes.
* Remove nodes which are not needed in the graph, such as proxies,
* mix nodes with a factor of 0 or 1, emission shaders without contribution...
*/
void ShaderGraph::remove_unneeded_nodes()
{
vector<bool> removed(num_node_ids, false);
@@ -550,6 +556,14 @@ void ShaderGraph::remove_unneeded_nodes()
}
}
/* Step 3: Simplification.*/
void ShaderGraph::simplify_nodes()
{
foreach(ShaderNode *node, nodes) {
node->optimize();
}
}
void ShaderGraph::break_cycles(ShaderNode *node, vector<bool>& visited, vector<bool>& on_stack)
{
visited[node->id] = true;
@@ -590,7 +604,7 @@ void ShaderGraph::clean()
/* TODO(dingto): Implement */
/* 3: Simplification. */
/* TODO(dingto): Implement */
simplify_nodes();
/* 4: De-duplication. */
/* TODO(dingto): Implement */