Jump to content

Animation Pipeline


Gen.Kenobi
 Share

Recommended Posts

ERROR: art/animation/fisherman_paddling.dae: Assertion not satisfied (line 393): failed requirement "recognised skeleton structure"

ERROR: CSkeletonAnimManager::GetAnimation(art/animation/fisherman_paddling.dae): Failed loading, marked file as bad

Just the errors the engine gives me. (Tried again with both DEF and no DEF at the root, no luck)

:(

EDIT: Ben: the file is here> http://www.wildfiregames.com/forum/index.php?showtopic=15552&view=findpost&p=233148

Link to comment
Share on other sites

Ok, taking a look here: file="infantry/general/forage.psa" & file="infantry/general/dude/dudeidle.psa"

Those animations aren't going to work with your .dae file because they are intended to be used with the standard skeleton. Right now your using some sort of custom blender skeleton (which we need to fix in the future). So that is probably giving you an error. You also can't use m_pants_celt.dae because it is also using the default skeleton (not the custom blender skeleton you made).

I doubt your prop points are going to work either. So lets just eliminate that questionable variable as well.

So try this:

1) Place fisherman_paddling.dae in the skeletal mesh folder (where m_pants_celt.dae resides).

2) For testing purposes - change your actor to this:

<?xml version="1.0" encoding="utf-8"?>
<actor version="1">
<castshadow/>
<group>
<variant frequency="100" name="Base">
<animations>
<animation file="fisherman_paddling.dae" name="Idle" speed="30"/>
<animation file="fisherman_paddling.dae" name="Walk" speed="30"/>
</animations>
<mesh>skeletal/fisherman_paddling.dae</mesh>
</variant>
</group>
<material>player_trans.xml</material>
</actor>

Line 393 doesn't help with the skeleton file either... odd. Let me know what your new error is (I'm sure you'll get one).

Link to comment
Share on other sites

Just did what you said. :)

ERROR: art/meshes/skeletal/fisherman_paddling.dae: Assertion not satisfied (line 393): failed requirement "recognised skeleton structure"

ERROR: Could not load mesh 'art/meshes/skeletal/fisherman_paddling.dae'

ERROR: CObjectEntry::BuildVariation(): Model art/meshes/skeletal/fisherman_paddling.dae failed to load

ERROR: Failed to build prop model "units/china/chin_fisherman.xml" on actor "fishing_ship"

My .dae file is supposed only to provide the animation, not to work as a unit... It should take the current unit model and animate it...

I think I'm getting lost again. :P But I did as you said.

Link to comment
Share on other sites

Just did what you said. :)

ERROR: art/meshes/skeletal/fisherman_paddling.dae: Assertion not satisfied (line 393): failed requirement "recognised skeleton structure"

ERROR: Could not load mesh 'art/meshes/skeletal/fisherman_paddling.dae'

ERROR: CObjectEntry::BuildVariation(): Model art/meshes/skeletal/fisherman_paddling.dae failed to load

ERROR: Failed to build prop model "units/china/chin_fisherman.xml" on actor "fishing_ship"

My .dae file is supposed only to provide the animation, not to work as a unit... It should take the current unit model and animate it...

I think I'm getting lost again. :P But I did as you said.

Did your animation file have a mesh included with it - or was it all bones? I remember seeing a mesh. There is no difference between a .dae file that was saved for mesh purposes and those that were saved for animation purposes. When you call the .dae file out as a mesh in the actor it only looks at the mesh information in the .dae file. When you call out animation file in the actor it only looks at the animation portion of the .dae.

It looks like you still have an issue with the skeleton. Humor me and give me your fisherman_paddling.dae file - even though you think it is the same as the fisherman.dae file you posted earlier.

Link to comment
Share on other sites

ERROR: art/animation/fisherman_paddling.dae: Assertion not satisfied (line 393): failed requirement "recognised skeleton structure"

ERROR: CSkeletonAnimManager::GetAnimation(art/animation/fisherman_paddling.dae): Failed loading, marked file as bad

