"Brief comparison of unity3d and unreal engine"

Posted on 2016-03-21 in gamedev

This is a brief comparison of Unity3d and unreal game engines I posted in the past on unity forums. I kept losing the link to it, so I decided to repost it here.

Goes like this (bits and pieces, in no particular order). Please note that I haven't worked with every system, so there are gaps in this comparison.

  • Unreal 4 has steeper learning curve compared to Unity. Engine is fairly tough to get used to.
  • Unreal 4 has fairly sparse C++ documentation, you frequently need to dive into code if you need to figure something. "Code dive" would require quite skilled programmer.
  • Large portion of unreal community occasionally resembles kindergarten. For example, I've run into people (which were moderators) that for some incomprehensible reason opposed BSP with religous fervor. (Unity doesn't have BSP at all). There was unexpected
  • For whatever reason epic is obsessed with with their blueprint system. For traditional programmer, that kind of "noodle programming" will get in the way routinely, because most of the docs are centered around blueprints, which won't help you when you need to do something in C++.
  • Unreal 4 has more features out of the box. Behavior Tress are not available in unity by default. Node-based material editor is not available by default. There's no Matinee in unity.
  • Unreal has no mecanim. There's no replacement system for mecanim, animation retargeting doesn't work that well, and as of 4.10.1 root motion retargeting is broken.
  • Unreal engine really hates when you try to use root motion for locomotion movement. You're expected to use "capsule-based" quake-style movement with root motion being used for attacks or special moves.
  • Default animation skeleton is superior in Unreal 4. Unity humanoid skeleton does not include any kind of props and can only retarget body movement. Meaning that in unity if you're transferring complex sword movement from one character to another, you're royally screwed and will need to ensure that both skeletons have identical bone topology and names. Unreal's default skeleton includes bones for inverse kinematics, weapon and prop bones as well, and you can use your own skeleton too, if you want it.
  • Due to animation system difference, in Unreal 4 animation is pretty much inseparable part of the character. In unity engine animations (humanoid ones) are interchangeable between characters.
  • There's no direct equialent to unity's prefab in unreal engine. You have Object Blueprint. However, here's the catch - it is not a prefab, but an object class. New object type. Also, blueprinted objects currently cannot have baked lightmaps (that'll be probably fixed at some point). You'll be using meshes instead of prefabs in unreal 4. Unlike unity, blueprinted objects can be nested, but working with them is awkward.
  • Unreal engine has superior engine performance. You can dump few thousand objects into scene easily it will work.
  • Unreal engine does not have baked occlusion, like unity. Instead object visibility is determined by previously rendered frame. That can result in very noticeable flickering when you're rapidly moving around (you'll see skybox in places where an object is supposed to be), unless you take care of that by filling walls with "placeholder" geometry. That's very weird design decision, comparable to blueprint obsession, but you can probably fix that by rolling out custom occlusion/pvs removal code. There's some sort of systemthat is supposed to be used on mobile platforms, but it is half-assed and basically create 2d grid of cells. meaning it won't work well with highly 3d structures.
  • Lightmass and default rendering are vastly superior in unreal, hands down. Now, default lighting is sorta has "dramatic" (like gears of wars) feeling to it, but post-processing effects and quality of everything is suprior. Heck, you can make particles glow and those particles will create lens-flares.
  • Particle system (Cascade) in UE4 is significantly more powerful that unity one, has GPU particles support, BUT! For some reason UE4 decided to try to develop new particle system (Niagara?) aaand they forgot to do that for some time. So cascade is sorta "abandoned", Niagara isn't there, and situation is sorta weird.
  • There's significant differneces in object model. In Unity "Everything is a GameObject" and "GameObject can have components". In unreal "Any thing in a world is AActor" and AActor consists of components. Meaning, that gun on your character might not be a another actor, but a component. It takes a bit of time to wrap your head around that, because the model doesn't always make sense. For example, ACharacter may have UPathFollowingComponent that is attached to it and only governs pathfinding. It also may have MovementComponent that controls movement, etc.
  • In UE4 there's significan historical weight in the codebase. You can occasionally spot fps roots of the engine. Some components are quite big. For example, ACharacter is about 200 kilobytes of C++ code, that aside from movmenet also deals with several motion modes, network replication, etc. That's very different from unity's ThirdPersonController which you can write from scratch in few hours.
  • UE4 has completely superior animation system. First, you get to decide how animations blend. Animation state machine allows you to specify custom conditions for transitions (via blasted blueprints), while in unity all animation conditions are restricted to "AND" operator which can't be changed. There are also "routine" nodes (called conduits) which can allow you to specify common routes in statemachine.
  • Also, there's no equivalent to "Montages" in unity. Montage is animation strip composed from linear clip, except that at some point you can decide (via code or blueprint) which clip will be playing next. it is incredibly useful for chaining attacks, combos, and such, and making the same thing via statemachine is royal pain in the butt. On other hand there's glitch in slot naming mechanism, that may or may not be fixed in the future.
  • I'd say that I get better experience with support in UE4. While community is not very useful, it is possible to get response directly from developer. In unity that happens rarely or never. That's probably because there's only one version of UE4.
  • People were praising unreal openworld tools, although I didn't have much chance to use those.
  • Unity's ScriptableObjects are more stable than Unreal's UDataAssets. Modifying UDataAsset C++ class may easily result in data loss (upon restart editor will delete the asset). That doesn't happen in UNity.
  • Working with unreal's content browser is awkward. Moving object from one folder to another is a dangerous procedure that may result in data loss. The reason for that is UE4 relies on object path, while unity relies on object id. On other hand using paths makes transferring data between projects easier.
  • UE4 is more resource hungry. Working with editor on 8gb system is very likely to be uncomfortable. It also eats HDD space like popcorn. Even simple project will be bigger.
  • UE4 asset store has less content than unity asset store, and prices in unreal 4 store are higher.
  • UE4 editor is significantly more pleasant to work with than unity one. It is easier to move things around in the level.
  • UE4 Physics system is more robust. There's destructible object support, you can blend animation with ragdolls out of the box, and performance of collision queries is faster and more robust.
  • There's definite feeling that UE4 engine is being improved at faster rate and bugs are being fixed at faster rate than in unity. Also, you can always attempt to submit bugfix yourself.
  • There's no source code access in Unity. That one can be a tide-turner depending on nature of the project.
  • UE4 can blend dynamic shadows with lightmaps properly. You can designate light as "stationary" and engine will precompute its shadows but properly blend them with dynamic shadows from object. That's equiavlent to how "mixed" lighting is suppsoed to work in Unity, except Mixed lighting has been broken forever. The caveat that at any given point of scene you can only have 4 stationary lights overlapping. Directional stationary light will affect entire scene.
  • Unreal 4 lighting system is deferred. As far as I know, there are no object layers of any kind (there are layers in editor), so you can't define several different layers of visible object, and setup several cameras, where each of them will see different layer. That can be done in unity.
  • When baking lighting in Unreal 4, by default emissive light from static object doesn't bounce. That's extremely disappointing. In unity emissive light bounces and can be animated (if you're using enlighten), The difference is that enlighten is very slow, very hard to use, eats more resources than unreal's lightmass, and can freezze silently on large scenes.

Also see "Swtich from unity to unreal engine" blog post.

Basically, there are issues in both engines, Unity is easier to get started with, UE4 produces better visuals and is more solid BUT it is very likely that making UE4 project will cost more (no mecanim). More features in UE4 out of the box, some of those features are great.

In general, if someone is making an FPS then UE4 will be a better choice, BUT if someone is making 2d game or isometric game, then unity might be a better idea, especially if visuals don't matter much (because Enlighten as of now is nigh unusable) and/or engine is using stylyzed graphics.