• Advertisement

Best Engine for Massive Terrains

Recommended Posts

Hi all,

I've been in the process of creating a RTS game in the style of Supreme Commander (But with much bigger levels) for a while now, and whilst I've made good progress writing my own engine from scratch it has become clear that the scale of the project is way too big for one person to do in their spare time (Especially as I work fairly long hours in my day job and I like to spend as much time with my family as possible.).

So, my plan B is to look at possibly using one of the existing Game Engines out there such as the Unreal Engine, Unity etc.

I've done a couple of Udemy tutorials for Unreal, which have been quite useful, however I see that there appears to be a lot more tutorials and information out there for Unity, so I was wondering if I've backed the wrong horse.

The key feature that I need from the engine is the ability to show massive terrains, and by massive I'm not talking 5km x 5km, I'm talking more like 1000+km x 1000+km square! And unlike an FPS type game that can load in terrain segments in tiles based on your current location I need the ability to zoom the camera right out so that I can see the entire 1000km x 1000km map all at once (Although the level of detail can obviously be much lower as you zoom out). If you've played Supreme Commander then you'll be familiar with this style of "strategic zoom".

I already have this working in my own game engine by generating the terrain in realtime on the GPU using multiple octaves of Perlin noise, which has the added bonus of allowing me to smoothly tessellate the level of detail as I zoom in and out (In my engine the terrain is 4000km x 4000km). 

So the question is, what sort of terrain capabilities do the big game engines support? I'm guessing none will support realtime generated terrains?

If not then whats the maximum size pre-generated terrains that they can support? And what LOD capabilities do they have for when you zoom in/out?

Thanks in advance
Ben

P.S. I've tried doing some of my own research but all I seem to find is old forum threads that say things like "there are expected to be big improvements coming to the terrain capabilities in Unreal 4.8", which is now old and I've not seen any confirmation or details about if big improvements did indeed happen.

 

Share this post


Link to post
Share on other sites
Advertisement

Generally handling anything specific (like massive terrain, which will most likely require also other specific features for the game), might be one of the things that call for custom engine.

Not for game, but when creating simulator software I had similar problem (requirement of massive terrain scale with quite large detail) - currently it is completely custom software, as no existing engine gave us the capability for such scale and precision we required. Also, as simulators tend to be custom code (in major part) - an engine was not really a prerequisite.

 

