Unity Hand Pose Detection with OVR

OculusInter.....이놈을 하이러키창에 끌어다 놓고 포지션을 (0,0,0)으로 맞추자

다음 Poses라는 빈 게임오브젝트를 하나 생성한다

Poses의 자식으로 빈 오브젝트 Bunny Right라는 녀석을 생성한다

이 녀석을 이용해서 포즈를 기록할 것이다

Shape Recognizer Active State컴포넌트를 부착해준다

Hand Ref 컴포넌트르 부착해주고 Shape Recognizer Active State 컴포넌트의 Hand에는 Hand Ref를 할당해준다

RightHand를 끌어다가 놓는다

Hand Pose라는 빈 폴더를 하나 생성해주고

[Create] - [Oculus] - [Interaction] - [SDK] - [Pose Detection] - [Shape] 를 순서대로 클릭해준다

그러면 하나의 스크립터블오브젝트가 생성되는 것을 확인할 수 있다

 

여기서부터 집중해서 봐야한다

https://www.youtube.com/watch?v=lxHI2l8dda4&list=PLpEoiloH-4eMRR8wAfy22ecQeCT2tIuMD&index=7

Curl : 손가락의 두 관절 손가락을 구부린 Curl을 뜻한다

 

Flection : 첫 번째 관절을 꺾어서 여는 것을 뜻한다

Abduction : 손가락과 다음 손가락 사이의 각도

Opposition : 엄지손가락과 반대에 있는 근접한 손가락

 

 

지금 우리가 하고자 하는 Bunny Pose는 새끼손가락과 약지, 엄지손가락에는 curl 과 deflection이 오픈되어 있지 않는다

검지손가락과 중지에만 curl 과 deflection이 오픈되어 있고 검지손가락에는 작은 abduction가 있다

 

따라서,

설정을 이렇게 하면 된다

방금 만든 Bunny 오브젝트를

Shapes에 끌어다가 놓는다

사진과 같이 Active State Selector과 Selector Unity Event Wrapper 컴포넌트를 붙인다

Active State Selector : Shape Recognizer Active State에서 기록해둔(만들어둔) Shape를 실행하는 컴포넌트임

Selector Unity Event Wrapper : 위에서 만든것들이 Active할 때 실행될 요소

제대로 되는지 확인하기 위해 오브젝트를 생성하고 거기에 Selector Debug Visual 컴포넌트를 붙인다

이렇게만 하고 실행하면 Bunny 손동작을 했을 때 잘되는 것을 확인할 수 있다

 

그러나, 이렇게 하면 Bunny 동작이랑 '가위' 동작이랑 엄연히 다른데 똑같이 인식되어 같게 동작한다

Transform Recognizer Active State 컴포넌트를 하나 만들고 사진과 같이 설정한다

Palm Down is false를 함으로써 가위동작 즉, 손등이 뒤집어진 상태에서는 실행되지 않는다

 

여기서 주의점은 Active State 컴포넌트가 2개 있다는 점인데 Active State는 하나밖에 실행(Listen)되지 않는다

따라서 Active State를 함께 사용하기 위해서는 Active State Group 컴포넌트를 붙여주고 두 개의 Active State를 집어 넣어 주면 된다

Active State Selector에 Active State Group을 넣어주면 된다

그럼 끝~!!!

 

OVR SDK에 이미 만들어진 Pose들이 있으므로 활용해서 사용해도 좋다