Bone Envelope Distance "quadratic decay" not functioning #50392

Closed
opened 2017-01-09 04:24:03 +01:00 by Chris Lee · 14 comments

System Information
Windows 10, NVIDIA GeForce GTX 970M

Blender Version
Broken: 2.78a
Worked: unknown, but prior to 2.68a

Short description of error
Bone envelope distance should have a falloff to zero influence, but currently it has full influence up until the end of the distance envelope, then it has zero influence. There is no gradual falloff. I am looking at using this for some procedural bone influence controls and found it not working as expected.
Researching further I found this post on StackExchange saying that it worked on a version prior to 2.68a:
http://blender.stackexchange.com/questions/40242/bone-falloff-not-working/70891#70891
Here is a screenshot from that post:
bone envelope distance.jpg

I did some further testing with envelopes of different sizes, both individually and overlapping, and there is no falloff within the bone envelope distance.
#BoneEnvelopeDistanceBug.blend

According to the current documentation in the manual, the expected behaviour is for the envelope is:
"The outside area, materialized by the lighter part around the bone, and controlled by the Distance setting. Inside this zone, the geometry is less and less affected by the bone as it goes away by following a quadratic decay."
https://www.blender.org/manual/rigging/armatures/skinning/obdata.html#bone-deform-options

This quadratic decay is not currently functional.

Exact steps for others to reproduce the error
Using this file which includes a subdivided cylinder and some bones:
#BoneEnvelopeDistanceBug-Steps.blend

  • Select the cylinder, shift select the bones.
  • Ctrl P and select "armature deform" (no groups or weights).
  • Select the cylinder and uncheck vertex weights, check bone envelopes.
  • Select armature, go to pose mode, move bones.

Test to see flat falloff on envelope

**System Information** Windows 10, NVIDIA GeForce GTX 970M **Blender Version** Broken: 2.78a Worked: unknown, but prior to 2.68a **Short description of error** Bone envelope distance should have a falloff to zero influence, but currently it has full influence up until the end of the distance envelope, then it has zero influence. There is no gradual falloff. I am looking at using this for some procedural bone influence controls and found it not working as expected. Researching further I found this post on StackExchange saying that it worked on a version prior to 2.68a: http://blender.stackexchange.com/questions/40242/bone-falloff-not-working/70891#70891 Here is a screenshot from that post: ![bone envelope distance.jpg](https://archive.blender.org/developer/F430335/bone_envelope_distance.jpg) I did some further testing with envelopes of different sizes, both individually and overlapping, and there is no falloff within the bone envelope distance. [#BoneEnvelopeDistanceBug.blend](https://archive.blender.org/developer/F430337/_BoneEnvelopeDistanceBug.blend) According to the current documentation in the manual, the expected behaviour is for the envelope is: "The outside area, materialized by the lighter part around the bone, and controlled by the Distance setting. Inside this zone, the geometry is less and less affected by the bone as it goes away by following a quadratic decay." https://www.blender.org/manual/rigging/armatures/skinning/obdata.html#bone-deform-options This quadratic decay is not currently functional. **Exact steps for others to reproduce the error** Using this file which includes a subdivided cylinder and some bones: [#BoneEnvelopeDistanceBug-Steps.blend](https://archive.blender.org/developer/F430344/_BoneEnvelopeDistanceBug-Steps.blend) - Select the cylinder, shift select the bones. - Ctrl P and select "armature deform" (no groups or weights). - Select the cylinder and uncheck vertex weights, check bone envelopes. - Select armature, go to pose mode, move bones. # Test to see flat falloff on envelope
Author

Changed status to: 'Open'

Changed status to: 'Open'
Author

Added subscriber: @ChrisLee

Added subscriber: @ChrisLee

Added subscriber: @zeauro

Added subscriber: @zeauro

The decay exist. But bones are not acting like hook modifiers.

Weight groups are used by armature to set the priority of one bone upon another one.
If vertex belongs to only one bone, there is no question : it follows the bone.
If vertex is influenced by two bones, it follows one more than another according to weight.

It works as is for painted weights or weights interpolated from envelopes distances.

bone_enveloppe.blend

