site/network/sample-applications/nexus.txt

70 lines
3.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Nexus is a federated, free software, hackable VR social platform and protocol.
Project members include Person 1 <user@example.com>, Person 2 <user@example.com>,
and Person 3 <user@example.com>. The representative of the project is Person 1.
Nexus' current design is subject to change; we are still in the rough
prototyping stage and we expect to "Ship-of-Theseus" our current design quite a
bit. The goal of Nexus is to provide an open, extendable, VR social platform. To
do this, Nexus separates its logic into individual Wasm scripts and a networking
API based on the ECS model. Everything communicates using the gLTF and VRM
standards: VRM for avatars, and gLTF for objects and worlds. Several different
actors are present within the Nexus architecture:
A “world” is a collection of Wasm scripts and gLTF models able to be reproduced.
It is intended for users to be able to create worlds, and to share them,
allowing others to use the worlds as templates from which to create servers. A
“server” is a running instance of a world; how servers interop with other
servers is yet to be determined. A “client” is the front-end application that
can connect to any Nexus server and interact with other clients over the server.
The current plan is to provide almost everything using Wasm scripts.
Wasm scripts have two categories so far; there are server scripts, that just run
on the server, and client scripts, which are sent over to the client for the
client to run locally and then interact with the server using the networking
API. It's possible that we will come up with some kind of server-client dual
script type, in which clients run a script to keep themselves up to date with
the server. The server checks to make sure its results line up with the clients
in order to limit abuse.
Camera and physics (gravity, collision, buttons, etc.) interactions, IK and FBT,
and GUI systems (server discovery interfaces, friends lists, etc.) will all be
provided by Wasm scripts. We will provide default implementations, but the
community will be free to hack on those scripts or create their own from scratch
to provide the same or new functionality. This creates an extremely extensible
platform. Using Wasm means that, as we go into the future, more languages could
be utilized to write social VR, or non-social VR experiences, such as games, a
scene editor, media creation tools, etc.
This system enables people to to write clients and servers in other languages or
engines than Bevy, which we are currently using for our standard implementation.
As long as clients or servers properly respect the Wasm scripts, everything
should work across different implementations. If someone creates a Nexus server
SDK in Unity, they will be able to take advantage of much of Unity to create
Nexus worlds.
The fact that we use Wasm also means that game developers can create games or
experiences in normal, 2D IDEs, such as writing a game in Rust, instead of
having to deal with our scene editor. That being said, we do plan to make a
scene editor in Nexus, but this is a tentative, far-future plan.
The current plan is to use IPFS to provide sharing of Wasm scripts, models, and
whatever else may materialize in the future.
Theoretical work on a permissions system has not yet begun.
The aim is to provide an free software VR social platform where people can
collaborate and communicate with each other, and a game engine-like base to
build social VR applications.
Our Minimum Viable Product is gLTF models loaded in for avatars, downloading and
loading, basic voice chat, and synced worlds.
The timespan of this project to full completion is several years. If all goes
according to plan, an MVP should be only a few months off.
The server and client implementation will be licensed under the GPLv3, but all
the base scripts, for things like physics, inverse kinematics, and the basic UI
implementation will be licensed under the Expat License.