Dev Blog
Hi, this is the Stranded III development blog (see also Forum Thread, Comment Thread).
Entry 116 - Going Godot! - November 26, 2024
I'm switching
Yes, I said a few blog posts ago that I won't switch engines because it would take too long.
But I changed my mind. Unity demotivates me too much for sooo many reasons. Even their recent announcements and actions (no runtime fee, Unity 6 features, future plans) can't change that.
Its future is uncertain. They may go bankrupt. No more updates would mean that games made with it will stop working sooner or later with operating systems and drivers updating and deprecating things over time.
Ultra annoying system segmentation. There are like at least 2 versions of nearly all major systems. Input, UI etc. They just deprecate systems and replace them with new ones which is hell for developers.
Render pipeline segmentation. You can only use a small fraction of the shaders and tutorials you find online because you have to find the stuff which matches the pipeline you're using. They plan to change that but I guess it will take years.
It's convoluted. Unity is huge and installing or updating it takes forever.
Last but not least: Unity can be really expensive. Depending on what you plan to do with it.
Enough of that! I switched to Godot and I think it was a great decision. It's free open source software. Everyone can use it for free. Forever.
Here are some of my first experiences and impressions:
I don't like GDScript and I don't plan to use it. It's slow - docs say C# can be up to 4 times faster - and I dislike the syntax. I'm pretty sure GDScript is a nice thing for getting started and it's perfectly integrated into the editor but even if I would like the syntax I wouldn't accept the performance impact. Also I simply love C#.
The default shader in Godot is crazy and already contains so much helpful stuff!
The transparency settings alone are gold and there's dithered fading and things like that. Great!
The UI is insane. I can only compare it to the old "Unity UI" (the game object based one) as I never tried that UI Toolkit HTML approach (it sounds horrible though. HTML is already a pain on the web. I don't want it in my games!).
It's very noticeable that Godot's UI is also used for the Godot editor because it has tons of very useful components that you can only dream of in Unity UI.
Overall Godot UI has a smart, very flexible and powerful design. It also appears to be quite stable and reliable. Features like icons and localization are already built in. So cool.
Color methods alone are much better than what Unity has to offer.
You want to change the brightness of a color? No problem! Godot got you covered. In Unity? You have to write your own helper function first! Not difficult but still time you have to invest. You're quicker with Godot!
This is just an example. I generally observed that Godot offers more useful utility methods than Unity does. Godot isn't always better than Unity though. e.g. It has a Mathf.Clamp but no Mathf.Clamp01.
No annoying .meta files for code! Finally. It's so much cleaner if you look at your code in a file browser or in git changes.
A lot of things and systems in Godot are very close to Unity so it's quite easy to switch without having to learn too much new stuff. In most cases when the systems are different there's a good reason for Godot to choose a different - and mostly better - approach.
Godot uses Transforms to express rotation. You can convert them to quaternions but the whole approach is quite different from Unity.
Editor scripting is a bit more complicated and a lot more painful than in Unity. But once you learned how it works it feels more powerful. Unfortunately for me the editor crashed a lot while writing custom inspectors but when running Godot with console you get error messages which can help to fix the problems. It always crashed because of my mistakes and not because it's unstable. Also it feels weird that you have to put a [Tool] attribute on everything which should be accessible at edit time but you get used to it quickly.
The 2D/UI editor isn't as mature and powerful as the one of Unity. You can do the same things but it's a bit more cumbersome. It sometimes doesn't select the "right" thing when things overlap and multiple clicks don't solve it. You actually have to hide things in such cases or select in hierachy. Also rotating things doesn't feel as good as in Unity.
Pivots are in pixels (unlike a ratio from 0 to 1 in Unity) and they don't update when you scale things. So whenever you use custom pivots and scale things you also have to update the pivot manually. This isn't a great design choice in my opinion. It's usually not what you want to happen.
Particles simply work in UI and you can choose between GPU particles (faster but less options) and CPU particles (slower but more options). The particle system is quite ok but not perfect yet.
You can tint UI images - but it's so much cooler than in Unity: You can increase their brightness by using higher RGB values. This doesn't work in Unity out of the box. You need extra shaders for that. Also in Godot you can automatically let the engine tint all child objects the same way if you want to! (modulate/self_modulate).
You can choose blend modes for images (add, multiply, ...) in editor without having to write custom shaders for that!
Godot has a basic tweening system built in. It's not as cool as DOTween but good enough - and easy to extend.
In my tests the performance was pretty good. I think in my particular case this was because of auto generated LODs. Yes, you heard right. Godot auto generates LODs of meshes on import (it can be disabled). It's a shame that Unity doesn't offer such an important feature out of the box.
Keep in mind: We're comparing a relatively old and expensive commercial engine with a younger free open source engine here.
You notice that Godot was created by people who actually create games and who keep improving the engine to make it easier to create games.
This isn't the case with Unity. Unity is a behemoth of a company with bad structures and bad decision making. They need to make money which highly affects their priorities. I guess the worst part about Unity is that they don't really make bigger games with their own engine. Attempts to do this, like "Gigaya", were cancelled.
Probably because they noticed that creating ambitious games just doesn't work well enough with their engine and that they need to add tons of custom stuff and hacks to get somewhat decent results.
So... What's the progress?!
I ported most of the procedual island generation. I'm using Terrain3D as the terrain system. It's much more powerful than my own basic terrain system that I wrote for Stranded 3 in Unity. It supports 32 textures instead of just 5 for instance. I'm also experimenting with an octahedral imposter plugin to improve rendering performance for larger objects in the distance (e.g. trees).
The main menu with most of the settings menus has also been ported to Godot to learn how UI works in Godot.
Another thing I added is the debug console which shows output (text and images), supports clickable links (opening URLs or local files) and allows to enter commands with auto completion.
Right now the "game" isn't playable yet though. You can only fly through generated terrains and change settings. Therefore what I plan to add next is a controllable player, a HUD, day night cycle and better looking water.
Stripping Things
To have a chance to ever finish this project I'm removing and simplifying a few things.
There most likely won't be multiplayer. It's not realistic anymore and it blocks me a lot mentally to design everything with multiplayer in mind.
Definitions are no longer plain text files but they are handled via Godots serialization system which stores them in a faster binary format. The downside of this: You need Godot to edit them. The upside: You benefit from Godots UI when editing them. This makes it MUCH easier to edit them. Also they should load faster because no plain text parsing is required anymore.
I'll probably also simplify and downsize some other systems while porting them to Godot.