Migrating an open-world from Unity to UE

Migrating an open-world from Unity to UE

Hello!

I know about UE since the older UDK version. Things got started to look interesting for me since the massive improvements for open-world scenes that were presented with the ‘Kite’ demo.

At the moment I am working on an open-world game in Unity engine. However it seems that if you are aiming for PBR and open-world, Unity is not the perfect engine. One of the disadvantages is that it’s not very well optimized. That being just one in the dozens of disadvantages, I will not name the others, the list is too long.

So, in Unity I have managed to radically improve the existing FPS by implementing my own foliage/grass solution. And i’ve done a lot of stress testing with my whole game. My performance scene contains the whole terrain (a 2x2km island) full of speedtree trees and grass, very sparse big ground detail like cliffs and big rocks, volumetric clouds, a water system, realtime lighting + the posprocs, and that’s about it. In the most dense places it runs at around 40FPS on a GTX 970 and at around 20FPS on a GTX750TI. The average is 50FPS on GTX970 and 30FPS on GTX750TI.

Below are two images to better illustrate what I’ve been testing around in Unity:

The problem is that it doesn’t look incredible and the performance is not incredible either. I can’t have water reflections, can’t have more than 20m of grass and those are limitations that are kind of bad. I also optimized everything quite drastically (violent lods, low-poly trees, 2 texture materials), so I don’t really know what more optimizations I can do in Unity. I don’t have access to the source code either, to get deeper into the problems. + I also need interiors/exteriors, animals roaming around and a lot of detail props. It is clear that if I add those the FPS will drop under our minimum 30FPS on a GTX750TI.

Having that said, I have 2 options:

  1. Continue in unity and drastically reduce visual quality even more, which is not desirable at all
  2. Start exploring alternatives, like UE4

As a reference I take ‘Ethan Carter’ that works at high details on a GTX750TI with a lot of vegetation, trees and everything else the game contains, running in UE4. During the game’s development I know that UE did not had a decent vegetation solution, but it has it now. Thinking at that we also require our game to look at least as good as ‘Ethan’ and run at 30FPS on an GTX750TI and on PS4. I’ve notived that the last versions of UE4 (4.15) work kinda bad on the pc’s I’ve tested on. 4.13 worked a lot better.

So my questions are:

  1. Would you recommend me to move to UE4 with my open-world game?
  2. Can I obtain what I have in Unity (the screenshots) with the stock UE4 version (without any code enhancements) at better performance?
  3. Can I build an open-world game in UE4 with the stock version? Could you give me any released examples of games doing that? Fully open-world, big map (at least 2x2km which is not big at all) with buildings with interiors, (without a loading screen) lots of vegetation, debris? Personally I know ARK but there’s a huge 100 men team there so I think it doesn’t count for me :slight_smile:
  4. If I can’t (question 2, 3), would 1 year and 1 good programmer be enough to get everything working at my quality requirements?
  5. Do I have a good working solution for realtime GI (like LPV’s) in UE? I had Enlighten in Unity. I can’t use Lightmass with baked light since we need day/night cycle.
  6. Are code plugins easy to write for UE? I can’t port the volumetric clouds from Unity with the Unreal’s visual material editor.
  7. Can my artist jump right in to creating content if we move here? Or will he throw around paper planes while I attempt to get the FPS running at a decent level?

Answering any of my questions can help :). Even though I’ve started experimenting in UE for some time (which I find quite easy to use) I thought to also ask the opinion of more experienced users. From my shallow experiments UE4 worked quite well, but now with 4.15 it seems that performance dropped quite drastically. I don’t really know how to tackle that. Was it broken or I should just wait for another version (like 4.16 or 4.17)? Since good performance is a must if we are to target consoles or video cards like GTX750TI. I know that Epic is not actively developing any open world games and that there aren’t many open-worlders built in UE at the current time. It’s more designed with level-based FPS games it would seem, so that’s why I’ve came here asking for advice :slight_smile:

Just if anyone has questions about my skills they are at:

  • Advanced c++ knowledge.
  • Advanced opengl/dx/shader knowledge. I could implement my own ‘merge instancing’ or some other solution if required.
  1. Code plugins are pretty straightforward, but their main purpose is to make your code easily portable between projects. What are you hoping to accomplish?

