BVHTools icon indicating copy to clipboard operation
BVHTools copied to clipboard

animation malformation

Open cssddnnc9527 opened this issue 1 year ago • 1 comments

hi, finally I can generate animation, but the result is a bit malformation as follows:

malformation

fbx file: https://drive.google.com/file/d/11q5jgAxXPMW-0uSVvlJSqWhIMOaNuS5h/view?usp=sharing

bvh file: https://drive.google.com/file/d/1V2MDGAKx7B5dUGBIE3lZVH_fMsfTEugA/view?usp=sharing

mapping code:

    if (nameMap == null) {
        if (standardBoneNames) {
            Dictionary<Transform, string> boneMap;
            BVHRecorder.populateBoneMap(out boneMap, targetAvatar);
            nameMap = boneMap.ToDictionary(kp => flexibleName(kp.Value), kp => kp.Key);
            nameMap.Add("spine1", nameMap["chest"]);
            nameMap.Add("spine2", nameMap["upperchest"]);
            //nameMap.Add("spine3", nameMap["upperchest"]);
            nameMap.Add("neck1", nameMap["neck"]);
            nameMap.Add("pcube4", nameMap["neck"]);

            nameMap.Add("rightarm", nameMap["rightupperarm"]);
            nameMap.Add("rightforearm", nameMap["rightlowerarm"]);

            nameMap.Add("leftarm", nameMap["leftupperarm"]);
            nameMap.Add("leftforearm", nameMap["leftlowerarm"]);

            nameMap.Add("rightupleg", nameMap["rightupperleg"]);
            nameMap.Add("rightleg", nameMap["rightlowerleg"]);

            nameMap.Add("leftupleg", nameMap["leftupperleg"]);
            nameMap.Add("leftleg", nameMap["leftlowerleg"]);

            nameMap.Add("leftforefoot", nameMap["lefttoes"]);

            nameMap.Add("rightforefoot", nameMap["righttoes"]);

            nameMap.Add("righthandthumb1", nameMap["rightthumbproximal"]);
            nameMap.Add("righthandthumb2", nameMap["rightthumbintermediate"]);
            nameMap.Add("righthandthumb3", nameMap["rightthumbdistal"]);

            nameMap.Add("righthandindex1", nameMap["rightindexproximal"]);
            nameMap.Add("righthandindex2", nameMap["rightindexintermediate"]);
            nameMap.Add("righthandindex3", nameMap["rightindexdistal"]);

            nameMap.Add("righthandmiddle1", nameMap["rightmiddleproximal"]);
            nameMap.Add("righthandmiddle2", nameMap["rightmiddleintermediate"]);
            nameMap.Add("righthandmiddle3", nameMap["rightmiddledistal"]);

            nameMap.Add("righthandring1", nameMap["rightringproximal"]);
            nameMap.Add("righthandring2", nameMap["rightringintermediate"]);
            nameMap.Add("righthandring3", nameMap["rightringdistal"]);

            nameMap.Add("righthandpinky1", nameMap["rightlittleproximal"]);
            nameMap.Add("righthandpinky2", nameMap["rightlittleintermediate"]);
            nameMap.Add("righthandpinky3", nameMap["rightlittledistal"]);

            nameMap.Add("lefthandthumb1", nameMap["leftthumbproximal"]);
            nameMap.Add("lefthandthumb2", nameMap["leftthumbintermediate"]);
            nameMap.Add("lefthandthumb3", nameMap["leftthumbdistal"]);

            nameMap.Add("lefthandindex1", nameMap["leftindexproximal"]);
            nameMap.Add("lefthandindex2", nameMap["leftindexintermediate"]);
            nameMap.Add("lefthandindex3", nameMap["leftindexdistal"]);

            nameMap.Add("lefthandmiddle1", nameMap["leftmiddleproximal"]);
            nameMap.Add("lefthandmiddle2", nameMap["leftmiddleintermediate"]);
            nameMap.Add("lefthandmiddle3", nameMap["leftmiddledistal"]);

            nameMap.Add("lefthandring1", nameMap["leftringproximal"]);
            nameMap.Add("lefthandring2", nameMap["leftringintermediate"]);
            nameMap.Add("lefthandring3", nameMap["leftringdistal"]);

            nameMap.Add("lefthandpinky1", nameMap["leftlittleproximal"]);
            nameMap.Add("lefthandpinky2", nameMap["leftlittleintermediate"]);
            nameMap.Add("lefthandpinky3", nameMap["leftlittledistal"]);
        } else {
            nameMap = new Dictionary<string, Transform>();
        }
    }

    renamingMap = new Dictionary<string, string>();
    boneRenamingMap = new FakeDictionary[] {
        new FakeDictionary() { bvhName = "Spine3", targetName = "mixamorig:Spine3" },
        new FakeDictionary() { bvhName = "LeftToeBase", targetName = "mixamorig:LeftToe_End" },
        new FakeDictionary() { bvhName = "RightToeBase", targetName = "mixamorig:RightToe_End" },
       }

any advice will be appreciated!!

cssddnnc9527 avatar Sep 23 '22 01:09 cssddnnc9527

It is likely caused by a difference in bone rotations in the rest pose/T-pose by the model the animation originates from and those of the target model.

emilianavt avatar Sep 23 '22 14:09 emilianavt

can you help me to fix this issue? I'm willing to pay you if you can fix it and tell me how to fix it. i can pay deposit firstly!

the full code is here: https://drive.google.com/file/d/1LhrrzyGAqmQsPZNjRb9IADTnI8bQtoe1/view?usp=sharing

in addition, the versions information is as follows:

OS: Win7 Unity Hub : 3.2.0-c5 Unity: 2022.1.14f1c1 Visual Studio: Professional 2022(64 bit) 17.3.3

cssddnnc9527 avatar Oct 08 '22 06:10 cssddnnc9527

Sorry, but I can't.

emilianavt avatar Oct 08 '22 21:10 emilianavt

@emilianavt

It's OK. But could you please provide a sample bvh and fbx file which can work? Really appreciated!!!

cssddnnc9527 avatar Oct 11 '22 00:10 cssddnnc9527