참고문서/번역본

VRChat OSC API 공식 문서 번역본(의역 있음)

FakeZero 2023. 11. 26. 00:51

원문: https://docs.vrchat.com/docs/osc-overview

 

OSC Overview

Intro to OSCOSC is a way to get different devices and applications to talk to each other. It's a favorite method of creative coders and people making weird interactive things because it's fast, networked, and very open-ended.What does this have to do with

docs.vrchat.com


OSC 미리보기


OSC란

OSC란 다른 디바이스와 어플리케이션을 통해 다른 이들과 통신 할 수 있는 방법입니다. 빠르고 네트워크 연결이 가능하며 개방적이기 때문에 창의적인 프로그래머와 사람들이 새로운 상호 작용을 하는 데 가장 선호하는 방법입니다.

 

VRChat 에서 무엇을 하면 됩니까?

아바타와 월드를 다양한 새로운 방식으로 제어할 수 있고, VRChat에서 데이터를 스트리밍하여 다른 것들도 제어할 수 있도록 VRChat에서 OSC 지원을 확대하고 있습니다. Input 파라미터Avatar 파라미터 두 가지 API로 출시합니다.

(Input 파라미터 하이퍼링크 번역 필요)

 

어떻게 사용할 수 있습니까?

OSC 기능을 활성화 하고 OSC 호환 어플리케이션이나 장치를 사용하여 VRChat으로 데이터를 스트리밍하거나 데이터를 읽을 수 있습니다. 이 위키는 대부분 이러한 어플리케이션 을 만들고자 하는 사람들을 위한 정보로 가득 차 있습니다. 사람들이 많이 사용하는 기능은 후에 관련 링크와 정보를 추가할 것입니다.

 

VRChat 포트

VRChat의 경우, 기본적으로 포트 9000에서 수신하고 포트 9001에서 송신합니다. 따라서 데이터를 VRC로 보낼 때 사용하는 외부 프로그램은 9000으로 보내야 하며, VRChat의 데이터를 받고 싶다면 어플리케이션이나 장치에서 9001을 써야 합니다.

해당 포트는 다음 명령어를 통해 변경할 수 있습니다.

--osc=inPort:senderIP:outPort

 

만약 기본 설정을 명령어로 추가할 경우 다음과 같이 하면 됩니다.

--osc=9000:127.0.0.1:9001

 

당신이 원하는 경우 '127.0.1' 대신 '로컬 호스트 주소'를 사용할 수 있습니다. 만약 VRChat에서 네트워크를 통해 다른 디바이스로 데이터를 보내기를 원하는 경우 가운데에 다음과 같은 주소를 입력하면 됩니다.

--osc=9000:192.168.1.42:9001

 

OSC 툴

이 기능들을 사용하기 위해서는 몇 가지 OSC툴이 필요합니다.

 

스탠드 얼론 프로그램

전송에는 TouchOSC(무료 윈도우 클라이언트)를, 수신에는 Protokol을 추천합니다.

 

라이브러리

만약 자신만의 시스템을 사용하고 싶다면 몇 가지 방법이 있습니다.

 

만약 C#을 이용한다면 VRChat 내부에서도 사용하는 OSC 라이브러리인 all-in-one branch of OscCore 을 사용하면 됩니다.

 

만약 파이썬을 이용한다면 내부 테스트 때 문제가 일어나지 않았던 python-osc 을 사용할 수 있습니다.

 

활성화 하기

VRChat 내의 액션 메뉴의 Setting > OSC 에서 Disabled를 Enabled로 바꾸는 것으로 OSC를 활성화 할 수 있습니다.

 

테스트 하기

OSC 파라미터가 정상적으로 적당하기 위해서는 액션 메뉴의 Setting > OSC 에서 OSC Debug 버튼을 통해 디버깅 창을 열어서 확인할 수 있습니다.

 

중요사항

VRChat의 OSC API와 상호 작용하려면 인터넷에서 프로그램을 다운로드해야 하므로 주의하십시오! 잘 알려져 있고 신뢰할 수 있는 응용 프로그램을 다운로드 받고 있는지 확인하십시오. OSC를 사용하는 다른 사람들에게 그들이 무엇을 사용하고 있는지 물어보십시오

전문 지식이 있다면 설정에 맞게 원하는 기능을 직접 만들어 보십시오!


OSC 아바타 파라미터


미리보기

이 API는 당신의 아바타에서 작동해서 다른 OSC 어플리케이션에 파라미터를 전송할 수 있습니다.

 

아바타 변경

OSC가 활성화된 플레이어에 의해 새 아바타가 로드되면 /avatar/change에 아바타의 ID로 메시지가 전송됩니다.

 

아바타 파라미터 & Config 파일

기본적으로 OSC가 수행하는 것은 /avatar/parameters/name 주소로 들어오는 값이 일치하는 파라미터 이름의 값을 설정한다는 것입니다. 따라서 정수 값을 가진 /avatar/parameters/VRCEmote는 기본 VRCEmote 파라미터를 설정하고 아바타가 손을 흔들고 춤을 추는 등의 작업을 시작합니다. 다음의 파일이 위의 기능을 프로그램한 간단한 TouchOSC 문서 파일입니다.

