Collection of Widgets hidden

Hello,

I opened a .blend file that I downloaded. The object is rigged and I can’t find the collection where the Widgets are in the outliner in View Layers mode.


In the outliner, in Blender File mode, I can see the objects used as Widgets but there are greyed out.

How can I access to the meshes of objects used as widgets please ?

I guess the first question is why do you want to?

I’m willing to bet that horse was rigged using Rigify, and as such, the metarig would have also included a collection with all those widgets. But once the rig is generated then if the final model is going to be delivered, the metarig and the widgets collection can be deleted to streamline the file.

Thanks for your answer. It’s just to understand the way those objects are hidden in case of. If I append the collection “horse” in another file, all the widgets are visible so I guess I can access them in the original file.

This is the file : https://blendswap.com/blend/28627

Maybe this one would help you:

https://blender.stackexchange.com/questions/147269/objects-in-outliner-grayed-out

Thanks, I already checked this ;).

as an other way out you can try to open that .blend file separetely in different Blenders versions

Yes, I did it (append) but I just want to understand the way it works :).

Frankly, I have no clue, but suppose that maybe it is so because of the objects that are rigged ones?

Something like this… the actual object was deleted but the meshdata still exist…

If you just add and Cube and goto the Object Data Properties then you can change the Mesh Data to any of those WGT-… things and the geometry will appear…

Yes but it seems objects exist too as you can select any existing custom shape for a bone.

The objects that exists are actually bones, which are part of the overall armature.

So an armature is basically made up of bone objects, now they can be used for a few things. One bone could be used as a deformation bones, which is directly linked and weight painted to a mesh.
Another could be a aim target, referenced by bone constraints.
And another can be used as a control bone something that you animate in pose mode which actually moves the deformation bones.

Now by default, all bones look the same, but as you showed in the screen shot, you can make the bone look like something else in the viewport display by assigning it a custom object.

As such, @Okidoki has it right, by pointing out the way Blender manages and stores information. So if you add a Cube to Blender, you actually add two things (well more then that, but lets keep this simple), you add the Object data of the Cube (that stores its overall total information, like Location, Rotation, what Collection it is a member of, etc).

But you also add at the same time, the actual mesh data of that cube, it’s vertices, faces, UV Maps, etc. While these are added at the same time and initially linked together, they are in fact two very separate things.

So while at first all those Widgets exists as both Objects (likely starts as an added curve or circle, etc) and the data that makes it up, vertex, lines, etc.

So what happens with the rig setup, is the bone (object), basically gets updated or replaced with the vertex/line data that is the Widget.

What this means is that said vertex/line data of the Widget is now being used in two places. Once on the original Widget object and once on the Bone object as part of the Armature.

If you now delete the original Widget object, well that’s gone, along with one copy of its vertex/line data. But the other copy is still there, assigned to a Bone as part of the Armature.

Ok, I understand, thanks but why, when I append the horse collection, all Widgets objects (along with their mesh data of course) are here ?

Technically the original Widget object isn’t there, just the left over of its name in your second screenshot.

By changing the outliner to the Blender file view, you are forcing the display of all the data that is in that file. And part of that data includes the mesh data of Widget objects, which was attached to an actual Widget object of the same name.

Now I’m no Blender coder (or a programmer at all), but in general I suspect that mesh data can’t just exist in a vacuum on it’s own, it needs to be somewhat linked to an actual object.

The thing is, we are dealing with a special case here, in that the object is in fact an armature bone and the mesh data is only being used as a viewport appearance of that bone. In other words, the actual properties or mesh data of the bone, hasn’t in fact been changed, it is still a bone. It just happens to now look like a Widget shape in the viewport.

Therefore, in the background, Blender still needs to keep the widget mesh data separate, since it needs to keep everything about the armature bone as it is, it’s not replacing anything on the bone object, it’s just adding an appearance view.

However, mesh data can’t just exist on it’s own, it needs to be linked at least to a basic object ID (which is likely little more then something that says it’s an object and this is its name). But everything else that a normal object has, isn’t there, so no location, rotation, scale, relations, Motion Path, etc.

As such, it doesn’t show in normal outliner view, since it’s not a real normal object, it’s just a placeholder for mesh data, which is then actually being used on something else. In this case, the viewport display properties of a bone object

Ok thanks, that’s clear :).

Mesh Data can exist without being linked to an object. All data blocks can exist without being linked to an object. A data block is for example mesh data, animation, materials and a lot of other things.

If a data block is not linked to an object (or more accuratly a “user”) Blender will delete this data block when you quit Blender. You can prevent Blender from deleting the data block by assigning it a “fake user”. That is the little shield icon you see next to some menus.

Likewise objects will get deleted when closing Blender if they are not linked to a “user”. Usually this user is a scene but in this case the user is the armature which uses the object as a custom object to display a bone.

Now, I am not sure why these objects are grayed out in the outliner and can not be linked to a scene. It is clear that the information such a location and rotation is there because it does work when appending the collection. Is this a bug or expected bahavior? If it is the latter, what is the advantage of disallowing it and why can it be circumvented by appending?`

Perhaps a bug report is warrented?

But isn’t that the location/rotation etc of the bone, not the original widget object? This still seems to be a special case since its a bone object and the data of the bone isn’t being replaced, just the viewport display of it with other mesh data.

So as you say, a data block not linked to an object/user, gets deleted when quitting Blender. But for some reason it can’t be linked to the bone (viewport display vs actual object), so Blender is more or less using it’s original object as a ‘fake’ user in order to keep the mesh data in the file so it can still be used as a bone viewport display.

Even tho the original object as basically been deleted.

Without a Dev chiming in, it’s all somewhat guess work, but I don’t think its a bug, I highly suspect its working as intended.

It is not replaced but a separate object is created. You can see that in the outliner in Blender File Mode und “Objects”.

Well, yes but it is not a fake user. It is a real user. You can see that under Outliner → Data Api mode → Objects → TheObjectInQuestion → Users

Well, the original object is not deleted. It is inside the file. And it even acts like a “normal” object if you append the horse collection.
So, there are two inconsistent behaviors. At least one of them is unintended I believe. Or are there any advantages to have two different bahaviors?

Hence I think a bug report is warranted. One of the two behaviors is wrong.

So I tried a quick test and just made a Rigify rig and then deleted the metarig and the WGT collection. So the Widgets are still all there, but not visible as objects.

If I then just link and library override the rig, one ends up with much the same result.

However, if I append it, then it restores all the WGT objects and mesh data, along with the rig.

A bug, don’t know, I suspect it has worked this way for a long time.

Yeah, i guess so. Perhaps just an inconsistency. No idea. It probably does not matter all that much because ususally you would not use the WGT objects outside of the armature.

Might be useful for some edge cases where you want to export the whole works in a specific way? I can not see why the user should be limited but perhaps there is a good reason.