Multiuser Virtual Field Trips & Training
The Virtual Field Trip (VFT) system lets several people share a single VRGS scene in real time — walking the same outcrop, looking at the same models, and collaborating through pointers, annotations, chat, and shared waypoints. It is designed for teaching, guided field trips, and training, where one instructor (the leader) drives a session that students or trainees join.
A live session is called a trip. One person hosts it; everyone else joins with an invite code and is admitted through a waiting room. While the trip runs, participants see each other's avatars and viewpoints, the leader can recall everyone to a location, presenters can drop annotations and waypoints, and the whole session can be recorded for later replay and debrief.
System at a glance
The system has three parts:
| Component | What it is | Who uses it |
|---|---|---|
| VRGS client | The desktop / VR application. The VFT panel (a dockable side panel) is the control surface for hosting and joining. | Instructors, students, trainees |
| geotour-server | A standalone networking backend (a Go WebSocket server). It hosts trips, manages rosters and waiting rooms, relays movement/chat/annotations, and stores history. | Runs in the background / on a server; operators configure it |
| Admin dashboard | A web app for monitoring live trips, users, recordings, audit history, and analytics. | Administrators / instructors reviewing sessions |
The VRGS client connects to the server over a WebSocket
(ws://<host>:<port>/ws) and authenticates with a sign-in token. The server
keeps the authoritative state — who is in which trip, what role they hold, and
the shared annotations/waypoints — and broadcasts changes to everyone in the
trip.
The networking backend is a separate program (geotour-server). VRGS does not
embed it; an instructor (or your organisation's IT) runs one server that many
clients connect to. See Running the server.
Key concepts
- Trip — a live collaborative session. It has a name, an optional password, a participant cap, a leader, and a roster of everyone currently in it. A trip is active (running now) or scheduled (set to start at a future time).
- Invite code — a short code (derived from the trip's id) the host shares so others can join.
- Waiting room — when someone asks to join, they wait here until the leader or a TA approves them. This keeps uninvited people out of a class.
- Owner — the person who created the trip. Ownership never transfers; the owner can always reclaim or reassign the Leader role, and while the owner is away no new people are admitted (see Ownership vs leadership).
- Leader — the member currently driving the session. Leadership can be handed to another attendee and handed back. The owner is the initial leader.
- Roles — every member also holds one role that decides what they can do (see the permissions matrix).
- Presence / roster — the live list of who is in the trip right now, shown in the VFT panel.
- Recall & control — the leader can pull participants to their location ("recall"), or hand a participant temporary control of the shared view.
- Annotations & waypoints — shared spatial markers. Annotations are free notes pinned in 3D from the panel's Notes tab; they sync to everyone (and back-fill people who join later) and are drawn on the mesh in the 3D view. Waypoints are ordered stops (with optional dip/azimuth) that define a route through the scene.
- Chat, whispers & resource sharing — text messages and shared links/resources, either to the whole trip or as a private whisper to one member.
- Voice & video — everyone in a trip can talk, with push-to-talk or an open mic and optional distance-based spatial audio; the leader can also share a camera, shown in a single tile above the tabs. Both are live-only and are never recorded (see Voice chat and Video).
- Signals & ink — lightweight ways to communicate without interrupting: raise a hand, send an emoji reaction, draw freehand ink on the outcrop, and (leader/owner) a "look here" 3D spotlight that marks exactly where to look.
- Trips browser — the panel's Trips tab (and the Join dialog's Browse Trips) list available and scheduled trips, each scheduled one with a live countdown to its start.
- Recording & replay — the leader can record a session; the server samples everyone's positions over time so the trip can be replayed afterwards for debrief.
- Analytics — from recorded movement the system builds position trails and an attention heatmap (where people looked), viewable in the dashboard.
Roles & permissions
There are five roles. The host of a trip is automatically the Leader; everyone admitted from the waiting room starts as a Participant. The leader can promote anyone to another role.
| Capability | Observer | Participant | Presenter | TA | Leader |
|---|---|---|---|---|---|
| See the shared scene | ✓ | ✓ | ✓ | ✓ | ✓ |
| Broadcast their own avatar / movement | — | ✓ | ✓ | ✓ | ✓ |
| Chat & share resources | — | ✓ | ✓ | ✓ | ✓ |
| Speak, and hear others (voice chat) | — | ✓ | ✓ | ✓ | ✓ |
| Turn their own camera on (video) | — | ✓ | ✓ | ✓ | ✓ |
| Add annotations | — | ✓ | ✓ | ✓ | ✓ |
| Remove annotations | — | — | ✓ | ✓ | ✓ |
| Add / remove waypoints | — | — | ✓ | ✓ | ✓ |
| Request control of the view | — | ✓ | ✓ | ✓ | ✓ |
| Recall a single participant | — | — | — | ✓ |