Grip - General Rig Api [GDC2018]
Grip is a Rig API which utilises Plugged (more info on that here) as a mechanism to implement plugins to represent different metadata systems.
Metadata is typically stored within a rig and is used by tools and scripts to traverse rigs without relying on naming or hierarchy conventions. The downside to the standard implementation of metadata is that our tools are ultimately reliant on the single metadata system we choose to implement.
Studios tend to stick with one metadata system, but it makes it more challenging to utilise rigs sourced from other studios or external sources. It also makes it incredibly challenging to optimise or refactor a metadata system as so much of a techart codebase can become reliant upon it.
To alleviate this, grip becomes a standardised rig API which can expose any metadata system you implement a plugin for. Through this mechanism you can have multiple metadata systems in the same environment and all your tools will work seamlessly.
It does this by expecting each plugin to implement a 'viability' method. This takes in an object, and the plugin can use that object to test whether its utilising a metadata system it can represent. If that method returns true, the plugin is instanced and returned. This process is simply wrapped in a 'grab' function which looks like that on the right
By taking this approach, our tools can simply import grip and call the grab method. Each tool never has to care about what metadata system it is actually interacting with, as it never utilises the metadata system directly - all its interaction is done through the rig API.
Utilising bitwise enum's the rig API offers a rich approach to being able to define very broad as well as very specific searches. Implementing a plugin for a metadata system can be quite involved depending on how the metadata system works, but that cost is significantly lower than attempting to get an ever-growing toolset to interact with multiple metadata systems directly.