vrc-emote.tosc

 

아바타 파라미터를 사용하여 더 많은 작업을 수행할 수 있도록 사용자 지정을 위해 편집할 수 있는 Config 파일을 자동으로 생성합니다. Config 파일은 아바타 업로드 시에 Build & Test 로는 생성되지 않으므로 Build & Publish 를 해야만 OSC 기능을 사용할 수 있습니다.

 

당신이 업로드 한 아바타를 VRChat 내에서 로드하면 당신의 로컬 폴더에 OSC config 설정 파일이 생성된 것을 확인할 수 있습니다.

OSC Config 파일 주소: ~\AppData\LocalLow\VRChat\VRChat\OSC\{유저 고유 ID}\Avatars\{유저 고유 ID}.json)

 

파일에 작성되어 있는 input address는 아바타 파라미터가 수신될 때 데이터를 받는 곳이고 output address는 파라미터가 변경될 때, 데이터를 보내는 곳입니다.

 

파일이 보이지 않으면 자동으로 Config 파일이 생성되고 로드되어 가능한 모든 데이터를 송수신합니다.

 

예제 Config파일 중 일부

{
    "id" : "avtr_9d58037b-23c7-4c9c-adbd-b1338178cd81",
    "name" : "PurpleMomo",
    "parameters" : [
        {
            "name" : "Face",
            "input" : {
                "address" : "/avatar/parameters/Face",
                "type" : "Int"
            },
            "output" : {
                "address" : "/ableton/trackselect",
                "type" : "Float"
            }
        },
        {
            "name" : "VelocityZ",
            "output" : {
                "address" : "/avatar/parameters/VelocityZ",
                "type" : "Float"
            }
        }
    ]
}

 

아바타의 이름은 가독성을 위해 포함되어 있지만 ID만 사용됩니다(그리고 실제로는 파일 이름의 ID만 사용됩니다). 위의 VelocityZ는 output 전용이기 때문에 input 요소가 비어 있습니다. 또한 Face에 대한 out put address와 변수 유형(type)을 변경하여 구성 변경이 다른 애플리케이션을 직접 제어하는 데 어떻게 도움이 되는지 보여주었습니다. 이 경우 Face 파라미터를 변경하면 "/ableton/trackselect" 주소를 통해 Ableton Live로 값이 전송되며 Ableton은 Float 변수를 받기로 되어 있으므로 VRChat에 즉시 변환을 요청합니다.

