diff options
Diffstat (limited to 'intern/cycles')
-rw-r--r-- | intern/cycles/blender/addon/ui.py | 54 | ||||
-rw-r--r-- | intern/cycles/blender/blender_shader.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/kernel_shader.h | 6 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/nodes/CMakeLists.txt | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/nodes/node_output_closure.osl (renamed from intern/cycles/kernel/osl/nodes/node_output_surface.osl) | 4 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/nodes/node_output_volume.osl | 25 | ||||
-rw-r--r-- | intern/cycles/kernel/osl/osl_shader.cpp | 8 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm.h | 3 | ||||
-rw-r--r-- | intern/cycles/kernel/svm/svm_types.h | 3 | ||||
-rw-r--r-- | intern/cycles/render/nodes.cpp | 9 | ||||
-rw-r--r-- | intern/cycles/render/osl.cpp | 62 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 7 | ||||
-rw-r--r-- | intern/cycles/render/shader.h | 7 | ||||
-rw-r--r-- | intern/cycles/render/svm.cpp | 31 |
14 files changed, 61 insertions, 167 deletions
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py index b8c3753800f..581d7a961bd 100644 --- a/intern/cycles/blender/addon/ui.py +++ b/intern/cycles/blender/addon/ui.py @@ -228,7 +228,7 @@ class CyclesCamera_PT_dof(CyclesButtonsPanel, Panel): sub.prop(ccam, "aperture_rotation", text="Rotation") class Cycles_PT_context_material(CyclesButtonsPanel, Panel): - bl_label = "Surface" + bl_label = "" bl_context = "material" bl_options = {'HIDE_HEADER'} @@ -400,8 +400,8 @@ class CyclesLamp_PT_lamp(CyclesButtonsPanel, Panel): elif lamp.type == 'HEMI': layout.label(text="Not supported, interpreted as sun lamp.") -class CyclesLamp_PT_nodes(CyclesButtonsPanel, Panel): - bl_label = "Nodes" +class CyclesLamp_PT_shader(CyclesButtonsPanel, Panel): + bl_label = "Shader" bl_context = "data" @classmethod @@ -412,10 +412,10 @@ class CyclesLamp_PT_nodes(CyclesButtonsPanel, Panel): layout = self.layout mat = context.lamp - panel_node_draw(layout, mat, 'OUTPUT_LAMP', 'Surface') + panel_node_draw(layout, mat, 'OUTPUT_LAMP', 'Shader') -class CyclesWorld_PT_surface(CyclesButtonsPanel, Panel): - bl_label = "Surface" +class CyclesWorld_PT_shader(CyclesButtonsPanel, Panel): + bl_label = "Shader" bl_context = "world" @classmethod @@ -426,39 +426,10 @@ class CyclesWorld_PT_surface(CyclesButtonsPanel, Panel): layout = self.layout mat = context.world - panel_node_draw(layout, mat, 'OUTPUT_WORLD', 'Surface') - -class CyclesWorld_PT_volume(CyclesButtonsPanel, Panel): - bl_label = "Volume" - bl_context = "world" - - @classmethod - def poll(cls, context): - return context.world and CyclesButtonsPanel.poll(context) - - def draw(self, context): - layout = self.layout - layout.active = False - - world = context.world - panel_node_draw(layout, world, 'OUTPUT_WORLD', 'Volume') - -class CyclesMaterial_PT_surface(CyclesButtonsPanel, Panel): - bl_label = "Surface" - bl_context = "material" + panel_node_draw(layout, mat, 'OUTPUT_WORLD', 'Shader') - @classmethod - def poll(cls, context): - return context.material and CyclesButtonsPanel.poll(context) - - def draw(self, context): - layout = self.layout - - mat = context.material - panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Surface') - -class CyclesMaterial_PT_volume(CyclesButtonsPanel, Panel): - bl_label = "Volume" +class CyclesMaterial_PT_shader(CyclesButtonsPanel, Panel): + bl_label = "Shader" bl_context = "material" @classmethod @@ -467,14 +438,9 @@ class CyclesMaterial_PT_volume(CyclesButtonsPanel, Panel): def draw(self, context): layout = self.layout - layout.active = False mat = context.material - cmat = mat.cycles - - panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Volume') - - layout.prop(cmat, "homogeneous_volume") + panel_node_draw(layout, mat, 'OUTPUT_MATERIAL', 'Shader') class CyclesMaterial_PT_displacement(CyclesButtonsPanel, Panel): bl_label = "Displacement" diff --git a/intern/cycles/blender/blender_shader.cpp b/intern/cycles/blender/blender_shader.cpp index c7eda0a0160..ad7dfb14c64 100644 --- a/intern/cycles/blender/blender_shader.cpp +++ b/intern/cycles/blender/blender_shader.cpp @@ -584,7 +584,7 @@ void BlenderSync::sync_materials() closure->input("Color")->value = get_float3(b_mat->diffuse_color()); out = graph->output(); - graph->connect(closure->output("BSDF"), out->input("Surface")); + graph->connect(closure->output("BSDF"), out->input("Closure")); } /* settings */ @@ -625,7 +625,7 @@ void BlenderSync::sync_world() closure->input("Color")->value = get_float3(b_world.horizon_color()); out = graph->output(); - graph->connect(closure->output("Background"), out->input("Surface")); + graph->connect(closure->output("Background"), out->input("Closure")); } shader->set_graph(graph); @@ -675,7 +675,7 @@ void BlenderSync::sync_lamps() closure->input("Strength")->value.x = b_lamp->energy()*10.0f; out = graph->output(); - graph->connect(closure->output("Emission"), out->input("Surface")); + graph->connect(closure->output("Emission"), out->input("Closure")); } shader->set_graph(graph); diff --git a/intern/cycles/kernel/kernel_shader.h b/intern/cycles/kernel/kernel_shader.h index c1bcbb067b5..7ca7f96d73b 100644 --- a/intern/cycles/kernel/kernel_shader.h +++ b/intern/cycles/kernel/kernel_shader.h @@ -482,7 +482,7 @@ __device void shader_eval_surface(KernelGlobals *kg, ShaderData *sd, #else #ifdef __SVM__ - svm_eval_nodes(kg, sd, SHADER_TYPE_SURFACE, randb, path_flag); + svm_eval_nodes(kg, sd, SHADER_TYPE_CLOSURE, randb, path_flag); #else bsdf_diffuse_setup(sd, &sd->closure); sd->closure.weight = make_float3(0.8f, 0.8f, 0.8f); @@ -500,7 +500,7 @@ __device float3 shader_eval_background(KernelGlobals *kg, ShaderData *sd, int pa #else #ifdef __SVM__ - svm_eval_nodes(kg, sd, SHADER_TYPE_SURFACE, 0.0f, path_flag); + svm_eval_nodes(kg, sd, SHADER_TYPE_CLOSURE, 0.0f, path_flag); #ifdef __MULTI_CLOSURE__ float3 eval = make_float3(0.0f, 0.0f, 0.0f); @@ -562,7 +562,7 @@ __device void shader_eval_volume(KernelGlobals *kg, ShaderData *sd, #ifdef __OSL__ OSLShader::eval_volume(kg, sd, randb, path_flag); #else - svm_eval_nodes(kg, sd, SHADER_TYPE_VOLUME, randb, path_flag); + svm_eval_nodes(kg, sd, SHADER_TYPE_CLOSURE, randb, path_flag); #endif #endif } diff --git a/intern/cycles/kernel/osl/nodes/CMakeLists.txt b/intern/cycles/kernel/osl/nodes/CMakeLists.txt index 7d37bb09d71..a1e420e8ac1 100644 --- a/intern/cycles/kernel/osl/nodes/CMakeLists.txt +++ b/intern/cycles/kernel/osl/nodes/CMakeLists.txt @@ -32,9 +32,8 @@ set(osl_sources node_musgrave_texture.osl node_blend_weight_texture.osl node_noise_texture.osl + node_output_closure.osl node_output_displacement.osl - node_output_surface.osl - node_output_volume.osl node_sky_texture.osl node_stucci_texture.osl node_texture_coordinate.osl diff --git a/intern/cycles/kernel/osl/nodes/node_output_surface.osl b/intern/cycles/kernel/osl/nodes/node_output_closure.osl index 6efaf91121b..075cf35f60b 100644 --- a/intern/cycles/kernel/osl/nodes/node_output_surface.osl +++ b/intern/cycles/kernel/osl/nodes/node_output_closure.osl @@ -18,8 +18,8 @@ #include "stdosl.h" -surface node_output_surface(closure color Surface = background()) +surface node_output_surface(closure color Closure = background()) { - Ci = Surface; + Ci = Closure; } diff --git a/intern/cycles/kernel/osl/nodes/node_output_volume.osl b/intern/cycles/kernel/osl/nodes/node_output_volume.osl deleted file mode 100644 index 18094242dc7..00000000000 --- a/intern/cycles/kernel/osl/nodes/node_output_volume.osl +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2011, Blender Foundation. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -#include "stdosl.h" - -volume node_output_volume(closure color Volume = background()) -{ - Ci = Volume; -} - diff --git a/intern/cycles/kernel/osl/osl_shader.cpp b/intern/cycles/kernel/osl/osl_shader.cpp index 18a8e974492..42e63552063 100644 --- a/intern/cycles/kernel/osl/osl_shader.cpp +++ b/intern/cycles/kernel/osl/osl_shader.cpp @@ -218,8 +218,8 @@ void OSLShader::eval_surface(KernelGlobals *kg, ShaderData *sd, float randb, int /* execute shader for this point */ int shader = sd->shader & SHADER_MASK; - if(kg->osl.surface_state[shader]) - ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.surface_state[shader]), *globals); + if(kg->osl.state[shader]) + ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.state[shader]), *globals); /* flatten closure tree */ sd->num_closure = 0; @@ -355,8 +355,8 @@ void OSLShader::eval_volume(KernelGlobals *kg, ShaderData *sd, float randb, int /* execute shader */ int shader = sd->shader & SHADER_MASK; - if(kg->osl.volume_state[shader]) - ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.volume_state[shader]), *globals); + if(kg->osl.state[shader]) + ctx->execute(OSL::pvt::ShadUseSurface, *(kg->osl.state[shader]), *globals); /* retrieve resulting closures */ sd->osl_closure.volume_sample_sum = 0.0f; diff --git a/intern/cycles/kernel/svm/svm.h b/intern/cycles/kernel/svm/svm.h index 62e02f1a01a..4e0ed25baea 100644 --- a/intern/cycles/kernel/svm/svm.h +++ b/intern/cycles/kernel/svm/svm.h @@ -166,8 +166,7 @@ __device_noinline void svm_eval_nodes(KernelGlobals *kg, ShaderData *sd, ShaderT switch(node.x) { case NODE_SHADER_JUMP: { - if(type == SHADER_TYPE_SURFACE) offset = node.y; - else if(type == SHADER_TYPE_VOLUME) offset = node.z; + if(type == SHADER_TYPE_CLOSURE) offset = node.y; else if(type == SHADER_TYPE_DISPLACEMENT) offset = node.w; else return; break; diff --git a/intern/cycles/kernel/svm/svm_types.h b/intern/cycles/kernel/svm/svm_types.h index baec3d7ac6e..fb52a923b0c 100644 --- a/intern/cycles/kernel/svm/svm_types.h +++ b/intern/cycles/kernel/svm/svm_types.h @@ -257,8 +257,7 @@ typedef enum NodeBlendWeightType { } NodeBlendWeightType; typedef enum ShaderType { - SHADER_TYPE_SURFACE, - SHADER_TYPE_VOLUME, + SHADER_TYPE_CLOSURE, SHADER_TYPE_DISPLACEMENT } ShaderType; diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index 9e7e2a8a81d..1d21e43217a 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -1945,8 +1945,7 @@ void BlendWeightNode::compile(OSLCompiler& compiler) OutputNode::OutputNode() : ShaderNode("output") { - add_input("Surface", SHADER_SOCKET_CLOSURE); - add_input("Volume", SHADER_SOCKET_CLOSURE); + add_input("Closure", SHADER_SOCKET_CLOSURE); add_input("Displacement", SHADER_SOCKET_FLOAT); } @@ -1964,10 +1963,8 @@ void OutputNode::compile(SVMCompiler& compiler) void OutputNode::compile(OSLCompiler& compiler) { - if(compiler.output_type() == SHADER_TYPE_SURFACE) - compiler.add(this, "node_output_surface"); - else if(compiler.output_type() == SHADER_TYPE_VOLUME) - compiler.add(this, "node_output_volume"); + if(compiler.output_type() == SHADER_TYPE_CLOSURE) + compiler.add(this, "node_output_closure"); else if(compiler.output_type() == SHADER_TYPE_DISPLACEMENT) compiler.add(this, "node_output_displacement"); } diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index b0173334c76..492529c30a2 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -102,7 +102,7 @@ void OSLShaderManager::device_update(Device *device, DeviceScene *dscene, Scene /* setup shader engine */ og->ss = ss; int background_id = scene->shader_manager->get_shader_id(scene->default_background); - og->background_state = og->surface_state[background_id]; + og->background_state = og->state[background_id]; og->use = true; tls_create(OSLGlobals::ThreadData, og->thread_data); @@ -128,8 +128,7 @@ void OSLShaderManager::device_free(Device *device, DeviceScene *dscene) tls_delete(OSLGlobals::ThreadData, og->thread_data); - og->surface_state.clear(); - og->volume_state.clear(); + og->state.clear(); og->displacement_state.clear(); og->background_state.reset(); } @@ -139,7 +138,7 @@ void OSLShaderManager::device_free(Device *device, DeviceScene *dscene) OSLCompiler::OSLCompiler(void *shadingsys_) { shadingsys = shadingsys_; - current_type = SHADER_TYPE_SURFACE; + current_type = SHADER_TYPE_CLOSURE; current_shader = NULL; background = false; } @@ -170,9 +169,7 @@ bool OSLCompiler::node_skip_input(ShaderNode *node, ShaderInput *input) depending on the current shader type */ if(node->name == ustring("output")) { - if(strcmp(input->name, "Surface") == 0 && current_type != SHADER_TYPE_SURFACE) - return true; - if(strcmp(input->name, "Volume") == 0 && current_type != SHADER_TYPE_VOLUME) + if(strcmp(input->name, "Closure") == 0 && current_type != SHADER_TYPE_CLOSURE) return true; if(strcmp(input->name, "Displacement") == 0 && current_type != SHADER_TYPE_DISPLACEMENT) return true; @@ -223,9 +220,7 @@ void OSLCompiler::add(ShaderNode *node, const char *name) * because "volume" and "displacement" don't work yet in OSL. the shaders * work fine, but presumably these values would be used for more strict * checking, so when that is fixed, we should update the code here too. */ - if(current_type == SHADER_TYPE_SURFACE) - ss->Shader("surface", name, id(node).c_str()); - else if(current_type == SHADER_TYPE_VOLUME) + if(current_type == SHADER_TYPE_CLOSURE) ss->Shader("surface", name, id(node).c_str()); else if(current_type == SHADER_TYPE_DISPLACEMENT) ss->Shader("surface", name, id(node).c_str()); @@ -346,6 +341,8 @@ void OSLCompiler::generate_nodes(const set<ShaderNode*>& nodes) current_shader->has_surface_emission = true; if(node->name == ustring("transparent")) current_shader->has_surface_transparent = true; + if(node->name == ustring("volume")) + current_shader->has_volume = true; } else nodes_done = false; @@ -365,15 +362,9 @@ void OSLCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty ShaderNode *output = graph->output(); set<ShaderNode*> dependencies; - if(type == SHADER_TYPE_SURFACE) { + if(type == SHADER_TYPE_CLOSURE) { /* generate surface shader */ - find_dependencies(dependencies, output->input("Surface")); - generate_nodes(dependencies); - output->compile(*this); - } - else if(type == SHADER_TYPE_VOLUME) { - /* generate volume shader */ - find_dependencies(dependencies, output->input("Volume")); + find_dependencies(dependencies, output->input("Closure")); generate_nodes(dependencies); output->compile(*this); } @@ -396,7 +387,7 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader) ShaderNode *output = (graph)? graph->output(): NULL; /* copy graph for shader with bump mapping */ - if(output->input("Surface")->link && output->input("Displacement")->link) + if(output->input("Closure")->link && output->input("Displacement")->link) if(!shader->graph_bump) shader->graph_bump = shader->graph->copy(); @@ -407,46 +398,29 @@ void OSLCompiler::compile(OSLGlobals *og, Shader *shader) current_shader = shader; - shader->has_surface = false; shader->has_surface_emission = false; shader->has_surface_transparent = false; shader->has_volume = false; shader->has_displacement = false; /* generate surface shader */ - if(graph && output->input("Surface")->link) { - compile_type(shader, shader->graph, SHADER_TYPE_SURFACE); - og->surface_state.push_back(ss->state()); + if(graph && output->input("Closure")->link) { + compile_type(shader, shader->graph, SHADER_TYPE_CLOSURE); + og->state.push_back(ss->state()); if(shader->graph_bump) { ss->clear_state(); - compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE); - og->surface_state.push_back(ss->state()); + compile_type(shader, shader->graph_bump, SHADER_TYPE_CLOSURE); + og->state.push_back(ss->state()); } else - og->surface_state.push_back(ss->state()); - - ss->clear_state(); - - shader->has_surface = true; - } - else { - og->surface_state.push_back(OSL::ShadingAttribStateRef()); - og->surface_state.push_back(OSL::ShadingAttribStateRef()); - } - - /* generate volume shader */ - if(graph && output->input("Volume")->link) { - compile_type(shader, shader->graph, SHADER_TYPE_VOLUME); - shader->has_volume = true; + og->state.push_back(ss->state()); - og->volume_state.push_back(ss->state()); - og->volume_state.push_back(ss->state()); ss->clear_state(); } else { - og->volume_state.push_back(OSL::ShadingAttribStateRef()); - og->volume_state.push_back(OSL::ShadingAttribStateRef()); + og->state.push_back(OSL::ShadingAttribStateRef()); + og->state.push_back(OSL::ShadingAttribStateRef()); } /* generate displacement shader */ diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index 6e827ec94bb..c0d450db22b 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -42,7 +42,6 @@ Shader::Shader() sample_as_light = true; homogeneous_volume = false; - has_surface = false; has_surface_transparent = false; has_surface_emission = false; has_volume = false; @@ -210,7 +209,7 @@ void ShaderManager::add_default(Scene *scene) closure->input("Color")->value = make_float3(0.8f, 0.8f, 0.8f); out = graph->output(); - graph->connect(closure->output("BSDF"), out->input("Surface")); + graph->connect(closure->output("BSDF"), out->input("Closure")); shader = new Shader(); shader->name = "default_surface"; @@ -228,7 +227,7 @@ void ShaderManager::add_default(Scene *scene) closure->input("Strength")->value.x = 0.0f; out = graph->output(); - graph->connect(closure->output("Emission"), out->input("Surface")); + graph->connect(closure->output("Emission"), out->input("Closure")); shader = new Shader(); shader->name = "default_light"; @@ -245,7 +244,7 @@ void ShaderManager::add_default(Scene *scene) closure->input("Color")->value = make_float3(0.8f, 0.8f, 0.8f); out = graph->output(); - graph->connect(closure->output("Background"), out->input("Surface")); + graph->connect(closure->output("Background"), out->input("Closure")); shader = new Shader(); shader->name = "default_background"; diff --git a/intern/cycles/render/shader.h b/intern/cycles/render/shader.h index 45efa123ef6..17ffc75924b 100644 --- a/intern/cycles/render/shader.h +++ b/intern/cycles/render/shader.h @@ -39,8 +39,8 @@ struct float3; /* Shader describing the appearance of a Mesh, Light or Background. * - * While there is only a single shader graph, it has three outputs: surface, - * volume and displacement, that the shader manager will compile and execute + * While there is only a single shader graph, it has two outputs: shader, + * displacement, that the shader manager will compile and execute * separately. */ class Shader { @@ -65,11 +65,10 @@ public: bool need_update_attributes; /* information about shader after compiling */ - bool has_surface; bool has_surface_emission; bool has_surface_transparent; - bool has_volume; bool has_displacement; + bool has_volume; /* requested mesh attributes */ AttributeRequestSet attributes; diff --git a/intern/cycles/render/svm.cpp b/intern/cycles/render/svm.cpp index a1687ae5e29..054989bbc28 100644 --- a/intern/cycles/render/svm.cpp +++ b/intern/cycles/render/svm.cpp @@ -107,7 +107,7 @@ SVMCompiler::SVMCompiler(ShaderManager *shader_manager_, ImageManager *image_man image_manager = image_manager_; sunsky = NULL; max_stack_use = 0; - current_type = SHADER_TYPE_SURFACE; + current_type = SHADER_TYPE_CLOSURE; current_shader = NULL; background = false; mix_weight_offset = SVM_STACK_INVALID; @@ -467,6 +467,8 @@ void SVMCompiler::generate_closure(ShaderNode *node, set<ShaderNode*>& done) current_shader->has_surface_emission = true; if(node->name == ustring("transparent")) current_shader->has_surface_transparent = true; + if(node->name == ustring("volume")) + current_shader->has_volume = true; /* end node is added outside of this */ } @@ -577,10 +579,8 @@ void SVMCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty ShaderNode *node = graph->output(); ShaderInput *clin = NULL; - if(type == SHADER_TYPE_SURFACE) - clin = node->input("Surface"); - else if(type == SHADER_TYPE_VOLUME) - clin = node->input("Volume"); + if(type == SHADER_TYPE_CLOSURE) + clin = node->input("Closure"); else if(type == SHADER_TYPE_DISPLACEMENT) clin = node->input("Displacement"); else @@ -599,15 +599,9 @@ void SVMCompiler::compile_type(Shader *shader, ShaderGraph *graph, ShaderType ty if(clin->link) { bool generate = false; - if(type == SHADER_TYPE_SURFACE) { + if(type == SHADER_TYPE_CLOSURE) { /* generate surface shader */ generate = true; - shader->has_surface = true; - } - else if(type == SHADER_TYPE_VOLUME) { - /* generate volume shader */ - generate = true; - shader->has_volume = true; } else if(type == SHADER_TYPE_DISPLACEMENT) { /* generate displacement shader */ @@ -636,7 +630,7 @@ void SVMCompiler::compile(Shader *shader, vector<int4>& global_svm_nodes, int in /* copy graph for shader with bump mapping */ ShaderNode *node = shader->graph->output(); - if(node->input("Surface")->link && node->input("Displacement")->link) + if(node->input("Closure")->link && node->input("Displacement")->link) if(!shader->graph_bump) shader->graph_bump = shader->graph->copy(); @@ -647,30 +641,23 @@ void SVMCompiler::compile(Shader *shader, vector<int4>& global_svm_nodes, int in current_shader = shader; - shader->has_surface = false; shader->has_surface_emission = false; shader->has_surface_transparent = false; shader->has_volume = false; shader->has_displacement = false; /* generate surface shader */ - compile_type(shader, shader->graph, SHADER_TYPE_SURFACE); + compile_type(shader, shader->graph, SHADER_TYPE_CLOSURE); global_svm_nodes[index*2 + 0].y = global_svm_nodes.size(); global_svm_nodes[index*2 + 1].y = global_svm_nodes.size(); global_svm_nodes.insert(global_svm_nodes.end(), svm_nodes.begin(), svm_nodes.end()); if(shader->graph_bump) { - compile_type(shader, shader->graph_bump, SHADER_TYPE_SURFACE); + compile_type(shader, shader->graph_bump, SHADER_TYPE_CLOSURE); global_svm_nodes[index*2 + 1].y = global_svm_nodes.size(); global_svm_nodes.insert(global_svm_nodes.end(), svm_nodes.begin(), svm_nodes.end()); } - /* generate volume shader */ - compile_type(shader, shader->graph, SHADER_TYPE_VOLUME); - global_svm_nodes[index*2 + 0].z = global_svm_nodes.size(); - global_svm_nodes[index*2 + 1].z = global_svm_nodes.size(); - global_svm_nodes.insert(global_svm_nodes.end(), svm_nodes.begin(), svm_nodes.end()); - /* generate displacement shader */ compile_type(shader, shader->graph, SHADER_TYPE_DISPLACEMENT); global_svm_nodes[index*2 + 0].w = global_svm_nodes.size(); |