Tuesday, December 17, 2019

Unity vs. Unreal Engine: Which Is Better for XR Development

If you want to develop an XR application for your business or your personal project, there’s no better time than now. 

These days, game engines like Unity3D and Unreal Engine allow people with no prior XR development experience to create XR solutions on par with industry veterans. Especially given that you can experiment with both engines for free as long as you want.

You don’t have to go far for success stories

However, another challenge presents itself. What engine should you choose? 

There are several options (CryEngine, ApertusVR, Amazon's Sumerian), yet there are two engines that dominate the XR development market: Unity3D and Unreal Engine 4.

If you don’t want to leave it up to a coin toss, this article will help you understand what the strengths and weaknesses are of both of these solutions.

This article also debunks a lot of myths that surround these game engines to help you choose without bias the one that is best for your project. 

Let’s start with a quick overview of each one of them.

Unity3D Overview

Unity3D is a development engine that was first released in 2005. Since then it’s become the most popular 3D and 2D development platform in the world. Here are just a few stats:

  • 60% of AR/VR content and 50% of mobile games are made with Unity3D
  • Over 24 billion installs of engine in the last 12 months
  • Supports 28 platforms (from iOS & Oculus to Windows Mixed Reality and all in-between)

Due to its high popularity with mobile platforms, there’s a persistent myth that Unity3D is only good for mobile-oriented projects. 

That is mostly because, in the past, Unity3D themselves heavily targeted the mobile market, especially during the rise of the Apple’s AppStore and Google’s Play Market.

In truth, in the last few years the engine has advanced so much that now it’s a multi-faceted development platform that can be used for any complex XR solution.

Myth: Unity is good for mobile VR/AR

Truth: Unity is good for both cross platform solutions and complex XR projects alike (e.g. entire Audi logistics and car configurator training is created within Unity3D platform)

What about Unreal Engine?

Unreal Engine 4 Overview

Image source

Unreal Engine has a long history as a game engine dating back to 1998. Over its lifespan it was licensed to a handful of AAA-studios for titles like Duke Nukem and Deux Ex. It’s had several iterations, such as Unreal Engine 2 & 3. 

Things took a U-turn in 2015, when the 4th version of this ubiquitous development engine was made free to the general public.

Note: There is a 5% royalty fee for Unreal Engine-powered products that make more than $3,000 per calendar quarter. There is no royalty if you are using the Unreal Engine for architecture, automotive, film, television, broadcast, live events, training and simulation, or other non-games projects

Below are the key stats for Unreal Engine 4:

These days, indie developers and major studios can both use Unreal Engine for their various projects, including games, education systems, and business solutions.

Due to Unreal Engine’s origin, it’s a common perception that Unreal Engine 4 is a great tool only when you work on complex multi-million dollars projects, especially video games.

Games made with Unreal Engine 4A list of AAA-titles developed with UE4 that are coming out in 2020. Anyone else excited by Final Fantasy VII remake?

While it’s true that some of the popular titles, such as Fortnite, are built using Unreal Engine 4, the company behind UE4, Epic games, is actively developing a mobile segment, along with supporting community projects through their Unreal Dev grants program.

Myth: Unreal Engine 4 is only good for AAA-game titles

Truth: Unreal Engine 4 can be used for VR/AR development, 2D, 3D and mobile development alike. 

Over the years, both Unity3D and Unreal Engine addressed their weak points, so picking one of them over the other is not a simple task.

In order to do that, let’s talk about the differences for XR development with these platforms through several lenses.

Which Engine Has The Best Infrastructure?

In order to properly compare these two engines, you have to understand that the difference lies not only in technical aspects (although we’ll talk about those in the following section as well), but in the infrastructure that surrounds them as well.

The infrastructure consists of assets stores, documentation, and community

Let’s talk about each one of those in detail. 

Assets Stores

Every virtual environment has to be populated with virtual objects that represent a real or imaginary world. 

Below is an example of a VR training solution that was developed for Callaway Energy Center:

VR traning solution at Ameren Missouri

You can create 3D assets from scratch using a 3D modeling software such as Maya, Blender or 3ds Max, or you can purchase the assets via the Assets Store. 

Both Unity and Unreal Engine have assets markets that allow you to purchase pre-made 3D models, objects, environments and so on.

The current number of assets in the Unreal Engine marketplace is around 10,000:

Library of Unreal Engine Assets

The amount of assets in Unity Store is five times that, with about 31,000+ 3D assets alone:

Unity Asset Library

The difference between the two asset markets becomes a factor depending on what project you’re going for.

Unreal Engine assets tend to be more oriented towards finished game productions. Many of them were previously used in AAA-games.

That explains their higher visual quality. Among those assets there are castles, sci-fi tech, and monsters.

Image Source: UnrealEngine.com

If you’re developing a game with a relevant fantasy or sci-fi setting, and you find that some UE4 assets are perfect for your project, Unreal Engine 4 marketplace can be a decisive factor.

At the same time, if you’re developing a VR application for business, graphics are not as important as relevance and iterative development.

Given that you have more assets to choose from in the Unity3D store, it’s easier to find more relevant models and quickly prototype your business environment without having to hire 3D modelers and create virtual props from scratch:

Below is an example of a jet engine 3D model that you can find in Unity Asset’s store. It could be used in VR training simulation for jet maintenance:

Image Source: 3D asset that represents military jet engine

In terms of assets, Unity3D’s store is very advanced. However, Unreal Engine is catching up, and Epic Games has recently released a Quixel Megascans Pack with 10,000 high-quality material scans from Quixel library. 

Let’s talk about documentation and training available for these engines. 

Documentation & Training

Both Unity3D and Unreal Engine 4 have an extensively developed documentation on how to use the engines and on XR development specifically:

But the real educational value comes from external training.

Although there are quality training courses that teach you how to build XR applications for both Unity3D and Unreal Engine, again, the number of these courses is significantly larger for Unity developers.

For example, the Udemy education platform offers around 2,200 courses for Unreal Development, and 5,500 for Unity. Although most of these courses teach you how to develop games, the basic knowledge can be used for building other types of applications as well.

As for the business and enterprise-oriented courses, those tend to utilize Unity3D environment due to its developed infrastructure and lower entry point for new developers.

You can learn about the structure behind the XR course and how exactly it teaches you to build finished XR applications by downloading the syllabus for our 10-week project-based live XR development training.

Let’s talk in detail about the difference between development communities for Unity3D and Unreal Engine. 

Developer’s Community

Every year developers are pushing the boundaries further of what's possible in  XR.

Both Unity3D and Unreal Engine are doing their best to provide developers with relevant documentation and training materials, but in this field you’re inevitably left alone to figure it out which option to pick. 

Bugs, glitches, crushes, unsolved code mysteries occur every day. Who is going to help you solve those, especially when you’re on your own?

Other developers.

This is where the role of the community that surrounds game engine becomes paramount, especially in an emerging XR industry

Unity3D, as a freely accessible engine, has been around longer than Unreal Engine 4, so, naturally, it has a bigger community of indie developers surrounding it.

For example, on Unreal Engine’s forum there are 12,000 topics on C++ programming, and 4,600 threads on VR and AR development.

On Unity3D’s forum there are 128,000+ threads on scripting and 6,100+ topics on VR development. What that means is that if any problem occurs, there’s a better chance of finding  someone with the same problem who can help you learn about their solution.

Another thing about Unreal Engine 4’s community is that it is divided between non-programmers who create application mostly with visual scripting system called Blueprints and developers who know and use C++.

An example of a Blueprint-based feature

There are more non-programmers in the Unreal Engine community. You’ll see that the number of Blueprint-based discussions on forum is twice the number of C++ programming discussions.

This division becomes apparent because many C++ developers don’t actively use Blueprints in their development process: That’s because code-based solutions are usually more resource-optimized and flexible than Blueprint-based ones. 

Thus, expert C++ developers might not be able to help non-programmers simply because they don’t speak the same language. 

On the contrary, every Unity3D developer knows C# — its primary development language, so that experienced developers can easily show beginner developers the ropes. It's also something we teach in the XR Development for Unity course from the start.

Let’s talk about the difference between development process in detail in the next section. 

The Development Process

Both engines share many similarities when it comes to development of XR applications. However, there are major distinctions as well and we’ll talk about those in this section. 

C# vs  C++ And Blueprints Comparison

Perhaps, the biggest difference between the two engines is that they utilize different programming languages.

Although there are several programming languages you can use with Unity3D, the primary language for the platform is C#.

Unreal Engine 4, on the other hand, allows developers to choose between C++ programming and Blueprint visual scripting system. 

The debates on which language, C# or C++, is better, has been around for ages, and, frankly speaking, are meaningless.

Both languages are perfectly suitable for XR development, and it all comes down to which one you’re more comfortable with or have more experience with.

However, C# may be a bit easier on beginners, and here’s why. 

First of all, C# code is simpler. 

Let’s take a primitive 3D object, such as cube, and make it float and rotate at the same time:

Here’s a code for this from official Unreal Engine documentation:

FloatingActor.h
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"

UCLASS()
class QUICKSTART_API AFloatingActor : public AActor
{
    GENERATED_BODY()

public:
    // Sets default values for this actor's properties
    AFloatingActor();

    UPROPERTY(VisibleAnywhere)
    UStaticMeshComponent* VisualMesh;

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:
    // Called every frame
    virtual void Tick(float DeltaTime) override;

};

FloatingActor.cpp
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.

#include "FloatingActor.h"

// Sets default values
AFloatingActor::AFloatingActor()
{
    // Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
    PrimaryActorTick.bCanEverTick = true;

    VisualMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
    VisualMesh->SetupAttachment(RootComponent);

    static ConstructorHelpers::FObjectFinder<UStaticMesh> CubeVisualAsset(TEXT("/Game/StarterContent/Shapes/Shape_Cube.Shape_Cube"));

    if (CubeVisualAsset.Succeeded())
    {
        VisualMesh->SetStaticMesh(CubeVisualAsset.Object);
        VisualMesh->SetRelativeLocation(FVector(0.0f, 0.0f, 0.0f));
    }
}

// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()

And here’s the code to achieve the same result in Unity3D:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class floatingactor : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
       
    }

    // Update is called once per frame
    void Update()
    {
        float delta = Time.deltaTime;

        float vertDelta = Mathf.Sin(Time.time + Time.deltaTime) - Mathf.Sin(Time.time);
        float rotDelta = Time.deltaTime * 20.0f;

        transform.Rotate(0, rotDelta, 0, Space.World);
        transform.position = transform.position + new Vector3(0, 0.25f * vertDelta, 0);
    }
}

