Cycles: support for custom shader AOVs
Custom render passes are added in the Shader AOVs panel in the view layer settings, with a name and data type. In shader nodes, an AOV Output node is then used to output either a value or color to the pass. Arbitrary names can be used for these passes, as long as they don't conflict with built-in passes that are enabled. The AOV Output node can be used in both material and world shader nodes. Implemented by Lukas, with tweaks by Brecht. Differential Revision: https://developer.blender.org/D4837
This commit is contained in:

committed by
Brecht Van Lommel

parent
35b5888b15
commit
e760972221
@@ -55,6 +55,25 @@ bool check_node_inputs_traversed(const ShaderNode *node, const ShaderNodeSet &do
|
||||
|
||||
} /* namespace */
|
||||
|
||||
/* Sockets */
|
||||
|
||||
void ShaderInput::disconnect()
|
||||
{
|
||||
if (link) {
|
||||
link->links.erase(remove(link->links.begin(), link->links.end(), this), link->links.end());
|
||||
}
|
||||
link = NULL;
|
||||
}
|
||||
|
||||
void ShaderOutput::disconnect()
|
||||
{
|
||||
foreach (ShaderInput *sock, links) {
|
||||
sock->link = NULL;
|
||||
}
|
||||
|
||||
links.clear();
|
||||
}
|
||||
|
||||
/* Node */
|
||||
|
||||
ShaderNode::ShaderNode(const NodeType *type) : Node(type)
|
||||
@@ -285,11 +304,7 @@ void ShaderGraph::disconnect(ShaderOutput *from)
|
||||
assert(!finalized);
|
||||
simplified = false;
|
||||
|
||||
foreach (ShaderInput *sock, from->links) {
|
||||
sock->link = NULL;
|
||||
}
|
||||
|
||||
from->links.clear();
|
||||
from->disconnect();
|
||||
}
|
||||
|
||||
void ShaderGraph::disconnect(ShaderInput *to)
|
||||
@@ -298,10 +313,7 @@ void ShaderGraph::disconnect(ShaderInput *to)
|
||||
assert(to->link);
|
||||
simplified = false;
|
||||
|
||||
ShaderOutput *from = to->link;
|
||||
|
||||
to->link = NULL;
|
||||
from->links.erase(remove(from->links.begin(), from->links.end(), to), from->links.end());
|
||||
to->disconnect();
|
||||
}
|
||||
|
||||
void ShaderGraph::relink(ShaderInput *from, ShaderInput *to)
|
||||
@@ -782,6 +794,11 @@ void ShaderGraph::clean(Scene *scene)
|
||||
|
||||
/* break cycles */
|
||||
break_cycles(output(), visited, on_stack);
|
||||
foreach (ShaderNode *node, nodes) {
|
||||
if (node->special_type == SHADER_SPECIAL_TYPE_OUTPUT_AOV) {
|
||||
break_cycles(node, visited, on_stack);
|
||||
}
|
||||
}
|
||||
|
||||
/* disconnect unused nodes */
|
||||
foreach (ShaderNode *node, nodes) {
|
||||
|
Reference in New Issue
Block a user