Just the errors the engine gives me. (Tried again with both DEF and no DEF at the root, no luck)

:(

EDIT: Ben: the file is here> http://www.wildfiregames.com/forum/index.php?showtopic=15552&view=findpost&p=233148

If it's the same file, then your latest posted skeleton won't work, because it still doesn't get the bones names correct (it leaves off .01, .02, etc. on the end of some of them). I don't know if it's clear or not, but you know that you can open the DAE file in a text editor? I recommend something like Notepad++ on Windows and set the language to XML so you get nice syntax highlighting. If you're only looking at the names in Blender, they might be different.

Link to comment
Share on other sites

Wouldn't it be much easier to just make the rig by hand and match existing bipeds in the game? I think you would already be done :)

That does sound easier, there is a lot of clutter in this rig :S

Daniel try replacing the DEF- with ORG-

    <visual_scene id="Scene" name="Scene">
<node>
<node name="root">
<node org="ORG-hips">
<node org="ORG-spine">
<node org="ORG-ribs">
<node org="ORG-neck">
<node org="ORG-head">
</node>
<node def="DEF-head">
</node>
</node>

<node org="ORG-shoulder.L">
<node org="ORG-upper_arm.L">
<node org="ORG-forearm.L">
<node org="ORG-hand.L">
<node def="DEF-hand.L">
</node>
</node>
<node def="DEF-forearm.L.01">
</node>
<node def="DEF-forearm.L.02">
</node>
</node>
<node def="DEF-upper_arm.L.02">
</node>
</node>
<node def="DEF-shoulder.L">
</node>
<node def="DEF-upper_arm.L.01">
</node>

<node name="upper_arm_pole.L">
</node>
</node>
<node org="ORG-shoulder.R">
<node org="ORG-upper_arm.R">
<node org="ORG-forearm.R">
<node org="ORG-hand.R">
<node def="DEF-hand.R">
</node>
</node>
<node def="DEF-forearm.R.01">
</node>
<node def="DEF-forearm.R.02">
</node>
</node>
<node def="DEF-upper_arm.R.02">
</node>
</node>
<node def="DEF-shoulder.R">
</node>
<node def="DEF-upper_arm.R.01">
</node>

<node name="upper_arm_pole.R">
</node>
</node>
<node def="DEF-neck">
</node>

<node name="shoulder.L">
</node>
<node name="shoulder.R">
</node>
</node>
<node def="DEF-ribs">
</node>
</node>
<node org="ORG-thigh.L">
<node org="ORG-shin.L">
<node org="ORG-foot.L">
<node org="ORG-toe.L">
<node def="DEF-toe.L">
</node>
</node>
<node def="DEF-foot.L">
</node>
</node>
<node org="ORG-heel.L">
<node org="ORG-heel.02.L">
</node>
</node>
<node def="DEF-shin.L.01">
</node>
<node def="DEF-shin.L.02">
</node>
</node>
<node def="DEF-thigh.L.02">
</node>
</node>
<node org="ORG-thigh.R">
<node org="ORG-shin.R">
<node org="ORG-foot.R">
<node org="ORG-toe.R">
<node def="DEF-toe.R">
</node>
</node>
<node def="DEF-foot.R">
</node>
</node>
<node org="ORG-heel.R">
<node org="ORG-heel.02.R">
</node>
</node>
<node def="DEF-shin.R.01">
</node>
<node def="DEF-shin.R.02">
</node>
</node>
<node def="DEF-thigh.R.02">
</node>
</node>
<node def="DEF-spine">
</node>
<node def="DEF-thigh.L.01">
</node>

<node def="DEF-thigh.R.01">
</node>

</node>
<node name="hand_ik.R">
</node>
<node name="VIS-hand_ik.R">
</node>
<node name="VIS-upper_arm_pole.R">
</node>
<node name="hand_ik.L">
</node>
<node name="VIS-hand_ik.L">
</node>
<node name="VIS-upper_arm_pole.L">
</node>

<node name="foot_ik.R">

<node name="foot_roll.R">
</node>
<node name="thigh_pole.R">
</node>
</node>
<node name="VIS-foot_ik.R">
</node>
<node name="VIS-thigh_pole.R">
</node>
<node name="foot_ik.L">

<node name="foot_roll.L">
</node>
<node name="thigh_pole.L">
</node>
</node>
<node name="VIS-foot_ik.L">
</node>
<node name="VIS-thigh_pole.L">
</node>

<node def="DEF-hips">
</node>
<node name="torso">
<node name="ribs">

</node>
<node name="hips">


</node>


</node>
</node>
</node>

Here is what the dae structure looks like simplified. Does blender have any documentation explaining further what the rig's setup is - what are the DEF, ORG, MCH, VIS supposed to mean? The problem with the DEF is that I don't understand the difference between the shin and forearm. Somtimes rigs have a 2 bone solution for that portion of the leg/bone to account for better motion with wrist rolls and angle twists. Maybe that is why? I'm not sure which one to pick - .01 or .02

Ben, sorry to beat a dead horse on this... but could you explain why did you think it was DEF and not ORG (my head is a bit thick ;))

