Unreal Engine 4 and the Optimisation Nightmare

I have wanted to say this for a long time. Unreal Engine 4 as such, is a great engine, but I have to say that I have been deeply disappointed over the years.

When UE4 was released I cheered for the implementation and enhancement of creation and production tools such as materials, blueprint, library etc…then it became free-of-use, AND it coincided with VR…I really thought that it would finally be the time when enthusiasts, agencies, artists and creatives 3D would pick-up and there’s certainly a huge demand for it, in fact there’s a growing problem similar to the developer shortage.

And then came the time to actually use it with colleagues, artists and devs and I realise that it wasn’t the straight-forward intuitive update that I thought it was. But then I can forgive the professional-modeler/dev centred paradigm, I can forgive texturing work still being being so unintuitive despite materials, the unintuitive unscaled grid interface, or the coding IDE-like blueprint interface.

But once the still straight-forward importation, creation and production work done, the optimisation that follows is a nightmare. I can understand that some people use it for modelling and animation, but when the majority of users (and the engine) is supposed to be a real-time production tool for experiences, games, arts etc…it never made sense that you have to waste the same time if not more optimising what you created. The fact that you have to figure out for hours how to reduce the size of assets and package so you don’t have a 20go app for just an interactive scene, then you have to actually optimising from ground-up everything you did just for it to run on most PCs, and then even more complicated on VR, and then on mobile which is a nightmare, and I’m not talking about mobile VR or WebGL which is vastly unadapted or inefficient, even when using plugins like Simplygon that don’t work that well and you shouldn’t need in the first place…

Now as you’d guess from my lexicon I’m not a professional (I’ve been trying to get on Unreal since the first engine, but can’t learn everything about everything) although I do work with almost a hundred of people who use, and they all reported to me the same, main problem that is optimisation. So I’m posting this, because I feel this is really the missing piece for Unreal Engine not only to be a great engine, but to actually to be the first great engine usable by anyone like Photoshop, Words or Ableton which use to be complicated eventually came to be.

I am not sure if we are on the same page, I am quite new after all, but … wait, why is this tagged [Feature Request]? Well never mind.
I think that the Epic Team does a good job at optimizing the engine, after all, they are using it to build their own games (Paragaon?). Anyone who read the release notes on UE 4.11 should be aware that it introduced many optimizations fueled by their needs for Paragon. I haven’t tried it yet, but from what I can deduce from the release note, it seems to run quite fairly on an affordable system.

But I do not disagree with your implication that the lack of knowledge/know-how does make it cumbersome to build your own optimized game (but that goes without saying). You did not propose a solution for this, which is why I want to make a suggestion: I like streams such as these, which are informative and teach techniques and game-design approaches that are being used on high quality games. I can think of dozen ways to turn my ideas into algorithms, but I rarely feel like “this is the way it should be” or “this is good enough” since I do not have a decade of experience of trial and errors when it comes to building games. For this reason, a stream as the aforementioned one helps me out a lot to feel “save” when I decide for one realization of an idea. The UnrealDevelopmentKit is rich on “Making of …” tutorial series (which is good and I like it!!), but the streams that interest me the most are actually “… Techniques used in/for Paragon” or the ones explaining some key concepts used in Unreal Engine (such as this: Blueprint Communications | Live Training | Unreal Engine - YouTube).

My suggestion would be now:
Can we please see more streams aimed at:

  • teaching concepts of various techniques that can be used for high quality games (and are in that sense “valid”/“efficient”/“good” techniques)
  • briefing us on different approaches to various key or common game elements => one could choose a topic for a stream and then discuss different approaches on the basis of which needs are met best with a particular approach. “Needs” could be stuff such as good performance, good maintability, low disk storage consumption but also flexibility to extend the game elements by new features or minimizing the effort/cost when extending existing features by new content.

The second type of streams should not aim to demonstrate anything, they really should only aim to inform us in a general manner and help us with our decisions.

