
Improbable announces SpatialOS Game Developer alpha - ggambetta
https://improbable.io/2016/12/13/google-partnership
======
ggambetta
All the juicy details in TechCrunch
([https://techcrunch.com/2016/12/13/improbable-teams-with-
goog...](https://techcrunch.com/2016/12/13/improbable-teams-with-google-opens-
spatialos-alpha-for-virtual-world-development/)), VentureBeat
([http://venturebeat.com/2016/12/13/google-and-improbable-
part...](http://venturebeat.com/2016/12/13/google-and-improbable-partner-to-
create-massive-online-game-worlds/)), Wired
([https://www.wired.com/2016/12/googles-improbable-deal-
recrea...](https://www.wired.com/2016/12/googles-improbable-deal-recreate-
real-world-vr/)), and Google themselves
([https://cloudplatform.googleblog.com/2016/12/google-
partners...](https://cloudplatform.googleblog.com/2016/12/google-partners-
with-improbable-to.html)).

Also worth looking at this latest video of Worlds Adrift, one of the games
built on SpatialOS, that is now in Alpha:
[https://www.youtube.com/watch?v=kjLWK6iQvRs](https://www.youtube.com/watch?v=kjLWK6iQvRs)
Beautiful storytelling on this one :)

The website
([https://spatialos.improbable.io](https://spatialos.improbable.io)) has more
details about the tech itself, and for an even more in-depth look, the
documentation
([https://spatialos.improbable.io/docs/reference](https://spatialos.improbable.io/docs/reference))
has everything from a conceptual overview to tutorials to API references.

------
stcredzero
Though different terms are used, both SpatialOS and "Age of Ascent"
specifically reference the notion of "Interest Management." That is, not only
do the online servers have to simulate the world at the rate of game ticks,
the online servers also have to calculate and generate timely updates to
interested parties and compensate for lag while seamlessly distributing load
across the cluster.

The hacks that Eve Online used to somewhat do interest management resulted in
metagame "Grid Fu" \--
[https://www.youtube.com/watch?v=N8K18S_RNEQ](https://www.youtube.com/watch?v=N8K18S_RNEQ)

3D worlds are really good for interest management, since distance between
objects generally means a drastic lowering of bandwidth required between the
objects, even though the objects are still visible to each other. In 2D, such
objects have zero bandwidth, but this means there are no "vistas" unless the
view zooms out, which makes the player effectively "farther" from the avatar.

------
flipgimble
why would I entrust the future of my company or game project to a closed
source server and SDK?

I've seen several MMO middleware companies announce revolutionary new
technology with outdated closed source business models only to fold couple of
years layer. Badumna Network suite was the last well funded one I remember
closed a while back. And it started by Australian academics with decent
technology.

~~~
elcct
There is no open source alternative yet

------
paul123456789
Hey, I just made a deployment with SpatialOS. This is one of the starter
projects.

Go to this google doc and click the links. Please leave a comment on the cell
as the links are one-time use.

[https://docs.google.com/spreadsheets/d/1Q185RKFhjspin4zo0PBH...](https://docs.google.com/spreadsheets/d/1Q185RKFhjspin4zo0PBH7ZRwpoJCf9_f4rywo8-29F4/edit?usp=sharing)

Come play!

~~~
unlikely-leo
This guide explains how to build and deploy this game we created as a
tutorial:
[https://spatialos.improbable.io/docs/reference/9.0-alpha/tut...](https://spatialos.improbable.io/docs/reference/9.0-alpha/tutorials/helloworld/build-
your-world)

To play the game, just follow the link to the spreadsheet (parent comment) --
no sign-up or tutorial required! :)

------
JadeNB
I had a terrible time parsing the title (currently "Improbable Partners with
Google, and Announces SpatialOS Game Developer Alpha") until I realised that
'Improbable' was the name of the company, and 'Partners' a verb.

~~~
ggambetta
Good point. Fixed!

------
smlacy
How is this different from what SecondLife/LindenLabs was doing a decade ago?

~~~
rjfwhite
(disclaimer: I'm a Cofounder & CTO of Improbable - and massive fan of Second
Life)

You're right to see that there are some inspirations from worlds like Second
Life with our platform - it spatially distributed the simulation of the world
through multiple servers.

Will elaborate on this in a blog post a some point, but some main differences:

-SL is a great example of a product somebody could make on top of SpatialOS: we're less of a 'social world environment', and more of an abstract spatial computation platform. We don't care what game engine is used, what the view of the world is, etc.

-While really impressive for its time, SL's architecture didn't re-distribute its load across machines based upon player & object density - each server was statically allocated a part of the world. This meant concurrent players per 'Sim' were limited to ~50. We can move these boundaries on the fly to deal with higher density. Here is an example (we really need a better one, this doesn't do it justice!) [https://www.youtube.com/watch?v=XXhxI4dKU_E&t=1s](https://www.youtube.com/watch?v=XXhxI4dKU_E&t=1s)

-Although a player could cross server boundaries, it was never very smooth, and people in SL would deliberately limit their playspaces to a single server. To create a proper seamless world you have to deal with multiple servers simulating the same physical space, and reconciling with each other. Here is an example of us doing this with Unity3D and physics [https://www.youtube.com/watch?v=ysB6bi7QUbw](https://www.youtube.com/watch?v=ysB6bi7QUbw)

-Our approach allows for arbitrary kinds of process to be used as the server worker, including existing game engines like Unity3D rather than a monolithic server. [https://spatialos.improbable.io/community/create-a-custom-fl...](https://spatialos.improbable.io/community/create-a-custom-flocking-worker). We currently have SDKs for C++, C#, Java, rather than the slightly esotetic Linden Scripting Language ([https://en.wikipedia.org/wiki/Linden_Scripting_Language](https://en.wikipedia.org/wiki/Linden_Scripting_Language)) SL had (incidentally, the first computer language I ever learned!)

~~~
troymc
I'm curious how SpatialOS compares to Second Life's successors -- Sansar and
High Fidelity. I gather that they also allocate processing in a more targeted
way, to respond to demand.

P.S. I'm also a huge fan of SL, and look forward to trying out whatever
similar world emerges using SpatialOS.

------
buzzybee
I've seen this kind of middleware come through several times. It's a hard sell
because MMOs are already big productions and this stuff, while technically
very challenging, only captures a single bullet point feature: "world is
seamless and persistent." And from the player POV, that is cool, but not I'll
Buy That cool, especially when scale ends up creating all sorts of other
design problems(more players and bigger worlds = more potential for chaos,
harder UX).

------
nodivbyzero
It looks like they use GoLang on the server.

~~~
mwitkow
Our Platform team uses Golang extensively. We use it together with gRPC to
form our microservice stack that orchestrates the SpatialOS simulations. The
TL of our Platform API team did a cool talk at the Go London User Group meetup
in October: [https://skillsmatter.com/skillscasts/9259-a-debuggable-
base-...](https://skillsmatter.com/skillscasts/9259-a-debuggable-base-server-
by-yifan-zhao-improbable)

~~~
stcredzero
Very interesting. I have a multiplayer game I'm working on.

    
    
        http://www.emergencevector.com
    

The servers are written in Golang. There is a "Master Control Process" that
acts as a coordinator, and a farm of worker processes that can report on their
population/load and host star-system instances. (Basically, a game loop on an
R-Tree.) The coordinator just uses the best available information and assigns
clients to hosts. Clients join hosts in an idempotent fashion, so it doesn't
make any difference if an instance currently exists or not. Each process is
structured somewhat like a Erlang actor.

I might try to do a port of my game on your servers, just out of curiosity.

~~~
mwitkow
That's interesting, we have a slightly related architecture. SpatialOS
Runtime, itself distributed across many machines, acts as your "Master Control
Process". It orchestrates Workers, both managed (running in the cloud), and
external (remotely connected game clients), to perform the co-simulation of
the world.

The key feature of the stack is that you can integrate various Workers to act
together, leveraging existing game engines in multiple languages. Checkout
[https://spatialos.improbable.io/docs/reference/9.0-alpha/wor...](https://spatialos.improbable.io/docs/reference/9.0-alpha/workers/introduction)
if you're interested in trying to port your stuff onto our stack.

~~~
stcredzero
How long before you let people write workers in Golang?

My equivalent to SpatialOS is not only my MCP (Tron reference, of course) but
also a bit in each worker process. What you call Workers are what I call
Instances. We both have pretty much the same notion of Entity. However, I
don't have External Workers. Instead, I have a "Pilot" object for every "Ship"
(Ship == Entity) and one kind of Pilot represents the game Client. The
difference makes sense, as you have a notion of Workers sharing data, so your
Clients are external to an Entity.

~~~
ggambetta
We have a C Worker API (and in fact the C++, C# and Java worker APIs are built
on top of it), so you can write workers in any language that can call C
functions. It is a non-trivial amount of work, though -- see
[https://spatialos.improbable.io/docs/reference/9.0-alpha/wor...](https://spatialos.improbable.io/docs/reference/9.0-alpha/workers/cpp/api)
to see what one of these APIs look like.

------
TravisCooper
Trying to run `spatial update` and keep getting the below msg. Not sure if
servers are having issues or what.

At 2016-12-13 18:12:58 UTC failed executing command: C:\spatialos\spatial.exe
update

Internal : Failed retrieving spatial binary.

Internal : could not obtain auth token: code = Unauthenticated desc = failed
obtaining new refresh token: code = Unknown desc = failed obtaining AuthCode:
code = DeadlineExceeded desc = timed out waiting for user

~~~
unlikely-leo
Hi, thanks for doing the tutorial! It looks like you may need to run `spatial
init` and then try `spatial update` again?

If this doesn't work, please ask your question on
[https://support.improbable.io/](https://support.improbable.io/) \-- there are
many more people there to provide support and share ideas.

~~~
TravisCooper
Thanks for the help! I tried `spatial init` but no dice.

I asked the question on the forum you linked.

[https://support.improbable.io/t/spatial-update-does-not-
work...](https://support.improbable.io/t/spatial-update-does-not-work-getting-
auth-errors/895)

Thanks again!

------
forrestthewoods
The snakiest of snake oils.

~~~
andrewguenther
As someone who knows nothing about Improbable and SpatialOS, would you mind
elaborating?

