Surface Deform before a Hair Guide node (e.g. Clump/Curl) jitters when surface is animated (placing the Surface Deform after seems fine) #109285
Labels
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
4 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#109285
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
System Information
Operating system: Windows 11 Pro (Windows-10-10.0.22621-SP0 64 Bits)
Graphics card: Intel(R) UHD Graphics 770 Intel 4.5.0 - Build 31.0.101.3959
Blender Version
Broken: version: 3.5.1, branch: blender-v3.5-release, commit date: 2023-04-24 18:11, hash:
e1ccd9d4a1d3
Worked: No versions that I'm aware of.
Short description of error
Moving an object with hair assets causes the hair to move randomly. In the example file the issue seems most pronounced when using the Curl Hair Curves modifier and bones to move the object, however the same results can be reproduced in a more complex scene with the Interpolate Hair Curves, Frizz Hair Curves and Hair Curves Noise modifiers (and possibly others).
Exact steps for others to reproduce the error
[Based on the default startup or an attached .blend file (as simple as possible)]
Hair Jitterto Animated Hair JittersSeems the nodegrous with guides are affected: https://docs.blender.org/manual/en/4.0/modeling/geometry_nodes/hair/guides/index.html
If you move the
Surface Deform
after such node, the jitter will go away.Not sure though if this will give you the same results in all cases.
Not quite sure what is causing this (the nodegroups are quite complex), will confirm for now though (since this seems like unexpected behavior to me).
Maybe @SimonThommes or @DanielBystedt can comment? (feel free to close if this is expected behaior).
Animated Hair Jittersto Surface Deform before a Hair Guide node (e.g. Clump/Curl) jitters when surface is animated (placing the Surface Deform after seems fine)This is actually expected behavior. This is the case for all nodes, not just the guide ones, though I put a large emphasis on trying to retain as much stability as currently possible.
Just logically, if you do the deformation before other procedural operations those will be influenced, so the deformation should always come last, if the desired result is stability.
If this isn't clear enough, it might be worth emphasizing in the docs, but the reason this is unclear right now is also, that deformation is only supported in a rudimentary way right now.
There are still some open questions on how to present this in a more clear way to the user, which will need to be addressed, when hair dynamics are properly supported. But for now that is something the user needs to manage themselves properly.
Note: The
Add Fur
operator gives the proper example setup with the deform modifier at the end of the stack.OK, thx explaining, will close then.
Making this clearer in the docs would still be good in my opinion.
Unfortunately this doesn't resolve the issue in my main project; moving Surface Deform to the bottom of the modifier stack only makes a mess of the interpolated hair positions (see .gifs). I'm now working to produce a cut-down version of this file.
Ok I've managed to reproduce it in the original file with Surface Deform at the bottom of the stack, by reconfiguring it as follows:
Enabling both Shrinkwrap Hair Curves and Frizz Hair Curves causes some twitching, while Interpolate Hair Curves invokes more severe motion. It seems as though the object's Surface Deform modifier may be in conflict with the Surface Deform modifier on the hair.
Incidentally, this configuration is necessary for applying smaller portions of hair (such as scalp hair or eyebrows) to a larger object (such as a body) to reduce the surface area on which the calculations need to be made, as well as for easily transferring hair to other characters.
Probably related: #107856
Well, now that part is a different issue. The shwrinkwrap modifier takes the deformed mesh as an input before the curves are deformed, thus leading to instability. Something we could do for consistency is to also add a rest position toggle to this node, to use the undeformed scalp mesh, another thing would be to potentially turn on the
Surface Rest Position
toggle by default. I'm actually not sure right now why we ended up not doing that. I don't see these as crucial enough of a change for 3.6 though.@ChrisJones
For your specific issue: Make sure that the
Surface Rest Position
toggle is enabled in the interpolate modifier. For the shrinkwrap modifier, you need to either do it after the surface deform, or use an undeformed version of the scalp mesh.Essentially: Whatever comes before the surface deform needs to use the base mesh in rest position, whatever comes after needs to use the deformed position. Whenever you reference an object that will by default be used in its final deformed state, but the
Surface Rest Position
toggle will instead use the undeformed version to avoid specifically the issue you are experiencing.So for now I'd classify this as a user error/known issue, as the right version of the base mesh needs be used in the right context. Ideally the user wouldn't need to worry about any of that in the first place though. And right now it isn't very obvious to the user what even needs to be done.
There is a note in the manual wherever the Surface Rest Position toggle appears, but the need for this makes the system quite fragile and not very intuitive. Again, the Add Fur operator also takes care of this in the setup as an example.
https://docs.blender.org/manual/en/latest/modeling/geometry_nodes/hair/generation/interpolate_hair_curves.html
Overall the situation regarding this right now is less than ideal, as it still requires a more advanced understanding of the system for the user, for something that could also just be inferred by the system. This is part of the issues I mentioned that we need to figure out to fully support deformation and dynamics with the new system, along with a list of other related issues.
Just to be clear, this has nothing to to with the modifiers on the base mesh, just with deformation in general.
@ChengduLittleA Pretty sure this issue is not directly related.
@JacquesLucke @dfelinto
I don't recall if this overall situation is something we already meant to prioritize for 4.0. We definitely talked about these things in the past though regarding the new system not fully supporting animation/dynamics yet. Question is how and when we can follow up on that.
Furthermore, I've found that moving the Surface Deform modifier after the Interpolate Hair Curves modifier on the vellus hair (which is attached directly to the main body object) throws an "Invalid surface UVs" error, and consequently the interpolated hairs ripple and disappear on the model. It's possible this is caused by an unrelated issue, but nonetheless I've stripped the file down to a small section, and the behaviour can be observed by playing the animation and shifting Surface Deform above/below Interpolate Hair Curves.
The only recourse available in this instance is to keep Interpolate Hair Curves after Surface Deform, which means modifiers like Frizz and Noise have to go before Interpolate Hair Curves, and that's no good because then they only broadly affect the guide hairs instead of the individual interpolated ones.
[Edit] @SimonThommes Sorry I missed your responses as I was busy with this comment, so I'll follow up in regard to those if necessary - thanks!
That's yet another unrelated issue with the subdivision surface modifiers UV smoothing, which can only be done on the mesh and leaves some of the curves without proper mapping. That issue is documented here: https://docs.blender.org/manual/en/3.5/modeling/geometry_nodes/curve/operations/deform_curves_on_surface.html
As I said, there is a list of known issues related to this topic, which is why we need to invest more work into this before we can say that animation and dynamics are fully supported.
Fair enough, in that case perhaps I'll revisit the hair system once it's animation ready. If it's of any benefit in the meantime, I'll address your suggestions and summarise my experience with the hair assets in relation to my project:
Enabling Surface Rest Position in the Interpolate Hair Curves modifier detaches the hair from its surface, unless it has been added via the Add Fur operator.
The "Invalid Surface UVs" error is unavoidable unless the Surface Deform modifier is before Interpolate Hair Curves, even when using the Add Fur operator or changing the object's UV smoothing.
If Surface Deform is before Interpolate Hair Curves, it makes the interpolated hairs jitter.
If Surface Deform is after Interpolate Hair Curves, it still makes the hairs jitter, and adds a rippling effect to the hair length.
In short, the hair assets are fine for rendering stills, but I can't find any configuration that keeps the hair attached and static if the object is moving. Particle hair works without issue the same model however.
@ChrisJones Thanks for providing the summary.
I'm a bit confused by this point, that might be another bug. Maybe this part is indeed related to #107856
Could you confirm whether this issue persists when the subdiv modifier is applied? And if so create a separate report for that?
In that case I'm not sure whether we already have this on the radar. Would be good to also open this as an issue.
So is this with the rest position toggle off then?
In theory (and to to my experience in practice), the aspect of keeping the hairs stable and consistent with the hair deformation works fine when the rest position toggle is used and the modifier order does the deformation last. It didn't become clear to me whether this was not what you were experiencing or whether you didn't try it because of the problem with the attachment.
It does indeed persist, and can be verified by applying the Subsurf modifier and enabling Surface Rest Position in the Vellus.blend file above. I've opened a new report: #109398
The error can also be reproduced in the Vellus file by selecting the Body object and Adding Curve > Fur. It goes away when applying Subsurf though, so I don't know whether that means it's related to #107856 or not. Nonetheless I've added another report (#109401)
Meanwhile, I discovered the UVs had disappeared from the scalp object on my main file, and I can't apply any UVs to it for some reason. So I duplicated a new one from the main mesh and added new hair, and with Surface Deform at the top of the modifier stack the jittering stops far as I can tell. It's still there with Surface Deform at the bottom though, so I think the original point of this report still remains valid. Perhaps the title should be updated to reflect this?
I spoke too soon... I've added the Hair Curves Noise asset to the new hair, and the problem is back - except now it's more of a slower wavy effect - or faster if the Scale value is smaller, which seems to suggest that the noise is operating in world space instead of locally (indicating yet another separate issue I guess).
Also forgot to reply to this:
Correct, it jitters regardless of whether it's on or off.
Unfortunately I don't have time to look into any of this in more detail at the moment. I have the suspicion that there might still be more misunderstandings involved, but regardless, as I pointed out, this comes down to the currently limited support for animation, which is known to be an issue that will need to be resolved before we add dynamics.
We'll revisit the mentioned topics then and its useful to have some files to look at!
Considering everything I'll close this as a known issue for now
Just noting that (for the time being) you could of course do the groom in GN, then convert to the old particle system for animation