diff options
-rw-r--r-- | intern/cycles/render/graph.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/intern/cycles/render/graph.cpp b/intern/cycles/render/graph.cpp index dca168824d9..e1c09373004 100644 --- a/intern/cycles/render/graph.cpp +++ b/intern/cycles/render/graph.cpp @@ -243,18 +243,27 @@ void ShaderGraph::connect(ShaderOutput *from, ShaderInput *to) /* add automatic conversion node in case of type mismatch */ ShaderNode *convert; + ShaderInput *convert_in; if (to->type() == SocketType::CLOSURE) { EmissionNode *emission = new EmissionNode(); emission->color = make_float3(1.0f, 1.0f, 1.0f); emission->strength = 1.0f; convert = add(emission); + /* Connect float inputs to Strength to save an additional Falue->Color conversion. */ + if(from->type() == SocketType::FLOAT) { + convert_in = convert->input("Strength"); + } + else { + convert_in = convert->input("Color"); + } } else { convert = add(new ConvertNode(from->type(), to->type(), true)); + convert_in = convert->inputs[0]; } - connect(from, convert->inputs[0]); + connect(from, convert_in); connect(convert->outputs[0], to); } else { |