Orbs are audiovisual devices with the following features:
-
Any user can attach to an orb as a listener and hear whatever audio the orb hears.
-
Users with the right permission can attach to an orb as a speaker. The orb will then follow the speaker using waypoints.
-
Orbs are the basis of the automated recording system in metauni. When an orb is at a waypoint it will orient itself towards the nearest point of interest and this is used by the camera system to record audio and video (for example of talks).
-
Optionally a point of interest can have children
ObjectValue
s namedTarget
which point toBasePart
s. In this case the OrbCam's field of view will be automatically calculated so as to put theseBasePart
s inside the view. -
By default the OrbCam view looks from the
X
andZ
coordinate of the orb, and theY
coordinate of the point of interest (for example this puts the view at the mid-height of a metaboard). However optionally a waypoint can have a childObjectValue
namedCamera
which points to aBasePart
whose position is used as the camera position, overriding the default.
There is an introductory video. In more detail
- An orb is any
BasePart
orModel
(with non-nilPrimaryPart
) with the tagmetaorb
- A waypoint is any
BasePart
with the tagmetaorb_waypoint
- A point of interest is any
BasePart
orModel
(with non-nilPrimaryPart
) with the tagmetaorb_poi
ormetaboard
.
A typical example: waypoints are located in front of metaboards, and an orb follows a speaker from board to board.
NOTE that installing the Orb System will, by default, make players listen from the location of their head rather than the position of their camera (which is the default in Roblox). You can change this behaviour by setting Config.ListenFromPlayer
to false
.
Download the release, drag the metaorb.rbxmx
file into ServerScriptService
and then tag the objects you wish to play the role of orbs with the tag metaorb
. Optionally tag some parts (usually invisible) with the tag metaorb_waypoint
and metaorb_poi
.
To create a transport orb tag a BasePart
or Model
with both metaorb
and metaorb_transport
and put inside it a Folder named Stops
containing the following:
- ObjectValues named
1, 2, ..., n
for somen
, which point to - Models containing a Part named
Marker
and a NumberValue namedTimeToThisStop
.
If you do this then the transport orb will move between the markers, taking the given amount of time between each (and loops around from the beginning once it reaches n
).
Some notes:
- By default anybody can attach themselves as a speaker to any orb. If you have the metauni Admin Commands installed, then only users with the scribe permission will be able to attach themselves as a speaker to an orb.
The values guiding the design of the orb system and the use of spatial voice in metauni:
-
Speakers are better with an audience: especially in a virtual format, it is important for the speaker to see that people are there and actively listening.
-
Sometimes you think better on your feet: when you are trying to process something difficult, or take a step out into the unknown, going for a walk and finding a nice view might help. That doesn't mean you want to stop listening!
-
Lowering barriers to informal social interaction: two people show up for a metauni event and while listening wander off to check out something interesting in the world. They notice each other and (reversibly) stop listening to the talk to say Hi. This grows into a conversation (Bob: "Knots are cool" Alice:"I agree, let's climb it").
-
Right to know who is listening: in physical space you can cheaply compute an estimate of who can hear you (it's called "looking around"). A system like spatial voice which tempts you to apply the same heuristics shouldn't then violate them. If someone is getting an audio feed from a location, there should be a very clear indicator that this is the case.
-
Speaking and recording should be easy: most talks ever given are lost and that's a shame. Making it easy to produce and share high quality recordings of mathematics is a core value of metauni. That means that the orb system should be as easy as possible for the speakers, and not putting annoying demands on them.
The metaorb.rbxmx
file is generated like this
rojo build --output "build.rbxlx"
remodel run orb_packager.lua
The first command builds a place file according to default.project.json
.
The second command uses remodel to extract all of the components of the Orb system,
and packages them all within the metaorb
folder, and exports this
as a metaorb.rbxmx
file. The startup server script then redistributes these
components on world boot.