Result:

Image source

Notice that you need to create two separate files in the Unreal Engine example, one for declaration, and one for definition. 

It’s worth noting that even though a big chunk of the code is created by Unreal Engine automatically, it may seem a little complicated if you’re just starting out in development.

At the same time, Unreal Engine features a Blueprint visual scripting system that you can use to create complex applications as well. It doesn’t require you to code, and the workflow is node-based.
Node Based approach in UE4

From official Unreal Engine 4 documentation

Almost every section in the Unreal Engine documentation is backed up by both in C++ and Blueprint examples. 

It’s quite easy to learn Blueprints, especially when you’re just getting started. However, to get the most out of UE4 it’s recommended to learn C++ and combine Blueprint-based solutions with code.

Note: there’s a custom Unity3D plugin, Playmaker, that allows visual scripting in Unity3D the same way as Blueprints in UnrealEngine 4.

Another possible advantage of C# is that 90% of VR/AR development companies are using C#, which translates to a largely documented code-base and a larger amount of tested solutions in the development community.

Platform’s Source Code Access: Unreal Engine Vs Unity3D

Both platforms are self-sufficient — the tools and workflows they offer are more than enough to create XR applications of any type with no modifications to the platforms’ source code. 

However, there’s one major difference between UE4 and Unity3D.

