Core Concepts (Unity)

Cavrnus is a collaborative virtual platform that enables users to create, share, and interact within immersive 3D environments (called Spaces), fostering real-time collaboration, communication, and creativity across various industries and use cases.

Spaces

image-20240223-185622.png

You can think of a Space as being conceptually somewhat like a channel in Slack or Discord. A Space primarily contains a Journal, which is a record of all changes that have been made while users are connected.

Users can connect to Spaces, which will give them the Journal. The User will then receive all new changes to the Journal live, until they exit the Space. It is up to the User’s Application to interpret the live Journal and display it as something useful.

Example: A developer wants to share their Car Configurator project with a customer in real time. They therefore create a Space called “Car Configurator”. Inside their project they then connect to that Space on startup to allow for real-time collaboration.

Voice and Video

image-20240223-185338.png

Upon connecting to a Space, the User will be automatically connected to Cavrnus’s Voice and Video systems. The Application can set which microphone the user should use, and toggle muting, etc.

Video stream sources can also be selected and shared. Applications will need to Bind the stream images and display them. An example Users List is included which Binds the video stream to the User’s profile images.

Example: The Car Configurator developer wants their CEO’s face to appear on a giant screen above the vehicle. A script on the screen will simply detect that User, Bind their stream image, and display it.

The Journal

The journal is a database that represents all of the events that have occurred in the history of each space. As users join, navigate, change, and eventually exit a space, all of the changes made to the space are recorded in the journal.

 

Properties

These Journals primarily contain changes to Properties. A Property is simply a piece of data that exists at a well-defined path (referred to as a Container). In order to make a change to a Space a user will Post a change to a Property. In order to show these changes life, clients will Bind changes to a property and display them in the scene.

Example: The Car Configurator’s developer wants to change the car’s color in real time. To do this they decide that this Property will be named “CarColor” and will exist in the Container “Configurator/MainCar”. This Container could also contain other properties like “CarPosition” and “CarSpeed”, etc.

They will then write a script to Bind “CarColor” and display the current value on the vehicle. They will also add a UI button which will Post a new value to “CarColor” when clicked.

Spawned Objects

The other thing Journals contain is the ability to Create and Destroy Objects. These Objects are denoted as strings in the Journal and it is up to your Application to specify what that specific string spawns. When spawned, the new Object Instance will be given a Properties Container, which will allow you to modify it.

Example: The Car Configurator’s developer wants to drop balloons on the car as part of the experience. They Spawn 30 Balloon Objects when a button is hit. They then set the “Transform” and “Color” Properties on each Balloon’s Container to fully set them up.

The spawned Balloon objects will then Bind these Properties and display their state.