(Ableton이란 MIDI 프로그램 회사로 예제는 Ableton 회사의 제품을 이용하는 것으로 추정. Ableton 홈페이지 주소: https://www.ableton.com/en/)

 

전체 예제 Config(문서): example-avatar-config.json

 

다음은 파라미터 양식의 각 구성 요소에 대한 분석입니다:

  • name: 아바타 파라미터의 이름과 일치해야 하는 문자열
  • input
    • address: 데이터를 수신받을 폴더 주소. 문자열로 작성.
    • type: 변수 형식을 표기하는 문자열. "int", "Float", "Bool"만 사용가능.
  • output
    • address: 데이터를 송신할 폴더 주소. 기존 데이터가 바뀌면 데이터를 송신. 문자열로 작성.
    • type: 변수 형식을 표기하는 문자열. "int", "Float", "Bool"만 사용가능. 단, 실제 받아야 하는 변수와 유형이 달라도 됨. 정상 작동 여부와는 별개이므로 데이터 수신 측에서 요구하는 변수 유형을 사용할 것을 권장.

기본 생성된 구성에서 type과 address는 정확히 일치하지만, 다른 데이터가 들어올 것으로 예상되는 경우에는 Input type과 address를 변경할 수 있고, 다른 데이터를 보내고 싶은 경우에는 output type과 address를 변경할 수 있습니다. 이렇게 구성하면 타사 프로그램을 사용하지 않고 다른 시스템과 상호 작용할 수 있습니다(고급 설정의 경우 이러한 프로그램을 사용하여 추가적인 조작, 데이터 크기 조정 및 결합 등을 수행할 수 있습니다)

 

주의: 구성 파일 시스템은 OSC에 적합한 클라이언트 내 UI를 통합할 수 있을 때까지 사용자 지정을 허용하기 위한 임시방편이며, 어느 시점에서 제거될 수 있습니다.


OSC 디버깅


액션 메뉴의 Setting > OSC 에서 OSC Debug 버튼을 누르는 것으로 현재 송수신 되고 있는 OSC 파라미터를 시각적으로 확인할 수 있습니다. 이를 통해 VRChat이 OSC를 제대로 수신하고 있는지 확인하고 들어오는 값의 범위와 주소를 볼 수 있습니다.

 

OSC가 비활성화 되어있는 경우 디버그 창을 열면 자동으로 OSC가 활성화 됩니다.


OSC DIY


OSC를 통해 VRChat과 통신하는 프로그램을 직접 만들 수 있습니다. 이를 위해서는 프로그래밍 지식이나 학습이 필요합니다. 너무 복잡하지는 않지만 네트워크 연결과 비동기식 메시징을 다루기 때문에 첫 번째 VRChat 프로젝트로는 좋지 않을 수 있습니다.

비동기식 메시징: 송수신 된 데이터에 각 디바이스가 바로 응답하지 않는 방식의 데이터 송수신 방법.(간단한 해석으로 틀린 부분이 있을 수 있음.)

 

현재 상호 작용을 위해 사용할 수 있는 API는 입력(Input) 및 아바타 파라미터 두 가지입니다. 이 페이지에는 보내고 받을 수 있는 메시지와 기타 세부 정보가 설명되어 있습니다.

 

OSC 메시지

OSC 메시지는 주소(address)와 값(value)의 두 가지 주요 부분으로 구성됩니다. 주소는 슬래시 기반이며 다음과 같습니다.

예시 주소: /fridge/door/butter

주소는 항상 슬래시로 시작해야 하며, 항목의 범주를 구분하기 위해 슬래시를 사용합니다. 메시지 값은 기술적으로 지원되는 모든 유형의 조합일 수 있으므로 단일 문자열(Single String)이거나, 3개의 실수(Float), 다음으로 불(Bool), 다음으로 색상, 마지막으로 바이너리 블랍(Binary Blob)이 될 수 있습니다.

(바이너리 블랍이란 쉽게 말하면 멀티미디어 정보를 의미하며 이는 사진, 동영상, 음악 등을 모두 포함한다. 통상적으로 4GB의 이진 데이터를 저장 가능하다고 한다.)

현재 사용하고 있는 라이브러리는 성능을 위해서 다른 데이터 유형들 보다 아바타 파라미터의 정수(Int), 실수(Float), 불(Bool)의 값을 지원하며 필요에 따라 다른 값을 추가할 수 있습니다.

 

OSC 메시징은 한 연결이 일방적인 방향으로 작동합니다. 송신자와 수신자가 있습니다. 수신자는 지정된 포트를 수신하고 송신자는 아무도 없는 상태에서 UDP 메시지를 해당 포트로 퍼뜨립니다. 가동시에는 송신과 수신 어느쪽을 먼저 가동해도 상관 없습니다.

 

OSC 라이브러리

OSC는 거의 모든 프로그래밍 언어로 구현됩니다.

 

C#의 경우 VRChat 클라이언트 내에서 OscCore 계열을 사용합니다. C# 라이브러리 중 최고의 성능과 메모리 사용량이 가장 적습니다.

 

파이썬을 사용하는 경우 내부 테스트에 문제없이 사용한 python-osc 를 사용할 수 있습니다.

 

만약 C#과 파이썬을 사용하지 않고 다른 프로그래밍 언어를 선호한다면 OSC의 홈페이지에 라이브러리 목록이 있습니다.

 

비동기식 데이터 수집

OSC는 네트워크 프로토콜이기 때문에 많은 과정에서 백그라운드 스레드로 데이터를 송수신합니다. 유니티 프로젝트에서는 이 데이터를 저장한 다음 메인 스레드의 다음 프레임 업데이트에 적용해야 합니다. 각 라이브러리에서 이를 조금 다르게 처리합니다. 데이터를 수신하고 시각화하는 데 문제가 있다면 여러번 시도해 보는 것이 좋습니다.(다른 프로그래밍 언어 라이브러리로도 시도해 보라는 의미로 추정)


Input Controller로서의 OSC


Input Controller로서의 OSC

저희는 키보드+마우스, 게임패드, VRChat에서 지원하는 개수 이상의 수의 VR 트래커 등 다양한 컨트롤러를 지원합니다. OSC를 통해 대부분의 입력을 제어할 수 있도록 함으로써 이를 더욱 개방하고 있습니다. 이를 통해 머리, 발, 뇌파, 음악 시퀀서 또는 기타 모든 것으로 VRChat을 제어하는 프로그램을 만들 수 있습니다!

 

주소

각 입력(Input)은 /input/Jump와 같이 /input/Name에서 데이터를 측정합니다.

입력(Input)의 종류에는 2가지가 있습니다.

  1. Axes(축)은 -1 ~ 1 까지의 실수(Float) 값을 표시하고 사용되지 않을 때는 0으로 값이 재설정됩니다. 만약 값이 0으로 재설정 되지 않으면 값이 계속 올라가는 현상이 일어납니다.
  2. Buttons(버튼)은 눌렸을 때 1, 떼어졌을 때 0 값을 반환합니다. 아무것도 입력되지 않았을 때 값을 0으로 설정하지 않고 입력값이 들어왔을 때, 1의 값이 표시되는 설정만 했을 경우 0으로 다시 돌아가지 않습니다. 

실험을 시작하는 좋은 방법은 TouchOSC로 제어하여 실험을 테스트하고 클라이언트에서 어떻게 작동하는지 확인하는 것입니다. 일부는 데스크톱 또는 VR 모드에서만 작동하며, 다른 일부는 전혀 작동하지 않을 수도 있습니다. 만약 작동하지 않거나 새로운 기능을 원하면 토론장(곧 만들어질 예정)에 의견을 남겨주세요.

 

이 TouchOSC 데모에는 수직 및 수평 이동을 위한 컨트롤과 점프 버튼이 있습니다.

 vrc-input.tosc

 

지원 입력(Input)

Axes(축)

더보기

/input/Vertical : (1) 이면 앞으로 움직이고 (-1)이면 뒤로 움직입니다.

/input/Horizontal : (1) 이면 오른쪽으로 움직이고 (-1)이면 왼쪽으로 움직입니다.

/input/LookHorizontal : 왼쪽, 오른쪽을 보십시오. VR 모드에서는 부드러운 회전(Comfort Turning)모드로 작동하며 각진 회전(Snap-Turn) 모드에선 부드러운 회전 모드가 켜지고 작동합니다.

/input/UseAxisRight : 들고있는 아이템을 사용합니다 - 작동 여부 불확실함

/input/GrabAxisRight : 아이템을 잡습니다 - 작동 여부 불확실함

/input/MoveHoldFB : 들고 있는 아이템을 (1) 일때 앞으로 이동시키고 (-1)이면 뒤로 이동시킵니다.

/input/SpinHoldCwCcw : 들고 있는 아이템을 시계 방향 또는 반시계 방향으로 회전시킵니다.

/input/SpinHoldUD : 들고 있는 아이템을 위, 아래로 회전시킵니다.

/input/SpinHoldLR : 들고 있는 아이템을 왼쪽, 오른쪽으로 회전시킵니다.

Buttons(버튼)

더보기

/input/MoveForward : 1일때 앞으로 움직입니다.

/input/MoveBackward : 1일때 뒤로 움직입니다.

/input/MoveLeft : 1일때 왼쪽으로 움직입니다.

/input/MoveRight : 1일때 오른쪽으로 움직입니다.

/input/LookLeft : 1일때 왼쪽으로 회전합니다. VR 모드에서는 부드러운 회전(Comfort Turning)모드로 작동하며 각진 회전(Snap-Turn) 모드에선 부드러운 회전 모드가 켜지고 작동합니다.

/input/LookRight : 1일때 오른쪽으로 회전합니다. VR 모드에서는 부드러운 회전(Comfort Turning)모드로 작동하며 각진 회전(Snap-Turn) 모드에선 부드러운 회전 모드가 켜지고 작동합니다.

/input/Jump : 월드가 허용하는 경우 점프합니다.

/input/Run : 월드가 허용하는 경우 빠르게 걷습니다.

/input/ComfortLeft : 각진 회전(Snap-Turn) 모드로 왼쪽으로 회전합니다. - VR 전용.

/input/ComfortRight : 각진 회전(Snap-Turn) 모드로 오른쪽으로 회전합니다. - VR 전용.

/input/DropRight : 오른손에 든 아이템을 떨어 뜨립니다. - VR 전용.

/input/UseRight : 윤곽선이 표시된 아이템을 오른손으로 사용합니다. - VR 전용.

/input/GrabRight : 윤곽선이 표시된 아이템을 오른손으로 잡습니다. - VR 전용.

/input/DropLeft : 왼손에 든 아이템을 떨어 뜨립니다. - VR 전용.

/input/UseLeft :  윤곽선이 표시된 아이템을 왼손으로 사용합니다. - VR 전용.

/input/GrabLeft : 윤곽선이 표시된 아이템을 왼손으로 잡습니다. - VR 전용.

/input/PanicButton : 안전 모드(Safe Mode)를 활성화 합니다.

/input/QuickMenuToggleLeft : 퀵메뉴를 키고 끕니다. 현재 '0'이면 '1'을 받으면 전환됩니다.

/input/QuickMenuToggleRight : 퀵메뉴를 키고 끕니다.  현재 '0'이면 '1'을 받으면 전환됩니다.

/input/Voice : 토글 보이스 - 이 기능은 '토글 보이스' 기능이 활성화 되어 있는지에 따라 기능이 달라집니다. 만약 활성화 되어있다면 0에서 1로 변경될 때, 음소거 상태가 전환됩니다. 토글 보이스가 아니라 'Push to Voice' 기능을 사용중일 경우 0에서 음소거, 1에서 음소거가 해제됩니다.

Chatbox(챗박스)

더보기

/chatbox/input s b n : 텍스트를 대화 상자에 입력합니다. b가 True이면 키보드를 우회하여 s 부분의 텍스트를 즉시 전송합니다. b가 False이면 키보드를 열고 제공된 텍스트로 채웁니다. n은 False로 설정하면 알림 SFX가 활성화되지 않는 추가 불 파라미터입니다(지정되지 않으면 True로 기본값).

/chatbox/typing b : 입력 표시기를 켜거나 끕니다.

 

s(string) : 문자열

b(bool) : 불(True/False)

n : 추가적인 불(True/False)


OSC 트래커


이제 VRChat은 기존 보정된 전신 IK 시스템과 함께 사용하기 위해 OSC를 통해 트래커 데이터를 수신할 수 있도록 지원합니다.

 

주의사항: OSC 트래커 기능은 고급 기능으로 트래커를 연결하자마자 VRChat에서 작동하는 기능이 아닙니다. OSC를 사용하여 이 데이터를 VRChat으로 전송하려면 직접 프로그램을 만들어야 합니다.

 

트래커 하드웨어 제조업체는 이 데이터를 보내주는 응용 프로그램을 제공할 수도 있습니다. 또한 커뮤니티에서 만든 프로그램을 사용하여 전신 추적 설정을 활용할 수도 있습니다.

 

OSC 주소 리스트

/tracking/trackers/1/position
/tracking/trackers/1/rotation
/tracking/trackers/2/position
/tracking/trackers/2/rotation
/tracking/trackers/3/position
/tracking/trackers/3/rotation
/tracking/trackers/4/position
/tracking/trackers/4/rotation
/tracking/trackers/5/position
/tracking/trackers/5/rotation
/tracking/trackers/6/position
/tracking/trackers/6/rotation
/tracking/trackers/7/position
/tracking/trackers/7/rotation
/tracking/trackers/8/position
/tracking/trackers/8/rotation
/tracking/trackers/head/position
/tracking/trackers/head/rotation

 

각 주소는 Vector3 정보를 3개의 실수(Float)(X,Y,Z) 형태로 받아들입니다. 이들은 OSC 트래커의 월드 위치와 오일러 각도여야 합니다.

 

현재 엉덩이, 가슴, 발 2개, 무릎 2개, 팔꿈치(윗팔)(UpperArm) 2개 등 최대 8개의 트래커가 지원됩니다.

 

📘 8개를 모두 보내는 것이 항상 최선은 아닙니다!

예를 들어 발과 엉덩이만 보내는 행동이 더 좋을 수도 있습니다. 트래커가 적게 전송되면 VRChat의 IK는 추적 불일치를 더 잘 보정할 수 있습니다. 추적 데이터가 절대 위치와 회전에서 높은 정확도를 가질 때(드리프트가 없음) 더 많은 추적 지점을 전송하기 시작하는 것이 좋습니다.

"머리"에 해당하는 트래커 주소는 발신 앱의 추적 공간과 VRChat의 추적 공간을 일치시키는 데 도움이 되도록 선택적으로 전송할 수 있습니다(아래 참조).

 

Auto-center OSC Trackers

VRC 퀵 메뉴의 "기어" 탭의 Tracking & IK 섹션에서 사용할 수 있는 새로운 버튼입니다.

이 버튼은 Y 축에서 두 개의 가장 낮은 트래커를 찾고 VRChat에서 사용자의 현재 머리 위치 아래에 중간 지점을 배치합니다.

또한 두 개의 최저 추적기가 왼쪽 발과 오른쪽 발을 나타낸다고 가정하여 전방 방향을 예측합니다.

이것만으로는 전방과 후방을 구분할 방법이 없으므로 Auto-center OSC Trackers 버튼을 반복적으로 클릭하면 전방이 번갈아 나타납니다.

 

머리 트래커 데이터 수신

/tracking/trackers/head/position
/tracking/trackers/head/rotation

위 주소들에서 VRChat으로 전송된 추적 데이터는 당신의 전송 앱과 VRChat 사이의 정렬 참조로서 사용될 수 있습니다. /tracking/trackers/head/position이 아바타의 머리뼈 위치와 정렬되도록 전체 OSC 추적 공간이 이동될 것입니다(이 위치는 눈 위치가 아니라 머리의 시작 지점에 있음에 유의하십시오). 이 위치는 보간/스무딩 없이 프레임마다 완전히 정렬될 것입니다.

 

요(Yaw) 정렬을 위해 /tracking/trackers/head/rotation으로 전송되는 데이터가 사용될 것입니다. 오일러 각도(0,0,0)는 중립적인 전방 방향을 나타낸다고 가정합니다. VRChat의 추적 공간 요(Yaw) 정렬은 제공된 회전을 향해 천천히 이동할 것입니다.

 

(데이터의 연속적인 스트리밍이 아닌) 헤드 회전을 위해 단일 OSC 메시지만 전송되는 경우 추적 공간 요(Yaw)는 레퍼링 대신 일회성 즉석 정렬을 수행합니다. 이는 송신 앱에 신뢰할 수 있는 헤드 센서 데이터가 없는 경우 유용할 수 있지만, 예를 들어 송신 앱의 자체 교정 프로세스 중에 사용자가 정면을 향하고 있다고 가정할 수 있습니다. OSC 메시지가 "단일"인지 여부를 결정하기 위한 임계값은 300ms입니다. 두 번째 헤드 회전 메시지가 300ms 내에 도착하면 스트리밍 데이터로 간주되고 정상적인 10초의 데이터 타임아웃 및 레퍼링 동작이 활성화됩니다.

 

헤드 데이터의 경우 위치만 보내거나 회전만 보내거나 둘 다 보내거나 둘 다 보내지 않는 것이 가능합니다. 사용할 수 있는 경우 헤드 데이터는 해당 정렬에 사용됩니다. 사용할 수 없는 경우 해당 정렬은 발생하지 않습니다. 예를 들어, 위치만 전송되면 요(Yaw) 정렬이 없는 위치만 가능합니다.

 

트래커 모델

VRC 퀵메뉴의 Tracking & IK 섹션에서 Tracker display model 설정을 사용할 때 "Tracker: System"으로 설정하면 보정 후에도 모델이 사라지지 않아 디버깅에 도움이 될 수 있습니다.

 

예제 코드

여기 유니티 프로젝트에서 트래커 데이터를 전송하는 데 사용할 수 있는 예제 스크립트가 있습니다. 이 예제 스크립트는 프로젝트에서 다른 방법으로 포즈 데이터가 적용된 아바타를 사용한다고 가정합니다. 그러면 가상 트래커 변환은 프로젝트의 아바타에 있는 적절한 뼈에 부모화되어 예제 스크립트에 삽입됩니다. 그러나 이 스크립트는 그대로 사용되어서는 안됩니다. 예를 들어 포즈-아바타의 높이는 하드코딩되어 있으므로 적절하게 설정되어야 합니다. 코드를 읽어보고 교육용으로 사용하십시오. 이것은 완벽하게 기능하는 솔루션이라기보다는 유니티 프로젝트에서 OSC 트래커 데이터를 전송하는 시작점입니다. 포즈-아바타에 가상 트래커를 사용하는 것은 필요하지 않으며, 그 문제에 대해 유니티를 사용하는 것도 아닙니다. 이것은 OSC 트래커 데이터를 VRChat으로 전송하는 방법의 한 예일 뿐입니다.


OSC 아이(Eye) 트래킹


 

VRC는 이제 OSC를 통해 아이(Eye) 트래킹 데이터(시선 및 눈꺼풀)를 수신할 수 있도록 지원합니다.

 

주의사항: OSC 트래커 기능은 고급 기능으로 트래커를 연결하자마자 VRChat에서 작동하는 기능이 아닙니다. OSC를 사용하여 이 데이터를 VRChat으로 전송하려면 직접 프로그램을 만들어야 합니다.

 

하드웨어 제조업체는 이 데이터를 보내줄 애플리케이션을 제공할 수도 있습니다. 커뮤니티에서 만든 프로그램을 사용할 수도 있습니다

 

OSC 주소 리스트

/tracking/eye/EyesClosedAmount

/tracking/eye/CenterPitchYaw
/tracking/eye/CenterPitchYawDist
/tracking/eye/CenterVec
/tracking/eye/CenterVecFull
/tracking/eye/LeftRightPitchYaw
/tracking/eye/LeftRightVec

❗️ 주소는 대소문자를 구분해야합니다.

시간초과

데이터를 수신하지 않은 상태에서 10초 후 아이 트래킹 동작은 기본값(auto look / auto blink)으로 돌아갑니다. 이 기본값으로 돌아가는 과정은 시선(auto look))과 깜빡임(auto blink)가 별도로 적용됩니다.

 