Unreal Engine 4 is an open source engine. Unity3D is not. 

What that means is you can modify UE4 source code to fit your needs, free of charge. At the same time, you can view Unity3D source code, but in order to modify it you need to acquire enterprise license.

While this may be a deal breaker for bigger productions, smaller developer teams should carefully consider whether they should modify platform source code at all, otherwise one quick fix may spawn an avalanche of bugs elsewhere. 

If you need some custom functionality in Unity3D, in most of the cases platform-based scripting and plugins from the asset store should be enough. 

Unity3D and Unreal Engine Graphics Comparison

If we were to time travel back to 2012, when Unreal Engine 4 was first revealed to the general public, the quality of graphics was unprecedented at the time. 

While Unity3D was mostly focused on indie and mobile game development, Unreal Engine was built on the bones of AAA-game productions. 

Since then, the prevalent myth was that if you want photorealistic graphics, you have to use Unreal Engine 4. 

Myth: If you need stunning graphics, use Unreal Engine 4

Truth: Both Unreal Engine 4 and Unity3D are capable of creating photo-realistic scenes and provide tools for creating stunning visuals 

Here’s a comparison of graphics between these two platforms:

 

That said, Unreal Engine 4 has a few advantages in the graphics department. 

All out-of-box Unreal Engine projects, including assets, scenes, and tutorial projects look better.

