Unreal vs Unity | Comparison of the most popular game engines
There are a lot of general and specifically focused software products for game and applications development, however after a deeper research you will end up with a pair of the most advanced - the game engine Unity and Unreal. How do they differ, what are they suitable for and is the choice of one or the other essential for effective development and great looking results? I will try to answer this in this article.
The article is based on my experience gained in developing VR applications. I develop general-type VR applications with an emphasis on efficiency - achieving maximum visual quality and realistic physics with the lowest possible demands on device performance and development time. This is exactly where the appropriate engine choice and realted tools play a key role.
First of all, both mentioned game engines are high quality, suitable for the development of almost any game (including AAA games) and applications at a professional level. If you are a regular developer, not a perfectionist, you will not make a mistake by choosing none of them. However, the development time and the resulting visual quality may differ depending on the selected game engine, see the article.
History & present
In order to better understand the current state, features and way of working with game engines, it is necessary to put them into a historical context - for what purpose and for what audience they were founded and originally developed.
Unreal engine is being developed by Epic games. It has begun to develop in 1995, in order to create the FPS game Unreal that was released 3 years later. Alreadz during the development of its first version (in 1996), it was licensed by the first game studios for the development of other games. It was written and still is in C++ language. The first version of the game engine was basically a one-man product - 90% of all code was written by Tim Sweeney (Epic Games founder).
Historically, there weren't many more gaming devices than computers at the time - thus Unreal game engine was designed to develop games for computers. At that time, the development of games was the prerogative of established studios with high budgets - from here the price of licenses was derived. The drastic change in pricing and other changes aimed at making Unreal Engine wide accessible for game developers occured until with the release of Unreal Engine 4 in 2015. The reason for the change was the competition - the fastly growing community and ecosystem around Unity game engine.
Unity engine is being developed by Unity Technologies. The first version was released in 2005 to "democratize" game development by making it accessible to more developers. The original focus was on Mac OS X, followed shortly by support for Windows and the web browser. In 2008, with the establishment of the App Store, there was immediatelyl added support for Iphone and in 2010 also for Android. Along with support for consoles and other devices, Unity quickly became a game engine for developing games for any platform at a very favorable cost, even for individuals.
Although it is developed in C++, developers can program own products in the popular C# inside the game engine. In addition to the popular C# (created by Microsoft in 2000), or alternative plugins that brought visual programable environment Bolt similar to Blueprints released in Unreal engine 4.
With its approach, Unity engine has began quickly to build a giant community of developers (individuals, small teams, large studios with no desire to pay high fees for game engines) developing games in their engine. It triggered a snowball effect - these developers have been creating additional content in addition to games - whether in the form of game assets, tutorial, and a huge amount of forum content. Today, Unity's Asset Store is many times larger than Unreal Engine store, as well as you may find much broader documentation, educational content, youtube tutorials, forum topics for Unity.
Historically, Unreal was better at the graphic quality of the games. Unity then in wide support of platforms. Anyway both is already a myth in these days - the quality and features of both game engines have been or are still being unified. Today, both engines, except for games, are used in a wide range of fields - from application development, through architectural and other visualizations, virtual reality or various kinds of simulation.
Graphic quality | Unreal vs Unity
There's a well-established statement that if you focus on maximum visual and realistic image quality, you must use Unreal. This was apparently true at the time of the release of Unreal Engine in 2015, and similar statements may appear after the release of Unreal 5 during 2021, however, the issue of visual quality is much more complex - visual is a function of the quality of input models, shaders used, applied post-preocessing stack, renderer settings and available performance of the target device. At the time of writing this article, if we take identical models, we can achieve similar results in both engines, but in Unity we will have probably more work to achieve that.
The legend of inferior quality in Unity was historically associated with the used built-in render pipeline . However, scriptable render pipeline is available in Unity today , moreover in several predefined templates that help with proper settings. When using the HDRP pipeline, the visual quality achieved in Unity is indistinguishable from that in the Unreal engine. So whether you run the first or second engine today, the resulting graphics quality will depend on the selected renderer and associated settings. Unity offers general predefined settings based on Pipelines, Unreal also more focused templates - designed e.g. for ArchViz and more.
The post-processing options are similar in both game engines, as well as both engines contain numerous beneficial view modes for displaying model informations. However, Unreal does it a bit better and especially enables better and easier work with scene lighting (brightness, shadows, reflections ...) which results in easier achieving of a photorealistic appearance in a performance-optimized state.
The difference in graphic quality can be simply summarized as follows - whatever you put in Unreal will probably look good with minimum additional work and settings. At Unity, you will need to look at the luminosity and shader assignments to achieve a similar overhang, see the "Working with 3D Models and Materials" section.
Support of import and work with 3D Models and Materials | Unreal vs Unity
Used 3D models and materials are the most essential element of the visual side of games, applications and all visualizations. Both are usually not created directly in the game engine, but in one of the lots of available 3D modeling software products. In addition to the modeling itself, they also allow the application and creation of different types of materials and lighting baking. In these modeling software products, it is usually possible to render beautiful photorealistic images in 4k quality and higher - our goal is of course the same, but in real time (in a matter of milliseconds) within a game / application developed by us running on a user device with very limited computing power. The first step is to successfully convert and optimize the 3D model, including materials, from the design software to the game engine.
If we are developing a product with clear input sources, it is possible to choose modeling software and materials used with regard to easy conversion to a game engine and the smooth running of the application. The problem may occur when the inputs are unknown. For example, the real-estate configurator. It is an application whose input is a non-optimized 3D model from an architect or designer. This model is created in any program, with an unspecified type of material - usually a combination of V-Ray, custom materials and materials defined by the software used. There are 3 major problems with this type of input:
- The 3D real-estate model does not have to be optimized in performance, it can even be inappropriately exported
- The materials used in the model may not be transferable across different software products
- Realistic visuals are largely dependent on the applied lighting settings in the scene
In the case of working with general models and materials, the key requirement for us is the support of various formats of 3D models and materials by the game engine. This we can find both mentioned engines, but here we often come across a price disparity - while at Unreal we get it for free (if we have a license for a 3D modeling software from which we import) or a few hundreds $ in the worst, the same can cost us easily thousands USD in Unity. (annual licenses in all cases).
Plugins for efficient import of models and materials and work with them in the game engine
Unity engine
Unreal engine
Apart from the transmission pipeline itself, Unreal currently offers more advanced work with materials, 3D models and lighting. This in itself does not affect the final visual quality of the models, but it speeds up application development process . Despite the fact that Unity does not offer support for V-Ray materials and the import of 3D models from a wide range of software - such 3D models and materials must be converted on the way to Unity. However, this is often necessary also in the case of Unreal, but not because of necessity, instead due to the desire to optimize performance models before their import into the game engine.
Working in the engine
Options in both engines are similar. One of the fundamental differences is the programming environment and the way of working in it. In Unreal, it is necessary to program in C++ or in the visual scripting interface Blueprints. The documentation of each function contains definition in both variants, but for maximum capabilities and performance it is recommended to work in C++. Compared to C# in Unity, C++ is more labor intensive - instead of having one function for a particular script, two are used - for declaration and for definitio. On the other end, C++ is more efficient for performance, anyway most developers at Unreal prefer Blueprints for its simplicity, which is very inefficient in performance, especially for more complex functions. Unity does not contain a visual scripting interface natively, however it can be obtained through Bolt or Playmaker extensions. In addition to the ones mentioned, Unity can also be programmed in the modified Unity-based JavaScript language.
Different approach to the object and functionality hiearchy
The programming environment is very related to the way of connecting defined functionality with certain visual game objects.
Unity works with a very simple, easy-to-understand model of independent elements - the hierarchy of objects is in the open style of objects and their sub-objects. C# scripts can then be easily and independently assigned to any object (=parent object) or subobject (=child object). Possible configurations of objects and attached functions may be adjusted in the Inspector window.
Unreal Engine groups individual interactive objects, including their functionality, into independent parent classes. There are several such classes to choose from, based on the required functionality. The result is a logical division into complete components, but at the cost of added work - interactive components usually need to be created and configured in Unreal by atatched all objects and functionalities - it makes Unreal more demanding than Unity in defining functionalities and preparing interactives.
The areas where Unreal undoubtedly wins over Unity are the already mentioned workflow processes and options with 3D models, materials and scene lighting. In the case of Unity, it is often necessary to use several different software to achieve the same state.
In terms of the original focus of the Unreal engine on the development of games for more powerful devices, Unreal also has higher demands on the development computer compared to Unity.
Virtual reality in Unity vs in Unreal
Both game engines include native support for XR game and application development. You also get basic inactivity through software development kit plugins issued by VR headset manufacturers. However, using tools that support VR headsets across various manufacturers is a much more effective way. In the case of Unity, it is an XR interaction toolkit. At Unreal, I use either The VR Expansion Plugin (VRE) or alternatively implementation from Oculus. It should be mentioned that there are also a number of extensions that make work easier for developers - often involving the solution of repetitive operations across applications. An example could be our XR Framework for Unity. It's available for free, as open-source.
Virtual reality is the area with the highest demands on device performance. Beside rendering the images on a very large display where graphical errors are more visible compared to classic screens, the render must be processed twice - for each eye separately (pairs of screens), if stereoscopic rendering is not enabled.
Personally, I focus on developing applications optimized to run on the Oculus Quest 2 VR headset. There's need to use the Lightweight Render Pipeline (LWRP) or the more advanced Universal Render Pipeline (URP) to run games and applications directly on the device. However, in a connection to a computer through Oculus link or Virtual desktop application, I like to use High Definition Pipeline (HDRP) with full quality graphics, reflections, shadows, and other features, or advanced URP settings focused on the maximum possible quality.
Which engine to choose?
So Unreal or Unity? Personally, I decide between the mentioned engines on the basis of a key feature of a specific project. In my opinion, the Unity engine is much easier to use - it is easier to program general independent functions in it, which the creators can then easily and intuitively use independently. In the same way, due to better documentation and a larger user base, every creator can relatively quickly and easily find solutions to many functionalities and problems. On the other hand, Unity over Unreal still loses in many ways, especially in areas of use outside of game development. At the same time, it must be said that those advantages and disadvantages are always very relevant to a particular use - what is the general advantage of one engine may be an insignificant matter or even a disadvantage if a specific use is needed.
I'm a big Unity fan myself - I've been hanging around it for many years (developing solutions for game developers), the way of work in the engine and the C# programming language suit me very well. I actively monitor the rapid development of new functionalities and products, as well as financial results for a better understanding of the company's long-term development and goals - both from the point of view of the developer and the shareholder. Still, Unity is not an engine that I would push and use in all use cases, actually I use mostly Unreal. The development is impressive even there, boosted by openability of the platform.