오큘러스 퀘스트에 대한 손 추적을 많이 찾아봤어요.
6801 단어 OculusQuestUnity
먼저
며칠 전에 Oculus Integration을 업데이트했는데 Quest의 손 추적도 유니티에서 시도할 수 있어서 많이 조사했습니다.
오큘러스 공식도 말했지만 손 추적 기능은 현재 개발자 preview 버전이기 때문에 이 글이 발매될 때 쓸모가 없을 수도 있으니 용서해 주십시오
환경 확인
Quest 버전 번호를 맞추기 위해서일 수도 있어요.
공식 참조
https://developer.oculus.com/documentation/quest/latest/concepts/unity-handtracking/
이거 보니까 대충 적혀있어.
앞으로 참고의 주요 부분을 정리하면서 부족한 부분을 보충하고 시도한 소감을 적어 보도록 하겠습니다.
공식 샘플
Oculus/SampleFramework/Usage/HandInteractionTrainScene
Oculus/VR/Scenes/HandTest
또 디버깅용
OVRHandTest.cs
을 준비해 이번에 소개한 각종 값을 볼 수 있다.일단 움직여볼게요. OVRCameraRig
의HandAnchor
이하 가입OVRHandPrefab
또한OVRManager/HandTrackingSuppport
은ControllersOnly
일 때 동작하지 않으므로 전환이 필요합니다(자신의 환경에서 샘플의 HandTest 장면에서 닫기)
OVRHandPrefab의 다양한 설정
OVRHand
OVRMesh
OVRSkelton
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.High
과HandConfidence.Low
가 있으며 손이 고속으로 이동하거나 중첩될 때 낮아진다.
손이 겹칠 때 사라지는 것에 대해서.
이것은 오큘러스 홈페이지 화면에서도 같은 처리를 했지만 두 손이 겹칠 때 손의 표시가 사라진다.
실제로 손의 표시가 사라져도 손의 좌표 등 정보 자체가 살아있기 때문에 (더럽지만) 박수를 판정하는 데 쓰일 수 있다.OVRMeshRenderer.cs
중 추적 정밀도가 떨어질 때IsDataValid && IsDateHighConfidence == false
손의 그물을 제거하는 처리를 하였으며, 이를 산호 위에 놓으면 두 손이 겹칠 때도 표시를 남길 수 있다.
하지만 손 추적은 테스트판이기 때문에 방문할 생각이 없는 부분을 가지고 놀기 때문에 특별한 일이 없으면 추천하지 않는다.
자신도 해 보았지만 카메라 쪽의 손은 거의 흔들리지 않았지만 숨겨진 사람의 손은 그물 모양의 물건을 없애려는 느낌을 상당히 많이 느꼈다.
각 손가락의 변환 정보를 얻었기 때문에 각 좌표에 Sphere를 생성해 보면 이런 느낌이다.
각 손가락 관절의 정보는 OVRSkelton에서 다양한 애니메이션을 얻을 수 있다. 각 좌표에 공을 쳐서 손을 움직여 보자. 카메라 앞의 손은 겹쳐도 예쁘게 추적할 수 있다.안의 손은 대체적인 위치를 얻었지만 무작위 비행#OculusQuestpic.twitter.com/ntConGwmN9-따끈따끈(@pwhrhs)December 22, 2019
용도에 따라 다르지만 박수 치는 느낌이라 실용권에서 추적할 수 있을 것 같아요.p>
제스처 정보
예를 들어 Oculus 태그의 제스처는 OVRHand.cs
의IsSystemGestureInProgress
에서 사용할 수 있습니다.
내부적으로는 손바닥이 카메라를 향할 때 검지의 위기를 보는 것 같다p>
기본적인 제스처는 오큘러스 쪽에 준비되어 있지 않나 싶습니다~ 하지만 자체 조사 범위는 아닌 것 같아서 자제할 필요가 있습니다.
그럼에도 불구하고 별로 신경 쓰지 않는 물건이라면 상기GetFingerIsPinching()
와GetFingerPinchStrength()
를 사용하면 간단하게 설치할 수 있다p>
var hand = GetComponent<OVRHand>();
bool isIndexPinching = hand.GetFingerIsPinching(OVRHand.HandFinger.Index);
float middlePinchStrength = hand.GetFingerPinchStrength(OVRHand.HandFinger.Middle);
이것은 오큘러스 홈페이지 화면에서도 같은 처리를 했지만 두 손이 겹칠 때 손의 표시가 사라진다.
실제로 손의 표시가 사라져도 손의 좌표 등 정보 자체가 살아있기 때문에 (더럽지만) 박수를 판정하는 데 쓰일 수 있다.
OVRMeshRenderer.cs
중 추적 정밀도가 떨어질 때IsDataValid && IsDateHighConfidence == false
손의 그물을 제거하는 처리를 하였으며, 이를 산호 위에 놓으면 두 손이 겹칠 때도 표시를 남길 수 있다.하지만 손 추적은 테스트판이기 때문에 방문할 생각이 없는 부분을 가지고 놀기 때문에 특별한 일이 없으면 추천하지 않는다.
자신도 해 보았지만 카메라 쪽의 손은 거의 흔들리지 않았지만 숨겨진 사람의 손은 그물 모양의 물건을 없애려는 느낌을 상당히 많이 느꼈다.
각 손가락의 변환 정보를 얻었기 때문에 각 좌표에 Sphere를 생성해 보면 이런 느낌이다.
각 손가락 관절의 정보는 OVRSkelton에서 다양한 애니메이션을 얻을 수 있다. 각 좌표에 공을 쳐서 손을 움직여 보자. 카메라 앞의 손은 겹쳐도 예쁘게 추적할 수 있다.안의 손은 대체적인 위치를 얻었지만 무작위 비행#OculusQuestpic.twitter.com/ntConGwmN9-따끈따끈(@pwhrhs)December 22, 2019
용도에 따라 다르지만 박수 치는 느낌이라 실용권에서 추적할 수 있을 것 같아요.p>
제스처 정보
예를 들어 Oculus 태그의 제스처는 OVRHand.cs
의IsSystemGestureInProgress
에서 사용할 수 있습니다.
내부적으로는 손바닥이 카메라를 향할 때 검지의 위기를 보는 것 같다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");
}
}
OVRHand의 GetFingerPinch Strength를 사용하여 손짓
이렇게 하면 캐릭터와 가위바위보를 할 수 있을까?!
일부러 이상한 자세를 취해도 진짜가 되기 때문에 정밀도를 원한다면 각 손가락 관절의transform에 방문해 다양한 거리로 판정할 필요가 있다#OculusQuestpic.twitter.com/C6yyiP93XP(@pwhrhs)December 21, 2019
중지와 검지의 값은 비교적 아름답지만, 약지 새끼손가락은 정밀도가 약간 떨어진다는 인상을 준다p>
또한 돌의 판정이지만 실제로 돌의 자세를 취하면 알 수 있지만 손가락의 앞부분이 아니라 각 손가락의 1, 2관절과 엄지손가락의 앞부분이 교차하기 때문에 GetFingerPinchStrength()는 만족할 만한 값을 얻지 못한다p>
따라서 더 높은 정밀도를 추구하는 상황에서 각 손가락 관절의 값을 취하여 판정하는 것이 좋다.
OVRSkelton.Bones
손가락 뼈 정보 얻기이번 기사가 길어질 수도 있으니까 다음에 손 제스처에 대해서 쓸 수 있는 기회가 있을 것 같아요.p>
その他細かな点
- 손 추적을 위해 Quest로 구축하기 전에 Quest의 홈 화면 설정에서'손 사용'으로 전환해야 합니다.(현재 검증되지 않은 응용 프로그램에 전환 방법이 있는지 여부)
- 컨트롤러와 손을 동시에 추적할 수 없음(현재)
Reference
이 문제에 관하여(오큘러스 퀘스트에 대한 손 추적을 많이 찾아봤어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Horukasu/items/eb1bc20621d51a85d988텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)