Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-03-13 10:39:51 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-03-13 10:39:51 +0300
commit028580fd1ed38efb85bef35053685e3e8e69ad9b (patch)
treed5844e1ade291a64dba82d620f0c17f2c80fef2c /intern
parentce08d0681baa1fc5fa5322d4ebf9d3fa97499c84 (diff)
parent3106f18176f49a3b388e8e1f587d46d232a4a35e (diff)
Merge branch 'master' into blender2.8
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/blender/blender_object.cpp11
-rw-r--r--intern/cycles/render/nodes.cpp19
-rw-r--r--intern/cycles/render/nodes.h2
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;
}