I also have a concrete suggestion (which I have already stated before in a twitch stream):
Many games include characters and most of the times, the player controls one and I think every game developer has to ask himself at one point: Do I want the player to be able to modify/adjust his character or not? If yes, to which degree should I allow it? Hence one starts to think about different approaches. One could be to only allow changing armor pieces (in this case, how should one go about creating the skeletal mesh and how should it be segmented? do i wear the armor on top of a body? or do I replace the body part with the armor piece’s mesh, which in turn has to provide the body part as well if it is still partly visible… Which approaches are more flexible and which approach produces the least overhead. For example, if I were to replace the body parts with armor pieces, I would need to create an armor piece for each type of body and body part, which is a lot! But if I were to wear it in top of the body, I would only need to create each armor. Maybe there are also tricks to make the armor piece fit to different body types (such as thin and fat) without having to design the armor piece for every case?). Another one could go even further and allow adjusting facial features (in this case, how do we approach that to begin with? How do we allow adjustments using sliders? How do we safe the face? And how will we incorporate it when we animate the face?). The last I can think of is do we allow the player to add unique features to face and/or armor, such as scars or moles or even wounds at specific places (in this case, how do we add that?) Also, how do we realize all this with some kind of reusability? Creating every possible combination does not only cost us a lot of disk storage, but creating all those assets is not only time consuming, but also stupid if we consider that many are alike…

And about AI: I am not sure if this was already dealt with (please provide guidance if it is), but while there are tutorial series about creating AIs for a particular purpose, there seems to be no stream to discussing various appliances of AIs. For example: which purpose can AIs serve in particular? I doubt that they are useful only to move NPCs around and to allow interaction with them. I do have other appliances in mind, but I would like to see what the staff thinks as well.

Thanks for your reply. This is flagged as “Feature Request” because ironically enough, there’s no “Optimisation” flag. I wasn’t talking about their game Paragon, but an optimisation plugin called Simplygon (https://www.simplygon.com/). Oddly enough you are right, they did include optimisation feature for LOD, multithreading, animation variable and garbage collection.

Yet this is still all user-imputed and a daunting inefficient task that is not accessible to most developers, small staff projects or recurrent client project production. And the idea here is that, Unreal only lets you create a raw unoptimised version of your game only to subsequently and regularly have to go-back and backtrack on everything you produced in order to fine-tune and optimise your project for all the different platforms, rather than allowing you to at least set the engine to be limited in rendering/baking/meshing according to your own hardware or the platform you are targeting, since platform exports never works afterwards.

The thing is that, what makes the development and creative paradigms go forward is the standardisation of tools and technics. The fact that each developers, even the Unreal staff, have to develop their own foliage or paralax optimisation technics tells you a lot about the “limitation” in usage and accessibility of Unreal. Again this is a great engine that does many things, but if people are going through the trouble of learning and using all the different technics, plugins or algos only to realise that it doesn’t work on most machine because you have to spend more than the production time in optimising it, save for big staffed team or +10 y.o veterans…then clearly there’s a problem.

A problems not just for the bigger crowds, creatives and agencies for whom the need for 3D creation is growing, but in fact every developers would benefit from an integrated, automated and stream-lined optimisation pipeline. For example the Simplygon plugin I was mentioning allows you to automatically reduced the object or collection mesh geometry or create HLOD datas to be used on different devices. It doesn’t work that great but the idea is there and is amazing.

  1. You are talking about game learning. I don’t think it’s up to the Engine creator to do that, although they do provide some tutorials and (expensive) pre-made blueprints.
  2. Your idea is partially addressed by the implementation of “Instant animation variable access” and “Additive animation 'baking”. If it is what I think it is, you should look it.
  3. AI is too complicated for now, and is barely starting to be developed by researchers in Narrative and Interactive AI. But surely it’s the next big step of gaming, I just don’t think it’s a priority matter, as there are many UX, streamlining and optimisation feature to be implemented for it to be more accessible, usable, and then allow for more complexity.

I do think this is the biggest issue with the engine–it’s difficult for small developers to be able to figure out all of the things they can adjust to improve performance. There’s a lot of things in different areas of the editor that can be adjusted but there’s also things in config files that can be changed as well.