Importing .bvh files
kevinbarton77
Posts: 9
Hi there,
I'm pretty sure this topic came up before but I can't find anything helpful here
so the question is quite easy: How to make .bvh animation files work? There is this famous "foot sliding" and I just don't want to believe that this is something we have to live with. EVERY other software handles animation-files as they are intended to, excapt DazStudio. Just why? This is giving me such a headache for months already, purchased even iClone but that didn't help either. Animations are essential to my project, so is the character-library from D3D. Is it, in any way, possible to make them work?
regards
Comments
render in the software that handles animation files as they are intended?
I dunno as I get foot sliding in any software if the BVH is the wrong scale for the figure used and the stride is wrong.
I import BVH from Mixamo etc myself after retarget in 3DX6 with figures moving on the spot then translate them at a speed that matches the stride, anything else and it gets difficult.
It really depends on tne BVH file itself where it is from and what it is made for, if you have them working on DAZ figures in other software you must be exporting them unscaled or something.
The main issue I have coming into DAZ studio is not foot sliding but hip translation myself and prefer to import on M4 and V4 for that reason and prefer to use Poser then move files to genesis 1, fix foot pose, move to genesis 3 finally 8 fixing arm and thigh pose.
Hey Wendy, thanks for taking your time
well rendering in another software means exporting all the needed assets that come from Daz, which is a lot of work so it should be (normally) faster to just make the animation work in Daz
Doesn't seem to be a height problem as they are the exact same size in 3dXchange, but Im not the expert here ^^
for testing I just grabbed 2 animations from mixamo, easy dance moves, step left - step right and a little hand waving. works perfectly fine in 3DXchange, Iclone, and MotionBuilder and Maya.
Your walkaround sounds quite painful. Im not sure if I want to do this for every animation I have
A bvh won't work in any of those programs (or any program) properly as-is either, unless the skeleton/bones match the target. If it does not, it would need to be retargeted in those programs as well to work. DS has not retargeting capability
If you are using G3/G8, they have limb twist bones that most generic BVH do not have. This usually cases the biggest problem. But the abdomen, chest and neck have 2 bones each. Most generic BVH only have 1 of each.
If the bvh does match your DS character, it might be that you need to specify the bvh map . Sometimes different naming can prevent the bones from auto matching. For example, lthigh (left thigh) might be called LeftLegUp , or something similar, but they would indicate the same bone. You can specify the bvh map in DS.
Sadly, the probability of a generic BVH file working with a Genesis 3/8 is just about zero. The skeleton that makes them look so awesome is the same one that makes the incompatible with everything else. But I will tell you that the end result is worth it. You have three choices, well, maybe 4:
1) 3DXchange - has some specific hacks to retarget to G8 characters
2) Maya - Can get it for $249/yr (for how long, unknown, and only for U.S. users) and its HIK is very, very powerful and can retarget pretty much from any biped to any other biped.
3) Motionbuilder - This is what the pros use. It's expensive, but you will not encounter any problems that MoBu cannot solve. But apparently Autodesk wants to abandon it took James Cameron himself to prevent that bu saying "No MoBu, no Avatar". It also bakes much, much faster than Maya and is more reliable.
4) Mixamojo (it's coming, and looks very promising). May not be a general solution to the problem of retargeting, rather, just working with Mixamo. We'll see.
But this is my #1, only, really, request for DS5... I wish Daz Studio could retarget animations to their own characters, with good IK.
So I have had luck importing mocap files into DS via BVH and a good Bone MAP to G1 figures. From there you can find various tools to apply the animations to G2/G3/G8 figures. DS does have retargeting (transfer utility?) I believe.
As for sliding feet, check out this utility: https://www.daz3d.com/glue-to-floor-utility-for-genesis-8-females
Good luck.
Hi guys, thanks for sticking with me,
so I made it work ... once .... and never again. And I don't even know what made the difference. I made a thousand different approaches by now, adjusting small things only to find the missing piece, but I can't find it anymore. But knowing that it CAN work is freaking me out like crazy. Feels like it does this at random...
@TheMysteryIsThePoint: I have all of these (as I am still enlisted as a student ) But they don't really help much. I had my go on different tutorials with iClone and 3DXChange which "seemed" like retargeting just fine. Having my DS-Character meeting the mixamo-animation in iClone7 working perfectly together. But I'm not getting them back to DS again. Im exporting fbx file from IClone with the DS-Bone-Strukter and the mixamo-animation, importing to 3DXChange, exporting as bvh, importing in DS and voilà, nothing works. I don't think that mb and maya will do anything different. Daz is the problem. period.
If this hasn't been mentioned before, one of the problems is the Genesis "twist" bones. DS expects all twist to be on those bones, and ignores the twist values on the other arm/leg bones. Many other packages don't know that, which means that the twist can get applied to the wrong bone and then is lost when you import it into DS, even if the rest of the bone mapping is correct.
@rames44 to me it seems that DS assigns values to wrong bones, similar as you are saying. I'm not very experienced with animations, I had to do a custom biped rig in maya in class a long time ago, Im mostly modeling. So my character-animating-knowledge is very limited.
I tried the motionbuilder-pipeline now and it works. But i will only use it to convert the animation I did in iClone to use it in Daz
I'm not sure you have the expertise to assign responsibility for the issue, whatever it may be, here.
I'm not sure I follow this. If a bone with twist limits is mapped to receive twist values then yes, they will be lost (or limited, depending on the strictness of the limits) but this should not usually be an issue unless the bone mapping is very unsual.
DS maps the bones with the BVH, and you can edit the mapping if need be. Once the bones are mapped that is of course how the values are applied.
The issue being raised is how the x,y,z rotation values are assigned in the other programs; vs. how they are assigned in DS , with it's default locks and limits enabled; and how twist bones in DS are used for weight mapping
e.g. If we take shoulder bend/twist - In some other programs, the retargeted data is usually placed as x,y,z rotation in a single bone (the bend), instead of being split into 2 separate bones: y,z for bend and x for twist. The twist bone is present, but no data is typically placed into it.
When the keys are imported back (either as bvh, or fbx reapplied as an animated pose preset) , the x-rot values get discarded, because that channel is locked off for the bend in DS normally. So the motion will be very off for arms and legs, because you have no x-rot values
A common workaround used is to unlock all joints, and rotation limits off before applying motion data. And this will "work" in the sense that the motion itself will be mostly correct. Some people use this from iclone/3dx
It will look something like this. Locks+limits off vs. default
But the other issue is the x-rot value is now placed in the wrong bone - all x,y,z values are placed in the bend. But DS uses twist bones for weight mapping. So you get skin deformations when you do this.
The proper procedure is to either solve or retarget with the locks in place (so x-rotation values get "forced" into the twist bone) , or afterwards in DS, you can copy/paste keys into their proper channel to get rid of the skin deformations
Where the bone is split into bend and twist elements (which is not, I believe, that uncommon given that each bone may have only a single weight map) DS uses clones so that setting a property on the "wrong" bone still affects the right bone.
well this is why I use Genesis 1 with BVH import targetted to it and the saved animated pose works pretty well on genesis 3 too
genesis 8 arms 45° down and thighs out 6° in pose controls and it will work on them too
don't use genesis 2 for something intended for genesis 3&8 this is where everyone stuffs up
Yes, it's affected. They are linked in the sense that if you enter the value within DS in terms of front-back, bend, twist - the those values are automatically reflected in the twist bone below. Or vice-versa if you adjust the twist bone, that value is auto reflected in the shoulder bend . No problem - that's fine if you do everything in DS
But the other programs do not use "front-back", "bend", "twist" labels. They typically use different names such as x rotation, y rotation, z rotation or similar. If you toggle show hidden values in the DS parameters panel, you will see the x,y,z rotation are locked and greyed out. When you apply motion data from external source (BVH, animated pose preset) - this can cause the twist values get discarded (x rotation) because it's locked off by default. If the motion appears completely off, arms and legs flailing around - this is a very common cause
But if you use the common workaround (unlock nodes, limits off), the x-rotation will now be pasted into the hidden x-rotation channel. You can get the deformations as shown above when the motion data is applied, because it will be pasted into the x-rotation, not twist. There will be a discrepancy between what the bend bone twist value reports, and what the twist bone twist value reports. It's no longer auto linked. And this causes those skin deformations.
There are slight variations, but the common theme in almost every case is data in the wrong channel, or missing channel data
Bottom line - You need to ensure the values are in the correct channel, in the manner that way DS intprets it
Can anyone give me advice on why this is happening with my BVH file. I exported out of Blender in to DAZ. The original animation was exported out of DAZ into Blender which worked well, but when reimporting into DAZ I have this problem. I have unlocked all limits and nodes.
Please use a non-textured Drawstyle if showing a nude figure.
Unlocking may be the issue, try again on a default figure.
One problem is that Blender and DS, while both are right handed systems, orient their axes differently so that (x,y,z) in DS corresponds to ( x, -z, y) in Blender, and in the opposite direction, (x,y,z) in DS corresponds to (x, z, -y) in Blender.
There might be a way to tell Blender to do this automatically upon export, but otherwise, you'd have to perform the above Blender->DS operations on all the channels in the BVH file. Sagan does this. It seems to work, but has not been tested very well.
I am curious
why did you round trip a BVH file from DS to Blender and back??
did you alter in some way in Blender?
I import the animation into DAZ for retargeting, then import it into Blender to clean up the mocap and then back into DAZ for use.