오큘러스 퀘스트에 대한 손 추적을 많이 찾아봤어요.

6801 단어 OculusQuestUnity

먼저


며칠 전에 Oculus Integration을 업데이트했는데 Quest의 손 추적도 유니티에서 시도할 수 있어서 많이 조사했습니다.
오큘러스 공식도 말했지만 손 추적 기능은 현재 개발자 preview 버전이기 때문에 이 글이 발매될 때 쓸모가 없을 수도 있으니 용서해 주십시오

환경 확인

  • Unity2019.1.14f1
  • OculusIntegration ver 12.0
  • OculusQuest ver 12.0
  • Windows10
  • 한마디로 Integraiton은 ver1.43에서 단숨에 ver12.0으로 상승했다.
    Quest 버전 번호를 맞추기 위해서일 수도 있어요.

    공식 참조


    https://developer.oculus.com/documentation/quest/latest/concepts/unity-handtracking/
    이거 보니까 대충 적혀있어.
    앞으로 참고의 주요 부분을 정리하면서 부족한 부분을 보충하고 시도한 소감을 적어 보도록 하겠습니다.

    공식 샘플

  • Oculus/SampleFramework/Usage/HandInteractionTrainScene
  • Oculus/VR/Scenes/HandTest
  • 장면을 참고할 수 있으니 한 번 보는 것이 가장 좋다.
    또 디버깅용OVRHandTest.cs을 준비해 이번에 소개한 각종 값을 볼 수 있다.

    일단 움직여볼게요.

    OVRCameraRigHandAnchor 이하 가입OVRHandPrefab
    또한OVRManager/HandTrackingSuppportControllersOnly일 때 동작하지 않으므로 전환이 필요합니다(자신의 환경에서 샘플의 HandTest 장면에서 닫기)

    OVRHandPrefab의 다양한 설정

  • OVRHand
  • HandType: 적절한 손 설정
  • OVRMesh
  • MeshType: 동상
  • OVRSkelton
  • SkeltonType: 동상
  • UpdateRootPose: 활성화되면 OVRCameraRig와의 위치 의존성이 사라집니다.일반적으로 사용하는 부분은 닫힌 상태를 유지할 수 있겠지
  • UpdateRootScale: 실제 손 크기에 따라 표시되는 손의 모델 크기 수정
  • EnablePhysicsCapsules: 협업기 가져오기(Hand_Thumb1_CapsuleCollider, Hand_Pinky3_CapsuleCollider 등 상당히 가는 협업기를 분리한 모습)
  • OVRSkeltonRenderer: 기본적으로 닫히지만 손을 표시하는 뼈를 엽니다
  • OVRHand


    자주 사용할 수 있는 함수와 파라미터를 고르다

    GetFingerIsPinching() 및 GetFingerPinchStrength()


    읽으면 글자와 같이 매개 변수로 전달된 손가락이 위기에 빠졌는지의 bool값과float값을 되돌려줍니다.
    매개변수는 Thumb, Index, Middle, Ring, Pinky로 설정할 수 있습니다.
    var hand = GetComponent<OVRHand>();
    
    bool isIndexPinching = hand.GetFingerIsPinching(OVRHand.HandFinger.Index);
    float  middlePinchStrength = hand.GetFingerPinchStrength(OVRHand.HandFinger.Middle);
    
    Thumb(엄지)를 지정하면 엄지와 임의의 손가락이 부러지는 것을 볼 수 있을 것 같다(엄지 앞쪽에 가장 가까운 손가락을 선택한 것 같다).

    IsTracked


    손의 추적 여부

    HandConfidence


    추적 신뢰성HandConfidence.HighHandConfidence.Low가 있으며 손이 고속으로 이동하거나 중첩될 때 낮아진다.

    손이 겹칠 때 사라지는 것에 대해서.


    이것은 오큘러스 홈페이지 화면에서도 같은 처리를 했지만 두 손이 겹칠 때 손의 표시가 사라진다.
    실제로 손의 표시가 사라져도 손의 좌표 등 정보 자체가 살아있기 때문에 (더럽지만) 박수를 판정하는 데 쓰일 수 있다.OVRMeshRenderer.cs 중 추적 정밀도가 떨어질 때IsDataValid && IsDateHighConfidence == false 손의 그물을 제거하는 처리를 하였으며, 이를 산호 위에 놓으면 두 손이 겹칠 때도 표시를 남길 수 있다.
    하지만 손 추적은 테스트판이기 때문에 방문할 생각이 없는 부분을 가지고 놀기 때문에 특별한 일이 없으면 추천하지 않는다.
    자신도 해 보았지만 카메라 쪽의 손은 거의 흔들리지 않았지만 숨겨진 사람의 손은 그물 모양의 물건을 없애려는 느낌을 상당히 많이 느꼈다.
    각 손가락의 변환 정보를 얻었기 때문에 각 좌표에 Sphere를 생성해 보면 이런 느낌이다.
    각 손가락 관절의 정보는 OVRSkelton에서 다양한 애니메이션을 얻을 수 있다. 각 좌표에 공을 쳐서 손을 움직여 보자. 카메라 앞의 손은 겹쳐도 예쁘게 추적할 수 있다.안의 손은 대체적인 위치를 얻었지만 무작위 비행#OculusQuestpic.twitter.com/ntConGwmN9-따끈따끈(@pwhrhs)December 22, 2019
    용도에 따라 다르지만 박수 치는 느낌이라 실용권에서 추적할 수 있을 것 같아요.p>

    제스처 정보


    예를 들어 Oculus 태그의 제스처는 OVRHand.csIsSystemGestureInProgress에서 사용할 수 있습니다.

    내부적으로는 손바닥이 카메라를 향할 때 검지의 위기를 보는 것 같다p>
    기본적인 제스처는 오큘러스 쪽에 준비되어 있지 않나 싶습니다~ 하지만 자체 조사 범위는 아닌 것 같아서 자제할 필요가 있습니다.

    그럼에도 불구하고 별로 신경 쓰지 않는 물건이라면 상기GetFingerIsPinching()GetFingerPinchStrength()를 사용하면 간단하게 설치할 수 있다p>

    먼저 가위, 가위, 가위를 만들었으니 올려라.한도값은 현지 결정에 상당히 적합하기 때문에 조정하면서 사용할 수 있기를 바란다p>

    public bool Guu
        {
            get
            {
                //薬指と小指は値が0になることが多いのであきらめた
                return (hand.GetFingerPinchStrength(OVRHand.HandFinger.Middle) >= 0.5f &&
                        hand.GetFingerPinchStrength(OVRHand.HandFinger.Index) >= 0.1f);
            }
        }
    
        public bool Choki
        {
            get
            {
                return ((hand.GetFingerPinchStrength(OVRHand.HandFinger.Pinky) >=0.05f) && (hand.GetFingerPinchStrength(OVRHand.HandFinger.Ring) >= 0.2f));
            }
        }
    
        public bool Paa
        {
            get
            {
                return (hand.GetFingerPinchStrength(OVRHand.HandFinger.Thumb) <= 0.01f);
            }
        }
    
    void Update()
        {
    
            if (Guu)
            {
                Debug.Log("GUU");
            }
            else if (Choki)
            {
                Debug.Log("CHOKI");
            }
            else if (Paa)
            {
                Debug.Log("PAA");
            }
            else
            {
                Debug.Log("NO SIGN");
            }
    
        }
    


    중지와 검지의 값은 비교적 아름답지만, 약지 새끼손가락은 정밀도가 약간 떨어진다는 인상을 준다p>
    또한 돌의 판정이지만 실제로 돌의 자세를 취하면 알 수 있지만 손가락의 앞부분이 아니라 각 손가락의 1, 2관절과 엄지손가락의 앞부분이 교차하기 때문에 GetFingerPinchStrength()는 만족할 만한 값을 얻지 못한다p>
    따라서 더 높은 정밀도를 추구하는 상황에서 각 손가락 관절의 값을 취하여 판정하는 것이 좋다.OVRSkelton.Bones 손가락 뼈 정보 얻기
    이번 기사가 길어질 수도 있으니까 다음에 손 제스처에 대해서 쓸 수 있는 기회가 있을 것 같아요.p>

    その他細かな点


    • 손 추적을 위해 Quest로 구축하기 전에 Quest의 홈 화면 설정에서'손 사용'으로 전환해야 합니다.(현재 검증되지 않은 응용 프로그램에 전환 방법이 있는지 여부)
    • 컨트롤러와 손을 동시에 추적할 수 없음(현재)

    좋은 웹페이지 즐겨찾기