Unity에서 아바타의 팔과 발의 움직임을 LookAt만으로 VRIK처럼 제어한다

8248 단어 VRIKUnity3DUnityVRMVR

VRIK 같은 것



VRIK 은 VRHMD와 컨트롤러에서 아바타의 움직임을 좋은 느낌으로 조정해주는 에셋(여러가지 저희가 있다)입니다만, 최근에는 VIVE 트래커가 윤택하게 사용할 수 있는 환경에 있으므로, 스스로도 비슷한 것이 만들 수 없다고 생각했습니다.

사용하는 것은 LookAt 만



전제는 이렇게
1. 머리와 목은 간단한 HMD 추적
2. 거기에서 어깨・허벅지의 위치는 얻어지고 있다

기본적인 논리는 이렇게
1. 컨트롤러의 위치와 방향에서 팔꿈치 또는 무릎이있는 지점을 찾습니다.
2. 그 점을 향해 어깨 또는 허벅지의 객체를 LookAt
3. 그리고 팔꿈치·무릎의 오브젝트를 컨트롤러에 LookAt
4. 손 개체는 컨트롤러 방향으로 설정

그래서 다음은 코드입니다.

IKSets.cs
using UnityEngine;

public class IKSets : MonoBehaviour
{
    public Transform FirstPoint;
    public Vector3 FirstFix = new Vector3(0,90,0);


    public Transform SecondPoint;
    public Vector3 SecondFix = new Vector3(0, 90, 0);

    public Transform EndPoint;
    public Vector3 EndFix = new Vector3(0, 90, 0);

    public Transform IkTarget;



    private float _f2sDistance;
    private float _s2eDinstance;

    void Awake()
    {
        SetDistances();
    }

    private void SetDistances()
    {
        _f2sDistance = Vector3.Distance(FirstPoint.position, SecondPoint.position);
        _s2eDinstance = Vector3.Distance(SecondPoint.position, EndPoint.position);
    }

    private void Update()
    {
        SetObjs();
    }

    private void SetObjs()
    {
        var middlePoint = GetMiddlePosition();
        FirstPoint.LookAt(middlePoint);
        FirstPoint.Rotate(FirstFix);


        SecondPoint.LookAt(IkTarget);
        SecondPoint.Rotate(SecondFix);

        EndPoint.eulerAngles = IkTarget.eulerAngles;
        EndPoint.Rotate(EndFix);
    }

    private Vector3 GetMiddlePosition()
    {
        var distance = Vector3.Distance(IkTarget.position, FirstPoint.position);
        if (distance >= _f2sDistance + _s2eDinstance)
        {
            return IkTarget.position;
        }

        return -IkTarget.forward * _s2eDinstance + IkTarget.position;
    }
}

간단한 벡터 계산이므로 설명은 생략.

hogeFix는 붙어 있는 Vector3에 관해서는, 아바타마다의 좌표축의 차이에 대응하기 위한 값.
VRM 아바타라면 전부(0,90,90)로 하면 괜찮아, Unity 짱이라면 순서대로(90,90,0), (90,90,0), (0,90,0)

움직였다.



실제로 사용하고 있는 동영상이 다음 2개.



무엇을 어디에 연결할지는 위를 참조하십시오.
뭐, FirstPoint에 근원의 오브젝트, SecondPoint에 팔꿈치나 무릎의 중간 포인트, EndPoint에 손이나 발끝 같은 끝의 오브젝트, IKTarget에 대응하는 컨트롤러나 트래커를 넣어 주면 된다. SteamVR의 컨트롤러는 방향이 이상하기 때문에 조심하도록.

위화감은 물론 있고, 다리에 적응하면 대단한 이상했지만, 뭐 무료의 VRIK라고 생각하면 퀄리티적으로는 이런 것도 레벨

「엣? VRIK 필요 없어지는 거야!?」 그런 것은 아니다



위화감이 있다고는 해도 VRIK에 대체할 수 있을 것 같은 생각이 들지만, 이것은 사지가 완전하게 트래킹 할 수 있는 전제이므로, 예를 들면 트래커가 없어 다리의 트래킹할 수 없는 때라든지는 사용할 수 없다

게다가 허리에 관해서는 전혀 생각하지 않기 때문에, 인사 다소 목을 비틀면 할 수 없다

VRIK가 대단한 것은, 컴퍼넌트로서 어태치하는 것만으로 거의 전부를 해 주는 것, 특히 다각 캐릭터의 발의 움직임을 제어해 주는 것은 굉장하다

좋은 웹페이지 즐겨찾기