눈꺼풀

/tracking/eye/EyesClosedAmount

눈을 감는 정도에 대한 0~1 값입니다. 현재는 양 눈 깜빡임을 동시에 제어하는 단일 값만 지원하고 있습니다. 앞으로는 별도의 눈 깜빡임 지원을 추가할 예정입니다.

시선(Eye-look) 주소, 세부사항 & 예시 데이터

🚧한 번의 하나의 시선만 표시됩니다.

EyesClosed Amount(눈을 감은 양) 외에도 보내고 싶은 형식에 따라 아래 주소 중 하나로 데이터를 보낼 수 있습니다. 아마도 데이터를 송신할 앱에서 가능한 눈 모양 데이터 유형 중 하나(또는 몇 가지)만 구현하면 될 것입니다.

시연을 위해, 그리고 당신이 좌표/축 문제를 디버그하는 것을 돕기 위해, 우리는 각 주소에 대한 몇 가지 예시 데이터를 제공할 것입니다: 사용자의 "눈의 위치" 또는 HMD를 기준으로 대략 15도 위쪽, 사용자의 오른쪽으로 20도, 그리고 50cm 떨어져 있는 눈 표적. 사용자의 IPD는 64mm로 설정됩니다. 아래 이미지를 참조하십시오

(IPD[Inter-pupillary distance]: 양쪽 눈의 동공 사이의 거리)