Link to comment
Share on other sites

No luck at all.

Looks like that with this new actor code, there's not even a model displaying on the fishing boat (the fisherman boat).

I didn't use a normal rig, I used Blender's add-on Rigfy. It automatically adds the rigs and the deformation bones and solvers for the user, so we don't have to spend too much time rigging and jump into animating... Maybe that's the issue... Maybe it would need a rig to be made from scratch... I dunno... Maybe Pureon can help out with this? Since he gots most rigs working ingame so far...

Link to comment
Share on other sites

Ben, sorry to beat a dead horse on this... but could you explain why did you think it was DEF and not ORG (my head is a bit thick ;))

Because of this part of fisherman.dae:


<library_controllers>
<controller id="rig_Mesh-skin" name="rig">
<skin source="#Mesh_181_kl-mesh">
<bind_shape_matrix>0.4865988 0 0 0 0 -7.9277e-8 -0.4865988 0 0 0.4865988 -7.9277e-8 0 0 0 0 1</bind_shape_matrix>
<source id="rig_Mesh-skin-joints">
<Name_array id="rig_Mesh-skin-joints-array" count="29">DEF-head DEF-hand_L DEF-forearm_L_01 DEF-forearm_L_02 DEF-upper_arm_L_02 DEF-shoulder_L DEF-upper_arm_L_01 DEF-hand_R DEF-forearm_R_01 DEF-forearm_R_02 DEF-upper_arm_R_02 DEF-shoulder_R DEF-upper_arm_R_01 DEF-neck DEF-ribs DEF-toe_L DEF-foot_L DEF-shin_L_01 DEF-shin_L_02 DEF-thigh_L_02 DEF-toe_R DEF-foot_R DEF-shin_R_01 DEF-shin_R_02 DEF-thigh_R_02 DEF-spine DEF-thigh_L_01 DEF-thigh_R_01 DEF-hips</Name_array>
<technique_common>
...

The most important being the data in rig_Mesh-skin-joints-array, which to get into really technical details of the COLLADA spec, is a list of the SIDs (not names!) of bones/joints for which inverse bind poses are provided in the model, and which can be used for vertex weighting. Note there are 29 IDs in the above array and there are 29 pose transforms in rig_Mesh-skin-bind_poses. Those IDs are looked up in the scene nodes, ignoring the ORG/MCH bones.

All of our existing models work the same way, though with a different numbers and names of bones. Unfortunately adding to the confusion in this example, the IDs and names are not identical for the bones, the game expects the exact names (not IDs!) in skeletons.xml. This info is external to the rigify tool or Blender, and according to the COLLADA spec. The reason it's this complicated is that you might want to share data between multiple models and animations in the same scene - a bit overkill for us :(

