[Bf-committers] Proposing a unique ID for Blender objects system, for use with game engines.

Lissanro Rayen Lissanro at Dragon.Studio
Tue Nov 24 02:56:33 CET 2020

On 23/11/20 11:01 am, Brecht Van Lommel wrote:
> The solutions I'm suggesting are to either use a PointerProperty 
> (which will not become invalid), or store data on the object itself 
> rather than referencing the object.
Yes, these are perfect solutions in cases when they are sufficient. But 
sometimes they cannot replace real unique identifier. I guess this is 
why many end up just using object names since they are guaranteed to be 
unique within single .blend file. And after putting a lot of effort to 
write and optimize my own UID support I see why - it is just hard and 
error prone to implement from scratch in an addon. It is also not 
efficient, especially in large scenes, where looping through thousands 
or tens of thousands of objects in Python is not fast at all (even if 
the loop does not do much).

> The question is if for example the Godot use case would be helped by 
> having it globally unique, so that e.g. renaming .blend files or 
> splitting .blend files into smaller ones also works.
I see. I guess this depends on the use case. I think the best solution 
is to allow to reset UUID - then if somebody needs to make sure copies 
of their objects are globally unique, they can do so by regenerating 
their UUIDs. But if somebody wants them to stay stable, they do not need 
to worry that renaming or copying .blend will break existing UUIDs.

> Exporters usually export the evaluated objects rather than the 
> original ones, so it's an important case. One that at least would have 
> to be taken into account when someone contributes a patch for this.
> We already have a mechanism for stable IDs for instances. I imagine 
> that can be combined with a stable UUID of the original datablock to 
> get a stable UUID for evaluated datablocks.
This sounds like a good idea. It will not hurt use cases where stable 
UUID does not matter, and will definitively help when stable UUID is 
important. For these evaluated objects UUID will be not resetable - once 
it generated, it will stay the same even if generated again. But I 
cannot think of a scenario where this would be an issue (especially if 
it would be possible to reset UUID of original datablock - could be 
useful if working with a copy of .blend file to make sure all UUIDs are 
globally unique).

More information about the Bf-committers mailing list