Morphin
Overview
Unmute to hear dreamy soundtrack for dreamy animation.
Morphin is a new rigging and animation app for ipad. It's early days, but showing lots of promise.
Get it on the app store: https://apps.apple.com/app/morphinapp/id6642651792
Join the discord: https://discord.com/invite/X4J888k5
Workflow
The workflow is relatively straightforward if you've used other animation packages, especially Blender. If you've never touched animation before, well, trust me in that Morphin is about as simple as it gets. Animation is hard.
Anyway, the workflow is basically this:
- Import a model. Glb format, aim for under 10,000 triangles, the less the better. This can have textures, vertex colours, morph targets (aka blendshapes in Maya, or layers in Nomad that are only sculpting changes)
- Create a rig. Define a hierarchy of bones that fit your character.
- Bind the mesh. Assigns how much influence or 'weight' each bone should have to each vertex on your mesh.
- Refine weights. Apply paint corrections to these weights.
- Create IK. Inverse kinematic (IK) controls allow you to move feet and hands independent of the body.
- Create anim clips. These can be used to represent layers of animation.
- Keyframe or motion record animation.
- Bake animation down into per-frame keys if exporting elsewhere
- Export a glb to use in a web threejs player, or to a game engine like Godot.
I go through all these steps in several video tutorials I've recorded, linked below.
Known issues
I use Morphin almost exclusively with Nomad, so lots of these issues will be related to that Nomad <-> Morphin interchange.
- Delete Facegroups. Facegroups seem to be misinterpreted by Morphin, and will either break blendshapes, or split a single mesh into separate meshes for each facegroup. Just delete them for now, you don't need them in Morphin anyway. Go to the facegroup tool, and over on the left where it shows you the current patch colour, click it, then choose 'reset'.
- Models will be triangulated. As mentioned above, Morphin sticks to the 'true' GLTF spec which assumes all models are triangulated. This is a mild pain in terms of keeping a clean layout, and can make weight painting mildly annoying, but if you keep in mind that this is early days, its a mobile app, its all a bit of fun, you learn to ignore it.
- Round tripping back to Nomad isn't easy Again, triangulating on import, and it simply can't support the number of polys Nomad can handle (not many apps can really outside of zbrush!), so for now keep your hopes and dreams tempered in terms of a posing solution for Nomad. If you really want this, you need to unbind the mesh so that the bone deformation is baked into the vertices, and export that back to Nomad.
- Pivots aren't stored. Generally not a huge problem, as you'll be using bones to move things anyway.
- Overexposed lighting. The default lighting setup in Morphin is always too bright for Nomad models, I usually pull the exposure down to 0.5
- Groundplane misalignment. For some reason the ground plane in Morphin doesn't match up with Nomad, its a few units lower.
- Undo is a bit buggy. Not every action can be undone, so be a little careful, save regularly.
- No graph editor. For me this is the biggest missing feature, bezier keyframes and a graph editor are so core to animating in 3d. Hopefully it'll arrive soon!
Tutorials
I'm making them as fast as I can, if you've used Blender rigging it's pretty similar.
- Baking animation - animation clips can be combined and baked down, this includes IK.
- Talking trashcan - walkthrough of rigging and animating a googly eyed trashcan, using the motion recorder.
- Dancing tv - Tutorial of how to do layered motion recording to make a tv dance.
- Inverse kinematics in v1.7 - Quick tutorial showing how to setup IK and pole vectors.
- Motion recording - Quick tutorial on motion recording.
- Exercising frog - Early tutorial I made showing how to prep a character in Nomad, import to Morphin, rig and animate it.
Tips
Importing
As a general rule, a single mesh is better than multiple meshes. Morphin currently expects you to rig and bind each object individually, you can't select them all and choose 'bind', so a single mesh is easier to work with.
The exception is if you need access to separate parts more easily. For example that trashcan animation, I suspect it would be easier to rig if I could access the lid and the base as separate objects, so I split them.
Morphin will also triangulate models on import, be ready for that, or save a step and triangulate yourself beforehand so you have less surprises.
The less triangles you have the easier it will be to rig, the faster Morphin will run. Actually animating is fairly forgiving, its the weight painting and binding process that suffers with more triangles. Most of my models are under 10,000 polygons, usually substantially lower. Most of the detail comes from baked normal maps and colour/roughness/metalness maps.
You can use vertex colours, but I find if I'm trying to make my models relatively low res, things look better with textures instead.
Morphin will load parent/child relationships if you set them up in Nomad, but pivots will be at object centers, and as soon as you bind an object, the mesh will be removed from the hierarchy and put at the top of the world outliner. This is by design, in apps that don't do this, you can easily get issues where the mesh could be moved by the parent, and also moved by the bone, called a double transformation. Hence in most animation apps its advised to not use parenting at all if you plan to attach them to a skeleton.
Rigging, Binding, IK
Parenting meshes doesn't work well with GLTF, so the bind menu gives an option to parent an entire mesh to the selected bone, effectively a parenting operation.
When you unbind, Morphin will store the weights on the mesh, very handy if you need to adjust the skeleton, then rebind.
If you need update the bind pose, press the bind button again from the bind menu. This is especially useful for Inverse Kinematics; the auto pole vector will be placed at the knee joint, often quite large, and will make the leg flip easily. You can make the pole vector joint smaller and move it more in front of the knee, press the bind button, the updated position is now used as the default bind pose.
A common trick is to put a slight bend in the bones at the elbow and knees. This gives the IK solver clues as to which is the preferred way to bend; if you put those joints in a perfectly straight line, the IK solver will assume all bend directions are valid.
Painting weights
Getting smooth falloffs with skinning is tricky at the moment, Morphin lacks a smoothing brush common to most other 3d apps. I tend to use the add brush with a value of 0.1, and slowly increase weight. Where possible I'll use the linear or radial gradient tools too.
Generally, paint 'up', not 'down'. By that I mean I never use the replace brush at a value less than 1.0, and never use the sub brush. I apply this rule in other rigging software with normalized weights, not just Morphin.
Normalized weights, or don't paint down
Say you had a single bone, and you're animating a box. It makes sense that you want the vertices to be 100% weighted to the box. If they're weighted less than that, they'll be left behind when the bone moves.
Now say you had a parent and child bone, the parent bone is at the bottom of the box, the child bone at the top. Again makes sense that the vertices at the bottom of the box should be weighted 100% to the bottom bone, the top vertices 100% to the top bone.
Now imagine a cylinder with a few divisions, and the same parent/child bones, like an arm. Once again, most of the lower verts should belong 100% to the lower bone, most of the upper verts should be 100% weighted to the top bone. But what about near the elbow?
To get a smooth bend, you could weight those vertices 50% to the top bone, 50% to the bottom bone. You've made sure that the total weight adds up to 100%, which is called normalized weights.
Lets imaging something more complex, like a fat character with several spine bones. To get a soft smooth motion, you might need vertices in the tummy to be weighted 50% to the closest bone, 20% to the next closest bones and 5% to the next bones after that. So 50 + 20 + 20 + 5 + 5 = 100.
Now say you want to edit these weights using a painting tool. To add weight to the closest bone, you could could add 10%. To remain normalized the weight has to come from somewhere else. A simple answer would be to take an equal amount of weight away from all the other bones. There's 4 other bones, so 10 divided by 4 is 2.5, so the new weights would be 50 + 18.5 + 18.5 + 2.5 + 2.5 = 100.
But say you want to remove 10% from the first bone, so its new weight is 40%. You can take that away, but then where does it go? Do you do the same step as above in reverse? Take the weight difference, divide by the number of other bones, add it? So 40 + 22.5 + 7.5 + 7.5 = 100.
The issue here is maybe you don't want that extra weight to go to the 5% bones. Or maybe you want the weight distribution to favour the next closest bones. Or maybe the system will take into account ALL the bones in your rig, and add 0.02% everywhere. The normalization process when subtracting weights can lead to unexpected results, which is why I never use it.
Adding weight is clear, subtracting weight is not.
Animating
Use the countdown timer to give you self a pause before motion recording (its in the advanced menu)
Also when recording, it can be handy to record at a slower multiplier, say 0.5, then speed it back up when you're done.
Make use of multiple anim clips to organise your keyframes.
When recording fast rotation, try using a higher sampling rate in the advanced menu.
To hide the joints when animating/playing, press the bone options button at the top of the bones menu on the left, and turn the bone visibility slider down to zero. Annoyingly IK handles have a separate visibility control, select it, go to the IK menu, settings, and toggle visibility from there.
Exporting
- If you want to export a posed character back to Nomad, you need to 'bake' in the skeleton deformation. Exporting assumes that another app will understand how to apply a gltf skeleton, Nomad currently doesn't allow this. To bake, select the mesh in the outliner, go to the bind menu, choose unbind. Now you can export, and that pose will appear in Nomad.