Hello everyone!
Inspired by USD, I’m testing organizing a project in two main entities: components and assemblies.
Components would be any item that can be published and that has no intrinsic dependencies (ie Meshes, Textures, Skeletons, Cameras, Lights, Images, or any relevant item that is worth keeping track of), whereas Assemblies would be meaningful “collections” of components and/or other assemblies (ie Models, BlendShapes, Rigs, Scans, sets of renders, and so on).
So, at the moment I have these two entities, and each one of them has a ‘type’ list field used for sorting/filtering.
It would be ideal (if not critical in some cases) to have specialized entities for some of these types, however since there is no option for a “Multi-Entity” filed type that allows multiple entity types, I am forced to use one generic Component entity: specifically, I can only choose either a Multi-Entity field which can only have one Entity type, or an Entity field which allows several entity types but only one item at a time.
Additionally - if I were using specialized entities for some or all my Assemblies - I wouldn’t be able to filter by fields that belong to the Assembly entity, even if I created fields with the same name on my specialized entity.
In programming terms, I’d like to somehow “subclass” entities, so that all subclasses shared the same interface (=fields). And I could then add BaseClass-type fields where also subclasses are accepted. And I could then filter using fields from the BaseClass from the “Linked Entities” section. Basically I would like to leverage the Liskov Substitution Principle of OOP, and be able to treat any subclassed entity like the base class.
I know that Shotgun is not designed to work this way, and I am not expecting any change in this sense. However I was wondering if anyone could recommend a good approach to this scenario.
As I said, I’m still in a testing phase, trying to find compromises between what I have in mind and what is possible with the current technology. Just to say that this is just a proof of concept, and might change very much very quickly.
I’m looking forward to hearing your ideas!