As for performance, I think you should experiment yourself. I would take a look at level streaming for making really big levels.

For code plugins, probably I’d port the volumetric clouds. And the level should not be very huge, only 2x2km. I’m sure level streaming will be absolutely necessary for building indoor objects.

If you ask about the game, it’s only a 2x2km map. I’ll require it to be full of foliage, ground details, animals and some buildings. Think ethan carter but ‘more’ open-world and with dynamic day/night cycle.

  1. I would expect you to be able to achieve notably better performance with dense vegetation than you’ve managed with Unity, but as with everything there may be some tricks/knowledge required to get the best out of it.

  2. Realtime GI not a strength of UE4, I am more likely to see posts featuring people moaning about it than anything positive. LPV’s dont get much love and nvidia’s VXGI requires you to build the engine from source and, apparently, is quite heavy in terms of performance.

  3. What volumetric clouds are you using in Unity at the moment?

  4. Yes, although as with anything they should be prepared for a learning curve and the possibility of having to redo some stuff once more knowledge about performance & visual results is gained.

  1. I understand, thanks for the note. But as with everything, there’s always a catch :slight_smile:

  2. I see. But would there be any workaround for getting good-looking dynamic day/night cycle? Except buying Enlighten. And yes, if VXGI is a performance hog I can’t really use it. Did anyone managed to get some open-world day/night looking good in UE solving this issue? I know ‘ARK’ but maybe they have some internal solution there? I heard about the heightfield GI too but is it supported any more? Or was it optimized?

  3. For the volumetric clouds we use: GitHub - kode80/kode80CloudsUnity3D: A realtime volumetric cloud rendering solution for Unity3D. maybe preparing to porting them but I wouldn’t bother with them too much at the moment. I think that the lighting problem is bigger at the moment

  4. That would not be a problem.

I don’t have enough knowledge to answer all the questions, so I’ll stick to what I can tell you for sure:

1 - Yes! I found things in UE to be far easier to prototype than in Unity. Also, this engine desperately needs a clean, well-made demo for the open-world genre.

3 - Don’t get discouraged by ARK, Conan Exiles or PlayerUnknown. All 3 have issues which only a complete UE4 beginner would cause. One particular example is the improper handling of replication (out of sync objects and/or server overloads; see drops in PUBG and trilobytes in ARK; those are easily avoidable if you watch the 1h replication stream or follow the numerous tutorials available). Another example is that PUBG handles hit detection client-side which leads to many people saying the game is a cheaters’ paradise (and it is; except that’s not caused by UE, it’s caused by someone’s stupid implementation; unplug the internet cable, shoot someone who appears to be lagging or standing still, reconnect, get credit; they never know what hit them). ARK’s team is mostly focused on art (which is, indeed, awesome) and promoting the game. PUBG claims they worked with 30-40 people for 1 year (seriously…?). So, again, ignore those horrible examples, don’t compromise and you’ll be fine.

4 - If that programmer’s job is only going to be proper networking, provided they work full-time, I’d say definitely yes.

6 - Yes. There’s only 1 simple, but major thing that tutorials almost never point out and will save you a lot of trouble if you know it early on: the word “plugin” defines a structure/entity which may contain .uasset’s and modules, but it’s incorrect to say they directly contain code (modules contain code only, plugins contain modules and/or .uasset’s). A plugin is basically a list which tells the engine to load one or more modules and (optionally) some .uasset’s. The actual code is contained inside each module and each module has an interface which contains hooks for when the module is loaded/unloaded. The .uasset files are located in a “Content” folder located directly inside your plugin and thus it is technically correct to say a plugin contains .uasset’s.

  1. Thanks a lot for the encouragement. Prototyping in Unity (if you require more than a terrain with 20 boulders) is horrible.
  2. Ok - will keep in mind.
  3. Fortunately we don’t need any networking for our open game, it’s a stand-alone. We can dispatch the programmer somewhere more important like gameplay/graphics.
  4. Thanks for pointing those outs, a bit newbie there so they really helped :slight_smile: