Unity Impressions - Part 1 - Default 3D World Building Toolkit
So I'll just start off with this, a few months ago I decided to learn Unity, I decided to evaluate it as an engine of choice for development with the focus obviously being on the 3D Art and 3D World-Building aspect. We as game developers and studios wanting to make games, evaluate the product and what It has to offer. Which means, we evaluate the core set of features it provides, at least initially because it's really hard to convince someone to use a product when you have to often have end it with: "Yeah we don't have that, but you can find it on the marketplace". The marketplace shouldn't really be in the calculation in my opinion that said however, there are some crazy talented developers on the Unity Marketplace that are worthy of mentioning.
I've been working with large world games my whole career, as both a professional environment artist, tech artist and essentially tools designer/developer. That's essentially the basis of my perspective and I'm basically writing this to just get my thoughts down on paper but I also hope to help some people who are interested in this stuff realize what is good/bad with Unity and what they need to do to compensate for some of these things.
I also want to say that even though I have some negative things to say about Unity WorldBuilding Toolkit , I don't want to undermine the incredible work each of the engine/tools developers put into lately. It's already a great product, proven and viable for a wide-range of genres & scopes. I'm just trying to point out what I feel could be done better for the sake of the dev community.
I have only used Unity for a short while so I'm bound to have totally misunderstood some things or be plain ignorant about stuff, feel free to correct me :D
I've been using Unity 2021.3.4 URP
Unity uses C# (very straightforward language for programmers, pretty easy to get into for Tech Artists)
Unity uses Scenes
- Scenes are the equivalent of a levels in Unreal
Unity uses "Game Objects" for everything
A Game Object is like a container for anything
- It's component based, you can add components to the game object.
- Place a mesh renderer component inside of a Game Object, and its an actual Mesh Object that you can place in the world
- Example: The Terrain is a Game Object with a Transform Component, Terrain Component & Terrain Collision Component.
It's pretty useful and straight forward way of working. Though in the heirarchy / outliner, you also use Game Objects as Folders to child other game objects under it. Which is pretty messy visually. Apparently there are marketplace addons to add folders to the heirarchy however, with performance increases as well.
You can Create Prefabs out of multiple Game Objects
- Game Object with mesh renderer component & collision component = Mesh Asset
- Game Object with Particle Emitter Component = VFX Asset
- Game Object with Scripts Component = Whatever you need it to be a tool, utilities or game mechanics.
- Put them all together into a prefab and you have for example: Barrel mesh, fire particle and scripts dealing with whatever gameplay mechanics need to be attached to it for heating the player up.
Above = URP , 100% not out of the box though.
Unity Render Pipelines
Multiple Render Pipelines
- Built-In - General Purpose Render that has limited options for customization
- Universal Render Pipeline (URP) - Scriptable, customizable and optimized for a wide range of platforms
- High Definition Render Pipeline (HDRP) - Scriptable, cutting edge, high-fidelity graphics for high-end platforms
In general it's confusing
- It's hard to keep track of what render features are for what render pipeline
- It feels like the Unity team is divided in their goals
- It forces you to constantly look twice or thrice if marketplace items support your choice of pipeline
- Different workflows sometimes for implementing the same thing
- Unity releases a lot of versions, the documentation becomes out of date very quick leading to very confusing moments
Unity is Small Games Focused?
I would say that the default toolkit in Unity forces you to create small games.
- If you want to create medium sized or large games you will have a bad time with the default toolkit.
- Medium/Large games will definitely force you to use the Marketplace Addons to fix functionality that Unity is missing
- Then you are at the mercy of 3rd Party Tools made by potentially solo developers that are already supporting a lot of studios out there.
- The issues can be mitigated obviously if you yourself is a good tools programmer or have people in your team to develop tools for you, but the reality is that we want to make games not focus all of our attention on Tools.
A lot of tech/tools developed for Unity are developed individually with little to not considerations of other systems or how people want to work
- It seems a lot of people rely on marketplace content to get production up and running
- It makes it feel like Unity Tools team are focusing on the wrong things
Does that mean you shouldn't use Unity as your game-development tool?
Heck no, Unity is still a very good option to develop your game in, the important thing with any game-development tool is to know what it's good at and bad at and adjust your game project and expectations accordingly
Art/Tech & World Building
Unity developed a new terrain system a while back, it comes with some really nice sculpting features. The rest however is pretty bad in my opinion.
- Destructive Workflow (ie you sculpt ontop of your already work, no layers)
- It's pretty quick overall
- Lots of useful sculpting tools
- Erosion, Masks, Ramps, Filters, Stamps, Terraces, Transforms,
- Sadly no Clay-based brush (sculpted from the bottom up , makes it easier to make natural stuff instead of weird blobby shapes)
- No spline based modelling out of the box (ie no paths/roads/rivers)
- Support for Multi-Terrains
- Very little bad things to say about the sculpting tools, they are really good.
Terrain Painting & Layers & Materials:
Layer Painting Brushes / Features
Leaps and bounds better than Unreal Engine for painting out layer masks.
Allowing for Terrain Filters for painting (very good)
- Slope, Height, Concavity/Concave
- Math operations (Abs, Add, Clamp, Max, Min etc)
PBR Setup (Albedo, Normal map, Mask (Metallic, AO, Height, Smoothness))
URP Allows for 8 Terrain Layers
- Uses an RGB Control mask for each layer painted (Typical RGB splatmap)
- You can use Shader Graph for the Terrain Shading, however it's not officially supported and it's definitely tricky to get things working the way you want to. I also have no idea how to access more than 4 layers in Shader Graph.
- I think one is supposed to be able to do 8 Layers in URP, and I definitely have no idea how to access a second splatmap using the terrain system to add more. (Unless I add stuff manually in the shader)
Custom Terrain Shading
- if you want custom, you either have to figure out how to make a Shader Graph version of the terrain shader or create something from scratch in HLSL (or use whatever is provided for you in the marketplace)
- If you create a custom Shader Graph terrain shader, I personally don't know how to access a second splatmap for painting a second pass on the terrain.
Foliage / Object Placement (Trees & Detail System)
Overall impression, it's very bad.
They call it Trees & Detail, but in reality its only meant for straight trees and grass. I have a lot of bad things to say about this system, it's a major reason why it's hard to consider Unity for medium & large game projects.
Painting out Trees
- Simple painting brush
- Individual Tree Properties are really limited though
- Has option for scale variation
- Has random rotation on the up-axis(y)
- No Align to Terrain Normal (ie you can only have straight trees)
- This also makes it hard to use the Tree System for any other of kind of prefab you want to paint out like rocks.
- No options for painting on specific terrain layers.
- No species/container options
- For species or randomization of a set of objects to place
- It becomes really messy if you have a lot of different objects/trees
- Only works if your tree is using their shader (fair enough but cluttery)
- Not sure how to disable the billboarding
- Chances are that you'd want a custom solution for this anyways
Automatic Bending of tree + wind
- Only works with their shader (fair enough but cluttery)
The details system is meant for "details" but the reality is, its a grass placement tool that isn't very good. You attach a texture to the system and it allows you to populate the terrain with billboard grass. You can use it with custom prefabs but it has issues, more info below:
- One polygon square grass/plant that will face the camera direction.
- It looks bad and very few games these days use this technique so it's pretty old too
Custom Prefab for Grass/Rocks etc (custom mesh / custom shader)
- It works but not really
- Placement Options
- Width and Height Scale Variation
- No rotational options, No align after terrain normal
- Results in a lot of floating grass
- No procedural way of placing it
- Doesn't support LODs
- This is a pretty huge deal.
Here is my test scene in URP + Grass Mesh, does not align to terrain
Here is the Unity HRDP Terrain Sample Demo Scene, with grass not snapped / aligning to the terrain normal
So how do you populate the world with rocks and debris?
Honestly there isn't a great way to do it with the original toolkit available. Neither the Tree system nor the Detail provide good and flexible placement options or object avoidance and if you want to use the grass system to place custom prefabs it doesn't support LODs.
Here is an image from a 3DBuzz video from 2011 in Unity 3, showing the Terrain Detail System. That's more than a decade ago mind you. It seems that even after 10 years this system works the same way with the same flaws. So yes, in general, I would say that this system would need a complete re-haul and Unity needs to take workflow & tools development a bit more seriously for the sake of the production of any future games made in Unity :D
To sum it up: To build bigger worlds you need the Unity Marketplace or your own tools programmer.
Shader Graph is pretty good, overall.
That said though some part of me feels like this should be a given already, ShaderForge, Amplify etc... there is a decade of work gone into Unitys options for node-based shaders already. What Unity themselves are offering are barely better than the other options.
Though at this point it might still just be better to use Amplify since Shader Graph is still very early days and not implemented across Unitys Systems (All the points above + some below).
You create Materials and assign what Shader Graph it should reference
- It's equivalent to the Material -> Material Instances in Unreal Engine
- You can create sub-graphs to encapsulate shader code for re-use in other Shader Graphs
- Hard-Coded variables in some systems can be accessed with the Reference if you create a Property in the BlackBox
Has a set of decent default shader templates to start out with for very basic usage
Complex Lit, Lit, Simple Lit, Baked Lit, Unlit, Particles Lit, Particles Simple Lit, Particles Unlit, Decal
No Cheap Subsurface / Foliage Shader out of the box
- Pretty big deal if you are an artist wanting to make foliage for Unity
- Have to find something on the marketplace or go have to go digging online to find a solution in URP
No Default Access to Light Direction, Shadows or Additional Lights
- Ties together with above problem, if you want to create your own foliage shader solution from scratch.Good thing there are some very nice people online that share their knowledge, here is what worked for me:
2021 Doesn't support Shader Graph for Post Process Effects
- It seems to be working in HDRP Newer versions
Sometimes buggy, I can't really explain it.
Sometimes inputs stop working, you can be getting Vector3 values out of one node and then not be able to connect it to a Vector3 input on another node. You have to re-create the whole chain.
- Sometimes when creating pin-nodes, for example I have a Float value coming out of one node, then I create a pin to organize my graph, the pin itself forces the float to become a Vector3 or 4.
Where to go from here?
I guess you might want some kind of summary of mine so I'll just give my answers in the form of questions that I answer.
I'm an Artist , should I use Unity or Unreal Engine?
Using Unity as an Artist, is a lot harder than using Unreal Engine. The reason is because you have to jump through a lot of hoops to get what want. UE5 has more features and is overall more user-friendly for Artists. Unreal Engine is exploding in popularity, which means its not hard finding resources and tutorials for it none of which are out of date.
Unity on the other hand lack so many things sometimes that you have to crawl through the dark web to find solutions for custom things that you might need.
What does this mean for Unity? Well to get the artist community on your side to create promotional work for free (essentially) Unity should focus on improving the approachability of Unity. Ie Ease of Use to get what you want/need on the toolside especially.
I am a Solo Developer should I use Unity or Unreal Engine?
I would say that it depends on your game scope and what you prefer coding in. C# is very straight forward, it's pretty easy to get up and running with some simple stuff in Unity. If you look at the issues I've listed above, Unity definitely has some issues when it comes to building worlds but it can most likely be fixed with marketplace addons.
Unreal has its own issues especially UE4 + Dynamic Lighting. I think one thing that is valuable for a solo dev to look at is up easy it is to make stuff yourself with the different tools and how well equipped the marketplace is to handle anything you might need. The unity marketplace is fantastic for example, so many crazy tools for world building there which are a lot more in-depth and intricate than the tools offered on the UE marketplace (in my opinion).
Don't trust me? Check Atlas out. You don't really see that kind of stuff on the Unreal Marketplace.
Why are you learning Unity?
- Initially I just liked the look of Unitys Bloom Post Process, it looked soft and magical
- My interest grew and I decided that I wanted to make a portfolio piece in Unity and at the same time learn how to use Unity
- I realized that there aren't a lot of learning material for Unity or guides on how to make art for it and what you need to know as an artist moving from other engines into Unity. (Even though there are a lot of studios that use Unity)
- That eventually grew into me deciding to take a C# Course for 3D Games in Unity
- One thing led to another and now I'm evaluating Unitys current World Building Toolkit & Tech since I might want to try and build a portfolio project that is a bit more organic and bigger using Unitys tools + Marketplace Tools.
What do you like about Unity?
- Unity URP is really light-weight. I love that, you get crazy high frame-rates, it feels really good.
- The renderer looks different from Unreal Engine, Artstation is over-saturated with Unreal Rendering looking projects. I think Unity has a nice look to it because of the differences in the renderers.
- I like C# , it's a bit more straight forward than UE4 C++. I've had a lot of fun coding in it though I havent had a chance to try Bolt or the Animation systems yet. They seem pretty solid at a glance though.
Here is a current WIP of my scene I'm creating whilst learning how to make art for Unity:
- Some part of me like that its a bit more elbow grease to get stuff done, but it's not really a good reason to put in an evaluation haha!
What do you dislike about Unity?
- I dislike that their world building tools are made for a singular purpose. For example the Terrain Tree and Details system. it's so specific that it should be called Straight Trees and Billboard Grass System. It's not flexible at all, plus the systems are more than a decade old.
- I dislike that there are several render pipelines, they are developing features that people want for different pipelines and the delivery of those are might or might not show up for the pipeline you are using. It's confusing and the whole thing feels divided in attention.
- From what I learned, They keep changing things: UI , Animation, Render Pipelines, Input Systems..etc, it essentially means the original design for these weren't future proofed enough or able to scale up to meet with the demands of modern workflows. It's too bad because so many changes has essentially led to making lots of resources out of date.
- To be blunt and borderline mean: Essentially it feels like the Unity team hasn't created a modern game themselves and all of their tools reflect their inexperience in the needs of devs & larger productions.
- I say this because in direct comparison you have Epic, who actually make very successful games in their own engine. Driving the development forward improving the lives of all the developers using Unreal.
- That said though, their latest sample game Gigaya seems awesome and definitely 100% in the right direction and I fully approve of this approach to things.
What Unity Marketplace items make up for Unitys weaknesses?
This is a bigger topic of discussion that I will probably cover in a future part of the blog.
Mainly because since Unity is lacking in some areas it has made the Marketplace Community prosper into something amazing. So there is always something good and bad with everything so I'll definitely go through some Marketplace stuff when I can :D
What do I have left to talk about?
Lots of things!
- Scenes / Collaboration in Teams
- World Building Tech
- Scene Management
- Lighting / Interior / Exterior / Open World
- Marketplace Addons
- And lots more... I honestly can't think of everything right now xD
But for now I guess this is it!
Until next time!