VSE: In Speed strip's multiply mode is the last frame getting "stuck". #90920

Open
opened 1 year ago by tintwotin · 28 comments

System Information
Operating system: Windows-10-10.0.19041-SP0 64 Bits
Graphics card: GeForce RTX 2060/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 462.59

Blender Version
Broken: version: 3.0.0 Alpha, branch: master (modified), commit date: 2021-08-25 08:10, hash: 452cc01932
Worked: (newest version of Blender that worked as expected)

Short description of error

  • Add a speed strip.
  • Add a keyframe at ex. 1, then later at 4, then later at -4 then later at 4.
  • Notice when the curve is dropping that when lower than ex. -1 is reached it should start playing reverse, but it keeps frozen for some time until the curve starts climbing again.
    The expected behaviour is that that should play reverse immediately on negative values, no matter how long it has been stuck at the last frame(< is this somehow related to the duration of the dead zone?).
    {F10325121,size=full}

Run this test file to quickly see the "dead zone":
Speed_strip_test.blend

**System Information** Operating system: Windows-10-10.0.19041-SP0 64 Bits Graphics card: GeForce RTX 2060/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 462.59 **Blender Version** Broken: version: 3.0.0 Alpha, branch: master (modified), commit date: 2021-08-25 08:10, hash: `452cc01932` Worked: (newest version of Blender that worked as expected) **Short description of error** - Add a speed strip. - Add a keyframe at ex. 1, then later at 4, then later at -4 then later at 4. - Notice when the curve is dropping that when lower than ex. -1 is reached it should start playing reverse, but it keeps frozen for some time until the curve starts climbing again. The expected behaviour is that that should play reverse immediately on negative values, no matter how long it has been stuck at the last frame(< is this somehow related to the duration of the dead zone?). {[F10325121](https://archive.blender.org/developer/F10325121/deadzone1.gif),size=full} Run this test file to quickly see the "dead zone": [Speed_strip_test.blend](https://archive.blender.org/developer/F10325124/Speed_strip_test.blend)
Poster

Added subscriber: @tintwotin

Added subscriber: @tintwotin
tintwotin changed title from VSE: Speed strip multiply mode freezes to VSE: In Speed strip's multiply mode is the last frame getting "stuck". 1 year ago
iss commented 1 year ago
Collaborator

Added subscriber: @iss

Added subscriber: @iss
iss commented 1 year ago
Collaborator

Changed status from 'Needs Triage' to: 'Archived'

Changed status from 'Needs Triage' to: 'Archived'
iss closed this issue 1 year ago
iss commented 1 year ago
Collaborator

Speed effect in this mode assumes infinite strip duration and therefore this is expected behavior. I don't think, that changing this behavior would be good idea.

Speed effect in this mode assumes infinite strip duration and therefore this is expected behavior. I don't think, that changing this behavior would be good idea.
Poster

I remember you mentioning complaints concerning unreliable results. This is the only unreliable result I've come across in the speed strip so far.

How are users to know that their source material should be "infinite"? How are users to know that they are not supposed to let it "run out of frames", because it makes it impossible to predict when it'll start again?

For users this will be considered a bug, making it very difficult or in some cases impossible to work in the multiply mode.

If this is something you're not able to fix, then consider marking it as Known Issue instead.

I remember you mentioning complaints concerning unreliable results. This is the only unreliable result I've come across in the speed strip so far. How are users to know that their source material should be "infinite"? How are users to know that they are not supposed to let it "run out of frames", because it makes it impossible to predict when it'll start again? For users this will be considered a bug, making it very difficult or in some cases impossible to work in the multiply mode. If this is something you're not able to fix, then consider marking it as Known Issue instead.
Sergey commented 1 year ago
Owner

Added subscriber: @Sergey

Added subscriber: @Sergey
Sergey commented 1 year ago
Owner

The speed effect "just" remaps current frame to a new one and renders underlying strip with that new frame. The new frame will be clamped to the strip frame range at that strip render time (at least how I remember it). This means that if the original strip doesn't have enough frames to remap to you will have the clamping behavior you observed: it takes a bit for the frame calculated by the speed effect to fall back into the original strip's frame range.

This is how the speed strip is implemented. Is far from ideal, we do want it to be much better and more user friendly, but this is not something we can resolve as part of a bug tracker work. Bug tracker is for fixing bugs within the current design. Changing weak design with something new happens as more of a project work which requires its time planning, design work, and other things.

As for making it a Known Issue think you are correct: is a known shortcoming from a weak design.

The speed effect "just" remaps current frame to a new one and renders underlying strip with that new frame. The new frame will be clamped to the strip frame range at that strip render time (at least how I remember it). This means that if the original strip doesn't have enough frames to remap to you will have the clamping behavior you observed: it takes a bit for the frame calculated by the speed effect to fall back into the original strip's frame range. This is how the speed strip is implemented. Is far from ideal, we do want it to be much better and more user friendly, but this is not something we can resolve as part of a bug tracker work. Bug tracker is for fixing bugs within the current design. Changing weak design with something new happens as more of a project work which requires its time planning, design work, and other things. As for making it a Known Issue think you are correct: is a known shortcoming from a weak design.
Poster

@Sergey Thank you for your comment, however I'm afraid marking it as a know issue doesn't matter much, if the issue is still left closed, was that by intent?

@Sergey Thank you for your comment, however I'm afraid marking it as a know issue doesn't matter much, if the issue is still left closed, was that by intent?
Sergey commented 1 year ago
Owner

Changed status from 'Archived' to: 'Confirmed'

Changed status from 'Archived' to: 'Confirmed'
Sergey reopened this issue 1 year ago
Sergey commented 1 year ago
Owner

I've just changed the subtype, didn't pay much attention to the status. Indeed non-resolved known issues should have open status.

I've just changed the subtype, didn't pay much attention to the status. Indeed non-resolved known issues should have open status.
Poster

@Sergey With this lhis line inserted does make the curve actually make sense - it'll play backwards on negative values - and forward on positive values - but does it break anything?

diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c
index d4adad9a34d..de5c8c3a402 100644
--- a/source/blender/sequencer/intern/effects.c
+++ b/source/blender/sequencer/intern/effects.c
@@ -3153,6 +3153,7 @@ void seq_effect_speed_rebuild_map(Scene *scene, Sequence *seq)
   float target_frame = 0;
   for (int frame_index = 1; frame_index < effect_strip_length; frame_index++) {
     target_frame += evaluate_fcurve(fcu, seq->startdisp + frame_index);
+    CLAMP(target_frame, 0, seq->seq1->len);
     v->frameMap[frame_index] = target_frame;
   }
 }

{F10329688,size=full}

My test file:
Multiply_broken.blend

@Sergey With this lhis line inserted does make the curve actually make sense - it'll play backwards on negative values - and forward on positive values - but does it break anything? ``` diff --git a/source/blender/sequencer/intern/effects.c b/source/blender/sequencer/intern/effects.c index d4adad9a34d..de5c8c3a402 100644 --- a/source/blender/sequencer/intern/effects.c +++ b/source/blender/sequencer/intern/effects.c @@ -3153,6 +3153,7 @@ void seq_effect_speed_rebuild_map(Scene *scene, Sequence *seq) float target_frame = 0; for (int frame_index = 1; frame_index < effect_strip_length; frame_index++) { target_frame += evaluate_fcurve(fcu, seq->startdisp + frame_index); + CLAMP(target_frame, 0, seq->seq1->len); v->frameMap[frame_index] = target_frame; } } ``` {[F10329688](https://archive.blender.org/developer/F10329688/speed_fix.gif),size=full} My test file: [Multiply_broken.blend](https://archive.blender.org/developer/F10329707/Multiply_broken.blend)
iss commented 1 year ago
Collaborator

I don't necessarily agree, that this issue caused by weak design, maybe this should be investigated within scope of particular workflows.

You could apply same question to animation of image position - why, when it goes off screen, it doesn't return immediatelly when curve value goes back from it's maximum? Obviously if you change image size, it would break whole animation. Issue here is bit different, because curve value is integrated, but currently media interchangability is preserved at least partially.

I don't necessarily agree, that this issue caused by weak design, maybe this should be investigated within scope of particular workflows. You could apply same question to animation of image position - why, when it goes off screen, it doesn't return immediatelly when curve value goes back from it's maximum? Obviously if you change image size, it would break whole animation. Issue here is bit different, because curve value is integrated, but currently media interchangability is preserved at least partially.
Poster

The suggested change: https://developer.blender.org/T90920#1212134 above will make a positive multiply value play forwards and a negative value play backwards.

It is working the same way as hitting the speeder in a car will increase speed(positive value) and hitting the brakes(negative value) will decrease the speed. This should be an easy to comprehend cause and effect for most users.

To me this seem more logic than the current design, where you hit the breaks, but the point of actually decreasing the speed of the car is dependant on how long time you have been driving at max speed.

If you have been driving a little less than max speed it'll decrease the speed immediately after you hit the brakes, but if you have been driving at max speed for ex. 5 minutes, hit the brakes and then you need to wait for 5 minutes for the car to decrease the speed. My guess is that for most users this concept is very hard to grasp, and is likely to result in bug reports.

The suggested change: https://developer.blender.org/T90920#1212134 above will make a positive multiply value play forwards and a negative value play backwards. It is working the same way as hitting the speeder in a car will increase speed(positive value) and hitting the brakes(negative value) will decrease the speed. This should be an easy to comprehend cause and effect for most users. To me this seem more logic than the current design, where you hit the breaks, but the point of actually decreasing the speed of the car is dependant on how long time you have been driving at max speed. If you have been driving a little less than max speed it'll decrease the speed immediately after you hit the brakes, but if you have been driving at max speed for ex. 5 minutes, hit the brakes and then you need to wait for 5 minutes for the car to decrease the speed. My guess is that for most users this concept is very hard to grasp, and is likely to result in bug reports.
Sergey commented 1 year ago
Owner

One immediate drawback of the proposed change is that it will not work properly when combining two speed effects. Can also see that it might turn problematic when speed is applied on a scene strip (possibly, indirectly via a meta strip).

The fundamental issue I've got with the speed effect is that its effect and controls are so hidden from users. One never knows where re-timing takes affect, what's the final media duration in scene time and so on.

In general I'd say:

  • It would help a lot to see a practical example of what you're trying to achieve. There are always ways to break system with synthetic tests. Dealing with them is not a very good investment, since it takes time with not much actual outcome. If there is a clear real-world example then it makes you more motivated to work towards solution!
  • If the stakeholders in VSE project are fine with the proposed change, and are aware of consequences, and things are well-tested, I wouldn't mind this short-term solution.
  • If the solution is not something obvious and requires time for analysis and such, consider working on a better design for the re-timing tool which will give much better artists control and visual feedback.
One immediate drawback of the proposed change is that it will not work properly when combining two speed effects. Can also see that it might turn problematic when speed is applied on a scene strip (possibly, indirectly via a meta strip). The fundamental issue I've got with the speed effect is that its effect and controls are so hidden from users. One never knows where re-timing takes affect, what's the final media duration in scene time and so on. In general I'd say: - It would help a lot to see a practical example of what you're trying to achieve. There are always ways to break system with synthetic tests. Dealing with them is not a very good investment, since it takes time with not much actual outcome. If there is a clear real-world example then it makes you more motivated to work towards solution! - If the stakeholders in VSE project are fine with the proposed change, and are aware of consequences, and things are well-tested, I wouldn't mind this short-term solution. - If the solution is not something obvious and requires time for analysis and such, consider working on a better design for the re-timing tool which will give much better artists control and visual feedback.
Poster

Added subscriber: @mano-wii

Added subscriber: @mano-wii
Poster

@Sergey I've tried to add a speed strip on top of a speed strip with that line added, and it seems to be working as expected.
speed_on_speed.blend

I've also tried to add a scene with the speed strip, in another scene and add a speed strip there too, and also tried inside meta strips both places, and I do not see anything unexpected.
speed_on_scene_meta.blend

I hope you're aware of the work @mano-wii and I have put into improving the UX of Speed strips by exposing the speed strip options in the sidebar D11856 and the f-curve drawing D6110 on the strips?

I'm not sure what real world example you're after, but a clear connection between when playing backwards and forwards and negative and positive values, will make it much more intuitive to work with the multiply mode of the speed strip.

This is a "real world" example without the line(not working as expected):
{F10336097,size=full}

With that line added(where it is working as expected):
{F10336037,size=full}

Add ToS to this strip:
real_world.blend

@Sergey I've tried to add a speed strip on top of a speed strip with that line added, and it seems to be working as expected. [speed_on_speed.blend](https://archive.blender.org/developer/F10335784/speed_on_speed.blend) I've also tried to add a scene with the speed strip, in another scene and add a speed strip there too, and also tried inside meta strips both places, and I do not see anything unexpected. [speed_on_scene_meta.blend](https://archive.blender.org/developer/F10335928/speed_on_scene_meta.blend) I hope you're aware of the work @mano-wii and I have put into improving the UX of Speed strips by exposing the speed strip options in the sidebar [D11856](https://archive.blender.org/developer/D11856) and the f-curve drawing [D6110](https://archive.blender.org/developer/D6110) on the strips? I'm not sure what real world example you're after, but a clear connection between when playing backwards and forwards and negative and positive values, will make it much more intuitive to work with the multiply mode of the speed strip. This is a "real world" example without the line(not working as expected): {[F10336097](https://archive.blender.org/developer/F10336097/Speed_real_world_without.gif),size=full} With that line added(where it is working as expected): {[F10336037](https://archive.blender.org/developer/F10336037/Speed_real_world.gif),size=full} Add ToS to this strip: [real_world.blend](https://archive.blender.org/developer/F10336116/real_world.blend)
Sergey commented 1 year ago
Owner

Added subscriber: @fsiddi

Added subscriber: @fsiddi
Sergey commented 1 year ago
Owner

Thanks for tests! Good to know things worked for you. I've also run some tests locally (although, didn't have much time) and couldn't fault this specific change.

To me it does seem to be more expected behavior with the clamp. Especially in the world with weak user feedback on what's going where.
@fsiddi, @iss, do we really win from the "accumulation" manner of the current code?

As for D6110, don't think it goes far enough to really improve convenience of speed effect. But lets not go into this discussion in this bug report.

Thanks for tests! Good to know things worked for you. I've also run some tests locally (although, didn't have much time) and couldn't fault this specific change. To me it does seem to be more expected behavior with the clamp. Especially in the world with weak user feedback on what's going where. @fsiddi, @iss, do we really win from the "accumulation" manner of the current code? As for [D6110](https://archive.blender.org/developer/D6110), don't think it goes far enough to really improve convenience of speed effect. But lets not go into this discussion in this bug report.
Poster

(@Sergey A lot of hours have gone into D6110 and D11856 since work on that started in oct 2019, if you think that it is going in the wrong direction, it would have been nice to share that a bit earlier).

(@Sergey A lot of hours have gone into [D6110](https://archive.blender.org/developer/D6110) and [D11856](https://archive.blender.org/developer/D11856) since work on that started in oct 2019, if you think that it is going in the wrong direction, it would have been nice to share that a bit earlier).
fsiddi commented 1 year ago
Collaborator

Had a look at this and also discussed with Sergey. Makes sense to me, go for it!

Had a look at this and also discussed with Sergey. Makes sense to me, go for it!
iss commented 1 year ago
Collaborator

In #90920#1212504, @Sergey wrote:
@fsiddi, @iss, do we really win from the "accumulation" manner of the current code?

I did use this feature in practice to smoothly slow playback speed to 0, leave it there for a while, then restore speed back to normal. Technically this can be achieved by animating displayed frame number, but it is not as simple and user friendly. I heared other users use this effect to "freeze" time too.

Also to clarify, reversing playback with negative values is recent change implemented in 929d7597b3, so this can be reverted if such behavior is inappropriate.

> In #90920#1212504, @Sergey wrote: > @fsiddi, @iss, do we really win from the "accumulation" manner of the current code? I did use this feature in practice to smoothly slow playback speed to 0, leave it there for a while, then restore speed back to normal. Technically this can be achieved by animating displayed frame number, but it is not as simple and user friendly. I heared other users use this effect to "freeze" time too. Also to clarify, reversing playback with negative values is recent change implemented in 929d7597b345, so this can be reverted if such behavior is inappropriate.
Poster

! In #90920#1213677, @iss wrote:
I did use this feature in practice to smoothly slow playback speed to 0, leave it there for a while, then restore speed back to normal.

This can also be done with the suggested change:
{F10355751,size=full}

The suggested change do only have an effect on on what value it'll start playing reverse. With the change this point is a at 0, without the change, and if the user has run out of frames this point of reverse playing is unknown.

>! In #90920#1213677, @iss wrote: > I did use this feature in practice to smoothly slow playback speed to 0, leave it there for a while, then restore speed back to normal. This can also be done with the suggested change: {[F10355751](https://archive.blender.org/developer/F10355751/hold_strips_super_slow.gif),size=full} The suggested change do only have an effect on on what value it'll start playing reverse. With the change this point is a at 0, without the change, and if the user has run out of frames this point of reverse playing is unknown.
Poster

Removed subscriber: @tintwotin

Removed subscriber: @tintwotin
Poster

Changed status from 'Confirmed' to: 'Archived'

Changed status from 'Confirmed' to: 'Archived'
tintwotin closed this issue 1 year ago
Poster

As I do not have anymore time or motivation for a continued investment in the Blender project, I'm giving up on this report for now.

As I do not have anymore time or motivation for a continued investment in the Blender project, I'm giving up on this report for now.
Collaborator

Added subscriber: @lichtwerk

Added subscriber: @lichtwerk
Collaborator

Changed status from 'Archived' to: 'Confirmed'

Changed status from 'Archived' to: 'Confirmed'
lichtwerk reopened this issue 1 year ago
Collaborator

Sorry to hear (thx again reporting). In my opinion we should not sweep this under the carpet (esp. since this already been confirmed), there is still a chance to get this fixed in the future and others might be affected by this issue as well.
Feel free to unsubscribe though.

Sorry to hear (thx again reporting). In my opinion we should not sweep this under the carpet (esp. since this already been confirmed), there is still a chance to get this fixed in the future and others might be affected by this issue as well. Feel free to unsubscribe though.
lichtwerk removed the
legacy module/VFX & Video
label 38 minutes ago
lichtwerk removed the
legacy project/VFX & Video
label 34 minutes ago
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/Collada
Interest/Core
Interest/Overrides
Interest/Performance
Interest/Pipeline, Assets & I/O
Interest/Translations
Interest/Undo
Interest/USD
Interest/Video Sequencer
legacy module/Animation & Rigging
legacy module/Core
legacy module/Development Management
legacy module/Eevee & Viewport
legacy module/Grease Pencil
legacy module/Modeling
legacy module/Nodes & Physics
legacy module/Pipeline, Assets & IO
legacy module/Platforms, Builds, Tests & Devices
legacy module/Python API
legacy module/Rendering & Cycles
legacy module/Sculpt, Paint & Texture
legacy module/Triaging
legacy module/User Interface
legacy module/VFX & Video
legacy project/1.0.0-beta.2
legacy project/Asset Browser (Archived)
legacy project/BF Blender: 2.8
legacy project/BF Blender: After Release
legacy project/BF Blender: Next
legacy project/BF Blender: Regressions
legacy project/BF Blender: Unconfirmed
legacy project/Blender 2.70
legacy project/Code Quest
legacy project/Compositing
legacy project/Cycles
legacy project/Datablocks and Libraries
legacy project/Dependency Graph
legacy project/Development Management
legacy project/Eevee
legacy project/Eevee & Viewport
legacy project/Freestyle
legacy project/Game Animation
legacy project/Game Audio
legacy project/Game Data Conversion
legacy project/Game Engine
legacy project/Game Logic
legacy project/Game Physics
legacy project/Game Python
legacy project/Game Rendering
legacy project/Game UI
legacy project/Geometry Nodes
legacy project/GPU / Viewport
legacy project/Grease Pencil
legacy project/GSoC
legacy project/Images & Movies
legacy project/Import/Export
legacy project/Infrastructure: Websites
legacy project/LibOverrides - Usability and UX
legacy project/Line Art
legacy project/Masking
legacy project/Milestone 1: Basic, Local Asset Browser
legacy project/Modeling
legacy project/Modifiers
legacy project/Motion Tracking
legacy project/Nodes
legacy project/Nodes & Physics
legacy project/OpenGL Error
legacy project/Papercut
legacy project/Performance
legacy project/Physics
legacy project/Platforms, Builds, Tests & Devices
legacy project/Pose Library Basics
legacy project/Python API
legacy project/Render & Cycles
legacy project/Render Pipeline
legacy project/Retrospective
legacy project/Sculpt, Paint & Texture
legacy project/Text Editor
legacy project/Tracker Curfew
legacy project/Triaging
legacy project/User Interface
legacy project/UV Editing
legacy project/VFX & Video
legacy project/Virtual Reality
legacy project/Wintab High Frequency
Meta/Good First Issue
Meta/Papercut
migration/requires-manual-verification
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 & Devices
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 Information 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

No due date set.

Dependencies

No dependencies set.

Reference: blender/blender#90920
Loading…
There is no content yet.