Maniphest T100216

Curve Tilt Rotation Problelm
Closed, Archived

Assigned To
None
Authored By
adam earle (adamearle)
Aug 5 2022, 8:41 AM
Tags
  • BF Blender
Subscribers
adam earle (adamearle)
Hans Goudey (HooglyBoogly)
Omar Emara (OmarSquircleArt)
Pratik Borhade (PratikPB2123)

Description

System Information
Computer specs:

Screen - Huion
            - Viano TV

Operating System - 64 bit Windows 10 Pro

  • Version 4
  • Pen Touch Support

    Processor - Intel Core i7-8700k CPU @3.70GHz Ram - 32 GB Graphics card - NVIDIA GeForce GTX 1070
    • NVIDIA GeForce GTX 960

Blender Version
Broken: version: 3.3.0 Beta, branch: master, commit date: 2022-08-02 18:01, hash: rBead8260a49de
Worked: Pretty sure this has been broken from day dot of implementation

Short description of error
When drawing with curves he Tilt messes up

Exact steps for others to reproduce the error
Create new object
Edit mode
Draw lots of strokes

Here is a project file and video to explain


Related Objects

Event Timeline

adam earle (adamearle) created this task.Aug 5 2022, 8:41 AM
Pratik Borhade (PratikPB2123) added a subscriber: Pratik Borhade (PratikPB2123).Aug 5 2022, 9:35 AM
Omar Emara (OmarSquircleArt) changed the task status from Needs Triage to Needs Information from User.Aug 5 2022, 9:47 AM
Omar Emara (OmarSquircleArt) added a subscriber: Omar Emara (OmarSquircleArt).

I suspect this is an expected ambiguity in the computation of the tilt twist method. This behavior is also consistent throughout versions back to 2.83, so it is not a regression.
As far as I can tell, the only way to remove this ambiguity is to draw curves on the XY plane (From the top view) and use the Z-Up Twist method in the curve.
Would you say this is a satisfactory solution?

Omar Emara (OmarSquircleArt) added a comment.Aug 5 2022, 9:54 AM

To elaborate, the default twist method is Minimum, which tries to minimize the change of the tangent of the curve start from its first segment.
If the start of your spline was drawn slightly horizontal and the rest was vertical, the curves will be drawn facing the view, because then the tangent will be perpendicular.
However, if the start of your spline was drawn mostly vertical and the rest was whatever, the curves will be drawn perpendicular to the view, because then the tangent will be going into the view.

Z-Up will always use the Z axis to compute the tangent, so it will give consistent results assuming you draw to the perpendicular XY plane.

adam earle (adamearle) added a comment.Aug 5 2022, 4:28 PM

That's pretty impressive that you have managed to work that out. Maybe this can't be called a bug. It seems like it hasn't been tested enough and it has managed to slip through the cracks till now.

The suggestion that you had about drawing on the XY plane seems to be the best option.

A few things to think about.
How would the user know this or work it out?
Perhaps this is something that should be exposed for the user to decide what axis they want to draw on.
Locking this off to one axis is limiting the use of the curves for animation, modeling, and rigging.

For instance, we have been writing an addon to give to the community for free that enables the user to work with curves like grease pencil. The biggest difference is we can do frame by frame and we have automatic tweening because we are using curves. The great thing about working with curves is that it works more closely with the way the rest of Blender works with many more advantages ie EEVEE materials and the ability to rig with curves using modifiers. The mental overhead so far seems to be much simpler for 2D animators than grease pencil. We are still in alpha.

Soooo what is the best way forward from here?

adam earle (adamearle) added a comment.Aug 5 2022, 5:12 PM

This is a default curve with an extrude. Currently on creation the surface faces the front. This could be contributing to the misleading nature of how the user must interact with the curve for it to perform correctly. Maybe having the surface run along the Z axis on creation will help the user to know that they have to draw from only the top view.

Perhaps the default rotation should be set on the extruding. Perhaps a simple XY or Z selection button. I'm still not sure how keeping it in its current state is going to help a user.

The lazy way out of this is a tooltip. That might not be the best solution you think?

Omar Emara (OmarSquircleArt) added a comment.Aug 5 2022, 5:30 PM

How would the user know this or work it out?

I do a agree that this is poorly documented or not documented at all. Would adding a detailed demonstration in the manual be satisfactory for now?

Perhaps this is something that should be exposed for the user to decide what axis they want to draw on.

Twisting is computed based on a global curve setting, it is not set when drawing per spline, so this probably can't be a drawing option similar to GP.

Locking this off to one axis is limiting the use of the curves for animation, modeling, and rigging.

I guess adding extra twisting methods can be added, including adding X and Y twisting in addition to Z.

Maybe having the surface run along the Z axis on creation will help the user to know that they have to draw from only the top view.

Changing the behavior without introducing extra controls is probably not possible due to backward compatibility concerns.

The lazy way out of this is a tooltip. That might not be the best solution you think?

I think a tool-tip is probably not sufficient to explain the behavior.



Since this is not exactly a bug, it probably will not be handled as part of the bug tracker. So the best course of action would be for you to create a design document that explains the intended behavior and present it to the module.

adam earle (adamearle) added a comment.Aug 5 2022, 5:58 PM

I am kinda tempted to call it a bug.

When drawing outside of the view that was mentioned, drawing with curves works most of the time though sometimes randomly misbehaves.
I just ran another test from the front view using the grease pencil addon to rotate the canvas using as many different directional lines as possible and for the most part, it works correctly.

What I did notice that is consistent is that it always orients exactly 90 degrees on the malfunction. Could it be something to do with the drawing tool settings?

If you were an animator tasked with having to work this way. How would you work with this?

Omar Emara (OmarSquircleArt) added a comment.Aug 5 2022, 6:33 PM

It is possible that the curve draw tool might be able to set the normal that is used in the minimum twist method, let me take a look at the code and get back to you.

adam earle (adamearle) added a comment.Aug 5 2022, 6:38 PM

I will be away from the machine for 8 hours (sleep) will check back in tomorrow

Omar Emara (OmarSquircleArt) changed the task status from Needs Information from User to Needs Triage.Aug 5 2022, 6:41 PM
Hans Goudey (HooglyBoogly) closed this task as Archived.Aug 5 2022, 7:20 PM
Hans Goudey (HooglyBoogly) added a subscriber: Hans Goudey (HooglyBoogly).

To me these are clearly not bugs, but a mixture of limitations of the current algorithms and feature requests.
Things are working as designed here. Yes, there is not as much control over the normals as we would like, but that's just a limitation of Blender's current features.

It seems there are a few separate requests/improvements here:

  • X-Up and Y-Up normal calculation modes
    • This is a simple feature to add
  • A "drawing plane" as a generalization/improvement on the 2D curve idea
    • This is a more fundamental change to edit mode, but it also seems like a nice idea.
  • A way to control the first vector used for the minimum twist normal method
    • I had talked with Jacques about adding a builtin "up" vector attribute for curves that could be used for this, but apparently never written down the design, I'll do that today.

Generally, the existing curve object shouldn't get any new features, since it's being replaced in the near future (T68981).
I think all of these additions make sense, but they're clearly feature requests, so they should either end up on rightclickselect, or as an approved design/todo task.