As far as why there are so many extraneous bones, it's perfectly legal COLLADA to have nodes/bones that aren't used in the animation, and in this case Blender dumps all the bones in the scene to the COLLADA document, even though most other apps have no practical use for them, the exporter doesn't know about rigify. The bones do have specific meanings though, for which you need to read the rigify README (in scripts\addons\rigify) ;)

Rigify next prepends "ORG-" to all of the bones. These are the "original"

bones of the metarig, and they are used as the glue between rig types, as I

will explain later.

...

In short: with the exception of adding children/constraints to "ORG-"

bones, only mess with things that you yourself create.

It is also generally a good idea (though not strictly required) that the rig

type add constraints to the "ORG-" bones it was generated from so that the

"ORG-" bones move with the animation controls.

For example, if I make a simple arm rig type, the controls that the animator

uses should also move the "ORG-" bones. That way, any other rig-types that are

children of those "ORG-" bones will move along with them. For example, any

fingers on the end of the arm.

Also, any bones that the animator should not directly animate with should have

their names prefixed with "DEF-" or "MCH-". The former if it is a bone that

is intended to deform the mesh, the latter if it is not.

It should be obvious, then, that a bone cannot be both an animation control and

a deforming bone in Rigify. This is on purpose.

I interpret this to mean: when animating in Blender after using rigify, only animate the ORG bones or those you create. This is because the ORG bones will automatically transform the others as appropriate, only in Blender. But they don't directly control the skin/mesh, the DEF bones do that, which is why they are assigned the importance in the COLLADA document.

Link to comment
Share on other sites

So I did a little bit of research... http://blenderartists.org/forum/showthread.php?165421-How-to-bake-an-armature-animation

There isn't too much official documentation... the blender wiki only does have info about baking in the 2.4 version...And it's not very clear. This thread above says something about a script...but I'm unsure...

Would be awesome if the engine could read .bvh ... Does it? Anyways... I never tried baking an animation before, as I said, I'm not an animator by trade... This area is still brand new to me.

Anyways... I exported it to bvh... Dunno if it helps.

bvh.zip

Link to comment
Share on other sites

Well, I think I'm closer. I need to go to bed, but here is what I got. I now get this from the log:

CSkeletonAnimManager::GetAnimation(art/animation/test/fisherman_paddling.dae): Loaded successfully

But, then immediately afterward I get this:

ERROR: Failed to find file: ""

Odd... I don't know what its asking for.

Here is my actor:

<?xml version="1.0" encoding="utf-8"?>
<actor version="1">
<castshadow/>
<group>
<variant frequency="100" name="Base">
<animations>
<animation file="test/fisherman_paddling.dae" name="idle" speed="10"/>
</animations>
<mesh>test/fisherman_paddling.dae</mesh>
</variant>
</group>
<material>player_trans.xml</material>
</actor>

Here is my revised skeleton:

<skeleton title="Blender biped" target="biped">
<identifier>
<root>rig</root>
</identifier>
<bone name="root"><target>root</target>
<bone name="DEF-hips"><target>pelvis</target>
<bone name="DEF-spine"><target>spine</target>
<bone name="DEF-ribs"><target>spine1</target>
<bone name="DEF-neck"><target>neck</target>
<bone name="DEF-head"><target>head</target>
</bone>
</bone>
<bone name="DEF-shoulder_L"><target>l_clavicle</target>
<bone name="DEF-upper_arm_L_01"><target>l_upperarm</target>
<bone name="DEF-upper_arm_L_02">
<bone name="DEF-forearm_L_01"><target>l_forearm</target>
<bone name="DEF-forearm_L_02">
<bone name="DEF-hand_L"><target>l_hand</target>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="DEF-shoulder_R"><target>r_clavicle</target>
<bone name="DEF-upper_arm_R_01"><target>r_upperarm</target>
<bone name="DEF-upper_arm_R_02">
<bone name="DEF-forearm_R_01"><target>r_forearm</target>
<bone name="DEF-forearm_R_02">
<bone name="DEF-hand_R"><target>r_hand</target>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="DEF-thigh_L_01"><target>l_thigh</target>
<bone name="DEF-thigh_L_02">
<bone name="DEF-shin_L_01"><target>l_calf</target>
<bone name="DEF-shin_L_02">
<bone name="DEF-foot_L"><target>l_foot</target>
<bone name="DEF-toe_L">
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="DEF-thigh_R_01"><target>r_thigh</target>
<bone name="DEF-thigh_R_02">
<bone name="DEF-shin_R_01"><target>r_calf</target>
<bone name="DEF-shin_R_02">
<bone name="DEF-foot_R"><target>r_foot</target>
<bone name="DEF-toe_R">
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</skeleton>