As for existing game engines (that are publicly available), I can speak for Unity - where while terrain system is quite capable, I tend to hit its limitations way too often (in the end, the actual terrain does look ugly), see this (which is probably most RTS-close and quite recent, which I've used in real game):

70ea.png

While it was for my Ludum Dare entry (programmer's art credits go to me), where time management is more critical than anything - hence a lot of noise and patterns on terrain. Nevertheless it can clearly be seen that the terrain mask does not fit the scene in terms of resolution and quality. The mask resolution is way too small (yet increasing it was not really possible).

 

So far the best solution that worked for me was clip mapping and virtual texture approach - in my own engine few years back. I will probably choose the same way for updated version of that engine, and at least try that out.

 

Unity also has some plugins enabling virtual texturing, but be extremely careful - with my own engine I've found out that virtual textures tend to be quite pain to create & edit. They can be generated though (or to be precise - they have to be generated to some extent), which might play into your situation. I can't say for UE, but I believe some virtual texturing (through plug-in?) might also be available.

Share this post


Link to post
Share on other sites

Unity is a very-very bad engine for large world games, out of the box. There is stuff you can buy for it to improve it but in the end you will be reworking a lot of the engine.

Unity:

Spoiler

 

- Unity's terrain tools are out of date. It has nothing that helps setup your scene.

- The coordinates get shaky. It gets to the point where the LOD's of your objects jump around as they are loaded in. It appears to be a problem with there math library. This is a real deal breaker but can be avoided by making your own coordinate projector.

- It's hard to make levels in Unity because without exporters you struggle to get an effective workflow. 

- It has none of the modern terrain materials and still uses the same terrain shaders as old PlayStation 2 games.

- The materials suck in general. No tools to make fine tweaks so you need a new shader just to make small changes.

- No hair or subsurface shaders.

- The instancing improved a bit with 2018 , still not better than batching. Batching works better for small unique terrains.

- Even if the animation system improved it is still very ineffective for open world games. Animation re-targeting is still limited.

- Because it's a batch engine you can have only 64 000 vertices per terrain foliage. (Also for auto animation batching, UI) Unless you know how to assign more vertices to the auto batch tool you get very little foliage.

- Grass and trees don't align to the terrain if you use the Unity tools.

- Reflections are broken. This means you are dependent on light to tint the terrain.

- Shadow baking causes artifacts in the normal map. Not a problem with real-time light.

- Limited amounts of real time lights. Changing the lights for day and night effects is costly.

- Doesn't cull lights.

- No default tessellation options and difficult shader system. Post processing is annoying.

- No proper height map editor. You will have to do it outside the engine. The tools it has is integrated is difficult to see the scale your working on.

- The way the terrain manages it'self is slow.

- The compound collisions have problems, to fix it you need to make very inaccurate collisions. Physics are messy with compound unless all collisions are on the same axis.

- Ray casting actually fails at times, could be because of the coordinate problem.

- Difficult to get your object into the engine. Scaling problems, Axis problems, bones must be connected, the old T-pose thing.

- Out of date UI tools.

- NavMesh should not be used with large scenes. This makes Unity's AI tools limited a bit.

- Very bad memory management with level streaming, as a work around keep player in it's own scene.

- Slow editor.

 

+ Prefabs with scripts are a very nice and light way to manage a single objects. Just don't nest too many.

+ Easy to use level streaming.

+ Unity services is actually affordable and good. Important if you want multiplayer.

+ Unity store has what you need.

In short if you want to use Unity for large terrains you will be stuck with millions of problems. Lucky it has a place where you can by all these microtransactions  tools to round off the engine.

Or you could spend years grinding learning how to make these tools yourself.

Unreal:

Spoiler

 

- Level streaming is hard to get use to. Level streaming makes large worlds easier. In fact anything is a bit harder to use in Unreal.

- Large and bloated file sizes.

- Will need Visual Studio and C++ to make custom terrain tools; if you want them.

- High resolution(8K) Height maps can freeze and kill the engine while editing. Auto save is a must.

- You must inform Unreal when you publish a game with there engine, you don't have to wait for a response but you must inform them.

+ Has every thing I gave a "-" to Unity for.

+ Although it is hard to use it builds momentum, the more you do the easier things get.

+ Good UI tools. Amazing particle tools. Fantastic terrain tools, Brilliant Material tools

+ Hierarchical Instancing and material instancing, Besides providing great performance it allows for procedural materials and meshes.

+ Physics is amazing. You can use it for particles, cloth, and break things to pieces and have performance over for ragdolls.

+ Blueprints: Both the visual coder and the object system. It takes the place of Unity prefabs and does it better.

+ NavMesh works with large terrains.

+ Has materials just for terrains, allows all the fancy tricks.

 

Unreal was build for large terrains. Everything you need is there, you don't have to buy anything extra.

 

A simple comparison can be done, using google image search: "Unity open world" and in a new window "Unreal open world".

This will allow you to see the average open-world of Unity VS Unreal.

 

Making large terrains isn't easy. A environment artist trains for around 3 years to only work on large terrains on a graphics level. If your doing everything it's going to be a pain regardless of your engine.

Edited by Scouting Ninja

Share this post


Link to post
Share on other sites

Thanks both for your replies,

So it looks like I'll continue to explore the limits of Unreal Engine and see if it can deliver what I need or whether I need to revert back to plan A of creating my own engine.

Thanks
Ben

Share this post


Link to post
Share on other sites
On 2/2/2018 at 2:47 PM, BenS1 said:

In my engine the terrain is 4000km x 4000km

That's 16 million km^2, or about 2x the total land area of the USA. That's... a really big playing field.

I'm not aware of any off-the-shelf solution to render flat terrains of that size. There are a variety of specialised vendors of spherical planetary terrains of that magnitude, for example Outerra.

Share this post


Link to post
Share on other sites
7 hours ago, swiftcoder said:

That's 16 million km^2, or about 2x the total land area of the USA. That's... a really big playing field.

I'm not aware of any off-the-shelf solution to render flat terrains of that size. There are a variety of specialised vendors of spherical planetary terrains of that magnitude, for example Outerra.

Indeed, it's meant to be kind of small planet size.

In my engine the terrain is generated in realtime on the GPU so in theory the terrain could be any size and it doesn't have any impact on performance. In fact it'd probably be quite easy to make it infinite in size. The only complications would be around float precision issues, but these can be overcome.

I've looked at Outerra a few years ago. It looks very impressive, but I'm not sure how actively it's being worked on. The website looks exactly the same as when I last looked a few years ago and it still says everything is in Alpha. As far as I can see there's no option to download or buy the engine for your own use.

Do you know of any other specialised planetary engines?

Thanks
Ben

Share this post


Link to post
Share on other sites
10 hours ago, BenS1 said:

Do you know of any other specialised planetary engines?

They tend to be pretty one-off and hand built. In terms of things you can license off-the-shelf, VoxelFarm might still render entire planets, but that's not entirely clear from their recent materials.

After that, Ysaneya has a pretty advanced one, that's currently being in use in their multiplayer space shooter. John Whigham hasn't published much the last couple of years, but his looked very solidSean O'Neil has gone dark for a while now, but he had various implementations floating around. I put mine on ice a few years back (lack of time, and/or need for the thing)...

Share this post


Link to post
Share on other sites

Thanks for info Swiftcoder

It seems like there are a few engines around but they seem to be mostly hobbyist projects that eventually run out of stream, just like my original attempt. I was hoping that there would be a mature major commercial game engine (Including editors and tools etc) that supported massive terrains.

I'll see how far I can get with the Unreal Engine. 

Thanks again
Ben

Share this post


Link to post
Share on other sites
4 hours ago, BenS1 said:

I was hoping that there would be a mature major commercial game engine (Including editors and tools etc) that supported massive terrains.

VoxelFarm and Outerra are the only licensable commercial products under active development I know of in this space.

Share this post


Link to post
Share on other sites

Unreal 4 is the best right now for large terrain.  As part of Heroes & Legends I am developing a plugin and procedural terrain system compatible with Geographical Information Systems using a 2D Vector Database that also enables producing 2D Maps with detailed information and allowing selection and loading of a specific location.  The level streaming is very good.  Right now, if you want something for terrain, Unreal 4 is by far the most mature right now in the way of meeting every need of game development including large world terrains.

Just follow Heroes and Legends project and when "World Max" is out on the market, pick up a copy from Unreal 4 market and use it for your world.

Edited by i3di

Share this post


Link to post
Share on other sites

Thanks i3di, that sounds very interesting. However I think my requirements are little different to most. Most games that require large terrains only show a relatively small amount of the terrain at once, so they can load in the current and neighbouring terrain chunks and that's all fine, but in my case I need the ability to zoom completely out so that I can see the entire terrain at once.

Does your World Max assume that you will only be viewing a small piece of your terrain at once, or can it use LOD to show more of the terrain (At lower levels of detail) as you zoom out?

Thanks
Ben

Share this post


Link to post
Share on other sites
13 hours ago, BenS1 said:

but in my case I need the ability to zoom completely out so that I can see the entire terrain at once.

Some games use a map for this. So as you start to zoom out LODs will replace the models and once your reach the point where there is no LODs you lerp a image of a map over the scene.

The map will then have little indicators of where things are.

 

Unreal does LOD it's terrain like this but there are limits to what can be done and the terrain looses detail quickly.

Share this post


Link to post
Share on other sites

Thanks again @Scouting Ninja

Yeah I was thinking about having a "Strategic Map" so that you can zoom out so far using the real terrain and then blend out to an overall map. The trick is trying to get this blend to work smoothly and seemlessly.

Supreme Commanders strategic zoom looks great, whereas the strategic zoom in Ashes of the Singularity Escalation looks ok-ish but definitely not as good.

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Advertisement
  • Advertisement
  • Popular Tags

  • Advertisement
  • Popular Now

  • Similar Content

    • By RJSkywalker
      Hello, I'm trying to design a maze using a mix of procedural and manual generation. I have the maze already generated and would like to place other objects in the maze. The issue is the maze object is created on BeginPlay and so I'm unable to view it in the Editor itself while dragging the object to the Outliner. Any suggestions?
      I'm thinking of doing something in the Construction Script or the object Constructor but not not sure if that would be the way to go.
      I'm still getting familiar with the Engine code base and only have a little experience in Maya or Blender since I'm a programmer.
    • By Manuel Berger
      Hello fellow devs!
      Once again I started working on an 2D adventure game and right now I'm doing the character-movement/animation. I'm not a big math guy and I was happy about my solution, but soon I realized that it's flawed.
      My player has 5 walking-animations, mirrored for the left side: up, upright, right, downright, down. With the atan2 function I get the angle between player and destination. To get an index from 0 to 4, I divide PI by 5 and see how many times it goes into the player-destination angle.

      In Pseudo-Code:
      angle = atan2(destination.x - player.x, destination.y - player.y) //swapped y and x to get mirrored angle around the y axis
      index = (int) (angle / (PI / 5));
      PlayAnimation(index); //0 = up, 1 = up_right, 2 = right, 3 = down_right, 4 = down

      Besides the fact that when angle is equal to PI it produces an index of 5, this works like a charm. Or at least I thought so at first. When I tested it, I realized that the up and down animation is playing more often than the others, which is pretty logical, since they have double the angle.

      What I'm trying to achieve is something like this, but with equal angles, so that up and down has the same range as all other directions.

      I can't get my head around it. Any suggestions? Is the whole approach doomed?

      Thank you in advance for any input!
       
    • By devbyskc
      Hi Everyone,
      Like most here, I'm a newbie but have been dabbling with game development for a few years. I am currently working full-time overseas and learning the craft in my spare time. It's been a long but highly rewarding adventure. Much of my time has been spent working through tutorials. In all of them, as well as my own attempts at development, I used the audio files supplied by the tutorial author, or obtained from one of the numerous sites online. I am working solo, and will be for a while, so I don't want to get too wrapped up with any one skill set. Regarding audio, the files I've found and used are good for what I was doing at the time. However I would now like to try my hand at customizing the audio more. My game engine of choice is Unity and it has an audio mixer built in that I have experimented with following their tutorials. I have obtained a great book called Game Audio Development with Unity 5.x that I am working through. Half way through the book it introduces using FMOD to supplement the Unity Audio Mixer. Later in the book, the author introduces Reaper (a very popular DAW) as an external program to compose and mix music to be integrated with Unity. I did some research on DAWs and quickly became overwhelmed. Much of what I found was geared toward professional sound engineers and sound designers. I am in no way trying or even thinking about getting to that level. All I want to be able to do is take a music file, and tweak it some to get the sound I want for my game. I've played with Audacity as well, but it didn't seem to fit the bill. So that is why I am looking at a better quality DAW. Since being solo, I am also under a budget contraint. So of all the DAW software out there, I am considering Reaper or Presonus Studio One due to their pricing. My question is, is investing the time to learn about using a DAW to tweak a sound file worth it? Are there any solo developers currently using a DAW as part of their overall workflow? If so, which one? I've also come across Fabric which is a Unity plug-in that enhances the built-in audio mixer. Would that be a better alternative?
      I know this is long, and maybe I haven't communicated well in trying to be brief. But any advice from the gurus/vets would be greatly appreciated. I've leaned so much and had a lot of fun in the process. BTW, I am also a senior citizen (I cut my programming teeth back using punch cards and Structured Basic when it first came out). If anyone needs more clarification of what I am trying to accomplish please let me know.  Thanks in advance for any assistance/advice.
    • By Yosef BenSadon
      Hi , I was considering this start up http://adshir.com/, for investment and i would like a little bit of feedback on what the developers community think about the technology.
      So far what they have is a demo that runs in real time on a Tablet at over 60FPS, it runs locally on the  integrated GPU of the i7 . They have a 20 000 triangles  dinosaur that looks impressive,  better than anything i saw on a mobile device, with reflections and shadows looking very close to what they would look in the real world. They achieved this thanks to a  new algorithm of a rendering technique called Path tracing/Ray tracing, that  is very demanding and so far it is done mostly for static images.
      From what i checked around there is no real option for real time ray tracing (60 FPS on consumer devices). There was imagination technologies that were supposed to release a chip that supports real time ray tracing, but i did not found they had a product in the market or even if the technology is finished as their last demo  i found was with a PC.  The other one is OTOY with their brigade engine that is still not released and if i understand well is more a cloud solution than in hardware solution .
      Would there  be a sizable  interest in the developers community in having such a product as a plug-in for existing game engines?  How important  is Ray tracing to the  future of high end real time graphics?
    • By bryandalo
      Good day,

      I just wanted to share our casual game that is available for android.

      Description: Fight your way from the ravenous plant monster for survival through flips. The rules are simple, drag and release your phone screen. Improve your skills and show it to your friends with the games quirky ranks. Select an array of characters using the orb you acquire throughout the game.

      Download: https://play.google.com/store/apps/details?id=com.HellmodeGames.FlipEscape&hl=en
       
      Trailer: 
       
  • Advertisement