Post by michaelb01 on Feb 13, 2015 7:16:36 GMT -5
I've just finished my first job with Miarmy and it was, all in all, a success! Thanks to a great piece of software! As with any software there are improvements that could be made and here are a few thoughts I had during my time working with Miarmy. I was using Miarmy 3.5 so some of these may have been addressed in 3.6.
Placement
Ability to paint density for placement. This could be texture or vertex colour. Similar to Houdini/Goalem.
Ability to move individual “Place Units”. You can of course move the agents then use inverse placement (which is great) or use python to move them but it would be faster to do it directly on the “units” themselves
Animation
Smart action blending. Blend joint velocities as well as position to make it as smooth as possible. Some joints may need more or less frames than other joints to blend over depending on their relative positions, i.e. if the difference between two joint positions is large on the transition frame it may need a larger entry/exit range than a joint that is very close on the transition frame. This would be pre-analysed and determined with a script so the user wouldn’t have to add any additional input.
Lock action/action group after n frames so it can’t be triggered too quickly directly after it has been triggered
Asynchronous timelines for partial blending actions with different lengths. E.g. if a “wave” is partially blended onto a “walk” action and is triggered 70% through the walk action it should not be cut short when the “walk” action ends.
Ability to use “Cycle Phase Based Transition” with action groups - I seem to remember this wasn’t working?
UV pin rotation angle - add an offset in all angles so it doesn’t have to align the agent Y to the normal of the geometry and X,Z on tangents.
Transition
One action shell to be to multiple states. For example I wanted to have a “run” action state and a “sprint” state but have a “jumpOver” action available to both of them. Currently I think the only way to do this is to duplicate the action and rename it (e.g. “jumpOverSprint”) and connect that to the sprint state. However now there is now an extra action and actionShell node and if you are doing this many times your outliner and transition map can get quite complex.
Could we remove the “move” tool for the transition map and just use Maya’s standard move tool (q)?
Logic/Decision
Fuzzy logic that doesn’t have to be linear - could be logarithmic or eased in/out. I think this would yield more realistic results, e.g. running nearby an agent they would make a very minor adjustment when far away but a much more drastic move when close
A “Mirror action” checkbox. Nearly every decision needs to be created twice - once for an input on the left side and once for the right and they are usually identical but with negated “x” inputs, e.g. “sound.x”, “zone.x”. It would save time (and fewer nodes) to have a checkbox that would mirror the decision for you.
“x” and “d” channels (like zone.x, zone.d) should be incorporated into one when used in conjunction. For example if you want to know if there is an agent within 10 metres on your left you would use sound.x and sound.d to achieve this. If there is an agent 50 metres away on your left, sound.x will return true but sound.d will return false, however if there is another agent 5 metres on your right sound.d will now return true so the decision will now return true, but there is no agent within 10 metres on the left! So for this example sound.x and sound.d must be checking the same agent.
Logic such as relative speed could use the closest agent or an average of a few agents. I think at the moment if there are 10 nearby agents, the relative speed logic will randomly pick between them and so return constantly changing values?
Physics
Joint inertia. It seems like this is just applied to the root bone? If so it would be nice to have it on all joints (except those marked with “skip anim” or “disable den subtree”.
Rag doll awareness. We can use the servo feature to influence the rag doll towards a specific action but we lose all channel inputs when the agent becomes dynamic. If these were still available we could do things like:
- break the fall/put hands out if falling to the ground
- wave arms to rebalance centre of gravity and stay upright
- protect head in tumble
This would add a lot of realism!
Rag doll joint stiffness attribute, either per joint or globally. This could be useful to reduce floppy limbs (servo can also be used to help this)
Servo weight so for example we can add in 50% of a servo action. Also servo weight for the joints - for example you might want to control the arms and head with a servo action but the legs could remain almost completely dynamic
Custom “kine prim meshes” need to be upgraded - this may just be a physX thing, not Miarmy
Cache
Import cache from a different scene on top of current scene. E.g. if the director is happy with most of the crowd and that’s cached out but then you need to add in a few more agents it would be useful to bring in that cache as reference for placement and even better if the active agents would interact with the cached agents.
Mark dead on layer placement cache - I think this is currently not working and is a bug
It seems when I bake down some agents some of the rotations will flip over one frame. So it looks fine in the viewport but if you render with motion blur or step through half frames you will see the flip (which ruins the render). Often it can be as easy as just adding 180 degrees to one axis on the root bone but it would be great if this were fixed!
Rendering
When exporting an Arnold .ass file textures should be randomised independently of each other. Currently if there are 20 of the diffuse texture but only 3 different spec texture maps then script will break after the 3rd texture so we will only get 3 diffuse textures too. The way round this is to duplicate all the spec maps so you have the same amount for each texture type. But if you have hundreds of textures this can be very time consuming. The script should be able to randomise between all 20 of the diffuse textures and between the 3 spec maps in this example
Placement
Ability to paint density for placement. This could be texture or vertex colour. Similar to Houdini/Goalem.
Ability to move individual “Place Units”. You can of course move the agents then use inverse placement (which is great) or use python to move them but it would be faster to do it directly on the “units” themselves
Animation
Smart action blending. Blend joint velocities as well as position to make it as smooth as possible. Some joints may need more or less frames than other joints to blend over depending on their relative positions, i.e. if the difference between two joint positions is large on the transition frame it may need a larger entry/exit range than a joint that is very close on the transition frame. This would be pre-analysed and determined with a script so the user wouldn’t have to add any additional input.
Lock action/action group after n frames so it can’t be triggered too quickly directly after it has been triggered
Asynchronous timelines for partial blending actions with different lengths. E.g. if a “wave” is partially blended onto a “walk” action and is triggered 70% through the walk action it should not be cut short when the “walk” action ends.
Ability to use “Cycle Phase Based Transition” with action groups - I seem to remember this wasn’t working?
UV pin rotation angle - add an offset in all angles so it doesn’t have to align the agent Y to the normal of the geometry and X,Z on tangents.
Transition
One action shell to be to multiple states. For example I wanted to have a “run” action state and a “sprint” state but have a “jumpOver” action available to both of them. Currently I think the only way to do this is to duplicate the action and rename it (e.g. “jumpOverSprint”) and connect that to the sprint state. However now there is now an extra action and actionShell node and if you are doing this many times your outliner and transition map can get quite complex.
Could we remove the “move” tool for the transition map and just use Maya’s standard move tool (q)?
Logic/Decision
Fuzzy logic that doesn’t have to be linear - could be logarithmic or eased in/out. I think this would yield more realistic results, e.g. running nearby an agent they would make a very minor adjustment when far away but a much more drastic move when close
A “Mirror action” checkbox. Nearly every decision needs to be created twice - once for an input on the left side and once for the right and they are usually identical but with negated “x” inputs, e.g. “sound.x”, “zone.x”. It would save time (and fewer nodes) to have a checkbox that would mirror the decision for you.
“x” and “d” channels (like zone.x, zone.d) should be incorporated into one when used in conjunction. For example if you want to know if there is an agent within 10 metres on your left you would use sound.x and sound.d to achieve this. If there is an agent 50 metres away on your left, sound.x will return true but sound.d will return false, however if there is another agent 5 metres on your right sound.d will now return true so the decision will now return true, but there is no agent within 10 metres on the left! So for this example sound.x and sound.d must be checking the same agent.
Logic such as relative speed could use the closest agent or an average of a few agents. I think at the moment if there are 10 nearby agents, the relative speed logic will randomly pick between them and so return constantly changing values?
Physics
Joint inertia. It seems like this is just applied to the root bone? If so it would be nice to have it on all joints (except those marked with “skip anim” or “disable den subtree”.
Rag doll awareness. We can use the servo feature to influence the rag doll towards a specific action but we lose all channel inputs when the agent becomes dynamic. If these were still available we could do things like:
- break the fall/put hands out if falling to the ground
- wave arms to rebalance centre of gravity and stay upright
- protect head in tumble
This would add a lot of realism!
Rag doll joint stiffness attribute, either per joint or globally. This could be useful to reduce floppy limbs (servo can also be used to help this)
Servo weight so for example we can add in 50% of a servo action. Also servo weight for the joints - for example you might want to control the arms and head with a servo action but the legs could remain almost completely dynamic
Custom “kine prim meshes” need to be upgraded - this may just be a physX thing, not Miarmy
Cache
Import cache from a different scene on top of current scene. E.g. if the director is happy with most of the crowd and that’s cached out but then you need to add in a few more agents it would be useful to bring in that cache as reference for placement and even better if the active agents would interact with the cached agents.
Mark dead on layer placement cache - I think this is currently not working and is a bug
It seems when I bake down some agents some of the rotations will flip over one frame. So it looks fine in the viewport but if you render with motion blur or step through half frames you will see the flip (which ruins the render). Often it can be as easy as just adding 180 degrees to one axis on the root bone but it would be great if this were fixed!
Rendering
When exporting an Arnold .ass file textures should be randomised independently of each other. Currently if there are 20 of the diffuse texture but only 3 different spec texture maps then script will break after the 3rd texture so we will only get 3 diffuse textures too. The way round this is to duplicate all the spec maps so you have the same amount for each texture type. But if you have hundreds of textures this can be very time consuming. The script should be able to randomise between all 20 of the diffuse textures and between the 3 spec maps in this example