From Unity to Godot - can it fit my needs?

I’ve been meddling with Unity since 2016 and thus far it’s my engine of choice.
I have experience in Unreal Engine as I use it for work, while nanite is cool and the visual fidely admittedly impressive, I wouldn’t want to make a project with it.
I found it to be too “much” and it’s generally too convoluted at times for me to appreciate fully.

After the Unity fiasco I’ve been looking at Godot (like many) as a potential alternative and I haven’t really touched Unity since. I’ve yet however to make the leap.
I’ve looked at Godot again after Brackeys’ return and I’d like to give it a try.

However what’s been holding me back is that I own a wealth of useful assets for Unity already and there are a few niche things I’ve not been able to really replicate or see done elsewhere.
While I love Godot being open source, and I want it to be the Blender of game engines, I’d want to make the leap once the project is mature enough for what I have in mind.

What I’d love to know is what the situation is on these few topics from people who have more experience than me.
I can try these things myself, but I may miss solutions as I’m completely inexperienced with Godot and accidentally dismiss the engine as a result (plus it’s time and effort).
As such I’d love to hear your thoughts! Thank you for your patience.

My goals are to:

  1. Achieve a specific stylized look in 3D, with an emphasis on first person.
  2. Get the most out of as few keyframes as possible. This means secondary motion and interpolation shenanigans.
  3. Have access to code-generated vector graphics.

Nice to haves:

  1. SDFs.
  2. Very good extendable character controllers suitable for a nitpicky person to expand on.

Here I’ll list them in order of importance with more details.

  1. Rendering specific objects with different FOVs

Problem: Rendering the first person parts with a fixed field of view allows for artistic control regardless of camera FOV.
However, this means you can’t physically interact with world objects as your hands wouldn’t actually reach anything without cheats (see first gif).

Grabbing: [Link]

By rendering the arm with a changing field of view it’s possible to have the arm unaffected by the camera FOV, but also wrap around other objects, grab them, and bring them back to the desired first person FOV.

Stacking cameras means your hand could never reach behind an object (thus it’d be impossible to grab the object).
Being unable to change the FOV dynamically means you’d need to hide the transition between world FOV and first person FOV (eg: cp2077 does this) or change the camera FOV (eg: executions in doom will snap to a specific FOV).

Bows: [Link]

A common problem would be bows when drawing arrows. But also applies to rocket launchers (eg: borderlands with high FOV) and in general anything you can throw that isn’t very small.
Having the arrow in first person FOV means it’ll not look like it’s hitting the target.
Having the arrow in world FOV means it won’t be on the bow.
Spawning the arrow when it’s released (doing a switcheroo, which is what usually happens) means it’ll teleport in front (or behind) of the bow if the FOVs do not match (last gif).

Solution:
Draw the arrow with first person FOV and quickly transition to world FOV as it flies.
Have a second object that only casts shadows, while the main mesh casts no shadows at all.
Put the second object where the first would be if the first person FOV was equal to the world FOV (gif 3)
Minor distortions if you turn the camera, but otherwise flawless, whether the arrow moves quickly or slowly (gif 1 and 2)

Unity limitations/observations:
Only 1 camera is needed.
This trick can’t be done per-object, but rather to entire layers. So a number of layers need to be dedicated to this trick and pooled.
In the gifs above i use 5 layers, when a 6th arrow is fired the last fired arrow is moved to world FOV immediately.

Unknown if this can be done in Godot, would love more input. This is very important for my use case.

  1. IK and active ragdolls

Problem: making and juggling animations can become a mess and it’s hardly scalable when making variations. I’d love an approach similar to Overgrowth (see: [Video]).
The main problem is that animation programs will let you tweak each single parameter with a curve, but I’d only want 1 curve for the entire keyframe.
That way a value of 0 can be the current frame, 1 can be the current frame + delta to reach the next frame, allowing for extrapolation on top of interpolation.
This can be half-done in Blender by using the NLA editor, making each frame into a separate animation and then interpolating between them with a curve.
The animation would be baked in the process, so there’s still more special sauce to add (but if anyone has tips for the above, I want to know!).

I’ve been using the following assets to help myself in this endeavour:
Final IK: [Link]
Puppetmaster: [Link]
Dynamic bone: [Link]

Final IK extends Unity’s IK functionalities and has been really nice to work with.
Puppetmaster in particular has been super sweet for adding secondary motion and feedback.
Dynamic bone has been very versatile and achieved similar results for simpler use cases where puppetmaster would’ve been overkill.

I’ve seen there’s this repo for Godot, which clearly takes inspiration from both Overgrowth and Puppermaster: [Github]

However it’s 2 years old, mentions some caveats and a bug that’s still open as well.
What else is available? Is that repo what i’m looking for? Is there something even better for what i’m trying to achieve?

  1. Shapes (vector graphics)

See: [Shapes]

Just an amazing asset to draw… shapes!

Initially obtained after experiencing Unity’s line renderer (it’s been bugged since 2019 and has been bugged for at least 4.5 years)
But it’s super versatile and absolutely amazing to work with. It’s one of the things i’ll miss within the first few days of switching to Godot.

Does Godot have anything like this?

  1. Advanced toon shaders

Problem: free toon shaders tend to be a bit iffy and lack control, making my own is difficult, takes time and effort, may not be as good in the end.

