optchar and Tried to invert singular LMatrix3

Hi! I’m working with Blender on a character model with animations. When I run optchar on the .egg file I get a list of

:linmath(warning): Tried to invert singular LMatrix3.

I know that might happens if you have bones with a zero scale but I check them all and none has a zero scale. What else could it be?

Claudio

A “singular” matrix means it is a non-invertible matrix. That is to say, if you attempt to invert the matrix, you end up with an impossible answer. Since inverting a matrix is like dividing by the matrix, this is analogous to saying x is singular if 1/x can’t be computed, which (in the case of simple numbers) is the same thing as saying x is singular if x is 0.

In matrices, the most common kind of singular matrix is one in which one of the axes has a length of 0, which means it contains a scale to zero, or at least a scale to zero in one axis (x, y, or z). There are a few other kinds of singular matrices, but you have to go out of your way to construct them (you can’t construct them with the normal translate, rotate, scale trinity).

So, I suspect you probably really do have a scale to zero in one of your matrices, but you didn’t find it for some reason. Maybe it’s a matrix you’re not aware of. One way to track it down will be to add the prc setting:

no-singular-invert 1

which will raise a C++ exception instead of just printing a warning. However, then you’ll need to break into the program with a debugger and inspect the stack to figure out where you are, which means you’ll need to have your own personal build of Panda3D (instead of using the build provided here, which doesn’t have the needed debugging symbols). So that option may be more trouble than it’s worth.

So, the next option is to look more closely at the egg file for a zero scale (either i, j, or k will be 0 for at least one frame somewhere).

Or, another option is not to worry about it, just ignore the warnings and see if your animation comes out OK. Chances are good that it will be just fine. If something is broken, then knowing which bone is now broken will give you insight as to where to look for the singularity.

David

Thanks! I’m running optchar right now… I let it go and see what happens. I’m using extra dummy bones for procedural animation and I set them to be as short as possible ((head-tail).length == 0.02). Maybe that be the problem? The scale isn’t set at zero tho.

Claudio

Ok optchar have done, I tried loading it all up using Actor. The animations are wrong in scale… odd. I have to investigate better.

This is the optchar output:
Body has 131 components.
EyeLeft has 131 components.
EyeRight has 131 components.
Mouth has 131 components.
PupilLeft has 131 components.
PupilRight has 131 components.
131 original joints in Body
3 unanimated joints
16 empty joints

112 joints remaining

131 original joints in EyeLeft
3 unanimated joints
127 empty joints

1 joints remaining

131 original joints in EyeRight
3 unanimated joints
122 empty joints

6 joints remaining

131 original joints in Mouth
3 unanimated joints
120 empty joints

8 joints remaining

131 original joints in PupilLeft
3 unanimated joints
127 empty joints

1 joints remaining

131 original joints in PupilRight
3 unanimated joints
125 empty joints

3 joints remaining

computing 1 of 2: man.egg (1 frames)
computing 2 of 2: man-anim1.egg (10 frames)
computing 1 of 2: man.egg (1 frames)

Anything strange with it?

Also… I’m trying to flag PupilLeft and PupilRight using

-flag PupilLeft,PupilRight=Pupils

but Panda doesn’t create a node Pupils when I’m loading the Actor. What am I doing wrong?

Claudio

I don’t see anything wrong in the egg-optchar output. I assume the scale was correct before you ran egg-optchar? If you post your egg files, I can try it myself and see if I can understand why it’s breaking the scale.

As to the -flag options, you are passing joint names to -flag, but it is expecting geometry names instead. Presumably your pupil geometry has some name in the modeling package; use that name.

David

I fixed the scale problem! There was a scale transform on the armature at 0.0108. I had to apply the transform and fix the pose afterwards. Now optchar doesn’t complain any more.

About the flag option… PupilLeft and PupilRight are geometries. I see them like Objects in Blender. When I load the .egg file as a model (not Actor) I get this from ls()

ModelRoot man.egg
PandaNode
Character PupilRight
GeomNode PupilRight (1 geoms: S:(ColorAttrib))
Character PupilLeft
GeomNode PupilLeft (1 geoms: S:(ColorAttrib))
Character EyeRight
GeomNode (1 geoms)
Character Mouth
GeomNode (1 geoms)
Character EyeLeft
GeomNode (1 geoms)
Character Body
GeomNode Body (1 geoms)

Claudio

Wait, there’s a separate Character node for each piece? That’s really strange, and sounds like a potentially huge performance hole. It should normally be a single Character for the overall model.

