Hacker News new | ask | show | jobs
by thu2111 1851 days ago
That's not necessarily the hard part. I mean, it's hard, but it's not the hard part.

We know this because what this game is trying to do is done already a long time ago. It's a description of the original vision for Second Life. In fact Second Life was explicitly an attempt to create "the metaverse", with all user-generated content. Linden Labs used to write about the challenges they faced in making that vision real so we have a good idea of where the challenges really lie, or at least did 10-15 years ago.

First problem: physics. LL sharded their world, which was indeed infinite. The problem is each shard required its own dedicated high end server, which made "land" extremely expensive. Amazingly, people bought it anyway, LL developed a small but extremely rich customer base who were willing to literally rent high end (what would be today) cloud VMs just to have a very small space to call their own online. For a brief period it was also trendy for companies to open up spaces in Second Life.

The reason land was so expensive was that physics (collision detection and movement, mostly) required the server to constantly iterate every object within the zone and the calculations scaled with number of objects. Shutting down physics when nobody was there also wasn't possible because the metaverse concept implied allowing arbitrary scripting, and scripts frequently expected the world to keep running even if nobody was there. The answer in SL to "if a tree falls and nobody is around to hear it, does it make a sound" was a resounding yes.

The second big problem they faced was that user generated 3D content was extremely un-optimized. The biggest complaint users had about SL was always performance. Eventually they gave up promising to improve it and came clean with the userbase: SL was slow and always would be because users kept making slow content. In particular SL was set mostly outdoors, and even when indoors, people loved doing things like creating semi-transparent windows. The ability for any object to change at any moment (users created content in-game) also implied they couldn't use all the "baking" techniques professional games use to optimize rendering. So the rendering algorithms had to be very primitive, and there was lots of overdraw, so SL really chugged even when drawing scenes that looked very basic compared to what high end games could do. And of course hobbyist metaverse users are not pro grade 3D artists so they tended to make a lot of ugly stuff anyway.

So syncing player data was certainly a sub-challenge, but compared to the difficulties posed by cost effective sharded physics and totally un-optimizable 3D scenes, it wasn't that big a deal.

1 comments

There are tons of examples of physics engines running on the GPU. Contact resolution (particularly between simple shapes) is an embarassingly parallel problem. I don't think it would be impossible to handle millions of collisions per frame on a modern GPU, maybe even CPU. Also, what counted as a high-end server a decade ago probably is much more affordable with today's technology. You can also probably design a scripting system/set of game rules which allow unobserved NPCs/objects to sleep when no player is around them.

User content can probably be limited as well so that people don't upload overly complex/poorly performing 3d assets.

I'm not saying that this isn't a tall order, but I think it's far more manageable by a sufficiently determined and talented team than it was decades ago.

Sure, technology makes some things easier with time. But the needs for content to be optimized has not really gone away, and the issue was not necessarily overly complex 3D assets but that the very structure of what people wanted to build was difficult to optimize for. Many AAA games are set in indoor areas with no windows, because this limits how much you have to draw. In second life, almost everywhere the camera could see long distances either because you are outside or because you're inside in a room with windows. And that doesn't seem to have a really easy technological solution, although maybe Unreal's new nanite can do something about it by avoiding the need for custom LOD meshes.