Why we see different bones count FBXImporter vs EMFX:: Physics window?

take a look on this…
here is the FBX hierarchy of bones (mesh are not bone!)


and here is the emfx hierarchy of bones (mesh are bone!)

Why mesh become a bone?
I think this issue do not allow to use this flag for BoundBox calculation based on bones position when you are use ragdoll

void BlendTreeRagdollNode::Output(AnimGraphInstance* animGraphInstance)
    {
        ActorInstance* actorInstance = animGraphInstance->GetActorInstance();
		actorInstance->SetBoundsUpdateType(EMotionFX::ActorInstance::EBoundsType::BOUNDS_NODE_BASED);

you got false-bone what always get position in same one place( entity’s word position) so character’s bbox grows in volume if you pushing body away from it’s lastest entitie’s position.

and this very bad for renderer’s perfomance since it’s use this big bbox of non-visible character’s (in ragdoll mode) and send it to render queue.

I find a way to fix ragdoll bbox for characters, I made this fixes for the BlendTreeRagdollNode.cpp file

void BlendTreeRagdollNode::Output(AnimGraphInstance* animGraphInstance)
    {
...
        if (isActivated && ragdollInstance && !m_simulatedJointNames.empty())
        {
			// here we turn on bone base bbox
			actorInstance->SetBoundsUpdateType(EMotionFX::ActorInstance::EBoundsType::BOUNDS_NODE_BASED);

            const AZ::u32 jointCount = skeleton->GetNumNodes();
            for (AZ::u32 jointIndex = 0; jointIndex < jointCount; ++jointIndex)
            {
                Node* joint = skeleton->GetNode(jointIndex);
                const AZ::Outcome<size_t> ragdollNodeIndex = ragdollInstance->GetRagdollNodeIndex(jointIndex);

				// By Default we exclude any of bones from bound box calculation
				// and includes their into only if they are ragdoll simulated
				joint->SetIncludeInBoundsCalc(false);

                if (ragdollRootNode && joint == ragdollRootNode->GetParentNode() && ragdollRootNodeIndex.IsSuccess())
                {
                    if (targetRagdollRootNodeState.m_simulationType == Physics::SimulationType::Dynamic)
                    {
...
						// Since this bone is ragdoll simulated enable bbox calc for it
						joint->SetIncludeInBoundsCalc(true);
                        outputPose.SetWorldSpaceTransform(jointIndex, newGlobalTransform, /*invalidateChildGlobalTransforms*/ false);
                    }
                }
                // Is the joint part of the ragdoll as well as added by this ragdoll node?
                else if (ragdollNodeIndex.IsSuccess() && uniqueData->m_simulatedJointStates[jointIndex])
                {
                    if (!ragdollParentJoint)
                    {
                        // No parent found, we're dealing with the ragdoll root.

						// usually root bone do not simulated by ragdoll so skip it
                    }
                    else
                    {
						// bone with ragdoll so enabled bbox calc
						joint->SetIncludeInBoundsCalc(true);
                    }

                }
                else
                {
                }
            }

            ragdollInstance->SetRagdollUsed();
        }
    }