일반적으로, 피치(Pitch)와 요(Yaw)의 양수는 각각 아래로 그리고 오른쪽으로 회전합니다. 벡터의 경우 +x는 오른쪽, +y가 위, 그리고 +z가 앞. 이것이 표준 Unity 형식입니다.

/tracking/eye/CenterPitchYaw

하나의 시선 "중심"에 대한 피치(Pitch)와 요(Yaw) 값입니다. 여기에는 거리가 정의되어 있지 않기 때문에, 이 모드는 수렴 거리를 찾기 위해 항상 세계 내에서 광선 투사법(Raycast)을 사용합니다. 예제 데이터: -15.252, 20.128

/tracking/eye/CenterPitchYawDist

위와 동일하지만 수렴 거리를 정의하기 위해 미터 단위로 거리 값이 추가됩니다. 형식은 피치(Pitch), 요(Yaw), 거리입니다. 예제 데이터: -15.252, 20.128, 0.503

/tracking/eye/CenterVec

HMD로부터의 눈의 "중심"의 x, y, z 방향 정규화(normalized) 로컬 벡터입니다. 벡터는 정규화되므로 이 모드는 항상 수렴 거리를 찾기 위해 광선 투사법(Raycast)을 사용합니다. 예제 데이터: 0.332, 0.263, 0.905

