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:
- Achieve a specific stylized look in 3D, with an emphasis on first person.
- Get the most out of as few keyframes as possible. This means secondary motion and interpolation shenanigans.
- Have access to code-generated vector graphics.
Nice to haves:
- SDFs.
- 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.
- 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.
- 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?
- 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?
- 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?
- 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?
- 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.