custom animation file importer.

Its funny how you can write a thousand line code and get stuck on a tiny mistake for days.

When I say relative, I mean the animation matrices being relative to the joint matrices. In other words, to get the new position,rotation,scale of a joint each frame, you need to add or multiply the joint (rest) matrix with the animation matrix. thats what I mean by relative and it could be the most wrong term here.

What Im saying is that the animations here seem to be ‘relative’, because if I set the joint (rest) matrices to something else when creating the joints, then the animations will be screwed up.

And since I dont manually multiply matrices and everything works, it seems like panda’s egg works the same way.

Now the above means if I hand edited the bones in the modeller to “correct” some rotations, the new model wouldn’t work with the existing animations, which is terrible because I wanted to make a complete import/export solution for modders.

to not waste resources?

nah, they are your usual characters. This works well enough.

No, changing the rest matrices doesn’t actually change the way the animations play back on the skeleton. What it does affect, however, is the way the vertices are assigned to the joints. If you change the rest matrices without a corresponding change to the animation matrices, then the vertices will fly off the joints when the animation is applied. But if you query joint.getTransform() or joint.getNetTransform(), it will still show the same value as if you hadn’t changed anything.

As a reminder: the vertices are applied so that when the rest transform is applied to the joints, then the vertices will hold the pose described in the egg file. If you change the rest transform, then you change the animation transform needed to hold that neutral pose, and you change every animation by the corresponding amount.

So, in that sense, it’s the vertices that are relative to the rest transform, not the animation matrices. But for the purposes of mucking around with the rest transform, it amounts to the same thing. The bottom line is, you can’t change the rest transform without applying the same change to the animation. If you want to build system that allows this, then you need to devise a way to modify all involved files at the same time.

(Actually, I think if the animation matrices were relative to the rest transform, then you could safely muck around with the rest transform at will, because that would implicitly modify the animation matrices at the same time. So the reason you have to modify them all is because they’re not relative.)

Yes, it’s technically difficult to update the bounding volumes, because it’s only the vertices that are animating rather than the entire node, and it would be prohibitively expensive to re-analyze the vertex cloud every frame. That said, I do consider this a minor bug on Panda’s part, and implementing a system to precompute the bounding volume for every frame has been on my B-list for a long time.

David

Oh, you’re right. I just rendered the bones and when playing the animations, they are in place, it’s just the vertices screwing up.
I think I undertsand what you mean. But if I didnt, it all boils down to “changing the rest transforms will not be an option”.

Now its my final question.
How can I make an importer for a 3d modeller?
This is a general question that is also targeted to the egg format.
This is not an option for modders:
img689.imageshack.us/i/12454122542rgfe.jpg/

It will be almost impossible to rerig or rig another model with that skeleton.
First I want to connect the bones. I don’t think there’s any harm in this as I can just export 1.0 for the bone scales in the end.
And of course I want the rotations to be correct before I connect the bones. What can I do? You say that it’s just caused by y-up to z-up conversion, but wouldn’t it just affect the Pitch?
Or is there really no way to get formats like egg back to a 3d modeller with correct bones? (but I think there is as Ive modded other games which had transform matrices for bones and when loading the format to Blender, the bones were connected, so there must be a way)

Have you tried hand-editing the egg file to change Y-up to Z-up in the first line, as I suggested? What does your bone visualization look like after you do that?

If you have a bone geometry who’s tip is facing upwards, then this:
img576.imageshack.us/i/35326353.jpg/
But no matter where your bone gemetry is facing (90, 180 along the heading or pitch), the simmetrical model’s bones will never look simmetrical.

Well, I can’t help you with the Panda model. That’s the way he was created. You can always massage the joints in the egg file yourself by pretransforming them by whatever transform you deem necessary, but the egg file contains whatever data came out of the converter.

Whether the converter reflects the artist’s original construction, I can’t tell you. I believe this particular character was originally modeled in an old version of SoftImage, which is no longer supported; and so the original model is lost.

David

That’s the thing, it looks like all 3d modellers work the same way: the bones one the negative axis are 180 degrees different in some angle. and all the bones are facing up.