I’ve instead been using paid assets for this, there’s a lot of valid ones, but i fiddled with these and liked them quite a bit:
Toony Colors Pro 2: [Link]
Flat Kit: [Link]
Quibli: [Link]

They seem to be tailor made for Unity as they hook into the rendering pipeline, what’s available in Godot?

  1. Feature complete, extendable character controllers

Problem: I’m very picky when it comes to how my controllers feel. I’d spend a month making one and i’d still want to tweak it further.
Initially what i tried to do was starting with a basic controller and tweaking it, but that never felt right.
I’d make my own, but then there’s slopes, moving platforms, stairs, steps. There’s a lot that can be added and tweaked and it’s been a rabbit hole for me.

I ended up trying character controller assets and some are quite good, see:
ECM2: [Link]
Character Movement Fundamentals: [Link]

This proved to be a very good base to then add whatever other mechanic i wanted while not falling into the rabbit hole.

How does Godot fare in this regard?

  1. SDFs

I’ve had quite a bit of fun with SDFs in Mudbun (see: [Link]).
While the performance is what it is, it’d be cool to have in Godot as well.

Is there anything like it available right now?

Once again thank you all for your patience. I know it’s a common topic and I’m incredibly grateful for any replies. Especially after my post turned into a wall of text.

I seriously hope I’ll be able to make the switch, if not now, then very soon. I look forward to Godot as a whole.

You have a long list, so I’m going to be brief. I don’t use Godot FOV support (not that Godot’s support is lacking in any way I’m aware of; I just don’t have a use for it), so everything I say here is based on a single constant FOV:

Grabbing is rather easy to do. I use raycasts from the palms, making this rather trivial.

I have implemented bows and arrows, and it’s also rather easy to do for the most part. I decided to use shape key animations within Blender (exporting to gltf) for drawing the bowstrings, but either Blender’s export or Godot’s import does not support it accurately. I haven’t bothered to look into very deeply.

There are a few publicly available character controllers, but I don’t know how suitable they are. I elected to make my own.

Godot’s animation support is very good, and supports keyframed animations well (with a possible bug in shape keys).

Godot supports ragdoll physics, but someone else will need to comment on how good that support is. My projects don’t use it.

If your GIF’s are representative of your needs, it will be a cakewalk for Godot.

Hey thank you for the reply! I wouldn’t expect people to tackle each point but i appreciate you doing so.

Using a single FOV would trivialize that issue, but it’d also cause the first person arms to stretch as the FOV increases, which is what led many developers to either stack cameras or find compromises.

The 2nd gif in the first link would be impossible for example!

For ragdolls, the ones i’m looking for specifically would be the same ones used in games like gang beasts.
On one end you have the animation, on the other a simulation, and you blend between the two.

Overgrowth uses a similar setup for falling animations for example, giving the player a bracing pose and having them flail around after being hit(16:30 in the video).

I couldn’t look at any of your gifs, as imgur won’t load for me right now, but with that caveat:

Animation
For interpolating between keyframes: There’s a very customizable blend tree system that can probably do what you want. Godot has a pretty good curve system, so you should be able to, from code, sample a curve of your own creation and pass the result to your blend tree or blend space to tell it how to interpolate between two animations.

I haven’t tried Godot’s ragdoll system, but here’s a video of someone combining ragdoll animation with keyframe animation - I don’t know if this is exactly the thing you want, but maybe it’ll tell you something about the capabilities of the system. Btw, in the video he mentions that springs apparently aren’t implemented in Godot 4 (yet?) - I see in the comments that these work out of the box with the Jolt physics engine, which is better than the built-in one and extremely easy to set up as a drop-in replacement for the default one (I tried setting it up last week, it took, idk, 5-6 clicks).

As for IK, I’m actually not sure… There’s a SkeletonIK3D node that seems to work just fine, but it’s deprecated, and I have yet to figure out what is meant to replace it.

Shaders
You can get pretty decent toon shading just by changing a few parameters of the built-in StandardMaterial3D, but also https://godotshaders.com/ has a bunch of free shaders that people have made and shared, including various toon shaders, outline shaders, etc. I don’t know about paid options, I do this as a hobby and try not to pour too much money into it.

Character controllers
First of all, Godot’s CharacterBody3D is just, out of the box, nicer to work with than Unity’s CharacterController. For example, its built-in ground check actually works? Consistently? Yeah, pretty crazy. So far, I’ve found it easy enough to tweak, but to be fair, I haven’t made anything super complicated with it. I made it work pretty well for controlling a little monowheeled robot, but that project involves no stairs at all.

A quick search for “character controller” in the asset library reveals four addons (all free, all using the MIT license). Clicking around a bit, two of them appear to provide their own new node type, one is a C# version of one of the others, and the last seems to be based on the built-in CharacterBody3D. Again, I have no idea about paid options.

1 Like

Thank you for your reply!

For animations, i think my best bet is to make an editor script/plugin of some sort that takes as input one/multiple curves and uses them to edit the animation keyframes for me by making a duplicate.

Looked up jolt, that looks way way better than the built in solution currently, thank you for the recommendation!

Godotshaders also looks nice, thank you for the link.

I’d say the controller is probably going to be sorted too.

My main worries right now are the FOV shenanigans, IK/active ragdolls (the link you sent seems to be similar to what i’m looking for but i need to look into it more) and a shapes equivalent.

About the latter, i tried to look around but only found 2D nodes instead of 3D ones which is a bummer.