The decay exist. But bones are not acting like hook modifiers. Weight groups are used by armature to set the priority of one bone upon another one. If vertex belongs to only one bone, there is no question : it follows the bone. If vertex is influenced by two bones, it follows one more than another according to weight. It works as is for painted weights or weights interpolated from envelopes distances. [bone_enveloppe.blend](https://archive.blender.org/developer/F430614/bone_enveloppe.blend)
Author

Hello Ronan,
thank you for getting back to me. I understand what you are saying, this is not the same as a hook modifier, an additional bone would be needed to get the desired falloff to work. I know envelope weights should not be compared directly with automatic weights, but additional bones or vertex groups are not required to get auto weights to falloff smoothly. Putting that aside, if we add another bone to get the overlapping influences between bones, then we still do not get a smooth falloff. I have tested with many simple scenes and found no result has a smooth transition, so I believe there is still a bug here.

I have created another file with three small bones on one side and one big bone on the other side of the cylinder, then moved the three bones away from the cylinder. In the first example, with automatic weights we get a good result (not surprising). The second example uses just the bone envelopes, with no vertex groups and we see where the envelopes overlap causes some peaks and troughs on the cylinder surface. The third example has envelopes converted into vertex groups with the same result (obviously), while the fourth and fifth examples have had "normalise all" applied with different vertex groups active, with different results.

#BoneEnvelopeDistanceBug-Comparison.blend

The only result that has an acceptably smooth transition between bones is the automatic weights. I would have thought that there is some way to get a smooth transition between bone envelopes, but the way it currently is provides no practical use.

The bone envelopes could be used in conjunction with scripted rigging to assign bones and control influence on vertices through the envelopes via python. Manual weight painting may not always be an option, so how can we get the envelopes to interact with each other and return smooth results on the mesh?

Hello Ronan, thank you for getting back to me. I understand what you are saying, this is not the same as a hook modifier, an additional bone would be needed to get the desired falloff to work. I know envelope weights should not be compared directly with automatic weights, but additional bones or vertex groups are not required to get auto weights to falloff smoothly. Putting that aside, if we add another bone to get the overlapping influences between bones, then we still do not get a smooth falloff. I have tested with many simple scenes and found no result has a smooth transition, so I believe there is still a bug here. I have created another file with three small bones on one side and one big bone on the other side of the cylinder, then moved the three bones away from the cylinder. In the first example, with automatic weights we get a good result (not surprising). The second example uses just the bone envelopes, with no vertex groups and we see where the envelopes overlap causes some peaks and troughs on the cylinder surface. The third example has envelopes converted into vertex groups with the same result (obviously), while the fourth and fifth examples have had "normalise all" applied with different vertex groups active, with different results. [#BoneEnvelopeDistanceBug-Comparison.blend](https://archive.blender.org/developer/F431206/_BoneEnvelopeDistanceBug-Comparison.blend) The only result that has an acceptably smooth transition between bones is the automatic weights. I would have thought that there is some way to get a smooth transition between bone envelopes, but the way it currently is provides no practical use. The bone envelopes could be used in conjunction with scripted rigging to assign bones and control influence on vertices through the envelopes via python. Manual weight painting may not always be an option, so how can we get the envelopes to interact with each other and return smooth results on the mesh?

The influence of the envelope is relative to its size and distance.
Basically, modifying any setting in Deform panel of the bone will change the result.
Other choïces than the one done in your file can give smoother results.

For example, ideally, in your file, head and tail of a bone should have same envelope radius.
And if you try to use envelope to obtain vertex groups useable by armature modifier, you have to do it with a skeleton in rest pose. Then, you have to check Multiply option in Deform of each bone to use envelope to compensate bulges from these weight groups.

Result should not be bad. But it can be smoother by using a corrective smooth modifier.
In fact, corrective smooth modifier is so good that you can avoïd to create vertex groups and use only envelopes.
https://www.blender.org/manual/modeling/modifiers/deform/corrective_smooth.html

The influence of the envelope is relative to its size and distance. Basically, modifying any setting in Deform panel of the bone will change the result. Other choïces than the one done in your file can give smoother results. For example, ideally, in your file, head and tail of a bone should have same envelope radius. And if you try to use envelope to obtain vertex groups useable by armature modifier, you have to do it with a skeleton in rest pose. Then, you have to check Multiply option in Deform of each bone to use envelope to compensate bulges from these weight groups. Result should not be bad. But it can be smoother by using a corrective smooth modifier. In fact, corrective smooth modifier is so good that you can avoïd to create vertex groups and use only envelopes. https://www.blender.org/manual/modeling/modifiers/deform/corrective_smooth.html

Added subscriber: @ttelos

Added subscriber: @ttelos

A case where smooth-envelope falloff is crucial, with no vertex groups desired:

A ripple effect similar to how snakes advance, or snails, or sea slugs.
No, not a wave modifier. The point here is to have fine control over movement: forward, backward, sideways,
and a straightforward way to achieve that is by an armature moving with respect to the object it deforms!
Vertex groups are fixed with respect to the object to be affected; that's not what we want.
What we want is a ripple through the object, as if a vertex group were being smoothly re-defined.

Chris Lee's screenshot shows the abrupt falloff clearly,
and I attest that the problem persists in recent builds (e.g. Jan 18th 2017) of Blender 2.78,
and even on the Experimental Branch build of Jan 15th. (Mac OS)

**A case where smooth-envelope falloff is crucial, with no vertex groups desired:** A ripple effect similar to how snakes advance, or snails, or sea slugs. No, not a wave modifier. The point here is to have fine control over movement: forward, backward, sideways, and a straightforward way to achieve that is by an *armature moving with respect to the object* it deforms! Vertex groups are fixed with respect to the object to be affected; that's not what we want. What we want is a ripple *through* the object, as if a vertex group were being smoothly re-defined. Chris Lee's screenshot shows the abrupt falloff clearly, and I attest that the problem persists in recent builds (e.g. Jan 18th 2017) of Blender 2.78, and even on the Experimental Branch build of Jan 15th. (Mac OS)

Chris Lee's screenshot shows the abrupt falloff clearly,
and I attest that the problem persists in recent builds (e.g. Jan 18th 2017) of Blender 2.78,
and even on the Experimental Branch build of Jan 15th. (Mac OS)

As I explained it, Chris Lee's screenshot and .blend file example are the results of a misconception of how envelope influence works in Blender.
Open the .blend file I posted in my comment. It should prove that envelope influence decay can be observed when influences of two bones are overlapping.

The point here is to have fine control over movement: forward, backward, sideways,
and a straightforward way to achieve that is by an armature moving with respect to the object it deforms!
Vertex groups are fixed with respect to the object to be affected; that's not what we want.
What we want is a ripple through the object, as if a vertex group were being smoothly re-defined.

Envelope decay is not use to define a slow parenting relation.
It does not mean a delay between bone movement and vertices movement.
It is just used to set the priority between bones.
Influence defined by envelope at rest pose stays the same when armature takes a new pose.
It will be modified only if settings in deform panel are animated.

You will need a rig more complex than a simple chain of bones and use other bones driven for that ripple.
In fact, it is maybe easier to achieve what you want by using vertex groups and vertex weights modifiers rather than envelopes.

> Chris Lee's screenshot shows the abrupt falloff clearly, > and I attest that the problem persists in recent builds (e.g. Jan 18th 2017) of Blender 2.78, > and even on the Experimental Branch build of Jan 15th. (Mac OS) As I explained it, Chris Lee's screenshot and .blend file example are the results of a misconception of how envelope influence works in Blender. Open the .blend file I posted in my comment. It should prove that envelope influence decay can be observed when influences of two bones are overlapping. > The point here is to have fine control over movement: forward, backward, sideways, > and a straightforward way to achieve that is by an armature moving with respect to the object it deforms! > Vertex groups are fixed with respect to the object to be affected; that's not what we want. > What we want is a ripple through the object, as if a vertex group were being smoothly re-defined. Envelope decay is not use to define a slow parenting relation. It does not mean a delay between bone movement and vertices movement. It is just used to set the priority between bones. Influence defined by envelope at rest pose stays the same when armature takes a new pose. It will be modified only if settings in deform panel are animated. You will need a rig more complex than a simple chain of bones and use other bones driven for that ripple. In fact, it is maybe easier to achieve what you want by using vertex groups and vertex weights modifiers rather than envelopes.
Member

Added subscriber: @Blendify

Added subscriber: @Blendify
Member

As stated by @zeauro this is not a bug.

As stated by @zeauro this is not a bug.
Member

Changed status from 'Open' to: 'Archived'

Changed status from 'Open' to: 'Archived'
Aaron Carlisle self-assigned this 2017-02-02 07:17:18 +01:00

Added subscriber: @maxtux

Added subscriber: @maxtux

by default in both blender and 3ds max there is a curve in the falloff of the envelope but in max there is a way to switch to linear, how to do this in blender? Thanks.NRWo2.png

by default in both blender and 3ds max there is a curve in the falloff of the envelope but in max there is a way to switch to linear, how to do this in blender? Thanks.![NRWo2.png](https://archive.blender.org/developer/F10159193/NRWo2.png)
Sign in to join this conversation.
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#50392
No description provided.