콘텐츠로 이동

VRChat OSC

VRChat OSC는 OSC로 vrOS와 VRChat을 연결합니다. 손목의 패널에서 챗박스 메시지를 보내고, 아바타 파라미터가 실시간으로 바뀌는 것을 보고, 게임 안 카메라를 조작하고, VRChat이 알아서 vrOS를 찾도록 하세요.

다른 모든 퍼스트파티 확장과 마찬가지로 vrOS와 함께 제공되고 미리 허용되어 있습니다. 동의 모델과 철회 방법은 확장이 작동하는 방식을 보세요.

VR 없이 실행됩니다. 챗박스는 SteamVR가 닫혀 있어도 작동합니다.

vrOS는 mDNS로 자신을 OSCQuery 서비스로 광고하고, 무엇을 수신하는지 설명하는 작은 OSCQuery 트리를 제공합니다. VRChat이 그것을 찾아 광고된 포트를 읽고 전송을 시작합니다. 어디에도 포트를 입력하지 않습니다.

그 덕분에 두 가지를 얻습니다.

  • vrOS는 고정된 포트가 아니라 시스템이 배정한 포트에서 수신하므로, VRChat 자신의 수신기와 충돌할 수 없습니다.
  • vrOS는 VRChat이 실제로 거기 있는지 압니다. 발견한 서비스를 탐침하고 들어오는 트래픽을 지켜봅니다. 탐침 한 번을 놓쳤다고 상태가 뒤집히지는 않지만, VRChat이 닫히는 것은 넘겨짚는 것이 아니라 감지합니다.

광고는 기본적으로 켜져 있습니다. VRChat을 vrOS로 직접 향하게 하고 싶다면 확장 설정에서 끄세요.

설정 기본값 무엇인지
전송 대상 127.0.0.1:9000 vrOS가 OSC를 보내는 곳. VRChat의 기본 수신 포트입니다.
수신 바인드 127.0.0.1:0 vrOS가 수신하는 곳. 포트 0은 시스템이 고른다는 뜻이고, OSCQuery가 고른 포트를 광고합니다.
광고 (OSCQuery/mDNS) 켜짐 mDNS로 알리고 OSCQuery 요청에 응답합니다.
컨택트 프리픽스 비어 있음 컨택트 이벤트로 노출할 파라미터 프리픽스를 쉼표로 구분합니다.

챗박스는 하나의 상태를 공유하는 두 표면에 있습니다. 생성할 수 있는 오버레이 패널, 그리고 대시 탭의 채팅 페이지입니다. 어느 쪽에서든 입력하세요. 오버레이 패널을 손목에 앵커로 고정하면 다시 시작한 뒤에도 그 손목으로 돌아옵니다.

패널에는 텍스트 입력란, 보내기, 그리고 토글 세 개가 있습니다.

  • 입력 중은 입력하는 동안 게임 안 입력 중 표시를 켭니다. 보내거나, 입력란을 비우거나, 포커스가 패널을 떠나면 사라집니다.
  • 사운드는 메시지가 도착할 때 VRChat의 알림음을 재생할지 정합니다.
  • 라이브는 보내기를 누를 때만이 아니라 입력하는 동안 부분 텍스트를 보냅니다.

VRChat의 챗박스는 144자를 받습니다. 더 긴 텍스트는 문자 경계에서 잘리고 패널이 그렇게 알려 줍니다.

vrOS는 쏟아붓는 대신 대기열에 넣습니다. 짧게 몰린 것은 바로 나가고, 그다음부터는 일정한 간격으로 정착합니다. 개별 메시지는 순서대로 대기합니다. 라이브 모드에서는 가장 새로운 부분 텍스트가 쌓이지 않고 대기 중인 것을 대체하므로, 도착하는 것은 마지막에 입력한 내용입니다.

대기열이 넘치면 패널이 알려 줍니다. 버려진 전송은 세어서 보여 주며, 조용히 넘어가지 않습니다.

페이지 네 개이고, 각각의 바닥글에 커스텀 전송 행이 있습니다.

페이지 무엇이 있는지
채팅 오버레이 패널과 상태를 공유하는 챗박스
파라미터 이름, 유형, 현재 값으로 보는 실시간 아바타 파라미터, 그리고 불러온 아바타
카메라 모드, 촬영 동작, 문서화된 토글, 슬라이더
트래커 트래커 전송과 그 간격 토글

커스텀 전송 행은 주소와 값을 받으며, 페이지가 다루지 않는 것에 씁니다.

파라미터는 로그가 아니라 실시간 보기입니다. 페이지가 화면에 있는 동안 갱신되고, 없으면 밀어 보내기를 멈춥니다. 다만 확장은 어느 쪽이든 값을 계속 익히므로, 페이지를 여는 순간의 내용은 정확합니다.

카메라 모드는 0에서 6까지입니다. 끄기, 사진, 스트림, 이모지, 멀티레이어, 프린트, 드론입니다. 슬라이더(줌, 초점 거리, 조리개, 색조 등)는 무엇이든 회선에 나가기 전에 VRChat이 문서화한 범위로 잘립니다.

표면 방향 참고
챗박스 입력과 입력 중 표시 나감 위와 같이 전송 제한
아바타 파라미터 주고받음 문자열 및 다중 인자 파라미터 포함
아바타 변경 주고받음 전송과 아바타가 로드되었다는 알림 양쪽
/input/* 나감 축 9개는 -1..1로 잘린 float, 버튼 20개는 0 또는 1인 int
/usercamera/* 나감 모드, 동작, 토글, 슬라이더
트래커 1-8과 머리, 위치와 회전 나감 일정한 간격으로, 기능이 켜져 있는 동안만
컨택트와 햅틱 파라미터 들어옴 설정한 프리픽스가 이벤트로 도착

일치하는 것이 없는 수신 주소는 조용히 버려지지 않고 세어집니다. 그래서 프리픽스의 오타가 알 수 없는 문제가 아니라 눈에 보이는 것이 됩니다.

시선 추적은 의도적으로 여기 없습니다

섹션 제목: “시선 추적은 의도적으로 여기 없습니다”

이 확장은 VRChat에 시선 추적을 보내지 않습니다. 그것은 VRCFaceTracking의 일이고, 중복해 봐야 서로 싸울 뿐입니다.

vrOS 자체가 OSC로 시선을 받는 경우, 그것은 vrOS 컴포지터 안의 전용 수신기이며 의도적으로 이 확장이 아닙니다. 원시 시선 데이터는 확장 API를 넘어가지도, 이벤트 버스에 닿지도 않습니다. 확장은 포커스와 확정 이벤트를 받을 뿐 시선 스트림은 받지 않으며, 그마저도 자체 케이퍼빌리티 허용이 필요합니다.

VRChat의 웹 API, 웹소켓, 로그 파싱, 아바타 JSON은 모두 설계상 이 확장의 범위 밖입니다. 이 확장은 OSC 처리만 하고 다른 것은 하지 않습니다. 둘을 떼어 놓은 덕분에, vrOS 1의 OSC 코드가 옆에 놓여 있던 VRChat 기능마다 의존성을 늘려 가는 일을 막을 수 있었습니다.

  • 확장의 상태 줄을 확인하세요. VRChat을 찾았는지 알려 줍니다.
  • VRChat 자체에서 OSC가 켜져 있는지 확인하세요. vrOS가 대신 켜 줄 수는 없습니다.
  • 광고가 꺼져 있으면 VRChat은 vrOS가 수신 중인 포트를 찾을 방법이 없습니다. 다시 켜거나, VRChat의 전송 포트를 직접 설정하세요.

자세한 내용은 문제 해결에 있습니다.