We already have the Blender importer for the game’s format finished and it has the same bone rotations as that egg and some other egg files I tried such as Ralph.
I’m wondering if it’s worth continuing with the script and connecting the bones…
If Blender works like the original 3d modeller used by the devs, then leaving it like that when exporting might be a problem, if not, connecting the bones and exporting will be a problem

hm, Im baffled, I created a skeleton in Blender and exported it to egg.
s3.postimage.org/5op42mcbo/532432534.jpg
s3.postimage.org/5oogx3hes/35325323542.jpg
the rotations are correct.

I can’t find any logical explanation to this.
It seems like all the other files Ive tried have wrong rotations. Its as if some modellers work in a different way and store matrices differently, so egg exported from one modeller (for example) wont work with animations exported from another.

s3.postimage.org/5ouayck4k/3245325242.jpg
s3.postimage.org/5ou5zqin8/873247824.jpg
s3.postimage.org/5ou2ontno/525456645.jpg

I don’t know. It’s possible. Keep in mind that the egg format was designed to play back animations only; it was never intended to be a medium to transport animations from one file format to another.

That said, it has been done successfully in the past. But as you say, a lot may depend on the vagaries of the modeling software used to create the original animation.

David

oops, the images didnt show up, so i edited my old post.

Im not talking about eggs only. Its the case for the game’s format and x.

Hm, there is only one type of skeleton in the game. Maybe I could make a real skeleton (with good rotations) with the script but export some hardcoded values for the bone matrices during export.
But then I can’t load the animation files to work with the model in Blender…

I just imported a model with our importer to Blender and exported it with Chicken to egg.
I then loaded the egg in Panda and assigned it an animation, as usual.