/tracking/eye/CenterVecFull

HMD로부터의 눈의 "중심"의 x, y, z 방향 로컬 벡터입니다. 벡터의 길이(미터 단위)는 수렴 거리를 결정합니다. 예제 데이터: 0.167, 0.132, 0.456

/tracking/eye/LeftRightPitchYaw

(각도) 왼쪽 피치(Pitch), 왼쪽 요(Yaw), 오른쪽 피치 (Pitch) , 오른쪽 요(Yaw). 예제 데이터: -14.903, 23.592, -15.560, 16.503

/tracking/eye/LeftRightVec

각 눈(왼쪽 x,y,z 오른쪽 x,y,z)에 대한 HMD 로컬 정규화 방향 벡터(left x,y,z). 예제 데이터: 0.387, 0.257, 0.886, 0.274, 0.268, 0.923

예제 코드

여기 유니티 프로젝트에서 아이(Eye) 트래킹 데이터를 전송하는 데 사용할 수 있는 예제 스크립트를 볼 수 있습니다. 이 예제 스크립트는 프로젝트에 "눈의 위치(eye root)" 및 "눈 타겟(eye target)" 변환이 있다고 가정합니다. 또한 사용자의 동공간 거리를 설정해야 합니다. 그러나 이 스크립트는 그냥 그대로 사용해서는 안 되며, 프로토타입 프로젝트를 실행하는 데 도움을 주기 위한 것일 뿐입니다. 코드를 읽어보시고 교육적인 목적으로 사용하시기 바랍니다. 이것은 OSC 아이 트래킹 데이터를 VRChat으로 전송하는 방법의 한 가지 예입니다.


