(apparent) parenting issue in custom exporter

Hey everyone!

Finally got a chance to work on exporting animated models from Houdini to Panda, and I seem to have hit a bit of a snag.

The model itself seems to export fine, and the point weights seem to be correct both in Houdini and Panda. In Houdini, I did a very simple test where a tube gets deformed by two bones. The root bone doesn’t move at all (I tried that test as well and it worked great), but its child rotates 45 degrees over 48 frames. The animation looks fine in Houdini but in Panda it ends up looking like this:

It starts as a straight axis-aligned tube like it should, and over two seconds moves to the position you see above. It should look like the below:

This looks like a parenting issue to me (since it looks kind of like it’s rotating about the origin instead of relative to its parent bone), but the way I’ve described my joint hierarchy in my egg files looks awfully similar to the panda-walk.egg and panda-model.egg files I’ve been comparing them to.

Any ideas?

Thanks!!!

…here is my model file if you need it:

<CoordinateSystem> { Y-Up }

<Comment> description {
  "Egg file generated by egg.py"
  "from hip file C:/Users/Robby/Documents/Fractals/Panda/pipeline/test_basics_v05.hipnc"
  "root node of rig = /obj/egg_model/rest_skeleton/root"
}
<Texture> nrml {
  worleynrml.bmp
  <Scalar> envtype { normal }
}
<Texture> gloss {
  worleynrml.bmp
  <Scalar> envtype { gloss }
}
<Texture> diff {
  textest.bmp
}
<Group> zuberegg {
  <Dart> { 1 }
  <Group> Character01 {
    <Group> panda_mesh {
      <VertexPool> zuberegg_Vertices {
        <Vertex> 0 {
          0.1 3.45909e-015 1.4175
          <UV> { 0.25 0.75 }
          <Normal> { 1 3.68377e-008 1.93572e-009 }
          // bone1:1
        }
        <Vertex> 1 {
          0.0309017 0.0951057 1.4175
          <UV> { 0.0351497 0.75 }
          <Normal> { 0.309017 0.951057 1.2192e-009 }
          // bone1:1
        }
        <Vertex> 2 {
          0.0309017 0.0951057 1.89
          <UV> { 0.0351497 1 }
          <Normal> { 0.309017 0.951057 6.59268e-010 }
          // bone1:1
        }
        <Vertex> 3 {
          0.1 4.67535e-015 1.89
          <UV> { 0.25 1 }
          <Normal> { 1 7.36754e-008 5.03669e-010 }
          // bone1:1
        }
        <Vertex> 4 {
          0.0309017 0.0951057 1.4175
          <UV> { 0.0351497 0.75 }
          <Normal> { 0.309017 0.951057 1.2192e-009 }
          // bone1:1
        }
        <Vertex> 5 {
          -0.0809017 0.0587785 1.4175
          <UV> { 0.841715 0.75 }
          <Normal> { -0.809017 0.587785 -3.09398e-009 }
          // bone1:1
        }
        <Vertex> 6 {
          -0.0809017 0.0587785 1.89
          <UV> { 0.841715 1 }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // bone1:1
        }
        <Vertex> 7 {
          0.0309017 0.0951057 1.89
          <UV> { 0.0351497 1 }
          <Normal> { 0.309017 0.951057 6.59268e-010 }
          // bone1:1
        }
        <Vertex> 8 {
          -0.0809017 0.0587785 1.4175
          <UV> { 0.841715 0.75 }
          <Normal> { -0.809017 0.587785 -3.09398e-009 }
          // bone1:1
        }
        <Vertex> 9 {
          -0.0809017 -0.0587785 1.4175
          <UV> { 0.658285 0.75 }
          <Normal> { -0.809017 -0.587785 -4.13061e-010 }
          // bone1:1
        }
        <Vertex> 10 {
          -0.0809017 -0.0587785 1.89
          <UV> { 0.658285 1 }
          <Normal> { -0.809017 -0.587785 8.64739e-010 }
          // bone1:1
        }
        <Vertex> 11 {
          -0.0809017 0.0587785 1.89
          <UV> { 0.841715 1 }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // bone1:1
        }
        <Vertex> 12 {
          -0.0809017 -0.0587785 1.4175
          <UV> { 0.658285 0.75 }
          <Normal> { -0.809017 -0.587785 -4.13061e-010 }
          // bone1:1
        }
        <Vertex> 13 {
          0.0309017 -0.0951056 1.4175
          <UV> { 0.46485 0.75 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:1
        }
        <Vertex> 14 {
          0.0309017 -0.0951056 1.89
          <UV> { 0.46485 1 }
          <Normal> { 0.309017 -0.951057 9.23632e-010 }
          // bone1:1
        }
        <Vertex> 15 {
          -0.0809017 -0.0587785 1.89
          <UV> { 0.658285 1 }
          <Normal> { -0.809017 -0.587785 8.64739e-010 }
          // bone1:1
        }
        <Vertex> 16 {
          0.0309017 -0.0951056 1.4175
          <UV> { 0.46485 0.75 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:1
        }
        <Vertex> 17 {
          0.1 3.45909e-015 1.4175
          <UV> { 0.25 0.75 }
          <Normal> { 1 3.68377e-008 1.93572e-009 }
          // bone1:1
        }
        <Vertex> 18 {
          0.1 4.67535e-015 1.89
          <UV> { 0.25 1 }
          <Normal> { 1 7.36754e-008 5.03669e-010 }
          // bone1:1
        }
        <Vertex> 19 {
          0.0309017 -0.0951056 1.89
          <UV> { 0.46485 1 }
          <Normal> { 0.309017 -0.951057 9.23632e-010 }
          // bone1:1
        }
        <Vertex> 20 {
          0.1 -1.30353e-015 0.945
          <UV> { 0.25 0.5 }
          <Normal> { 1 3.68377e-008 6.40418e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 21 {
          0.0309017 0.0951057 0.945
          <UV> { 0.0351497 0.5 }
          <Normal> { 0.309017 0.951057 -7.61037e-011 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 22 {
          0.0309017 0.0951057 1.4175
          <UV> { 0.0351497 0.75 }
          <Normal> { 0.309017 0.951057 1.2192e-009 }
          // bone1:1
        }
        <Vertex> 23 {
          0.1 3.45909e-015 1.4175
          <UV> { 0.25 0.75 }
          <Normal> { 1 3.68377e-008 1.93572e-009 }
          // bone1:1
        }
        <Vertex> 24 {
          0.0309017 0.0951057 0.945
          <UV> { 0.0351497 0.5 }
          <Normal> { 0.309017 0.951057 -7.61037e-011 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 25 {
          -0.0809017 0.0587785 0.945
          <UV> { 0.841715 0.5 }
          <Normal> { -0.809017 0.587785 -6.57627e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 26 {
          -0.0809017 0.0587785 1.4175
          <UV> { 0.841715 0.75 }
          <Normal> { -0.809017 0.587785 -3.09398e-009 }
          // bone1:1
        }
        <Vertex> 27 {
          0.0309017 0.0951057 1.4175
          <UV> { 0.0351497 0.75 }
          <Normal> { 0.309017 0.951057 1.2192e-009 }
          // bone1:1
        }
        <Vertex> 28 {
          -0.0809017 0.0587785 0.945
          <UV> { 0.841715 0.5 }
          <Normal> { -0.809017 0.587785 -6.57627e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 29 {
          -0.0809017 -0.0587785 0.945
          <UV> { 0.658285 0.5 }
          <Normal> { -0.809017 -0.587785 2.02329e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 30 {
          -0.0809017 -0.0587785 1.4175
          <UV> { 0.658285 0.75 }
          <Normal> { -0.809017 -0.587785 -4.13061e-010 }
          // bone1:1
        }
        <Vertex> 31 {
          -0.0809017 0.0587785 1.4175
          <UV> { 0.841715 0.75 }
          <Normal> { -0.809017 0.587785 -3.09398e-009 }
          // bone1:1
        }
        <Vertex> 32 {
          -0.0809017 -0.0587785 0.945
          <UV> { 0.658285 0.5 }
          <Normal> { -0.809017 -0.587785 2.02329e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 33 {
          0.0309017 -0.0951056 0.945
          <UV> { 0.46485 0.5 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 34 {
          0.0309017 -0.0951056 1.4175
          <UV> { 0.46485 0.75 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:1
        }
        <Vertex> 35 {
          -0.0809017 -0.0587785 1.4175
          <UV> { 0.658285 0.75 }
          <Normal> { -0.809017 -0.587785 -4.13061e-010 }
          // bone1:1
        }
        <Vertex> 36 {
          0.0309017 -0.0951056 0.945
          <UV> { 0.46485 0.5 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 37 {
          0.1 -1.30353e-015 0.945
          <UV> { 0.25 0.5 }
          <Normal> { 1 3.68377e-008 6.40418e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 38 {
          0.1 3.45909e-015 1.4175
          <UV> { 0.25 0.75 }
          <Normal> { 1 3.68377e-008 1.93572e-009 }
          // bone1:1
        }
        <Vertex> 39 {
          0.0309017 -0.0951056 1.4175
          <UV> { 0.46485 0.75 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:1
        }
        <Vertex> 40 {
          0.1 -1.00407e-015 0.4725
          <UV> { 0.25 0.25 }
          <Normal> { 1 5.52565e-008 -7.91636e-010 }
          // root:1
        }
        <Vertex> 41 {
          0.0309017 0.0951057 0.4725
          <UV> { 0.0351497 0.25 }
          <Normal> { 0.309017 0.951057 -6.36038e-010 }
          // root:1
        }
        <Vertex> 42 {
          0.0309017 0.0951057 0.945
          <UV> { 0.0351497 0.5 }
          <Normal> { 0.309017 0.951057 -7.61037e-011 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 43 {
          0.1 -1.30353e-015 0.945
          <UV> { 0.25 0.5 }
          <Normal> { 1 3.68377e-008 6.40418e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 44 {
          0.0309017 0.0951057 0.4725
          <UV> { 0.0351497 0.25 }
          <Normal> { 0.309017 0.951057 -6.36038e-010 }
          // root:1
        }
        <Vertex> 45 {
          -0.0809017 0.0587785 0.4725
          <UV> { 0.841715 0.25 }
          <Normal> { -0.809017 0.587785 2.65085e-009 }
          // root:1
        }
        <Vertex> 46 {
          -0.0809017 0.0587785 0.945
          <UV> { 0.841715 0.5 }
          <Normal> { -0.809017 0.587785 -6.57627e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 47 {
          0.0309017 0.0951057 0.945
          <UV> { 0.0351497 0.5 }
          <Normal> { 0.309017 0.951057 -7.61037e-011 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 48 {
          -0.0809017 0.0587785 0.4725
          <UV> { 0.841715 0.25 }
          <Normal> { -0.809017 0.587785 2.65085e-009 }
          // root:1
        }
        <Vertex> 49 {
          -0.0809017 -0.0587785 0.4725
          <UV> { 0.658285 0.25 }
          <Normal> { -0.809017 -0.587785 3.30109e-009 }
          // root:1
        }
        <Vertex> 50 {
          -0.0809017 -0.0587785 0.945
          <UV> { 0.658285 0.5 }
          <Normal> { -0.809017 -0.587785 2.02329e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 51 {
          -0.0809017 0.0587785 0.945
          <UV> { 0.841715 0.5 }
          <Normal> { -0.809017 0.587785 -6.57627e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 52 {
          -0.0809017 -0.0587785 0.4725
          <UV> { 0.658285 0.25 }
          <Normal> { -0.809017 -0.587785 3.30109e-009 }
          // root:1
        }
        <Vertex> 53 {
          0.0309017 -0.0951056 0.4725
          <UV> { 0.46485 0.25 }
          <Normal> { 0.309017 -0.951057 9.23633e-010 }
          // root:1
        }
        <Vertex> 54 {
          0.0309017 -0.0951056 0.945
          <UV> { 0.46485 0.5 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 55 {
          -0.0809017 -0.0587785 0.945
          <UV> { 0.658285 0.5 }
          <Normal> { -0.809017 -0.587785 2.02329e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 56 {
          0.0309017 -0.0951056 0.4725
          <UV> { 0.46485 0.25 }
          <Normal> { 0.309017 -0.951057 9.23633e-010 }
          // root:1
        }
        <Vertex> 57 {
          0.1 -1.00407e-015 0.4725
          <UV> { 0.25 0.25 }
          <Normal> { 1 5.52565e-008 -7.91636e-010 }
          // root:1
        }
        <Vertex> 58 {
          0.1 -1.30353e-015 0.945
          <UV> { 0.25 0.5 }
          <Normal> { 1 3.68377e-008 6.40418e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 59 {
          0.0309017 -0.0951056 0.945
          <UV> { 0.46485 0.5 }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 60 {
          0.1 7.34196e-016 -7.94729e-009
          <UV> { 0.25 -3.96418e-009 }
          <Normal> { 1 3.68377e-008 5.03669e-010 }
          // root:1
        }
        <Vertex> 61 {
          0.0309017 0.0951057 -7.94729e-009
          <UV> { 0.0351497 -3.96418e-009 }
          <Normal> { 0.309017 0.951057 6.59267e-010 }
          // root:1
        }
        <Vertex> 62 {
          0.0309017 0.0951057 0.4725
          <UV> { 0.0351497 0.25 }
          <Normal> { 0.309017 0.951057 -6.36038e-010 }
          // root:1
        }
        <Vertex> 63 {
          0.1 -1.00407e-015 0.4725
          <UV> { 0.25 0.25 }
          <Normal> { 1 5.52565e-008 -7.91636e-010 }
          // root:1
        }
        <Vertex> 64 {
          0.0309017 0.0951057 -7.94729e-009
          <UV> { 0.0351497 -3.96418e-009 }
          <Normal> { 0.309017 0.951057 6.59267e-010 }
          // root:1
        }
        <Vertex> 65 {
          -0.0809017 0.0587785 -7.94729e-009
          <UV> { 0.841715 -3.96418e-009 }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // root:1
        }
        <Vertex> 66 {
          -0.0809017 0.0587785 0.4725
          <UV> { 0.841715 0.25 }
          <Normal> { -0.809017 0.587785 2.65085e-009 }
          // root:1
        }
        <Vertex> 67 {
          0.0309017 0.0951057 0.4725
          <UV> { 0.0351497 0.25 }
          <Normal> { 0.309017 0.951057 -6.36038e-010 }
          // root:1
        }
        <Vertex> 68 {
          -0.0809017 0.0587785 -7.94729e-009
          <UV> { 0.841715 -3.96418e-009 }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // root:1
        }
        <Vertex> 69 {
          -0.0809017 -0.0587785 -7.94729e-009
          <UV> { 0.658285 -3.96418e-009 }
          <Normal> { -0.809017 -0.587785 8.64739e-010 }
          // root:1
        }
        <Vertex> 70 {
          -0.0809017 -0.0587785 0.4725
          <UV> { 0.658285 0.25 }
          <Normal> { -0.809017 -0.587785 3.30109e-009 }
          // root:1
        }
        <Vertex> 71 {
          -0.0809017 0.0587785 0.4725
          <UV> { 0.841715 0.25 }
          <Normal> { -0.809017 0.587785 2.65085e-009 }
          // root:1
        }
        <Vertex> 72 {
          -0.0809017 -0.0587785 -7.94729e-009
          <UV> { 0.658285 -3.96418e-009 }
          <Normal> { -0.809017 -0.587785 8.64739e-010 }
          // root:1
        }
        <Vertex> 73 {
          0.0309017 -0.0951056 -7.94729e-009
          <UV> { 0.46485 -3.96418e-009 }
          <Normal> { 0.309017 -0.951056 9.23633e-010 }
          // root:1
        }
        <Vertex> 74 {
          0.0309017 -0.0951056 0.4725
          <UV> { 0.46485 0.25 }
          <Normal> { 0.309017 -0.951057 9.23633e-010 }
          // root:1
        }
        <Vertex> 75 {
          -0.0809017 -0.0587785 0.4725
          <UV> { 0.658285 0.25 }
          <Normal> { -0.809017 -0.587785 3.30109e-009 }
          // root:1
        }
        <Vertex> 76 {
          0.0309017 -0.0951056 -7.94729e-009
          <UV> { 0.46485 -3.96418e-009 }
          <Normal> { 0.309017 -0.951056 9.23633e-010 }
          // root:1
        }
        <Vertex> 77 {
          0.1 7.34196e-016 -7.94729e-009
          <UV> { 0.25 -3.96418e-009 }
          <Normal> { 1 3.68377e-008 5.03669e-010 }
          // root:1
        }
        <Vertex> 78 {
          0.1 -1.00407e-015 0.4725
          <UV> { 0.25 0.25 }
          <Normal> { 1 5.52565e-008 -7.91636e-010 }
          // root:1
        }
        <Vertex> 79 {
          0.0309017 -0.0951056 0.4725
          <UV> { 0.46485 0.25 }
          <Normal> { 0.309017 -0.951057 9.23633e-010 }
        }
        <Vertex> 80 {
          -0.0809017 0.0587785 -7.94729e-009
          <UV> {
            0.841715 -3.96418e-009
            <Tangent> { -0.587785 -0.809017 -1.55838e-010 }
            <Binormal> { 8.19287e-011 -2.52151e-010 1 }
          }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // root:1
        }
        <Vertex> 81 {
          -0.0809017 0.0587785 0.4725
          <UV> {
            0.841715 0.25
            <Tangent> { -0.587785 -0.809017 -1.92595e-009 }
            <Binormal> { 1.01253e-009 -3.11626e-009 1 }
          }
          <Normal> { -0.809017 0.587785 2.65085e-009 }
          // root:1
        }
        <Vertex> 82 {
          -0.0809017 0.0587785 1.4175
          <UV> {
            0.841715 0.75
            <Tangent> { -0.587785 -0.809017 2.24791e-009 }
            <Binormal> { -1.1818e-009 3.63719e-009 1 }
          }
          <Normal> { -0.809017 0.587785 -3.09398e-009 }
          // bone1:1
        }
        <Vertex> 83 {
          -0.0809017 0.0587785 1.89
          <UV> {
            0.841715 1
            <Tangent> { -0.587785 -0.809017 -1.55838e-010 }
            <Binormal> { 8.19287e-011 -2.52151e-010 1 }
          }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // bone1:1
        }
        <Vertex> 84 {
          -0.0809017 0.0587785 0.945
          <UV> {
            0.841715 0.5
            <Tangent> { -0.587785 -0.809017 -1.25296e-006 }
            <Binormal> { -7.37005e-007 -1.01328e-006 1 }
          }
          <Normal> { -0.809017 0.587785 -6.57627e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 85 {
          0.0309017 0.0951057 -7.94729e-009
          <UV> {
            0.0351497 -3.96418e-009
            <Tangent> { -0.951057 0.309017 4.78986e-010 }
            <Binormal> { 2.51818e-010 -7.75015e-010 1 }
          }
          <Normal> { 0.309017 0.951057 6.59267e-010 }
          // root:1
        }
        <Vertex> 86 {
          0.0309017 0.0951057 0.4725
          <UV> {
            0.0351497 0.25
            <Tangent> { -0.951057 0.309017 -4.62109e-010 }
            <Binormal> { -2.42945e-010 7.47707e-010 1 }
          }
          <Normal> { 0.309017 0.951057 -6.36038e-010 }
          // root:1
        }
        <Vertex> 87 {
          0.0309017 0.0951057 1.4175
          <UV> {
            0.0351497 0.75
            <Tangent> { -0.951057 0.309017 8.85802e-010 }
            <Binormal> { 4.65694e-010 -1.43326e-009 1 }
          }
          <Normal> { 0.309017 0.951057 1.2192e-009 }
          // bone1:1
        }
        <Vertex> 88 {
          0.0309017 0.0951057 1.89
          <UV> {
            0.0351497 1
            <Tangent> { -0.951056 0.309017 4.78987e-010 }
            <Binormal> { 2.51818e-010 -7.75016e-010 1 }
          }
          <Normal> { 0.309017 0.951057 6.59268e-010 }
          // bone1:1
        }
        <Vertex> 89 {
          0.0309017 0.0951057 0.945
          <UV> {
            0.0351497 0.5
            <Tangent> { -0.951057 0.309017 -1.2535e-006 }
            <Binormal> { -1.19212e-006 3.87424e-007 1 }
          }
          <Normal> { 0.309017 0.951057 -7.61037e-011 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 90 {
          -0.0809017 0.0587785 -7.94729e-009
          <UV> {
            0.841715 -3.96418e-009
            <Tangent> { 0.587785 0.809017 -1.55838e-010 }
            <Binormal> { 2.65127e-010 0 1 }
          }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // root:1
        }
        <Vertex> 91 {
          -0.0809017 0.0587785 0.4725
          <UV> {
            0.841715 0.25
            <Tangent> { 0.587785 0.809017 -1.92595e-009 }
            <Binormal> { 3.27663e-009 0 1 }
          }
          <Normal> { -0.809017 0.587785 2.65085e-009 }
          // root:1
        }
        <Vertex> 92 {
          -0.0809017 0.0587785 1.4175
          <UV> {
            0.841715 0.75
            <Tangent> { 0.587785 0.809017 2.24791e-009 }
            <Binormal> { -3.82437e-009 0 1 }
          }
          <Normal> { -0.809017 0.587785 -3.09398e-009 }
          // bone1:1
        }
        <Vertex> 93 {
          -0.0809017 0.0587785 1.89
          <UV> {
            0.841715 1
            <Tangent> { 0.587785 0.809017 -1.55838e-010 }
            <Binormal> { 2.65127e-010 0 1 }
          }
          <Normal> { -0.809017 0.587785 2.14492e-010 }
          // bone1:1
        }
        <Vertex> 94 {
          -0.0809017 -0.0587785 0.945
          <UV> {
            0.658285 0.5
            <Tangent> { -0.587785 0.809017 -3.32361e-008 }
            <Binormal> { -1.78988e-008 2.80778e-008 1 }
          }
          <Normal> { -0.809017 -0.587785 2.02329e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 95 {
          -0.0809017 -0.0587785 -7.94729e-009
          <UV> {
            0.658285 -3.96418e-009
            <Tangent> { -0.587785 0.809017 1.66787e-011 }
            <Binormal> { 7.09392e-010 4.94787e-010 1 }
          }
          <Normal> { -0.809017 -0.587785 8.64739e-010 }
          // root:1
        }
        <Vertex> 96 {
          -0.0809017 -0.0587785 0.4725
          <UV> {
            0.658285 0.25
            <Tangent> { -0.587785 0.809017 6.36702e-011 }
            <Binormal> { 2.70807e-009 1.88882e-009 1 }
          }
          <Normal> { -0.809017 -0.587785 3.30109e-009 }
          // root:1
        }
        <Vertex> 97 {
          -0.0809017 -0.0587785 1.4175
          <UV> {
            0.658285 0.75
            <Tangent> { -0.587785 0.809017 -7.96694e-012 }
            <Binormal> { -3.38856e-010 -2.36346e-010 1 }
          }
          <Normal> { -0.809017 -0.587785 -4.13061e-010 }
          // bone1:1
        }
        <Vertex> 98 {
          -0.0809017 -0.0587785 1.89
          <UV> {
            0.658285 1
            <Tangent> { -0.587785 0.809017 1.66787e-011 }
            <Binormal> { 7.09392e-010 4.94787e-010 1 }
          }
          <Normal> { -0.809017 -0.587785 8.64739e-010 }
          // bone1:1
        }
        <Vertex> 99 {
          -0.0809017 0.0587785 0.945
          <UV> {
            0.841715 0.5
            <Tangent> { 0.587785 0.809017 -1.25296e-006 }
            <Binormal> { 7.35941e-007 1.01405e-006 1 }
          }
          <Normal> { -0.809017 0.587785 -6.57627e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 100 {
          0.0309017 0.0951057 -7.94729e-009
          <UV> {
            0.0351497 -3.96418e-009
            <Tangent> { 0.951057 -0.309017 4.78986e-010 }
            <Binormal> { -6.59267e-010 -4.78986e-010 1 }
          }
          <Normal> { 0.309017 0.951057 6.59267e-010 }
          // root:1
        }
        <Vertex> 101 {
          0.0309017 0.0951057 0.4725
          <UV> {
            0.0351497 0.25
            <Tangent> { 0.951057 -0.309017 -4.62109e-010 }
            <Binormal> { 6.36038e-010 4.62109e-010 1 }
          }
          <Normal> { 0.309017 0.951057 -6.36038e-010 }
          // root:1
        }
        <Vertex> 102 {
          0.0309017 0.0951057 1.4175
          <UV> {
            0.0351497 0.75
            <Tangent> { 0.951057 -0.309017 8.85802e-010 }
            <Binormal> { -1.2192e-009 -8.85802e-010 1 }
          }
          <Normal> { 0.309017 0.951057 1.2192e-009 }
          // bone1:1
        }
        <Vertex> 103 {
          0.0309017 0.0951057 1.89
          <UV> {
            0.0351497 1
            <Tangent> { 0.951057 -0.309017 4.78987e-010 }
            <Binormal> { -6.59268e-010 -4.78986e-010 1 }
          }
          <Normal> { 0.309017 0.951057 6.59268e-010 }
          // bone1:1
        }
        <Vertex> 104 {
          0.0309017 0.0951057 0.945
          <UV> {
            0.0351497 0.5
            <Tangent> { 0.951057 -0.309017 -1.2535e-006 }
            <Binormal> { 1.19217e-006 -3.87279e-007 1 }
          }
          <Normal> { 0.309017 0.951057 -7.61037e-011 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 105 {
          0.0309017 -0.0951056 -7.94729e-009
          <UV> {
            0.46485 -3.96418e-009
            <Tangent> { -0.951057 -0.309017 3.51988e-011 }
            <Binormal> { -2.51942e-010 8.89304e-010 1 }
          }
          <Normal> { 0.309017 -0.951056 9.23633e-010 }
          // root:1
        }
        <Vertex> 106 {
          0.0309017 -0.0951056 0.4725
          <UV> {
            0.46485 0.25
            <Tangent> { -0.951056 -0.309017 3.51989e-011 }
            <Binormal> { -2.51942e-010 8.89304e-010 1 }
          }
          <Normal> { 0.309017 -0.951057 9.23633e-010 }
        }
        <Vertex> 107 {
          0.0309017 -0.0951056 0.945
          <UV> {
            0.46485 0.5
            <Tangent> { -0.951056 -0.309017 6.59673e-007 }
            <Binormal> { 6.26743e-007 2.0583e-007 1 }
          }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 108 {
          0.0309017 -0.0951056 1.4175
          <UV> {
            0.46485 0.75
            <Tangent> { -0.951056 -0.309017 7.93504e-011 }
            <Binormal> { -5.67965e-010 2.0048e-009 1 }
          }
          <Normal> { 0.309017 -0.951057 2.08219e-009 }
          // bone1:1
        }
        <Vertex> 109 {
          0.0309017 -0.0951056 1.89
          <UV> {
            0.46485 1
            <Tangent> { -0.951056 -0.309017 3.51988e-011 }
            <Binormal> { -2.51942e-010 8.89303e-010 1 }
          }
          <Normal> { 0.309017 -0.951057 9.23632e-010 }
          // bone1:1
        }
        <Vertex> 110 {
          0.1 7.34196e-016 -7.94729e-009
          <UV> {
            0.25 -3.96418e-009
            <Tangent> { 3.68377e-008 -1 0 }
            <Binormal> { -5.03669e-010 0 1 }
          }
          <Normal> { 1 3.68377e-008 5.03669e-010 }
          // root:1
        }
        <Vertex> 111 {
          0.1 -1.00407e-015 0.4725
          <UV> {
            0.25 0.25
            <Tangent> { 5.52565e-008 -1 0 }
            <Binormal> { 7.91636e-010 0 1 }
          }
          <Normal> { 1 5.52565e-008 -7.91636e-010 }
          // root:1
        }
        <Vertex> 112 {
          0.1 -1.30353e-015 0.945
          <UV> {
            0.25 0.5
            <Tangent> { 3.68377e-008 -1 -6.2672e-007 }
            <Binormal> { -6.40395e-010 -6.2672e-007 1 }
          }
          <Normal> { 1 3.68377e-008 6.40418e-010 }
          // bone1:0.288617 root:0.711383
        }
        <Vertex> 113 {
          0.1 3.45909e-015 1.4175
          <UV> {
            0.25 0.75
            <Tangent> { 3.68377e-008 -1 0 }
            <Binormal> { -1.93572e-009 0 1 }
          }
          <Normal> { 1 3.68377e-008 1.93572e-009 }
          // bone1:1
        }
        <Vertex> 114 {
          0.1 4.67535e-015 1.89
          <UV> {
            0.25 1
            <Tangent> { 7.36754e-008 -1 0 }
            <Binormal> { -5.03669e-010 0 1 }
          }
          <Normal> { 1 7.36754e-008 5.03669e-010 }
          // bone1:1
        }
      }
    }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 113 102 103 114 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 87 82 83 88 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 92 97 98 93 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 97 108 109 98 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 108 113 114 109 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 112 104 102 113 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 89 84 82 87 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 99 94 97 92 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 94 107 108 97 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 107 112 113 108 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 111 101 104 112 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 86 81 84 89 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 91 96 94 99 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 96 106 107 94 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 106 111 112 107 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 110 100 101 111 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 85 80 81 86 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 90 95 96 91 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 95 105 106 96 <Ref> { zuberegg_Vertices } }
  }
  <Polygon> {
    <TRef> { diff }
    <TRef> { nrml }
    <TRef> { gloss }
    <VertexRef> { 105 110 111 106 <Ref> { zuberegg_Vertices } }
  }
  <Joint> root {
    <Transform> {
      <Translate> { 0 0 0 }
      <RotX> { 180 }
      <RotY> { 0 }
      <RotZ> { 0 }
    }
    <Joint> bone1 {
      <Transform> {
        <Translate> { 0 0 0 }
        <RotX> { 0 }
        <RotY> { 0 }
        <RotZ> { 0 }
      }
      <VertexRef> {
        21 24 25 28 42 46 47 51 84 89 99 104
        <Scalar> membership { 0.288617 }
        <Ref> { zuberegg_Vertices }
      }
      <VertexRef> {
        20 37 43 58 112
        <Scalar> membership { 0.288617 }
        <Ref> { zuberegg_Vertices }
      }
      <VertexRef> {
        29 32 33 36 50 54 55 59 94 107
        <Scalar> membership { 0.288617 }
        <Ref> { zuberegg_Vertices }
      }
      <VertexRef> {
        0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 22 23 26 27 30
        31 34 35 38 39 82 83 87 88 92 93 97 98 102 103 108 109 113 114
        <Scalar> membership { 1 }
        <Ref> { zuberegg_Vertices }
      }
    }
    <VertexRef> {
      33 36 54 59 107
      <Scalar> membership { 0.711383 }
      <Ref> { zuberegg_Vertices }
    }
    <VertexRef> {
      29 32 50 55 94
      <Scalar> membership { 0.711383 }
      <Ref> { zuberegg_Vertices }
    }
    <VertexRef> {
      20 37 43 58 112
      <Scalar> membership { 0.711383 }
      <Ref> { zuberegg_Vertices }
    }
    <VertexRef> {
      25 28 46 51 84 99
      <Scalar> membership { 0.711383 }
      <Ref> { zuberegg_Vertices }
    }
    <VertexRef> {
      21 24 42 47 89 104
      <Scalar> membership { 0.711383 }
      <Ref> { zuberegg_Vertices }
    }
    <VertexRef> {
      41 44 49 52 53 56 62 67 70 74 75 86 96 101
      <Scalar> membership { 1 }
      <Ref> { zuberegg_Vertices }
    }
    <VertexRef> {
      40 45 48 57 60 61 63 64 65 66 68 69 71 72 73 76 77 78 80 81 85 90
      91 95 100 105 110 111
      <Scalar> membership { 1 }
      <Ref> { zuberegg_Vertices }
    }
  }
}

…and my animation file:

<CoordinateSystem> { Y-Up }

<Comment> description {
  "Egg file generated by egg.py"
  "from hip file C:/Users/Robby/Documents/Fractals/Panda/pipeline/test_basics_v05.hipnc"
  "root node of animation = /obj/egg_model/anim_skeleton1/root"
}
<Table> zuberegg {
  <Bundle> anim {
    <Table> "<skeleton>" {
      <Table> root {
        <Xfm$Anim_S$> xform {
          <Scalar> fps { 24 }
          <Char*> order { sphrt }
          <S$Anim> i {
            <V> {
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
            }
          }
          <S$Anim> j {
            <V> {
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
            }
          }
          <S$Anim> k {
            <V> {
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
              1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
            }
          }
          <S$Anim> h {
            <V> {
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            }
          }
          <S$Anim> p {
            <V> {
              180 180 180 180 180 180 180 180 180 180 180 180 180 180
              180 180 180 180 180 180 180 180 180 180 180 180 180 180
              180 180 180 180 180 180 180 180 180 180 180 180 180 180
              180 180 180 180 180
            }
          }
          <S$Anim> r {
            <V> {
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            }
          }
          <S$Anim> x {
            <V> {
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            }
          }
          <S$Anim> y {
            <V> {
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            }
          }
          <S$Anim> z {
            <V> {
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
            }
          }
        }
        <Table> bone1 {
          <Xfm$Anim_S$> xform {
            <Scalar> fps { 24 }
            <Char*> order { sphrt }
            <S$Anim> i {
              <V> {
                1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
                1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
              }
            }
            <S$Anim> j {
              <V> {
                1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
                1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
              }
            }
            <S$Anim> k {
              <V> {
                1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
                1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
              }
            }
            <S$Anim> h {
              <V> {
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              }
            }
            <S$Anim> p {
              <V> {
                0 0.0602468 0.23752 0.526617 0.922339 1.41948 2.01285
                2.69723 3.46744 4.31826 5.2445 6.24096 7.30243 8.42371
                9.59961 10.8249 12.0944 13.403 14.7453 16.1162 17.5106
                18.9231 20.3487 21.782 23.218 24.6513 26.0769 27.4894
                28.8838 30.2547 31.597 32.9056 34.1751 35.4004 36.5763
                37.6976 38.759 39.7555 40.6817 41.5326 42.3028 42.9872
                43.5805 44.0777 44.4734 44.7625 44.9398
              }
            }
            <S$Anim> r {
              <V> {
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              }
            }
            <S$Anim> x {
              <V> {
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              }
            }
            <S$Anim> y {
              <V> {
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              }
            }
            <S$Anim> z {
              <V> {
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
                0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
              }
            }
          }
        }
      }
    }
  }
}

Well, it sounds like the joint transforms you’ve written to the egg file aren’t precisely the same as the ones in your Houdini file.

It’s hard to speculate on what precisely they should be, but I do observe that there are no X,Y,Z translations in the joints in your egg file. This means that your bone1 joint has the same origin as your root joint, so it’s not really surprising that it appears to rotate about the origin of the model. If you mean for bone1 to rotate about some other origin, you need to have that origin in the X,Y,Z translation.

David

Okay, that makes sense to me. :slight_smile: Does this mean that these transforms are in world space, rather than relative to their parents?

I’m a bit confused, though. If I’m understanding you correctly, I need to replace the transform part of my main model (not animation) file for bone1 to something like this:

<Joint> bone1 {
      <Transform> {
        <Translate> { 0 0 1 }
        <RotX> { 0 }
        <RotY> { 0 }
        <RotZ> { 0 }
      }
      ...vertex references...
}

…that is, if the pivot should be offset one unit along the z axis. Unfortunately, when I do this, two things happen that I didn’t expect: first, bone1 dragged the geometry attached to it along with it to the new “rest” position, and second, the pivot of the rotation did not appear to change.

I did also try changing the translation value in the animation file, with similar results.

Am I misunderstanding something here? I thought that the transforms included in the original model file were simply there to define the starting positions of the skeleton–not to actually deform geometry.

Thanks!

No, transforms are relative to their parents; but if you have no translation component, there is no offset from the parent.

That’s right, but if you don’t make the same change to both the model file and the animation file simultaneously, it will result in deforming geometry (because in that case playing the animation will move the joint from its original position).

David

Hey, now it works!! You’re a genius! :smiley:

For some reason I didn’t make the connection that the fact that I wasn’t providing a length of each bone probably implies that Panda isn’t automatically translating new bones to the end points of their parents. Seems obvious now.

Thanks so much!!