Only around 30 bones are animated (and the ones that are move the vertices correctly, but they rest of the 170 bones are centered at 0,0,0 and do not move/rotate.

It seems like the bones/bone names do not match between the joints and tables.

Im pretty sure our Blender importer works fine as it shows up as expected and everything seems in place and correct.

Is it possible that the egg exporter or Pandas egg loader, or the egg format dont store some data or remove it for optimization?

I also get alot of these messages:

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

There is no crash/errors and there are no warnings to hint what is wrong, even after adding the notify levels as you mentioned earlier.

Panda’s egg loader won’t remove unanimated joints automatically (the egg-optchar program will do that, but I doubt you’re running that since you don’t mention it). So if the joints are unanimated in Panda, they’re unanimated in the egg file. You can, of course, confirm this by visually inspecting the egg file for animation data.

My guess would be this is an optimization provided by the Chicken exporter, or possibly by the Blender API itself.

The “Tried to invert singular LMatrix3” error message comes about when one or more of your joint matrices includes a scale of 0, which creates a singular matrix (basically a divide-by-zero error).

David

they aren’t, I visualise them and they are there, but something isn’t right. Most of them are centered at 0,0,0 and don’t transform during animation, which probably means the data doesn’t correspond to the one in the animBundleNodes I generate.

They both don’t seem to remove the joints, as I explained above. Is there any other data that can be optimized/removed?

Blender 2.4.x deletes 0 sized bones, but the bones aren’t zero sized, they are always 1.0 in the files and the scale part of the bone matrices is always 1.0,1.0,1.0, so it must be something else.

Again, please examine the egg file that Chicken produced to see whether the animation is present in that file. I assure you that Panda will play back precisely whatever animation it finds in the egg file.

If the animation is indeed absent from the egg file, then this problem has got something to do with Chicken or Blender, and not with Panda. If the animation is actually present in the egg file and Panda isn’t playing it, then something very very strange is going on.

David

Like I said the model is converted to egg and loaded into Panda, but the animations aren’t. They are in the game’s format and directly loaded in panda.
When I directly load the game’s model format, it works fine with the animations, but not when converting it to an egg.

Oh, I’m sorry, I did misunderstand. So you’re creating the AnimBundleNodes directly, and not going through egg.

Still, Panda will only play back whatever if finds in the AnimBundleNodes. If those joints aren’t animating, it must be that the AnimBundleNode for the joint didn’t describe any animation.

The animation system is designed to be as simple as possible on playback. Any optimization is meant to be performed on the egg file as an offline preprocess. Once it gets loaded into Panda structures, it’s just a straight playback.

David

It can’t be the case. The same animBundleNodes show a perfect animation when assigned on an Actor loaded directly to the engine.

In other words:
our panda model loader-> Actor + our panda animation loader → AnimBundlenode = pefect animation

our blender importer-> chicken exporter-> panda egg loader-> Actor + our panda animation loader-> AnimBundleNode = wrong animations

Which probably means the exported egg file doesn’t have some data, or has something changed in the data (names, etc).
The joint names, for example, are correct in the egg files. I dont know what isn’t

here are some screens.
Here I load an egg file:
s3.postimage.org/pahxlwro/0_354648412419.jpg
the green spheres are the joints

here I load an animation without moving the camera:
s3.postimage.org/pawtg17o/0_707744484801.jpg
I switched to wireframe rendering. Notice that the bones spheres have become alot bigger and therefore has the mesh. The bones are also become for flat along the Z and they dont move or rotate,

lets zoom a bit closer:
s3.postimage.org/pb534rok/0_654771079638.jpg
You can see that some bones are infact animating as they should (around 30 from 190).

this is how everything looks from afar:
s3.postimage.org/pbbpa5no/0_357970421244.jpg

Ah, I see. So it sounds to me like a problem in the binding of the animation to the skeleton hierarchy–perhaps in the egg file case, due to a misnamed node or an incorrect number or order of children, some joints weren’t matched to the correct animation bundle.

You can see a report of binding progress if you set “notify-level-chan debug” in your Config.prc file. With this setting in effect, is there any difference in the output between the binding of the synthesized Actor vs. the egg file Actor?

David

I think if it was a problem in our blender importer, then those 30 bones wouldn’t animate properly as well, so I think its something to do with Blender itself or the chicken exporter which doesnt export everything or in correct order (maybe alphabetically).
Just had a look at the egg file and all the joints seem in place.
It’s possible that the order is wrong, if thats important for the egg format.
EDIT: yes, the first bone in the file is not the first in the converter egg, as well as the last.

I’m not sure what i can do here…

will try

Tried the debug option you said…
With the egg format:

:chan(debug): Found 0 anims:

:chan(debug): Found 1 parts:
 <skeleton>

With the game’s format:

:chan(debug): Found 0 anims:

:chan(debug): Found 1 parts:
 character

The part name seems to be the Character object name, I renamed it in our loader from “character” to “”, but it didnt change anything.

What else can I do?

BTW, Im posting the rotation and location values of the joints, because some of them have weird numbers:
ROT

Vec3(90, -90, [b]2.50448e-006[/b])
Vec3(90, -90, 2.50448e-006)
Vec3(90, -90, 2.50448e-006)
Vec3(90, 90, -2.50448e-006)
Vec3(90, 90, -2.50448e-006)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(0, 0, 90)
Vec3(180, 14.3328, -90)
Vec3(180, -28.9846, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -117)
Vec3(180, 0, -117)
Vec3(180, 0, -117)
Vec3(0, 0, 63)
Vec3(0, 0, 63)
Vec3(0, 0, 63)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(0, 0, 90)
Vec3(180, 0, -90)
Vec3(180, 0, -90)
Vec3(0, 0, 90)
Vec3(180, -31.4902, -90)
Vec3(180, -31.4902, -90)
Vec3(-180, -75.2565, -90)
Vec3(0, -83.5505, 90)
Vec3(169.668, -25.7595, -124.691)
Vec3(131.277, -53.9603, -168.83)
Vec3(95.4863, -52.6671, 162.134)
Vec3(10.3316, 25.7595, 55.3086)
Vec3(48.7231, 53.9603, 11.1702)
Vec3(84.5137, 52.6671, -17.8661)
Vec3(148.7, 0, -176.559)
Vec3(103.428, -2.44605, 175.642)
Vec3(82.1457, 12.8378, -180)
Vec3(83.3586, -0.799051, 175.068)
Vec3(31.3004, 0, 3.44093)
Vec3(76.5715, 2.44605, -4.35812)
Vec3(97.8543, -12.8378, 1.78257e-006)
Vec3(96.6414, 0.799051, -4.93233)
Vec3(-180, -80.0222, -90)
Vec3(-180, -89.6274, -90)
Vec3(-180, -89.8923, -90)
Vec3(-180, -89.9914, -90)
Vec3(0, -89.9547, 90)
Vec3(-180, -80.0222, -90)
Vec3(-180, -89.6274, -90)
Vec3(-180, -89.8923, -90)
Vec3(-180, -89.9914, -90)
Vec3(0, -89.9547, 90)
Vec3(180, -31.4902, -90)
Vec3(99.3591, 0, -180)
Vec3(91.2148, 0, -180)
Vec3(89.7281, 0, -180)
Vec3(88.7744, 0, -180)
Vec3(80.6409, 0, 0)
Vec3(88.7852, 0, 0)
Vec3(90.2719, 0, 0)
Vec3(91.2256, 0, 0)
Vec3(-180, 60.2908, 90)
Vec3(-180, 89.036, 90)
Vec3(-180, 89.7248, 90)
Vec3(0, 89.3512, -90)
Vec3(180, 81.1377, 90)
Vec3(0, 89.5578, -90)
Vec3(0, 89.8976, -90)
Vec3(180, 89.9862, 90)
Vec3(0, 89.9246, -90)
Vec3(180, -31.4902, -90)
Vec3(174.257, 71.1477, -116.117)
Vec3(174.041, 71.0038, -115.912)
Vec3(5.74276, -71.1477, 63.8827)
Vec3(5.95925, -71.0038, 64.0875)
Vec3(0, 0, 0)
Vec3(180, 0, -180)
Vec3(0, 0, 0)
Vec3(-180, 0, 180)
Vec3(-180, 0, 180)
Vec3(90, 89, -90)
Vec3(-90, -89, -90)
Vec3(-12, -6.75183e-006, -28)
Vec3(-1.37059, -5.60148, -7.4785)
Vec3(-1.37059, -5.60148, -2.47851)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(-180, 0, 180)
Vec3(0, 0, 0)
Vec3(0, 0, 0)
Vec3(0, 1.2649e-006, 0)
Vec3(89.9999, -89, 89.9999)
Vec3(180, 90, 180)
Vec3(-168.002, 0.207904, 152.978)
Vec3(-178.728, 5.62455, 173.526)
Vec3(-178.728, 5.62455, 178.526)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(-180, -1.26472e-006, -179)
Vec3(0, 1.2649e-006, 0)
Vec3(-180, 0, 180)
Vec3(0, 0, -65)
Vec3(0, 0, -65)
Vec3(0, 0, 65)
Vec3(0, 0, 65)
Vec3(-90, 0, -28.3691)
Vec3(-90, 0, -44.369)
Vec3(90, -90, -180)
Vec3(88.9009, 0.0140035, -179.6)
Vec3(-0.925055, -85.3999, 90.1746)
Vec3(0.000875047, 0.000416089, -89.9783)
Vec3(-89.9991, -0.0216783, -89.9996)
Vec3(0.000875047, 0.000416089, 0.0216783)
Vec3(91.0991, -0.0140034, 0.399926)
Vec3(-179.075, 85.3999, -89.8254)
Vec3(179.999, -0.000416088, 90.0217)
Vec3(-90.0009, 0.0216783, 90.0004)
Vec3(179.999, -0.000416088, -179.978)
Vec3(0, 0, 90)
Vec3(-180, 0, -90)
Vec3(0, 0, 90)
Vec3(-180, 0, -90)
Vec3(0, 0, 90)
Vec3(0, 80.7274, -90)
Vec3(-7.85341e-006, 80.7274, -96)
Vec3(180, -80.7274, 90)
Vec3(-180, -80.7274, 84)
Vec3(-66.0376, 0, 0)
Vec3(-113.962, 0, -180)
Vec3(0, -71.7481, 90)
Vec3(-1.27119e-005, -71.7481, 96)
Vec3(-180, 71.7481, -90)
Vec3(-180, 71.7481, -84)
Vec3(0, 0, 90)
Vec3(180, -78.6339, -90)
Vec3(180, -75.8612, -90)
Vec3(180, -78.2758, -90)
Vec3(180, -82.138, -90)
Vec3(180, -85.8782, -90)
Vec3(0, -89.9804, 90)
Vec3(180, -78.6339, -90)
Vec3(180, -75.8612, -90)
Vec3(180, -78.2758, -90)
Vec3(180, -82.138, -90)
Vec3(180, -85.8782, -90)
Vec3(0, -89.9804, 90)
Vec3(107.859, 0, -180)
Vec3(113.131, 0, -180)
Vec3(102.816, 0, -180)
Vec3(98.9403, 0, -180)
Vec3(98.0903, 0, -180)
Vec3(92.2287, 0, -180)
Vec3(72.1409, 0, 0)
Vec3(66.8687, 0, 0)
Vec3(77.1841, 0, 0)
Vec3(81.0597, 0, 0)
Vec3(81.9097, 0, 0)
Vec3(87.7713, 0, 0)
Vec3(-180, 68.3147, 90)
Vec3(-180, 64.7879, 90)
Vec3(-180, 74.5456, 90)
Vec3(-180, 81.198, 90)
Vec3(-180, 85.1418, 90)
Vec3(-180, 88.2567, 90)
Vec3(-180, 68.3147, 90)
Vec3(-180, 64.7879, 90)
Vec3(-180, 74.5456, 90)
Vec3(-180, 81.198, 90)
Vec3(-180, 85.1418, 90)
Vec3(-180, 88.2567, 90)

POS

VBase3(0, 9.33717, 0.15)
VBase3(0, 10.093, 0.237042)
VBase3(0, 10.8002, 0.15)
VBase3(0, 12.3774, -0.09)
VBase3(0, 13.115, 0.0176346)
VBase3(0, 13.3448, 0.216853)
VBase3(0, 13.345, 0.217244)
VBase3(0, 13.3448, 0.216853)
VBase3(0, 13.3448, 0.216853)
VBase3(0, 13.345, 0.217635)
VBase3(0, 13.345, 0.217635)
VBase3(0, 13.345, 0.217635)
VBase3(0, 13.345, 0.217635)
VBase3(0, 13.1178, 0.535434)
VBase3(0, 13.1778, 0.770232)
VBase3(0, 14.3506, 0.0176346)
VBase3(0.490907, 13.9832, 0.868508)
VBase3(0.490907, 14.0832, 0.868508)
VBase3(0.490907, 14.0832, 0.868508)
VBase3(-0.490906, 13.9832, 0.868508)
VBase3(-0.490906, 14.0832, 0.868508)
VBase3(-0.490906, 14.0832, 0.868508)
VBase3(0.35, 13.865, 0.297317)
VBase3(-0.35, 13.865, 0.297317)
VBase3(0, 13.7354, 0.307672)
VBase3(0.477483, 13.7354, 0.307672)
VBase3(-0.477483, 13.7353, 0.307671)
VBase3(0, 13.8556, 0.307672)
VBase3(0.477483, 13.8556, 0.307672)
VBase3(-0.477483, 13.8555, 0.307671)
VBase3(0, 15.4271, 0.422575)
VBase3(0, 15.4271, 0.422575)
VBase3(0, 14.9874, 1.22256)
VBase3(0, 14.4064, 1.43869)
VBase3(-3.61733e-006, 15.4271, 0.422545)
VBase3(0.523689, 14.8541, 1.12557)
VBase3(0.89395, 14.0838, 1.08583)
VBase3(-1.34782e-006, 15.4271, 0.422553)
VBase3(-0.523666, 14.8541, 1.12556)
VBase3(-0.893942, 14.0837, 1.08585)
VBase3(-1.15998e-005, 15.427, 0.422783)
VBase3(1.01625, 14.825, 0.493798)
VBase3(1.18354, 14.0368, 0.431486)
VBase3(1.08432, 13.3176, 0.431488)
VBase3(-5.12693e-006, 15.427, 0.422783)
VBase3(-1.01625, 14.825, 0.4938)
VBase3(-1.18355, 14.0368, 0.431487)
VBase3(-1.08431, 13.3175, 0.431484)
VBase3(0.986095, 14.1765, 0.256316)
VBase3(0.836095, 13.51, 0.421297)
VBase3(0.836095, 12.51, 0.4278)
VBase3(0.836095, 11.6551, 0.429406)
VBase3(0.836095, 10.8921, 0.429522)
VBase3(-0.986095, 14.1765, 0.256316)
VBase3(-0.836095, 13.51, 0.421297)
VBase3(-0.836095, 12.51, 0.4278)
VBase3(-0.836095, 11.6551, 0.429407)
VBase3(-0.836095, 10.8921, 0.429522)
VBase3(0, 15.4271, 0.422575)
VBase3(1.23907, 14.9216, -0.698265)
VBase3(1.4469, 13.6605, -0.698265)
VBase3(1.47326, 12.4178, -0.698265)
VBase3(1.46545, 10.7719, -0.698265)
VBase3(-1.23907, 14.9216, -0.698265)
VBase3(-1.44691, 13.6606, -0.698265)
VBase3(-1.47326, 12.4179, -0.698265)
VBase3(-1.46545, 10.7719, -0.698265)
VBase3(0, 15.0638, -1.06905)
VBase3(0, 14.3229, -1.49181)
VBase3(0, 13.3231, -1.50863)
VBase3(0, 12.3781, -1.51318)
VBase3(0, 13.2019, -0.672136)
VBase3(0, 12.2988, -0.812951)
VBase3(0, 11.1948, -0.804431)
VBase3(0, 10.1488, -0.802562)
VBase3(0, 9.13782, -0.802806)
VBase3(0, 15.4271, 0.422575)
VBase3(0.478982, 15.4497, 0.25932)
VBase3(1.00216, 16.2514, 0.549542)
VBase3(-0.478965, 15.4498, 0.259304)
VBase3(-1.00216, 16.2514, 0.54955)
VBase3(1.19172, 14.552, 0.127682)
VBase3(-1.19172, 14.552, 0.127682)
VBase3(0, 13.7087, 0.141577)
VBase3(0.388555, 12.0408, 0.149959)
VBase3(1.15588, 12.0035, -0.0867936)
VBase3(3.30337, 12.0035, -0.20035)
VBase3(5.27808, 12.0035, -0.165881)
VBase3(5.52483, 11.9863, 0.0235633)
VBase3(5.73799, 11.8727, 0.2527)
VBase3(5.94215, 11.8704, 0.279371)
VBase3(6.09902, 12.1441, 0.110065)
VBase3(6.37317, 12.1441, 0.110065)
VBase3(6.62846, 12.1441, 0.110065)
VBase3(6.12857, 12.1541, -0.0541777)
VBase3(6.45274, 12.1541, -0.0541777)
VBase3(6.7103, 12.1541, -0.0541777)
VBase3(6.1172, 12.1331, -0.222413)
VBase3(6.36181, 12.1331, -0.222413)
VBase3(6.61709, 12.1331, -0.222413)
VBase3(6.07401, 12.0801, -0.374733)
VBase3(6.24359, 12.0801, -0.374733)
VBase3(6.45113, 12.0801, -0.374733)
VBase3(1.15588, 12.0035, -0.0867936)
VBase3(0.961816, 12.4786, 0)
VBase3(-0.388555, 12.0408, 0.149959)
VBase3(-1.15588, 12.0034, -0.0867936)
VBase3(-3.30337, 12.0034, -0.200349)
VBase3(-5.27808, 12.0034, -0.165881)
VBase3(-5.52808, 11.9863, 0.01922)
VBase3(-5.74522, 11.8727, 0.244607)
VBase3(-5.94983, 11.8704, 0.26771)
VBase3(-6.10371, 12.1441, 0.0956955)
VBase3(-6.37782, 12.1441, 0.0909109)
VBase3(-6.63307, 12.1441, 0.0864555)
VBase3(-6.13039, 12.1541, -0.0690379)
VBase3(-6.45451, 12.1541, -0.0746954)
VBase3(-6.71203, 12.1541, -0.0791905)
VBase3(-6.11608, 12.1331, -0.237049)
VBase3(-6.36066, 12.1331, -0.241318)
VBase3(-6.6159, 12.1331, -0.245773)
VBase3(-6.07024, 12.0801, -0.388593)
VBase3(-6.23979, 12.0801, -0.391553)
VBase3(-6.4473, 12.0801, -0.395175)
VBase3(-1.15588, 12.0034, -0.0867936)
VBase3(-0.961816, 12.4786, 0)
VBase3(0.567728, 11.2041, 0.802973)
VBase3(0.719853, 11.2041, 1.1292)
VBase3(-0.568, 11.2041, 0.802973)
VBase3(-0.720143, 11.2041, 1.12925)
VBase3(0, 12.323, 0.507942)
VBase3(0, 11.9328, 0.71867)
VBase3(0, 9.33717, 0.15)
VBase3(0.75, 7.83717, 0.191964)
VBase3(0.690508, 4.73781, 0.121469)
VBase3(0.614758, 0.79144, -0.092464)
VBase3(0.615126, 0.267204, 0.860086)
VBase3(0.615296, 0.220127, 1.30561)
VBase3(-0.75, 7.83717, 0.191964)
VBase3(-0.690508, 4.73781, 0.121469)
VBase3(-0.61476, 0.791523, -0.0924574)
VBase3(-0.615128, 0.267287, 0.860094)
VBase3(-0.615298, 0.22021, 1.30562)
VBase3(0.0451317, 7.64949, 0.698965)
VBase3(-0.0451317, 7.64949, 0.698964)
VBase3(0.568682, 8.21315, -0.270883)
VBase3(-0.55635, 8.21315, -0.270883)
VBase3(0, 9.33717, 0.15)
VBase3(0.703771, 9.58342, 0.977264)
VBase3(0.703775, 8.81853, 1.10215)
VBase3(-0.703771, 9.58342, 0.977265)
VBase3(-0.703776, 8.81854, 1.10214)
VBase3(1.07326, 9.5868, 0.312203)
VBase3(-1.07326, 9.5868, 0.312203)
VBase3(0.703771, 9.57562, -0.405274)
VBase3(0.703771, 8.84195, -0.647229)
VBase3(-0.703771, 9.57562, -0.405274)
VBase3(-0.703772, 8.84195, -0.647229)
VBase3(0, 9.33717, 0.15)
VBase3(0.709109, 9.56033, 0.84752)
VBase3(0.709109, 8.79758, 1.00085)
VBase3(0.709109, 7.85504, 1.23827)
VBase3(0.709109, 6.14644, 1.59286)
VBase3(0.709109, 4.48357, 1.82248)
VBase3(0.709109, 2.79737, 1.94399)
VBase3(-0.709109, 9.56033, 0.84752)
VBase3(-0.709109, 8.79758, 1.00085)
VBase3(-0.709109, 7.85504, 1.23827)
VBase3(-0.709109, 6.14644, 1.59286)
VBase3(-0.709109, 4.48357, 1.82248)
VBase3(-0.709109, 2.79737, 1.94399)
VBase3(0.964815, 9.55763, 0.310066)
VBase3(1.22274, 8.75716, 0.310066)
VBase3(1.59082, 7.89549, 0.310066)
VBase3(1.98412, 6.16666, 0.310066)
VBase3(2.24628, 4.50015, 0.310066)
VBase3(2.49098, 2.77875, 0.310066)
VBase3(-0.964825, 9.55763, 0.310066)
VBase3(-1.22275, 8.75716, 0.310066)
VBase3(-1.59082, 7.89549, 0.310066)
VBase3(-1.98413, 6.16666, 0.310066)
VBase3(-2.24628, 4.50016, 0.310066)
VBase3(-2.49098, 2.77876, 0.310066)
VBase3(0.705125, 9.56034, -0.197172)
VBase3(0.705125, 8.83739, -0.484646)
VBase3(0.705125, 7.95798, -0.898692)
VBase3(0.705125, 6.19994, -1.38474)
VBase3(0.705125, 4.50316, -1.64747)
VBase3(0.705125, 2.78835, -1.79322)
VBase3(-0.705125, 9.56034, -0.197172)
VBase3(-0.705125, 8.83739, -0.484646)
VBase3(-0.705125, 7.95798, -0.898692)
VBase3(-0.705125, 6.19994, -1.38474)
VBase3(-0.705125, 4.50316, -1.64747)
VBase3(-0.705125, 2.78835, -1.79322)

might negative rotations make the bones look weird like I described above?