thank you very much for this in-depth explanation. And thanks to everyone involved for discussing this topic, it's very much appreciated.
My Plugin Idea
I'm creating an "Advanced IK Spline" with additional handles.
Demo Scene hosted on my personal OneDrive
The scene might not fully represent the screenshots below. I prepared this scene as a sort of blueprint which I'm now trying to re-create with this plugin during which I decided to rename some stuff and change the icon.
The generator object itself has various settings to control the generation of all required objects, consisting of some hidden joints, controller nulls, IK splines and layers.
The generated objects look something like this:
Note: The naming and some portions of the hierarchy is outdated in this screenshot.
The key features are:
- When the user chooses Mode "Setup" none of these objects should be shown in the object manager but in the viewport. Changing the settings will delete the previously created hierarchy and generate a new one which will match the new settings.
- When the user chooses Mode "Bind" only some Joints should be shown in the object manager so the user can select them and bind and weight paint a mesh to them.
- When the user chooses Mode "Animate" only some controller nulls should be shown in the object manager so the user can select them and animate the joints which are bound to them via IK spline tags.
The whole point of this project is to not having to look at all the behind-the-scenes objects which the user should not have to worry about. The user should only have to see what is relevant (in the viewport as well as in the object manager).
I'd like to give this dude credits for coming up with this rig while I'm at it:
In response to your answer
I think I understand all the points you're making and I'm really thankful that you're on top of your API game to help me to this extend.
While I do trust myself to create the code for proper caching in a stable manner I value your opinion more to respect the limitations of
ObjectData. So that's what I'll do for now.
The question for me then is: How do I proceed? I could let the plugin create all these objects as intended in
GVO, then make the user use
Current State to Object or
Make Editable to get all the virtual objects (while hiding behind-the-scene objects in an invisible layer) but this is not very user-friendly. The functionality I'd like to implement is best achieved with an approach similiar to the Character module imho.
My best bet then is to simply hope that you can come up with a better approach after reading my plugin idea. Until then I guess I will follow the approach I just described even though this might come with different kinds of problems in terms of usability.
What I would've loved most would've been to extend the existing IK Spline tag so the user can configure a handle to be influenced by the spline so it can act like the smaller handles you see in the demo video above. Maybe that's an idea for you guys for a future C4D update, I don't think extending existing Nodes is what us normal folks are supposed to do.
I have to bundle this whole thing and make it reusable in an easy non-confusing manner, that's the most important thing for me.
Best regards and thanks again,
Also sorry for carrying this thread off-topic with my whole "but what should I do then?"-shenanigans. If you'd like I can create a new thread addressing this new issue.