It’s been a busy month; finalizing the design for the main character, modelling, rigging, making a start on the animation and figuring out the best approach for getting all that into Unity…
3rd Oct. – Project Start 7th Oct. – Design Locked: Story/Puzzle Dependency Chart finished 7th Nov. – Environment Blocked: Environment blocked in with temp. geometry, walkable areas defined and navigable with character stand-in, cameras placed. 21st Nov. – Character Locked: Character design, modelling and walk animation finished, nav-agent set up in environment.
- 19th Dec. – Environment Locked: Environment geometry detailed and lit.
- 9th Jan. – Audio Locked: Spot FX and ambiance/music finished and implemented.
- 20th Jan. – Game Locked: UI and menus implemented, environmental interactions finalized, testing.
- 31st Jan. – Final Delivery: Final testing, bug fixing and delivery.
For the most part I’m using Softimage’s built in biped rig, it’s pretty old now and has numerous weird issues and bugs but I’ve been using it for ages and I don’t really have time to build a new one from scratch or to start learning a whole new setup. I have augmented it slightly though, adding in the simple facial system I started a while ago, and a few other extra controls for adjusting the position of the glasses, skirt and the bottom of this character’s cardigan.
In terms of organization in Unity, I’m importing a base model with no animation and then separate models for each new section, using the “copy from other avatar” option when importing. This approach will require more specific, custom animation, but I’m hoping to avoid some other issues that I’ve encountered before using a controller/velocity setup, mainly difficulty syncing up animation between different objects and positioning inaccuracy. I also find it easier to organize my 3d scene when I can limit each clip to a few hundred frames as opposed to having just one model with thousands.
There were a number of things that caught me out once I actually started trying to import animation. Firstly, any extra bones or nulls or transforms you add outside the standard humanoid hierarchy will be turned off by default in the model’s transform mask settings:
This doesn’t seem to trigger any error messages on import so if, like me, you’re scratching your head wondering why certain bits aren’t animating, it might be worth checking here.
Other issues do show warnings, I kept getting ““filename” has translation animation that will be discarded” alongside missing “baked in” root-motion or a crumpled up character in the animation preview window. Unity’s humanoid system doesn’t support translation on any bones except the one designated as Hips in the avatar (in my case the transform itself is actually named Upperbody), when you’re baking your animation make sure only this bone includes translation frames.
The automap process expects a certain hierarchy and a certain number of bones, extra feet bones show a ““filename” is inbetween humanoid transforms and has rotation animation that will be discarded” warning, again, leaving them out when baking seems to do the trick.
It’s worth noting that on various attempts at importing, these warnings weren’t always accompanied with any other issues, removing the offending frames stopped the warnings popping up and that was that. On a number of occasions the weird crumpled preview remained but the character actually animated fine in scene, sometimes not! To be absolutely sure I ended up having to delete and re-import models; something to try if all else fails.
A more straightforward show-stopper was the “Imported file ‘filename’ conversion failed: Transform ‘UpperBody’ for human bone ‘Hips’ not found.” message. This ended up being down to naming issues, if you’re using “copy from other avatar” when importing you need to make sure your hierarchy names all match up; I was working with duplicate models in Softimage and certain elements were automatically being assigned numerical suffixes when copy/pasting without me realizing, renaming them fixed the issue. I found the easiest way to check was to drag both the base model and the animated model into a Unity scene and methodically click through the hierarchies to see what was different. It isn’t always easy to find where the discrepancy is, especially if your using groups or selection sets when you’re exporting; parent transforms seem to magically appear/disappear sometimes during the import/export and compression/optimization process.
Another thing to be aware of when testing animation out in scene is the Culling Mode. It’s set on the animator component itself and is an optimization that stops objects being animated when they aren’t visible to the camera.
When something isn’t working for me, my first course of action is to put it in an empty scene and slowly add other elements back in until I can work out what’s causing the issue. Of course, every time I put the animated object in this instance into an empty scene to test, there were no objects in between it and the camera, so the animation wasn’t culled and worked fine! It’s a simple thing to fix but only if you know what that setting actually does; if you have mysteriously disappearing/unresponsive animated objects this could be the problem.
Finally, another issue I repeatedly ran into was Generic animation not playing at all when triggered via an animation controller. In my case this turned out to be root node related:
Try a few different options and see if it helps, again, this issue seemed to appear intermittently, often with very simple animations like a rotation transform on a door.
So it took a while, but I did eventually get a small section of animation into Unity, complete with separate object animation all syncing up (the door and the umbrella)…
I’m now roughly halfway through the allocated development schedule and, increasingly, jobs are needing to be done in parallel, I’ll need to add more detail to the environment to make sure the character animation matches up, timings for animations have a knock on effect on interactions and puzzles etc. Also attempting a little bit of marketing/PR which takes up a surprising amount of time! The next milestone is near the end of December with the environment being finalized, I’ll hopefully be updating in between then and now though with some screenshots and maybe a short teaser trailer if I can manage it.
As usual, I’ll be floating around on Twitter, Tumblr and Facebook throughout development, if you fancy following along. If you just want to hear about the big stuff, release dates etc. you can sign up to the Arcto Games Tinyletter.