I have recently been working with referencing skeletons and block meshes, automating the skin-wrap of new assets onto the base models etc. and I got to thinking about the containers and xrefs part of things.
I may have been missing the correct info, but containers didn’t work too well for me. My bones kept vanishing after I had skinned a test asset onto the container-ified bones set. At the moment we are using xref objects, but from time to time it is a bit of a pain when animators or riggers need to change things.
As we are at early stages in this project, I wanted to see if there were any gotchas, workaround, or resources which would be useful in exploring solutions to this.
Avoid xrefs at all costs. Containers may be an improvement, I didn’t have them in 2008 and haven’t (and won’t) use any newer versions. You could go with the ‘scripts to destroy and recreate’ route as I did. Inconvenient and slower, yes, but more explicit and you have control over things.
second what Rob said, Containers are supposed to bring more Maya like file reference ability and stability with stuff like this but test the bejebus out of it.
forget containers in Max - they are even more problematic than xrefs - their featureset in max is nowhere near that of them in Maya, plus they add some more “be afraid” level on top …
Just to catchup - I’ve been doing 2 roles for the last year, and the tech stuff in coming on slowly as a result!
Any and all xref/container use has been discarded as it is too flaky.
We are doing as Rob suggested with a destroy/merge latest process, maintaining as much of the existing skin data etc. as we can as we go. Seems to work fine!
Animators may be moving to maya so we will evaluate the potential to more formalise our rigging process and make a more robust reference based system in maya, but that will be later on if we do so.
Hmm this is good to know. We are using xrefs a lot at Codemasters and it is a pain.
Any more things I have to know about the ‘scripts to destroy and recreate’ route ?
We killed the usage of Xrefs, in their limited use on Saints Row 1, back in 2004. I’ve never felt comfortable with them mainly due to their buggy nature, max instability and file bloating issues. When I first saw the introduction of containers I was hopeful, but alas the implementation is incredibly lacking for actual full animation support. So I rolled our own way of dealing with updating characters for animation purposes.
In some ways what I believe I ended up doing my own half-assed max implementation of the “meta-node” concept used in Maya, before even reading about it. The unfortunate thing here is that max doesn’t really have a non-physical node representation that I can apply attributes onto. So what had to happen at the character authoring stage was that every asset had to be stamped with attributes, my first implementation of these attributes were using Object User Properties. Our biped, the character mesh data and any extra external animated objects were all stamped with attributes. This was all done automatically through the character build tools I wrote, so anytime a character was completed it would be fully ready to work with our tools.
Asset Manager
What we used to manage the characters and such was an Asset Manager. The animators and cinematic artists will build their scenes with this manager. Direct object merging is problematic and results in sloppy max files. The tool has presets for the type of objects they wish to bring into their scene characters,weapons,vehicles etc. Each object type had some specific functions to manage them individually but overall the tool merged the objects in, cleanly applied a “namespace” to them and no matter how many objects came in for that one asset the asset manager would see it as one object. There is no one node that maintains all of the data in the scene. When the asset manager is run it scans all of the objects in the file and determines the list of assets from the attributes within. When the time came to update a character mesh or if a skeleton changed for what ever reason they could simply select the character in the asset manager and hit swap. The tool would see a source file reference and allow the artist to pick that one specifically or they had the option to pick a brand new character entirely. It would save all of the animation, export properties and delete the old asset, then it would merge the new character applying all the animation back and setting export properties. This would take 10-20secs but it is a rather fluid process. The swapping of characters worked great for cinematics. They would use stand-in characters for previs and they would swap in final characters for the final shots.
Clearly this is not ideal but we are working in max here. The focus on animation and proper referencing is seriously lacking and you have to be creative to get the best out of it. I’ll probably post a video of this process at some point I’ve been wanting to see what others think about it and hopefully see their solutions in this regard.
Are you still thinking of creating a video to show how you can use the asset manager as a reference system?
If you don’t have time I was wondering if I could get a more a detailed pipeline example from you.
I spent a bit of time to put something together to demonstrate the Animation Asset Manager I discussed above. If you have any questions feel free to ask.