Animation bodyparts offset rotating

Greetings. I downloaded the character animation from mixamo. Since the 3D model has a .vrm type, I had to export the prefab from Unity via the FBX Exporter, upload it to mixamo and select the animation and download it. On a 3D model, only the Generic animation type works, if you use Humanoid, it does not play correctly.
Perhaps this is due to the type of 3D model .vrm.

I wrote a small script for the 3D model that makes the character аollow the camera with eyes, head and partly spine. If you turn off the Animator and start the game, the 3D model will stand in a T-pose and follow the camera with its eyes, head and back, and if you turn on the animator, it will only work on the eyes. During the animation, I can change the offset position of different parts of the body (back, neck, head), but I can not rotate.

In the video, if you look closely, you can see how the eyes flicker/shake, that means the animator is trying all the time to return them to their original position.

How can rotation offset be given to different parts of the body so that they do not conflict with the animator?

Resolved!

  1. Open Animator which connected to your .vrm 3D Model character →
    1.1. Toogle on Apply Root Motion
    1.2. Place avatar that generated by animation when import to Avatar

  2. Add VRM Humanoid Description to .vrm 3D Model
    2.1. Same Avatar as 1.2
    2.2. Avatar Desc also importing with model, install it here

  3. Animation Settings
    3.1 Animation type Humanoid
    3.2 Avatar def Create From This Model

  4. Place Script like this to the same game object where Animator is located
    Code

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ViewHandler : MonoBehaviour
{
    private Animator m_Animator;
    public Camera m_TargetCamera;

    private Transform Root, Hips, Spine, Chest, UpperChest, Neck, Head;
    private GameObject PlayerLEye = null;
    private GameObject PlayerREye = null;

    private Vector3 CamPosition = new Vector3();

    void Start()
    {
        m_Animator = gameObject.GetComponent<Animator>();

        Root = gameObject.transform.Find("Root");
        Hips = Root.Find("J_Bip_C_Hips");
        Spine = Hips.Find("J_Bip_C_Spine");
        Chest = Spine.Find("J_Bip_C_Chest");
        UpperChest = Chest.Find("J_Bip_C_UpperChest");
        Neck = UpperChest.Find("J_Bip_C_Neck");
        Head = Neck.Find("J_Bip_C_Head");
        PlayerLEye = Head.Find("J_Adj_L_FaceEye").gameObject;
        PlayerREye = Head.Find("J_Adj_R_FaceEye").gameObject;
    }

    void OnAnimatorIK(int layerIndex)
    {
        if (m_Animator == null) return;
        if (m_TargetCamera == null) return;

        CamPosition = m_TargetCamera.transform.position;
        Vector3 EyeRot = new Vector3();
        Vector3 Diff = (CamPosition - Head.transform.position).normalized;
        Vector3 PlayerRigth = Vector3.Normalize(Head.transform.right);
        Vector3 PlayerUp = Vector3.Normalize(Head.transform.up);

        EyeRot.x = (PlayerUp.x * Diff.x + PlayerUp.y * Diff.y + PlayerUp.z * Diff.z) * -6.5f - 1.0f;
        EyeRot.y = (PlayerRigth.x * Diff.x + PlayerRigth.y * Diff.y + PlayerRigth.z * Diff.z) * 9.0f;
        EyeRot.z = 0.0f;

        // Debug.Log(string.Format("{0:F02} | {1:F02}", EyeRot.x, EyeRot.y));

        m_Animator.SetBoneLocalRotation(HumanBodyBones.LeftEye, Quaternion.Euler(EyeRot));
        m_Animator.SetBoneLocalRotation(HumanBodyBones.RightEye, Quaternion.Euler(EyeRot));
        m_Animator.SetBoneLocalRotation(HumanBodyBones.Head, Quaternion.Euler(EyeRot));
        m_Animator.SetBoneLocalRotation(HumanBodyBones.Spine, Quaternion.Euler(EyeRot * 4.0f));
    }

    void Update()
    {

    }
}

And i got it