LibOverride fixes for Blender 3.6.2 LTS #109704
No reviewers
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
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#109704
Loading…
Reference in New Issue
No description provided.
Delete Branch "mont29/blender:tmp-liboverride-resync-parenting"
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?
This PR contains several fixes for liboverrides when production files get very messy.
@blender-bot package
Package build started. Download here when ready.
6ed0a9fc62
tobeb4a67cd6
@blender-bot package
Package build started. Download here when ready.
beb4a67cd6
to226300c48f
@blender-bot package
Package build started. Download here when ready.
@Mets you have the build ;) https://builder.blender.org/download/patch/PR109704
Context:
Original issue we encountered was that some objects of an asset in a shot file had the default matrix as their parent inverse matrix, even though in the source file, it was some specific value, set by the parenting operator as usual.
We fixed it on our end by simply deleting the linked and overridden asset, and linking and overriding it back in, and restoring relationships and whatever else we needed. (I actually wrote an operator to do all this now, only for emergencies.)
Testing:
First I tried reproducing the original issue from scratch without the patch, and failed, actually.
I tried changing parenting types from object to bone and back, both using the operators and the properties in the UI, I tried duplicating objects with various parenting types and changing them as well, but everything propagated successfully to the shot file. Again, even without the patch.
So, it's still a mystery to me how we managed to get the file into that state.
Then I reverted our shot file from version control back to its broken state, from before we re-linked the asset. With the patch build, I tried save&reload to see if the objects would regain their parent inverse matrix, but they didn't. Also tried Resync Enforce, and then save and reload, but still nothing.
So I would say the patch doesn't seem to fix the broken file, but without reproduction steps I don't know what else we can do either other than keep an eye out until we find those repro steps.
This is not expected to fix currently broken files (there is just no way we can blindly assume all overrides in invert parent matrix properties are invalid). It will however (hopefully) prevent this issue to happen again, since it will reset this property (and other related to parenting) to linked data values when the parent ID itself (the child object) is resynced, and the parent ID liboverride operation is a system override one (i.e. it matches the parent ID in the linked data). which will happen, among other cases, when said parent ID is changed in the library file.
So to test you need to reparent something in the library file, then open the anim file, and check that the re-parented object got back to its expected place.
Commit message/PR description is lacking about that info, sorry, will update them asap.
Right, but the weird thing is, I was trying to make parenting changes in the library file.
In 3.1 RC without the patch, and it just worked!
See this part of my comment:
I expected this, without the patch:
rocket_interior.blend
But the last step actually did not happen. So either I'm missing something, or the repro steps are more specific than we thought.
How the parent inverse matrix ended up being overridden in the first place is a big mystery. I can imagine two scenarii:
Hmm, I'd probably go with the first option.
Still, that means I can't really test the patch in a meaningful way, but of course if you think it's an improvement in any case, and since at least I did test that it doesn't make anything worse, it's good to go?
Will update the PRs with fixes for borkend collections cases (the 050_0070 case) as well, hopefully later today.
You should be able to test it though by reverting your SVN to before you fixed the files?
Right, talked in chat, this is what I should've tested, and have tested now:
226300c48f
tofd7bf13a98
@blender-bot package
Package build started. Download here when ready.
@Mets with this you should now be able to fix even the insanely broken cases like
050_0070.anim
, with an extra save & reload first to get rid of unused liboverride operations, and then the usual manual cleanup of garbage data + resync (enforce).Yep, tested the latest build, seems to repair everything in shot 050_0070 with Resync Enforce.
Only thing is that the OVERRIDE_HIDDEN collection has to be removed manually, but I think that's a good thing.
It seems to not only fix collection assignments, but also the inverse matrices. Sounds like a good thing, but I hope it's also expected?
Also, I recall you mentioned IRL something about datablock names. Is that something in this patch to be tested, or something for the future?
Thanks a lot for your hard work, Bastien! Good to go as far as I'm concerned, depending on those questions.
Oh, one potentially interesting note though:
A file saved with the patch seems to crash on load with 3.6.1 RC.
Not sure if that's meant to be supported though, and to what extent.
Parenting issues would indeed be fixed when rebuilding/fixing collections and objects relationships yes.
Datablock naming change is the following: When an override is created from a linked reference ID, and it cannot get the exact same name as its reference (usually because there is already a local ID with that name, be it an override or not), it will be named such that it does not collide with any existing ID, local or linked.
The goal here is to avoid getting an override ID named the same way as another ID in the same linked asset. E.g. huge issue in
050_0070
is that you ended up having, under the override collectiondoor
, object likedoor.004
which would be an override of linked objectdoor.001
, while override objectdoor.005
was an override of linked objectdoor.004
.This could happen due to a mixture of bad usage (the extra, completely hidden, override of the rocket set), complex high volatility of hierarchy in the linked set asset, and results from automatic resync on file opening trying its best to cope with the whole mess.
While the change on naming is not 100% bullet proof, together with the other fixes and improvements in that PR it should make such issues due to name collisions extremely rare. Although I would still heavily recommend forbidding anything like
door
,door.001
,door.004
etc. collections of objects names in a production asset file.Can you give me one of these?
Due to file size, I saved it in the Pet Projects SVN under
pets/bugs/050_0070_.....109704.blend
.So to clarify my steps:
Another thing I only now noticed (sorry) is that on file save, transforms of overridden objects seem to get reset to default. But since everything is keyframed, moving the timeline snaps everything back in place. Maybe that's why I didn't notice it earlier.
fd7bf13a98
to6c0e3a61ec
Ah yes, this one of the things fixed by this PR (in 1b76b958869b).
not sure what you mean here...
Should be 'fixed' with last commit.
@blender-bot package
Package build started. Download here when ready.
0f54f66254
to09fb8e2e9f
tmp-liboverride-resync-parentingto LibOverride fixes for Blender 3.6.2 LTS09fb8e2e9f
toec376fa6ce
ec376fa6ce
to439ad29453
439ad29453
to585f467efe
014a9aef0d
to1d52dbf81d
@blender-bot build
@blender-bot build
@blender-bot build
@blender-bot build
b404dbaccd
to9d978bc2ea
@blender-bot build