sync
sync는 세션에 참여 중인 멤버들과 작업을 동기화하고 서로의 pose를 동기화하고, 음성 채팅, 스크린 쉐어링, 환경 메쉬 쉐어링 등의 기능들을 제공하는 컴포넌트이다.
•
작업 동기화
씬 내부의 오브젝트 중 id를 갖는 모든 오브젝트에 대한 트랜스폼, 컴포넌트, 하이어러키의 변경을 서버를 통해 중계하여 동기화한다. 이때 각 작업에 대하여 쓰기 권한 검사를 수행하고 적법한 작업들만 중계한다.
•
유저 pose 동기화
같은 워크스페이스 세션에 접속한 유저들의 세션명, 포지션, 로테이션이 서버를 통해 중계되어 실시간 동기화된다. 중간에 참여한 유저에게도 기존 유저들의 데이터를 보내준다.
•
음성 채팅(WebRTC, P2P)
같은 워크스페이스 세션에 접속한 모든 피어 쌍은 WebRTC 커넥션을 맺는다. 이를 통해 유저간 음성채팅을 지원한다. 3D모드 또는 AR모드에서 뷰포트 좌측 상단에 보이스 송출을 켜고 끌 수 있는 토글 버튼이 주어진다.
•
AR 유저 화면 쉐어링(WebRTC, P2P)
AR 모드에서는 다른 유저들에게 주변 환경 및 실물을 공유할 수 있다. 크게 두 가지 방식이 지원되며 그 중 하나는 AR 유저가 기기를 통해 보고 있는 화면을 캐스팅하는 것이다. 선점형 토큰을 통해 동시에 한명의 유저만 캐스팅할 권한을 갖게된다.
•
AR 환경 메쉬 쉐어링(WebRTC, P2P)
앞서 말한 두 가지 방식 중 나머지 하나는 뎁스 맵과 컬러 맵으로 구성한 포인트 클라우드를 스트리밍하는 방식이다. 마찬가지로 선점형 토큰을 통해 동시에 한 명의 유저만 캐스팅할 권한을 갖게되며 이 토큰은 화면 쉐어링에서의 토큰과 같은 것이다.
avatar
아바타 컴포넌트는 캐릭터 모델과 이름표를 표현하는 컴포넌트이다. sync를 통해 다른 유저를 보여줄 때 사용된다. 이름표는 바라보는 사람에게 정면으로 보이도록 자동으로 회전되며 일정 거리를 벗어나면 렌더링하지 않도록 되어있다.
{
modelPath : {type : 'string'},
name : {type : 'string'}
}
JavaScript
복사
스키마는 위와 같다. modelPath는 아바타 3D 모델의 URI이고, name은 이름표에 들어갈 이름이다. sync컴포넌트에 의해 자동으로 관리되는 아바타에는 각 피어가 프로필에서 설정한 프리셋 아바타와 각 피어의 계정 이름이 들어간다.
interaction-manager
interaction-manager는 3D, VR, AR 모드에서 발생한 작업들을 일관된 포맷으로 래핑하여 sync 컴포넌트에게 전달해주는 역할을 하는 컴포넌트이다. 더불어 로컬 작업에 대한 undo, redo를 수행 할 수 있도록 작업 히스토리를 저장하기도 한다.