Looking advices for create a large environment for mmorpg sandbox games

Hi,

I’m working / prototyping a mmorpg and i can’t find a proper modular level design pipeline (workflow) for create a large, scalable and performance environment.

Like Black desert online :

Unity terrain tool? other external program?

Any advice?

Regards.-

There are technical constraints that don’t make Unity the best game engine to do this scale of world.

It does not have an in built large world system, that will stream in the world around the player smoothly. It also does not have an origin shifting system to keep the world and player within it’s 10k precision bubble.

You can work around these issues, however there are other engines that support out of the box large worlds that might be a better fit for your needs.

This depends on your skill set, if you are or have on your team a good programmer these problems can be worked around but I suspect you will see performance issues/problems as you force the engine to do a lot of work moving the world from a single thread (the Unity api is not multi-threaded).

On the plus side Unity have demoed a multi-threaded transform system and the PhysX engine Unity uses does support origin shifting. So hopefully Unity will add large world support in the near future…

Or you could limit your world to 10km radius ‘floating’ islands?

3 Likes

I am the developer, modeler, animator, UX, guionist…

In my mind i’m thinking in a world modular grid where the terrain (environment) is shown when the player is in range, i don’t know what program is better for this job (3d max, maya, houdini, etc), For my skills i prefer 3D Max but i can’t find a better options.

If I were working on something like this, I would probably end up experimenting and writing a lot of custom scripts.

Basically… terrain is a base terrain mesh and bunch of obejcts on top of it,

When you export an fbx from somewhere you can have linked duplicates of the same object, and they resolve into the same mesh. meaning you could theretically just model the whole world in an external program and then import it. In practice it’ll probably end up being quite horrible in terms of performance.

So you could try tackling unity terrain tools (probably will end up looking horrible), or writing your own scripts using object instancing.

Regardless of the approach chosen it is worth keeping in mind that trying to make an MMO is generally discouraged.

For a start I’d recommend to generate a rough environment you’d like to see in the game and see how it performs in unity. Then start working on eleminating bottlenecks and slow portions of it.

For articles the only one I’m aware of with any real substance to it is the talk transcript for Skyrim’s modular level design.

http://blog.joelburgess.com/2013/04/skyrims-modular-level-design-gdc-2013.html

2 Likes

That’s a very good stuff, but it only covers interiors and buildings. Not landscapes.

–edit–
I think someone mentioned horizon log (or whatever it was called) related papers before. Those might be worth checking out. Basically, at its root a landscape is a particle system that emits grass, rocks, trees, etc, and appearance of those is covered by some sort of coverage maps that define biomes/etc. That’s the direction I’d be looking for, because modeling forests by hand is not much fun.

You might find TerrainComposer a valuable tool.

Yes im investigating and mailing with the owner of Terrain composer (have multi terrain tile and streaming), Gaia (have multi terrain tile and streaming but in the next version Gaia 2) and i can’t find in to the features of World Creator the capacity for create multi terrain tile and streaming.

Before you spend lots on terrain engine assets for Unity, check out Unreals large terrain support it’s free and out of the box.

2 Likes

This sort of giant open world is not a strength of Unity.

That doesn’t mean it couldn’t be done, however if you are a single person operation and are not invested enough in Unity yet to have some ideas on where to start doing this, then I would suggest a different engine would be a better choice for this project.

If you were certain about using Unity, there are various paid terrain generation and streaming assets on the asset store. On top of them, I would be creating different villages/settlements/forts in the world as different sub-scenes and load/unloading them as necessary. With lots of detail in your world you will however run into hitches as different things load in.

Yes, the idea is find a terrain system with the capacity of multi terrain / streaming the parts , this can reduce the impact of low performance, showing any part if the player is in range, with this aproach i guess unity can handle any kind of large world maps (the showing part is a easy script but the challenge is find the proper framework for create this multi terrains).

Depending on platform that sort of constant loading and unloading could be quite disruptive to the experience. One of the weaknesses of Unity is typically poor performance when loading in new assets.

Could one not do it on a new thread? is that what is typically done? Does that even make any sense? I don’t know a whole lot about it.

The initial platform for my MMORPG is Windows, Unity are start to evolve in manage threads so i hope unity can generate or can i find / code approachs for get better results in load and unload objects (prefabs).

I’d also recommend Unreal as well for this type of project, I’ve assisted building an MMO in Unity 4.X and it was a bit of a nightmare…

From the basics of how frustrum culling is introduced w/ Unity terrain, navmesh is useless (you need a proper re-cast system really (check out A* on the asset store), Umbra is useless as you really need a proper dynamic system like HZB occlusion, Enlighten’s GI cache becomes so large at an acceptable quality that it again becomes somewhat useless, phsyics system doesn’t hold up well (performance wise) like it does in Unreal plus lacks things like simplex conversion. Mecanim is fine unless you want animation re-targeting, then again the usual way to do it is only use two skeletons for NPC’s / players which works fine with generic rigs.

Unity doesn’t handle en mass meshes very well, even with instancing and I’ve noticed excessive memory overhead from things like LOD. The editor does tend to crawl a lot and it becomes annoying.

If you want a POO (point of origin system) it’s relatively trivial to write some scripts that transform the world around you so you don’t hit physics issues but transform speed needs to be better. The last time I tried streaming it seems somewhat “poppy” as in you’ll notice sudden spikes if your tile segment is somewhat heavy. In all fairness I’ve seen this sort of behaviour in AAA games, personally I wouldn’t stand for it and Unreal doesn’t do it (unless you do something daft) so again there’s no reason to accept it. Of course it is up to you to balance out art budgets to minimize this sort of thing anyway…

Again you’ll find none of this in Unreal if you’re willing to accept the way it works, although there are limitations to the multi-player functionality you will need to look into. Integrating a third party networking solutions is far more difficult in Unreal, I don’t make MP games personally and the other MMO project had a dedicated networking specialist I just learnt a lot from him… Is it possible in Unity? Well of course it is, technically it’s possible in Notepad++ but it will be a lot of work and it really depends on your skill / budget and what level of quality you want…

If you want high quality I would seriously consider building your own framework on top of Unity with your own terrain system…

If you find Unreal hard to use you have literally zero chance of making an MMORPG…

4 Likes

Thanks for the recommendation, I understand the problems, i follow unity before unity 4 and nowadays I am aware of the bugs and the majority of the limitations but i don’t like the idea of leave unity.

I try to find solutions for don’t leave unity.

For whatever reason me neither, although after several attempts the only two solutions I’ve found is make your own terrain system or re-design your game… I’ve started splitting segments and turning it into a semi-openworld RPG which plays a lot nicer with Unity, it’s still a large game no doubt but it’s manageable at least…

Between Nvidia articles and DX terrain tutorials there should be enough to go on. If you find a better way I’m all ears…

I’m investigating World Creator (http://www.world-creator.com), sounds very promising and serious (but a little expensive).

If you feel that’s expensive wait till you need to pay for the necessary server hardware to drive an MMO. :wink:

5 Likes

Yes, I am aware of that. But if i can do a really great game, kickstarter or some sponsor (i have interested people but i need results xD) can help me with this (that is the idea).