Blender 2.8 Undo System Discussion

Hi Blenderers,

I’ve noticed that contrary to Blender 2.79, the undo system is now always Global. Which means that even in Edit Mode, doing any small mistake and needing to Undo forces the entire scene to load from memory to it’s previous state. Previously the undo was handled differently when you were in Edit Mode making it possible to Undo any small step but it worked blazing fast compared to Undo in the Object Mode which is getting slower and slower as scene gets bigger with more objects. Also if you exited Edit Mode and then pressed Ctrl+Z in Object Mode, instead of putting you back into Edit Mode, all the changes you did would be rolled back but you’re still in Object Mode. I think this was a better approach than the forced Global Undo that is now but I am probably missing something technical behind all this.

Also I’d like to ask what is the state of possible optimizations that can be done to improve speed of Undo. Right now it’s mostly as slow as it used to be in 2.79 in some cases (because global Undo is forced) it even takes longer. Are there some additional steps that need to be taken in order to utilize the new approach of Copy on Write that is now in Blender 2.8?

I was under the impression that the Global/Local Undo system that Blender used to have is actually very ingenius. In the older days (not 2.79 I think but maybe 2.4x? it even was that making changes to one object, then selecting a different object and doing different changes and then exiting Edit Mode and entering Edit Mode of the original object you could Undo the action you’ve done previously for that first object with the second object still keeping it’s changes and staying intact.

Also I would like to have a general thread about Blender’s Undo/Redo as I think that’s not being talked about enough.

4 Likes

Per object sounds really great, specially for editing their geometry. More memory of actions, less load times, controllable undo’s… sounds great. Also Editor based Undo’s, like only for the Node editor, etc… Just splitting them all up and undo based on context is… to me a good workflow and optimized system.

1 Like

maybe I’m more biased, but in my opinion it would be even less confusing

How will per object work with multi edit?

Ok so a little update on this:

Prior to leaving Edit Mode, the Undo is blazing fast for any changes you may have done in that Edit Mode session.

Problems start when you leave the Edit Mode and suddenly any Undo action costs lots of time (on big scenes) even if you manage to Undo your way into Edit Mode again.

I suppose this is a limitation of the implementation but could there be some feedback on how this is handled and what are the possible ways to improve the situation?

Selection objects (making them active) is also slow on big scenes but I found out that going into Local Mode alleviates this particular issue. Maybe if you enter Local Mode the Undo history could only be retained for this Local Mode session? This might be easier to implement and would nicely improve Local Mode role in Blender. The question here is this makes most sense in big files, so maybe checking Undo performance somehow would be good and pop-up saying “entering Local Mode, purge Undo?” and have that as hidden operator checkbox.

@sergey I read you worked on this a lot and I know there are other priorities but could you share your thoughts on this?

In 2.79, there are several undo histories. One per mode per object.
Problem was that undoing an action in object may suppress all theses edit mode undo histories.

In 2.8, as a unique undo system, steps into edit mode are no more lost.

When you are in edit mode, data managed is only mesh data (maybe + enabled in edit mode modifiers effects).
When you are in object mode, data managed is all objects data. So reducing amount of objects visible will improve performance.
To sum-up, what you are complaining about is performance into object mode.
If this point is globally solved, there is a chance that undo will not suffer of that, anymore, like any other action.

Undo system in object mode is so called “global undo”. Which is, basically, equivalent of saving current .blend file in memory (a bit smarter than, since the undo memory de-duplication system is in place). So when you undo Blender tosses away current .blend file state and opens a new one from memory, causing every object to be re-evaluated since their evaluated state is lost.

In edit mode (and other modes like painting, sculpting, etc) the undo system is more localized, and only stores changes for a specific object or its parts. Undo in this case will only restore state of a single object and re-evaluate that specific object.

One of the possible solutions would be to somehow preserve evaluated status through global undo steps as well. This isn’t a small project, but, hopefully, will be tackled as part of a project related on improving Blender for handling large and complex scenes.

Confusing part to me here is that you mention that if undo brings you back to an edit mode, the undo is still slow. This isn’t something what i would expect. Worth isolating and making a report i’d say.

P.S. Campbell is more familiar with the nowadays’ undo system.

3 Likes

Hi, thank you a lot, it’s great to have someone who sees all the underlying issues.

Good to read this. I understand it’s no easy task. Just wondered if having slower Global Undo but also Local Mode Undo would be beneficial and quite straightforward to implement (so blender stores and reverts to only objects in Local Mode).

I was trying it in a new artificially complex scene and I don’t think it was happening. It still happens in my file but by now I always use Undo in Object mode only once when I accidentaly move something etc (hard to exactly revert changes) otherwise if I wish to undo something often I do it manually.

I might investigate this more later but this scene is devilish. It’s a real testament to 2.8 for handling it pretty damn well. I get fluid viewport on 1070M.

image

Hi guys! I hope UNDO issue gets attention! I have really had hard times with it… I have read through this thread and the other one related to current state of UNDO in Blender. Also on right-click select there are 4 or 6 different UNDO improvement proposals, but I think they could be combined into one really. Undo is a huge problem when I work with serious models that occupy quite a lot of memory. Also I have noticed that the stuttering appears mostly when you UNDO in object mode. Maybe storing the whole blend file in object mode is not the most effective way for UNDO to work efficiently? But also, sadly, I don’t know what to propose to improve that. I think the reason why It was not reported as often is that a lot of users have quite lightweight scenes and models and don’t necessarily encounter the same problems that some modelers do. I have no complaints about overall scene performance in Blender, it can handle quite a large amount of polys and it’s all editable and I don’t see much of a difference here compared to other packages. But Undo is just killing me… It really does… I wish devs had some plan to mitigate that problem, but I have read previous devs responses in other threads and the answer was that there is currenly NO PLAN to fix this issue yet… Which is really sad, Blender is such a cool tool, where you can sculpt quite detailed mesh, quickly carve necessary shapes with booleans and use modifiers efficiently, but it will take you 2 minutes to do one UNDO step in a heavy scene.

Hi,

I decided to dig up this topic, because actual UNDO is much worse than 2.7X undo.
I was working with the “old” undo mode since Blender 2.42, which was My beginnings in 3D.
The new undo regardless of what’s under the hood is terrible. Is that hard to make it per mode back? Or as an option? I really can’t work, always am forced to undo for example going out of edit mode, to object mode, and vice versa. Actual undo is just bad. Can it be like in 2.7X?
What anyway is the status of undo now?

The status of current UNDO is that it’s much much faster. The scene I was showing above now takes only like 2-3 seconds to undo while it easily took 20-30 seconds previously… And it’s even more complex now!

While I liked the previous separated Undo quite a bit I am also fine with how it is now.

To be honest I am satisfied with the UNDO system, I use Ctrl Alt Z often to pinpoint exactly where I want to go back and it works fast.

The best tip I can give you is - try to work so that you don’t need to UNDO too far back. Meaning sometimes when afraid, just duplicate the object and store it in a Hidden layer for example. Then if anything goes amiss, you can revert to it.

Thank You Adam for the tips, but they don’t solve anything, it goes about the convenience of use. Nothing will be better. I often change modes between edit/object, and when using Undo I’m forced to undo also changing modes, this just makes Me crazy, and to be honest that only. I know it’s faster I’m working on Blender all the time, but sadly comparing with 2.7X actual undo is a step back for the workflow. I really hope something can be done with it. Regards.

1 Like

I’m not sure what is worse now than in 2.7 ? My experience matches that of @AdamPreisler (more or less), undo is several times faster now. Tten times does not seem like an exaggeration, especially in scenes with many objects. Can you share the specifics of the scenes that are causing you problems ? Maybe it’s a corner case or something that could be investigated. I personally hope that more improvements are to come, because 2.9’s undo is still lagging behind other DCCs, honestly.

What about another problem with UNDOING interface changes(setups).
Like if i set up my brush, snaping options, etc and then do something, next i undo.
It undoing my setups.

2 Likes

Hadriscus, everything is great regarding performance, I’m writing about modes. In 2.7X there was an global object mode UNDO, and edit mode UNDO. Now We have global, which takes edit mode and object mode into one. This is a pain when You switch the modes often, as I do, then I’m undoing switching between modes, which is stupid. And that what mentions youthatninja. It needs to be as it was, to have separate Undo, for edit mode, and object mode. Now it’s a mess.

You can try pushing it but think it’s going to be pretty hard. Looks like not a lot of people have such a problem? Maybe @sergey could chime in if something like this is easy to bring back as checkbox but I doubt it.

Ok apologies I didn’t immediately understand what it was about. I remember the undo system not being global, I never could make sense of it. I remember sometimes the different undo stacks could get out of sync and have unpredictable behaviour -was it just me not knowing how it worked, or was it indeed a bit complicated ? Do we know exactly why it wasn’t kept along with global undo ?

i have the same problem and for me undo in its current state is not useable and i try to avoid it at all cost. Its almost like in the old blender versions where there was no undo, as soon as you get into a situation you need it you know you are in trouble.

what i often do when working on some models for 3d printing (hard surface modeling) is switching between objects and working with lots of modifiers.
the main problem at the moment is that when i want to undo its on the current object i have selected, but when undo is used i might not even know what i undo since the last changes have been done one another object that get undone but since they are not in sight i do not realize it and everything starts to fall apart at that point.
Its just horrible to work with undo and i mentioned these issues way back when performance was bad, since i consider this the real issue of undo and am still surprised that not everybody is crying “broken” about the functionality changes that have been done.

The local undo how it was and how it is now is not the solution either, that one is even more broken. We better come up with a new concept that works.

1 Like

This one is a real problem for me. Dialing in settings - especially in sculpting is terrible with the current undo system. When I undo my last step then I don’t expect it to drag along all the brush settings with it as well. It’s cool that brush settings can be undone but I actually as good as never want the settings to be reset when undoing a brush stroke or a mesh edit.

Don’t know if a separate Undo combination like Shift-Z would be a solution but the way it is it really doesn’t make sense to me.

1 Like

Hi,

Anything new regarding this topic?
I can’t work… Blender now is UNDOING Switching subsurf on\of, switich local global mode. This is a DISASTER!!! Is there someone in power to push this topic? Or is there an option which I just don’t know about? I don’t want to UNDO interface changes, nor switching modifiers on/off. Is Blender still worthy for PROFESSIONALS? This is a joke, really. I’m not insulting noone, but try to work on something…

P.S Hadriscus, Apologize I wasn’t aware I’m quoting You.