I’m still not 100% sure that PupilLeft and PupilRight are the names of the geometries; the egg loader will normally convert these based on the names of the joints they fall under, ignoring the geometry name. So you can’t tell the geometry name from model.ls(). In the egg file, you can see the name of the geometry as the name of the that contains the entries in question.

David

Here is an extract for the .egg file

<CoordinateSystem> { Z-Up }

<Comment> {
  "egg-optchar -d _opt -flag PupilRight,PupilLeft=Pupils -flag Body=Body man.egg"
}
<Comment> {
  "egg-trans -tbnall -o 'C:\Program Files\Blender Foundation\Blender\exp_test\man.egg' 'C:\Program Files\Blender Foundation\Blender\exp_test\man.egg'"
}
<Group> PupilRight {
  <Dart> { 1 }
  <VertexPool> PupilRight {
    <Vertex> 0 {
      0.041 0.077 1.689
      <Normal> { 0.098 0.981 0.169 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 1 {
      0.043 0.077 1.687
      <Normal> { 0.147 0.985 0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 2 {
      0.037 0.078 1.683
      <Normal> { 0 1 0 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 3 {
      0.037 0.077 1.69
      <Normal> { 0 0.985 0.17 }
      <RGBA> { 0.173 0.173 0.173 1 }
    }
    <Vertex> 4 {
      0.031 0.077 1.687
      <Normal> { -0.147 0.985 0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 5 {
      0.034 0.077 1.689
      <Normal> { -0.098 0.981 0.169 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 6 {
      0.031 0.077 1.68
      <Normal> { -0.147 0.985 -0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 7 {
      0.03 0.077 1.683
      <Normal> { -0.195 0.981 0 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 8 {
      0.037 0.077 1.676
      <Normal> { 0 0.985 -0.17 }
      <RGBA> { 0.024 0.024 0.024 1 }
    }
    <Vertex> 9 {
      0.034 0.077 1.677
      <Normal> { -0.098 0.981 -0.169 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 10 {
      0.043 0.077 1.68
      <Normal> { 0.147 0.985 -0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 11 {
      0.041 0.077 1.677
      <Normal> { 0.098 0.981 -0.169 }
      <RGBA> { 0.196 0.196 0.196 1 }
    }
    <Vertex> 12 {
      0.044 0.077 1.683
      <Normal> { 0.195 0.981 0 }
      <RGBA> { 0.027 0.027 0.027 1 }
    }
  }
  <Polygon> Pupils {
    <Normal> { 0.098 0.981 0.169 }
    <VertexRef> { 0 1 2 3 <Ref> { PupilRight } }
  }
  <Polygon> Pupils {
    <Normal> { -0.098 0.981 0.169 }
    <VertexRef> { 2 4 5 3 <Ref> { PupilRight } }
  }
  <Polygon> Pupils {
    <Normal> { -0.195 0.981 0 }
    <VertexRef> { 2 6 7 4 <Ref> { PupilRight } }
  }
  <Polygon> Pupils {
    <Normal> { -0.098 0.981 -0.169 }
    <VertexRef> { 2 8 9 6 <Ref> { PupilRight } }
  }
  <Polygon> Pupils {
    <Normal> { 0.098 0.981 -0.169 }
    <VertexRef> { 2 10 11 8 <Ref> { PupilRight } }
  }
  <Polygon> Pupils {
    <Normal> { 0.195 0.981 0 }
    <VertexRef> { 2 1 12 10 <Ref> { PupilRight } }
  }
}
<Group> PupilLeft {
  <Dart> { 1 }
  <VertexPool> PupilLeft {
    <Vertex> 0 {
      -0.032 0.078 1.683
      <Normal> { 0 1 0 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 1 {
      -0.038 0.077 1.68
      <Normal> { -0.147 0.985 -0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 2 {
      -0.039 0.077 1.683
      <Normal> { -0.195 0.981 0 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 3 {
      -0.038 0.077 1.686
      <Normal> { -0.147 0.985 0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 4 {
      -0.032 0.077 1.676
      <Normal> { 0 0.985 -0.17 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 5 {
      -0.035 0.077 1.677
      <Normal> { -0.098 0.981 -0.169 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 6 {
      -0.026 0.077 1.68
      <Normal> { 0.147 0.985 -0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 7 {
      -0.028 0.077 1.677
      <Normal> { 0.098 0.981 -0.169 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 8 {
      -0.026 0.077 1.686
      <Normal> { 0.147 0.985 0.085 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 9 {
      -0.025 0.077 1.683
      <Normal> { 0.195 0.981 0 }
      <RGBA> { 0.012 0.012 0.012 1 }
    }
    <Vertex> 10 {
      -0.032 0.077 1.69
      <Normal> { 0 0.985 0.17 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 11 {
      -0.028 0.077 1.689
      <Normal> { 0.098 0.981 0.169 }
      <RGBA> { 0 0 0 1 }
    }
    <Vertex> 12 {
      -0.035 0.077 1.689
      <Normal> { -0.098 0.981 0.169 }
      <RGBA> { 0 0 0 1 }
    }
  }
  <Polygon> Pupils {
    <Normal> { -0.195 0.981 0 }
    <VertexRef> { 0 1 2 3 <Ref> { PupilLeft } }
  }
  <Polygon> Pupils {
    <Normal> { -0.098 0.981 -0.169 }
    <VertexRef> { 0 4 5 1 <Ref> { PupilLeft } }
  }
  <Polygon> Pupils {
    <Normal> { 0.098 0.981 -0.169 }
    <VertexRef> { 0 6 7 4 <Ref> { PupilLeft } }
  }
  <Polygon> Pupils {
    <Normal> { 0.195 0.981 0 }
    <VertexRef> { 0 8 9 6 <Ref> { PupilLeft } }
  }
  <Polygon> Pupils {
    <Normal> { 0.098 0.981 0.169 }
    <VertexRef> { 0 10 11 8 <Ref> { PupilLeft } }
  }
  <Polygon> Pupils {
    <Normal> { -0.098 0.981 0.169 }
    <VertexRef> { 0 3 12 10 <Ref> { PupilLeft } }
  }
}
<Group> EyeRight {
  <Dart> { 1 }
  <VertexPool> EyeRight {
    <Vertex> 0 {
      0.05 0.073 1.683
      <Normal> { 0.723 0.691 0 }
    }
    <Vertex> 1 {
      0.044 0.077 1.683
      <Normal> { 0.556 0.831 0 }
    }
    <Vertex> 2 {
      0.043 0.077 1.687
      <Normal> { 0.481 0.831 0.278 }
    }
    <Vertex> 3 {
      0.048 0.073 1.689
      <Normal> { 0.626 0.691 0.361 }
    }
    <Vertex> 4 {
      0.048 0.073 1.677
      <Normal> { 0.626 0.691 -0.361 }
    }
    <Vertex> 5 {
      0.043 0.077 1.68
      <Normal> { 0.481 0.831 -0.278 }
    }
    <Vertex> 6 {
      0.043 0.073 1.672
      <Normal> { 0.361 0.691 -0.626 }
    }
    <Vertex> 7 {
      0.041 0.077 1.677
      <Normal> { 0.278 0.831 -0.481 }
    }
    <Vertex> 8 {
      0.037 0.073 1.671
      <Normal> { 0 0.691 -0.723 }
    }
    <Vertex> 9 {
      0.037 0.077 1.676
      <Normal> { 0 0.831 -0.556 }
    }
    <Vertex> 10 {
      0.031 0.073 1.672
      <Normal> { -0.361 0.691 -0.626 }
    }
    <Vertex> 11 {
      0.034 0.077 1.677
      <Normal> { -0.278 0.831 -0.481 }
    }
    <Vertex> 12 {
      0.026 0.073 1.677
      <Normal> { -0.626 0.691 -0.361 }
    }
    <Vertex> 13 {
      0.031 0.077 1.68
      <Normal> { -0.481 0.831 -0.278 }
    }
    <Vertex> 14 {
      0.024 0.073 1.683
      <Normal> { -0.723 0.691 0 }
    }
    <Vertex> 15 {
      0.03 0.077 1.683
      <Normal> { -0.556 0.831 0 }
    }
    <Vertex> 16 {
      0.026 0.073 1.689
      <Normal> { -0.626 0.691 0.361 }
    }
    <Vertex> 17 {
      0.031 0.077 1.687
      <Normal> { -0.481 0.831 0.278 }
    }
    <Vertex> 18 {
      0.031 0.073 1.694
      <Normal> { -0.361 0.691 0.626 }
    }
    <Vertex> 19 {
      0.034 0.077 1.689
      <Normal> { -0.278 0.831 0.481 }
    }
    <Vertex> 20 {
      0.037 0.073 1.696
      <Normal> { 0 0.691 0.723 }
    }
    <Vertex> 21 {
      0.037 0.077 1.69
      <Normal> { 0 0.831 0.556 }
    }
    <Vertex> 22 {
      0.043 0.073 1.694
      <Normal> { 0.361 0.691 0.626 }
    }
    <Vertex> 23 {
      0.041 0.077 1.689
      <Normal> { 0.278 0.831 0.481 }
    }
    <Vertex> 24 {
      0.054 0.067 1.683
      <Normal> { 0.928 0.372 0 }
    }
    <Vertex> 25 {
      0.051 0.067 1.691
      <Normal> { 0.804 0.372 0.464 }
    }
    <Vertex> 26 {
      0.051 0.067 1.675
      <Normal> { 0.804 0.372 -0.464 }
    }
    <Vertex> 27 {
      0.045 0.067 1.669
      <Normal> { 0.464 0.372 -0.804 }
    }
    <Vertex> 28 {
      0.037 0.067 1.667
      <Normal> { 0 0.372 -0.928 }
    }
    <Vertex> 29 {
      0.029 0.067 1.669
      <Normal> { -0.464 0.372 -0.804 }
    }
    <Vertex> 30 {
      0.023 0.067 1.675
      <Normal> { -0.804 0.372 -0.464 }
    }
    <Vertex> 31 {
      0.021 0.067 1.683
      <Normal> { -0.928 0.372 0 }
    }
    <Vertex> 32 {
      0.023 0.067 1.691
      <Normal> { -0.804 0.372 0.464 }
    }
    <Vertex> 33 {
      0.029 0.067 1.697
      <Normal> { -0.464 0.372 0.804 }
    }
    <Vertex> 34 {
      0.037 0.067 1.7
      <Normal> { 0 0.372 0.928 }
    }
    <Vertex> 35 {
      0.045 0.067 1.697
      <Normal> { 0.464 0.372 0.804 }
    }
    <Vertex> 36 {
      0.055 0.06 1.683
      <Normal> { 1 0 0 }
    }
    <Vertex> 37 {
      0.053 0.06 1.692
      <Normal> { 0.866 0 0.5 }
    }
    <Vertex> 38 {
      0.053 0.06 1.674
      <Normal> { 0.866 0 -0.5 }
    }
    <Vertex> 39 {
      0.046 0.06 1.668
      <Normal> { 0.5 0 -0.866 }
    }
    <Vertex> 40 {
      0.037 0.06 1.665
      <Normal> { 0 0 -1 }
    }
    <Vertex> 41 {
      0.028 0.06 1.668
      <Normal> { -0.5 0 -0.866 }
    }
    <Vertex> 42 {
      0.022 0.06 1.674
      <Normal> { -0.866 0 -0.5 }
    }
    <Vertex> 43 {
      0.019 0.06 1.683
      <Normal> { -1 0 0 }
    }
    <Vertex> 44 {
      0.022 0.06 1.692
      <Normal> { -0.866 0 0.5 }
    }
    <Vertex> 45 {
      0.028 0.06 1.699
      <Normal> { -0.5 0 0.866 }
    }
    <Vertex> 46 {
      0.037 0.06 1.701
      <Normal> { 0 0 1 }
    }
    <Vertex> 47 {
      0.046 0.06 1.699
      <Normal> { 0.5 0 0.866 }
    }
    <Vertex> 48 {
      0.051 0.054 1.691
      <Normal> { 0.849 -0.195 0.49 }
    }
    <Vertex> 49 {
      0.054 0.054 1.683
      <Normal> { 0.981 -0.195 0 }
    }
    <Vertex> 50 {
      0.051 0.054 1.675
      <Normal> { 0.849 -0.195 -0.49 }
    }
    <Vertex> 51 {
      0.045 0.054 1.669
      <Normal> { 0.49 -0.195 -0.849 }
    }
    <Vertex> 52 {
      0.037 0.054 1.667
      <Normal> { 0 -0.195 -0.981 }
    }
    <Vertex> 53 {
      0.029 0.054 1.669
      <Normal> { -0.49 -0.195 -0.849 }
    }
    <Vertex> 54 {
      0.023 0.054 1.675
      <Normal> { -0.849 -0.195 -0.49 }
    }
    <Vertex> 55 {
      0.021 0.054 1.683
      <Normal> { -0.981 -0.195 0 }
    }
    <Vertex> 56 {
      0.023 0.054 1.691
      <Normal> { -0.849 -0.195 0.49 }
    }
    <Vertex> 57 {
      0.029 0.054 1.697
      <Normal> { -0.49 -0.195 0.849 }
    }
    <Vertex> 58 {
      0.037 0.054 1.7
      <Normal> { 0 -0.195 0.981 }
    }
    <Vertex> 59 {
      0.045 0.054 1.697
      <Normal> { 0.49 -0.195 0.849 }
    }
  }
  <Polygon> {
    <Normal> { 0.55 0.822 0.147 }
    <VertexRef> { 0 1 2 3 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.55 0.822 -0.147 }
    <VertexRef> { 1 0 4 5 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.402 0.822 -0.402 }
    <VertexRef> { 6 7 5 4 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.147 0.822 -0.549 }
    <VertexRef> { 8 9 7 6 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.147 0.822 -0.549 }
    <VertexRef> { 10 11 9 8 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.402 0.822 -0.402 }
    <VertexRef> { 12 13 11 10 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.55 0.822 -0.147 }
    <VertexRef> { 14 15 13 12 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.55 0.822 0.147 }
    <VertexRef> { 16 17 15 14 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.402 0.822 0.402 }
    <VertexRef> { 18 19 17 16 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.147 0.822 0.549 }
    <VertexRef> { 20 21 19 18 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.147 0.822 0.549 }
    <VertexRef> { 22 23 21 20 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.402 0.822 0.402 }
    <VertexRef> { 3 2 23 22 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.812 0.542 0.217 }
    <VertexRef> { 24 0 3 25 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.812 0.542 -0.217 }
    <VertexRef> { 26 4 0 24 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.594 0.542 -0.594 }
    <VertexRef> { 27 6 4 26 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.218 0.542 -0.812 }
    <VertexRef> { 28 8 6 27 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.218 0.542 -0.812 }
    <VertexRef> { 29 10 8 28 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.594 0.542 -0.594 }
    <VertexRef> { 30 12 10 29 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.812 0.542 -0.217 }
    <VertexRef> { 31 14 12 30 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.812 0.542 0.217 }
    <VertexRef> { 32 16 14 31 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.594 0.542 0.594 }
    <VertexRef> { 33 18 16 32 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.217 0.542 0.812 }
    <VertexRef> { 34 20 18 33 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.217 0.542 0.812 }
    <VertexRef> { 35 22 20 34 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.594 0.542 0.594 }
    <VertexRef> { 25 3 22 35 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.949 0.189 0.254 }
    <VertexRef> { 36 24 25 37 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.949 0.189 -0.254 }
    <VertexRef> { 38 26 24 36 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.694 0.189 -0.694 }
    <VertexRef> { 39 27 26 38 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.254 0.189 -0.949 }
    <VertexRef> { 40 28 27 39 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.254 0.189 -0.949 }
    <VertexRef> { 41 29 28 40 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.694 0.189 -0.694 }
    <VertexRef> { 42 30 29 41 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.949 0.189 -0.254 }
    <VertexRef> { 43 31 30 42 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.949 0.189 0.254 }
    <VertexRef> { 44 32 31 43 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.694 0.189 0.694 }
    <VertexRef> { 45 33 32 44 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.254 0.189 0.949 }
    <VertexRef> { 46 34 33 45 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.254 0.189 0.949 }
    <VertexRef> { 47 35 34 46 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.694 0.189 0.694 }
    <VertexRef> { 37 25 35 47 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.949 -0.189 0.254 }
    <VertexRef> { 37 48 49 36 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.949 -0.189 -0.254 }
    <VertexRef> { 50 38 36 49 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.694 -0.189 -0.694 }
    <VertexRef> { 51 39 38 50 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.254 -0.189 -0.949 }
    <VertexRef> { 52 40 39 51 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.254 -0.189 -0.949 }
    <VertexRef> { 53 41 40 52 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.694 -0.189 -0.694 }
    <VertexRef> { 54 42 41 53 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.949 -0.189 -0.254 }
    <VertexRef> { 55 43 42 54 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.949 -0.189 0.254 }
    <VertexRef> { 56 44 43 55 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.694 -0.189 0.694 }
    <VertexRef> { 57 45 44 56 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { -0.254 -0.189 0.949 }
    <VertexRef> { 58 46 45 57 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.254 -0.189 0.949 }
    <VertexRef> { 59 47 46 58 <Ref> { EyeRight } }
  }
  <Polygon> {
    <Normal> { 0.694 -0.189 0.694 }
    <VertexRef> { 48 37 47 59 <Ref> { EyeRight } }
  }
}

That’s how the model looks like in the Blender outliner

Well, I think whatever tool created your egg file should have put all those groups within a single common group, with a single flag in that common group. Perhaps you can restructure your armature to make that more likely, by grouping all those pieces under a common bone?

David

Solved! While on the road actually. It was enough to convert every body part into a mesh. This operation removed the modifiers (no idea why what they were doing in there) that made the egg exporter confused. Now I’ve got proper scene graph structure and proper flagging.

Claudio