diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-03-13 10:39:51 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-03-13 10:39:51 +0300 |
commit | 028580fd1ed38efb85bef35053685e3e8e69ad9b (patch) | |
tree | d5844e1ade291a64dba82d620f0c17f2c80fef2c /intern | |
parent | ce08d0681baa1fc5fa5322d4ebf9d3fa97499c84 (diff) | |
parent | 3106f18176f49a3b388e8e1f587d46d232a4a35e (diff) |
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/blender/blender_object.cpp | 11 | ||||
-rw-r--r-- | intern/cycles/render/nodes.cpp | 19 | ||||
-rw-r--r-- | intern/cycles/render/nodes.h | 2 |
3 files changed, 28 insertions, 4 deletions
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp index d949eaf3009..be4214ede65 100644 --- a/intern/cycles/blender/blender_object.cpp +++ b/intern/cycles/blender/blender_object.cpp @@ -411,7 +411,7 @@ Object *BlenderSync::sync_object(BL::Depsgraph& b_depsgraph, if(scene->need_motion() == Scene::MOTION_BLUR) { motion_steps = object_motion_steps(b_parent, b_ob); - if(object_use_deform_motion(b_parent, b_ob)) { + if(motion_steps && object_use_deform_motion(b_parent, b_ob)) { mesh->motion_steps = motion_steps; mesh->use_motion_blur = true; } @@ -422,10 +422,13 @@ Object *BlenderSync::sync_object(BL::Depsgraph& b_depsgraph, } object->motion.resize(motion_steps, transform_empty()); - object->motion[motion_steps/2] = tfm; - for(size_t step = 0; step < motion_steps; step++) { - motion_times.insert(object->motion_time(step)); + if(motion_steps) { + object->motion[motion_steps/2] = tfm; + + for(size_t step = 0; step < motion_steps; step++) { + motion_times.insert(object->motion_time(step)); + } } } diff --git a/intern/cycles/render/nodes.cpp b/intern/cycles/render/nodes.cpp index e36a75f59b1..d732189af66 100644 --- a/intern/cycles/render/nodes.cpp +++ b/intern/cycles/render/nodes.cpp @@ -5785,6 +5785,15 @@ DisplacementNode::DisplacementNode() { } +void DisplacementNode::constant_fold(const ConstantFolder& folder) +{ + if(folder.all_inputs_constant()) { + if((height - midlevel == 0.0f) || (scale == 0.0f)) { + folder.make_zero(); + } + } +} + void DisplacementNode::compile(SVMCompiler& compiler) { ShaderInput *height_in = input("Height"); @@ -5836,6 +5845,16 @@ VectorDisplacementNode::VectorDisplacementNode() { } +void VectorDisplacementNode::constant_fold(const ConstantFolder& folder) +{ + if(folder.all_inputs_constant()) { + if((vector == make_float3(0.0f, 0.0f, 0.0f) && midlevel == 0.0f) || + (scale == 0.0f)) { + folder.make_zero(); + } + } +} + void VectorDisplacementNode::attributes(Shader *shader, AttributeRequestSet *attributes) { if(shader->has_surface && space == NODE_NORMAL_MAP_TANGENT) { diff --git a/intern/cycles/render/nodes.h b/intern/cycles/render/nodes.h index 33df2866341..58c3d472cd3 100644 --- a/intern/cycles/render/nodes.h +++ b/intern/cycles/render/nodes.h @@ -1063,6 +1063,7 @@ public: class DisplacementNode : public ShaderNode { public: SHADER_NODE_CLASS(DisplacementNode) + void constant_fold(const ConstantFolder& folder); virtual int get_feature() { return NODE_FEATURE_BUMP; } @@ -1079,6 +1080,7 @@ public: SHADER_NODE_CLASS(VectorDisplacementNode) void attributes(Shader *shader, AttributeRequestSet *attributes); bool has_attribute_dependency() { return true; } + void constant_fold(const ConstantFolder& folder); virtual int get_feature() { return NODE_FEATURE_BUMP; } |