What are the differences? I'm pointing to the sid= attribute instead of the name= attribute on the node. I believe the root is actually "rig" instead of what we had it before (root). I've added the 01 and 02 to the appropriate bones.

Why sid? Because I was previously getting errors like this:

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_R_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_02'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_R_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-spine'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_02'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-hips'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-spine'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-ribs'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-hips'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-spine'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-ribs'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_02'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_02'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-hips'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-thigh_L_01'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-spine'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-ribs'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-spine'</p>

<p class="error">ERROR: art/meshes/test/fisherman_paddling.dae: Vertex influenced by unrecognised bone 'DEF-hips'</p>

etc... 724 in total (I think the number of vertex' in the model)

Note the _ instead of the . separating the R/L and 01/02.

Hopefully this stimulates some thoughts, I think we are almost there :)

Link to comment
Share on other sites

Edit: ignore all that, the test model was cached and didn't reload :blink:

This thread above says something about a script...but I'm unsure...

The script would probably clean up the unused bones, rename them, and apply whatever animation magic goes on in Blender, resulting in only transformations of the bind pose, which is what we need.

Would be awesome if the engine could read .bvh ... Does it?

No, it currently only reads COLLADA. If someone was able to write an importer for BVH, we might use it, I don't know what (dis)advantages it has :)

Link to comment
Share on other sites

ERROR: Failed to find file: ""

Odd... I don't know what its asking for.

Maybe it needs a texture?

Edit: ignore all that, the test model was cached and didn't reload :blink:

One danger is that the PMD/PAE cache isn't keyed on the contents of skeletons.xml, i.e. if you edit skeletons.xml but not the mesh/animation then it won't notice the change. (You have to delete %appdata%\0ad\cache\ or ~/.cache/0ad to empty the cache, or modify the mesh/animation so it won't be found in the cache). (That bug used to not matter since nobody edited skeletons.xml much, but now it seems everyone is at it :()

Link to comment
Share on other sites

Maybe it needs a texture?
A good call! Daniel try adding a texture callout to the actor I posted here (be sure the mesh and animation file are in the appropriate location - I put mine in the test folder of both mesh and animation).
Jason, could you share the edited .dae file?
I didn't alter the .dae file, so you can use the fisherman_paddling.dae you shared earlier.
Link to comment
Share on other sites

LOL. I got a program error when trying to load the fisherman in the map editor...

Atlas crashed.


Assertion failed: "variant.GetNodeName() == el_variant"
Location: ObjectBase.cpp:133 (CObjectBase::Load)

Call stack:

(error while dumping stack: No stack frames found)
errno = 0 (No error reported here)
OS error = 0 (no error code was set)

Just did what you said, and added a texture:

<?xml version="1.0" encoding="utf-8"?>
<actor version="1">
<castshadow/>
<group>
<variant frequency="100" name="Base">
<animations>
<animation file="fisherman_paddling.dae" name="idle" speed="10"/>
</animations>
<mesh>skeletal/fisherman_paddling.dae</mesh>
</variant>
<group>
<variant frequency="1" name="Clothes-1">
<texture>skeletal/chin_iar_b.png</texture>
</variant>
</group>
</group>
<material>player_trans.xml</material>
</actor>

LOL. And yeah, I have added your new skeleton code into the skeleton.xml file.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...