With Unity3D, you may need some tweaking to get the best out of your 3D assets. 

Shaders, lighting, materials - it’s just less work for you at the start in Unreal Engine 4 than in Unity3D.

However, if you’re using Blueprints, complex node workflows may cause performance issues.
A large amount of nodes, complicated math, and resource-demanding operational loops may slow things down compared to an optimized C++ code solution.

Below is an example that shows how a complex blueprint system dramatically reduces FPS compared to an C++ code. However, the difference seems to be smoothed out with MultiThread and nativization processes enabled.

A performance comparison between C++ and Blueprint solutions

Overall, remember that you can always achieve the same results with Unity3D and at this point in time both platforms are perfected to the point where there is no visible distinction between the visual quality they can produce. 

Notable Projects Made With Unreal Engine 4 and Unity3D

Both engines have been used extensively for AAA production and indie game development, and the most famous games of recent years have been made using both platforms. 

However, in the last several years, the dramatic switch occurred and both platforms are now being utilized not only for entertainment industry, but for more practical and business-oriented solutions.

Due to the advances of XR technology, businesses, education centers, and manufacturing enterprises are extensively using XR applications to improve their workflow and profits in a myriad of ways. 

XR Projects Based On Unreal Engine 4

For example, a drug development company C4X Discovery uses Unreal Engine 4 to visualize molecular data, and thus, speed up the development of new drugs.

Visualizing complex data in VR enabled scientists to observe compounds from a new perspective, more easily spot design flaws, and also effectively collaborate across the world without the need to be in the same room.

Visualizing complex data in VR has many applications. Another example comes from Air Canada, which used Unreal Engine to create a VR presentation for their top flight business class service. 


It's worth noting that 97% of the project was done with Blueprints, not coding. The reason being is that presentation-oriented VR projects are easier to pull off than XR training, because it requires more complex interaction than simply observing something.

Let's talk about some XR projects that notable companies use to revolutionise their training and operations workflows.

XR Projects Based On Unity3D

Audi, a german automobile giant, developed a modular VR training with 20 different programs in several languages to improve their logistics, service, and production training workflows.


Image source: audi-mediacenter.com

VR training, according to Audi, is very popular among employers, and improves the learning process, the workers’ motivation, and trainees’ ambition.

INVISTA, a global USA-based polymer and chemical intermediates company, utilizes a Unity3D-based XR solution to simulate a working environment and train employees in VR, reducing training time, saving raw material costs and decreasing operational downtime. 

 

 

Boeing, GE, US Navy are using VR/AR applications based on Unity3D to train staff with greater efficiency, with benefits such as improved training retention, improved safety, and reduced operational downtime, to name just a few. 

However, companies use Unity3D for presentational purposes as well. Take a look at this BMW 2019 showcase and try to guess which one is rendered and which one is real:

YouTube Link

Summary

In the last few years both engines have been developing by leaps and bounds, addressing their weak points and persistently following the latest industry trends.

It used to be Unity3D for mobile projects, and Unreal Engine for AAA-games, but things have changed so much since then.

Both platforms are perfectly appropriate for creating complex XR solutions and indie projects alike. Both platforms are capable of creating stunning visuals and cross-platform applications.

Although Unity3D supports more platforms and is known for its cross-platform development approach, both engines are optimized for working with all the recent XR tech on the market. 

It all comes down to your previous experience and environment you’re working in. 

Do you have lots of experience with C++ programming? Unreal Engine is the way to go.

However, if you’re just starting out as a developer, then Unity’s C# might be a more practical  language for beginners, because it has a bigger community and VR codebase surrounding it. 

If your application is heavily focused on presentation and graphics, for example a desktop game with AAA-assets or visual presentation for business, then, possibly, Unreal Engine 4 with its Blueprints system and great visual effects out of the box is a way to go. 

On the other hand, if you’re working on a complex business solution that requires a lot of customization, iterative development, prototyping, and optimization, then learning Unity3D environment may be a better option. 

Carefully study both platforms, understand what works better for you, and remember that you can try both platforms for free.

Good luck with your projects!



from Hacker News https://circuitstream.com/blog/unity-vs-unreal/

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.