Scaled Tiers for Multiplayer Games/VR Worlds

Hi There,

I posted earlier about vr avatar support, and a lot of the same points apply to this post, but I know even less about server-side development; so, please correct me, link me to resources, tell me where I’m wrong, etc. (The previous post explains a lot of my background/philosophy, in terms of asking this question: VR Avatar Support).

Currently, I’m building a multiplayer vr world. I wrote a socket server myself (first time) that synchronizes players and their robots in the world. Soon, I’m going to have to figure out how to get the world to (a.) own its own stuff and (b.) maybe be persistent. As someone new to game development (1 year), this seems highly daunting, but not impossible. I have a lot of time on my hands, and also a lot of patience, but shouldn’t people like me be able to spin up a back end/server side situation, whatever, with templates, quickly and easily?

(1.) AFrame e.g., allows you to rapidly generate a multiplayer experience where position of players and positions of objects are synced, why don’t we have something like that? (I think we have a community project like that, vrspace, but again, as I wrote in my previous post, my understanding of community project features vs. official features is very hazy).

(2.) Is there a back end service with tiers that everyone here uses that I don’t know about? That integrates super well with babylon? I’m probably going to use VRspace to demo a bunch of experiences… particularly bc it supports VR avatars, etc.

(3.) By “tiers” I mean the following:
–tier 1 just synchronize everyone who loads into the experience
–tier 2 synchronize objects and their qualities
–tier 3 permanent world
You know, something like this, I’m not super familiar (yet) with back end development

(4.) I guess I don’t understand this separation of focus between (a.) the front end experience and (b.) the back end? I mean, most games are multiplayer, to make a game, you have to make a back end, why is their a separation of concerns? I guess the front end key word is “rendering” and the back end keyword is “syncrhonization” and these are two very different focal points. Maybe there is just a back end service that everyone uses and is content with, and I just don’t know about that.

(5.) Does unity have its own multiplayer in a box that it gives users?

1 Like

adding @RaananW

1 Like

A lot of technical and philosophical questions :slight_smile:

This is not our focus. AFrame might offer something like that out of the box. Babylon offers you everything you need to develop it on your own. We don’t have current plans to support something like that, but it can be implemented as an external package. A remote user class would be nothing more than a constant update of the transformation of the remote player’s avatars, on each frame.

There are many realtime databases and remote gaming services that can help you here. I used firebase successfully, GameSpark and PlayFab (Azure FTW!) can help as well for sure.
They usually have a very abstract API that you can use in order to sync all of your users. You can also build your own backend service with sockets (as you mentioned), using babylon’s null engine to keep everything in sync.

Babylon is not a gaming engine. it is a rendering engine. Our focus is on providing you with the ability to render your scene in the browser. We don’t have remote rendering (though you can use babylon on a server), and we don’t offer any backend components. This is the main difference. The backend would be the component that syncs between many players, frontend will be the component that presents this data to the user.

1 Like

It’s interesting that you’re looking for a way to make your worlds connected and synced up. So, for our project to make a web (and eventually WebXR) virtual world client we’re doing it in two parts:

  1. The Web Client - This part uses Babylon, but it could use anything, heck it could use nothing at all as well… just pure text chat, for example. This client is where all the UI and rendering will go.
  2. The Web SDK - This part communicates with the servers over WebRTC and REST to get services like: accounts, avatars, entities, messaging, audio, scripting, and assets. It then makes available various scripting APIs to communicate this data back and forth.

This separation is meant to allow for easy integration of the SDK into anyone’s type of project for realtime syncing of everything in a persistent way. Though, we’ve just gotten started so it’s not functional at all yet.

However, the idea is that we’d make an agnostic SDK. So trying to imagine how it would hook into various projects would help ensure it can actually become a useful tool in the future.

The key questions to ask may be centered around scripting API and how to make it simple, effective, and able to evolve.

3 Likes

I agree with previous comments. All the tools are there for you to build something the way you want. One of the problem with template-like solutions is that you are often limited or constrained by the template. There are many ways to go about it. For instance, i recently needed to create a solution where users/players communicate with a central “controller” so i used PeerJS to implement pere-peer communications with WebRTC. It was a particular usecase scenario so unlikely to be covered by a template-type solution but i was able to get the fundamentals working within a few hours. If i needed true multi-player synchronization i could add a NullEngine but for me i don’t need it. I guess, in a way, its like a unix type mentality - provide tools that do their individual job really well and let you build what you want from them.

1 Like

this sounds quite interesting; are you making this beginner friendly? are you going to make it so you can host a persistent world that does stuff even when players aren’t there?

vrspace.org is the babylonjs front end version of this that I think is actively being worked on (so, not front end agnostic).

1 Like

That’s true… all of what you said is true. But there needs to be more “back end for idiots” with insanely robust documentation the way that there is for front end stuff. I’m not sure why, but learning front end dev has been much easier than learning back end dev (just web services I’m talking about here). Like, as a self-taught (or tutorials taught person), it’s easy to come into p5.js w/dan shiffman teaching you stuff (https://p5js.org/ https://www.youtube.com/channel/UCvjgXvBlbQiydffZU7m1_aw) make your way over to three.js and then into babylon, but I don’t see a similar ladder for back end dev, nor a friendly community that is supposed to lift you up into it, the way we all do here. Am I missing something? Like is there a ladder and a community for back end development, that again gently lifts people into it?

My background is as an artist who moved into programming; so, finding these ladders and communities has been really helpful.

Yes. Our servers are already 100% persistent. Everything is saved constantly with rolling backups. What we wanna do with the Web SDK and Web Client is simply to make these servers more accessible.

I reckon that if you could import a Node module that simply let’s you boot up networking to a persistent world server and then load it up with Babylon then that would save a ton of development time. Heck, it would probably enable more experiences than otherwise would have been created due to difficulty.

The only trick is to make the SDK in a way that makes sense.

For example: what components are universal across all implementations? Also, making the SDK useful for someone using ThreeJS as well as someone using BabylonJS would be a good litmus test to that end.

After all, it needs to be easy and useful so people pick it up and want to extend it like WordPress.

Oh, so figured I might as well ask this:

is there a back-end for idiots service
and/or a back end library that is as rad as babylonjs is for the front end

again, with like tiers
simple just see the other plays
maybe rooms?
object persistence
world persistence, etc.

does that already exist; sounds like @Kalila is building it maybe (I’m going to look at it)

but what about things like https://www.colyseus.io/ does this already do all this?
is it beginner friendly and/or does it have a learning ladder?
are there others?