OSC 리소스


OSC 개발과 사용을 위한 도구와 프로젝트

주의: 사용에 대한 리스크는 책임지지 않습니다!

다른 사람이 작성한 코드를 쓰는 것은 본질적으로 위험합니다. 아래 프로젝트들은 대부분 오픈 소스이므로 사용해도 안전한지 확인할 수 있습니다. 가능하면 컴파일된 바이너리(exe 파일 등)를 사용하지 말고 코드를 읽고 직접 컴파일하세요.

 

제출(본 문서에 소스 제공)

검토를 위해 자신의 프로젝트를 제출하고 싶다면, 그것을 Show and Tell에 게시하십시오. 고려하려면 프로젝트를 문서화하고 오픈 소스로 만들고 라이센스를 포함해야 하며 프로젝트 페이지가 VRChat의 TOS를 위반하거나 위반하는 것을 제안하거나 프로젝트 페이지에 링크해서는 안 됩니다. 이 목록을 매주 업데이트하고 프로젝트를 추가 및 제거할 것입니다.


리스트

컨트롤러

  • BrainFlowsIntoVRChat: OSC를 통해 뇌의 이완 및 초점 측정값을 vrchat 아바타 파라미터로 전송하는 BrainFlow 코드(파이썬)
  • bci-workshop: 뇌로 아바타를 컨트롤 하십시오(파이썬)
  • OSC_To_keypress_Console: OSC를 키 입력 데이터로 변환하고 그 반대도 실행합니다.(C#)
  • VRChat Hotkeys OSC: 키보드를 통해 아바타 파라미터를 제어한다.(파이썬)

페이스(Face) 트래킹

  • OpenSeeFace: Unity 통합 기능을 갖춘 CPU의 강력한 실시간 얼굴 및 얼굴 랜드마크 추적(파이썬)
  • VSeeFace: 얼굴과 손 트래킹 기능이 있는 독립형 프로그램, 일부 직접 VRChat OSC 제어 기능 추가(앱)
  • VRChat-MotionOSC: 웹캠으로 아바타 파라미터를 제어합니다(NodeJS)
  • VRCFaceTracking: HTC 바이브 프로를 이용한 눈과 입 트래킹(C#)

핸드(Hand) 트래킹

  • leapmotion-osc: 손가락이 벌어지는 모션을 VRChat 내에 구현합니다.(C# / 유니티 앱)

촉각

심박수

  • HRPresence: VRChat 및 DiscordRPC용 OSC(Open Sound Control)로 BPM을 표시하는 Windows GATT(Generic Attribute Profile)(윈도우의 블루투스 관련 기술) 심박수 모니터 도구 (C#)
  • miband-heartrate-osc: Windows 10에서 Mi Band(샤오미(Xiaomi)의 Mi Band) 장치로 심박수를 활성화하고 모니터링합니다. (C#)
  • pulsoid-to-vrchat-osc: Pulsoid(NodeJS)를 통해 OSC를 통해 VRChat으로 심박수를 전송합니다.(NodeJS)[Pulsoid 홈페이지]
  • hr-osc: Stromno의 심박수 데이터를 아바타로 전송합니다.(Go)
  • vrc-osc-miband-hrm: Mi Band / Amazfit HR Monitor에서 아바타로 데이터를 전송합니다(NodeJS)
  • BluetoothHeartRateOSC: VRChat OSC로 기록된 심박수를 읽는 프로그램(C#)

IRL(In Real Life) 컨트롤(현실 기반 컨트롤)

  • mqtt2osc: MQTT(아마존의 IoT 관련 서비스) 서버를 구독하고 OSC 서버에 게시합니다(파이썬)
  • vrc-osc-audio-controls: OSC를 통한 시스템 오디오 재생을 제어합니다.(Go)
  • vrcwatch: OSC를 통해 시간 정보를 전송합니다(파이썬)
  • HardwareStat2VRChat: OSC를 사용하여 VRCat 아바타에서 CPU 및 RAM 사용량을 보여줍니다(Go)

라이브러리

  • OscCore: VRChat 개발팀에서 사용하는 성능 중심의 Unity용 OSC 라이브러리(C#)
  • VRCOSCGUI: 플러그인 기반의 VRChat용 OSC Sender입니다. 인터페이스를 사용하면 더 많은 플러그인을 추가할 수 있고 홀더 어플리케이션에서 OSC를 전송할 수 있습니다. 각 플러그인은 OSC를 직접 관리할 필요가 없습니다. (C#,C++)
  • OSCLib-for-ESP8266: 마이크로컨트롤러에서 데이터를 전송합니다(아두이노)
  • phorys : OSC(Open Sound Control) 및 Rust(Rust)로 작성된 VRChat OSC API 도구(Rust)
  • VRC_OSCLib: Rust를 이용한 OSC 개발을 위한 라이브러리(Rust)

기타

  • vrc-worldobject: 늦게 들어오는 플레이어를 위한 네트워크 동기화 된 글로벌 오브젝트를 생성합니다.(TouchOSC, C#)
  • OSCKeyboard: Windows 키보드 입력을 Avatar 키보드로 전송(파이썬)

텍스트

  • TTS-Voice-Wizard: 마이크로소프트 애저를 이용한 음성 변환 앱. 텍스트를 OSC 메시지로 VRChat에 전송하여 아바타에 표시합니다. (STTTS) (Speech to TTS) (VRC STT System) (C#)

트위치(Twitch)

  • Spooder: OSC 기반 이벤트 및 브라우저 플러그인을 통해 스트림을 개방형 캔버스로 만듭니다(NodeJS)
  • EZTwitchOSCBot: 채팅 명령을 받아 OSC를 통해 VRChat으로 전송하는 GUI 인터페이스를 갖춘 간단하고 사용자 지정이 가능한 트위치 봇(NodeJS)
  • TwitchVrcAvatarOSC: 아바타를 조작할 수 있는 트위치 봇(C#)

유틸리티

  • vrc-osc-scripts: VRChat을 위해 만든 다양한 OSC 도우미 스크립트(파이썬)
  • VRCOSC: VRChat용 모듈형 OSC 어플리케이션 개발 유틸리티(C#)
  • Protokol : OSC 모니터링 및 로그 표시를 위한 앱(앱)
  • TouchOSC: 스크립트 가능 OSC 인터페이스 응용 프로그램(앱)
  • AV3EmulatorOSC 지원 아바타 에뮬레이터(C#)

OSC 쿼리(OSCQuery)


2023.3.1 릴리스를 기준으로 OSC 쿼리 사양을 구현하는 VRC입니다. 이 프로토콜을 사용하면 OSC 응용 프로그램이 보다 쉽게 서로를 찾고, 서로의 기능에 대해 알아보고, 사용자가 IP 주소와 포트를 가지고 장난칠 필요가 없도록 자동으로 자신을 구성할 수 있습니다.

OSC 응용 프로그램의 사용자로서 해당 응용 프로그램에 대한 지침을 확인하여 OSC 쿼리를 지원하는지 및 수행해야 하는 설정이 있는지 확인합니다. OSC 응용 프로그램 개발자는 OSC 쿼리를 통해 VRChat과 연결하거나 OSC 쿼리용 오픈 소스 C# 라이브러리를 통합하는 것에 대해 읽을 수 있습니다.

 

 

 

마지막 수정: 2023.12.03 17:27