원래 VR챗 월드로는 외부데이터를 가져올 수 없습니다.

안하는게 아니라 못해요. 브챗이 지원을 아예안합니다.

해서 마크서버 같은 곳처럼 채팅이나 후원을 불러오는게 불가능합니다.

(이미지나 텍스트를 다운로드할수는 있으나 5초에 한번만 로드할 수 있는 등 제약 사항이 많습니다.)

근데 제가 해냄

??? : 아니 외부데이터 못가져온다면서요!!!

사실 브챗 딱 하나 외부데이터를 실시간으로 불러오는 기능이 존재합니다.

그것은 바로

비디오 플레이어입니다.

VR챗의 비디오 플레이어는 공식으로 제공되는 기본 기능인데

트위치나 유튜브 라이브 같은 라이브 스트리밍 영상을 읽어올 수 있습니다.

비디오도....데이터.....

브챗에서는 비디오 데이터를 받을 수 있다....

그럼 보낼 데이터를 비디오로 만들면 되는거아님?

간단한 GUI 프로그램을 하나 만들어서

실시간 채팅 데이터를 3비트 이미지로 변환하고

이걸 RTMP 서버를 하나 돌려서 OBS로 송출하고

(작은 미니 아프리카 방송국을 만든다고 생각하시면됩니다.)

이렇게 브챗으로 가져온 후

조립은 분해의 역순으로 데이터를 다시 휘뚜루마뚜루해주면

아프리카 채팅 브챗 연동 성공~

사실 엄청나게 과정을 생략하긴했는데

어차피 관심있는사람없을것 같으니 생략쓰

생략된 부분

- 아프리카 채팅 웹소켓 불러오기

- 텍스트를 json화 및 바이너리화 한 후 3bit데이터로 변환하는법

- Hash등을 Metadata를 넣어서 데이터 무결성 유지하고 깨지는 데이터 없도록 하기

- VideoPlayer로 들어오는 RenderTexture 탈취하는법

- CPU연산 최소화를 위해 전용 쉐이더를 만들어 GPU연산으로 분산해 렌더텍스쳐 압축하기

- 압축한 텍스쳐로부터 바이너리 데이터 분리하기

- 브챗 내부기능만으로 바이너리 데이터를 Json으로 변환한 후 읽기

[한계 및 단점]

- 영상을 보내는거기 때문에 영상 프레임이 끊기거나 채팅 속도가 프레임속도보다 빠르면 채팅 씹힘

-> 별풍선 같은 엄청 빠르지 않은 쪽으로 데이터를 한정하면 문제 거의 없습니다

- 데이터 전송을 위해 세팅할게 번잡스럽게 많고 보내는 사람이 프로그램을 켜야 전송됨

-> 단 보내는 사람(스탭)이 귀찮은거지 받는 사람(왁굳형, 고멤 등)은 그냥 딸깍하면 나옴

[장점]

- 어쨌든 이게 유일한 방법임

- 채팅이 예상 이상으로 엄청나게 많아도 씹히기만 할 뿐 브챗 성능에 영향이 전혀 없음

사실 예시를 채팅과 별풍으로 가져오긴 했지만

실시간 데이터라면 무엇이던 간에 가져올 수 있습니다.

- 별풍에 따라 효과 발생하는 API 만들기

- 외부에서 카메라나 조명 기능 조작하기

- 실축 중계 데이터 가져오기?

활용은...몰루?

만들어두면 참신한 브챗 맵제작 아이디어가 더 나오지 않을까해서 만들어보았습니다.

감사합니다.

------------------------------------------------------------

사족

- 원래도 이런 영상 기반으로 데이터를 불러오려는 외국 커뮤니티의 시도는 있었습니다만

내부 코드를 보니 무결성 부분을 해결하지 못해서

데이터가 좀 튀어도 괜찮은 모션 데이터 같은 곳에서만 사용하고 더 진전하지 못한 것 같습니다.

이번 기능개발의 핵심은 데이터가 깨지지 않도록 인코딩 및 디코딩하는 부분입니다.

- 지금은 빠르게 핵심적인 구현을 하느라곡 obs로 송출했지만, 송출기능에 rtmp서버 기능을 같이 붙이면 훨씬 간소화해서도 구현할 수 있을것같습니다.

- 소스코드는 빨리만드느라 개판이라 공개하기 부끄럽습니다.