Stop Waiting for Godot
itch.io
itch.io
Happy to see Terry Cavanagh is trying Godot. I love Super Hexagon and VVVVVV, and am planning to play Dicey Dungeons in the future. Looking forward to see what he makes.
So, in the title here, the phrase is used as a double entendre in a discussion about no longer putting off learning about an application that is also named Godot. That's my read, anyway.
I think if there's any ambiguity about what might be best, and asking 'what engine' is actually a question at all, then Godot is probably the answer. If it's not really a question because you already know you require certain kinds of rendering or asset store dependency/workflow, then you've probably already settled on the engine that optimizes for those needs… but if it's more of a negotiation among competing needs, Godot rapidly becomes relevant.
I get that there's some message passing thing going on but I don't really quite get how the objects all bind to each other or where you put your logic for controlling things.
A scene seems like an interesting primitive, it's just hard for me to make sense of how to organize things into it and the tutorial basically just says add all the things you want to see on the screen into your scene and don't worry too much about wiring things up.
But I sort of feel like I don't have a real model of how things interact in Godot to make sense of what they're doing yet.
A qualified comparison is "Gamefromscratch: Choosing A Game Engine in 2021" <https://www.youtube.com/watch?v=rK6ulQaOpso>
> Linietsky stated in a presentation that the name "Godot" was chosen due to its relation to Samuel Beckett's play Waiting for Godot, as it represents the never-ending wish of adding new features in the engine, which would get it closer to an exhaustive product, but never will.
A 2021 Broadway production was 3 hours long. A 2013 Broadway production was 2.5 hours (including intermission). I couldn't find any shorter examples.
Some of Beckett’s other plays are much shorter.
"The game engine you waited for."
Then you could listen to this tune while waiting for it to compile Godot and tell you what went wrong:
A more fun play on words in my mind would be 'the wait for godot is over' or 'godot has finally arrived' but i understand how that wouldnt be as true to the spirit of the play
The analogy breaks down at where the control lies. In the play, the characters waiting have no control over when Godot arrives. So they're waiting on an external entity. With this article, the waiting is procrastination and the arrival is fully in control of the person doing the waiting.
But perhaps not this post.
For example, a simple scene with a wall intersecting the floor and a light placed on one side. In this scenario, you get weird light spilling around the edge onto the vertex where the wall meets the ground (see [0] and [1]). There's also poor handling of multiple light sources; if you cast a shadow and place a light directly on top of the shadow area, it's impossible to displace the shadow (see [2]). These sorts of things are very noticeable, and part of the recent work that they've just released was supposed to address this. However, these examples came from the most recent release, which made my friend begin considering other options with more robust lighting.
[0] https://imgur.com/rsxjV5u [1] https://imgur.com/kOzKQnL [2] https://imgur.com/NH9ZViP
Godot 4 should see a lot better results.
I can't find it, do you have a link?
https://www.reddit.com/r/godot/comments/p9hl5y/directional_l...
https://www.reddit.com/r/godot/comments/oa75ej/shadows_in_3d...
Last link is the one I read, but the others might help you as well. It’s Calinou btw, always write his name wrong.
Took me about an hour altogether to get pretty productive at making a non-trivial game. The engine is cool and takes care of a lot of routine things, like physics, collisions, and organizing things hierarchically.
I didn't like GDScript - even with the bolted-on type checker it felt way too loosey-goosey[1]. But I had the feeling gamedev is just a bit different from other software eng so it's worth being open-minded about these things (plus you can always use other languages once you've got a grip on the core systems).
[1]Mainly because a) signals remain stringly-typed, and they are really important, b) you can't enforce type checking (it's just a hint in the IDE) and c) I couldn't get my whole codebase 100% type checked.*
Unity, its closest peer, is a piece of crap in a lot of ways. But it's a piece of crap that has a lot of important features. I look forward to the day nobody ever has to reach for Unity again.
Currently, in comparison to Godot, Unity is better in regards to:
- C# as a first class citizen, really good performance, especially with DOTS
- extremely wide platform support, especially in regards to consoles
- many optimizations and functionality such as occlusion culling and LODs out of the box
- modern render pipelines that are geared towards lower end devices (URP), while others that are suited for more visually stunning projects (HDRP and i'd argue that also the default pipeline)
- a huge amount of tutorials, articles and examples of how to do something
- the biggest asset store of any game engine out there, providing everything from AI plugins, character controllers, inventory systems, real time occlusion culling solutions, billboarding solutions, model LOD generation solutions, dialogue systems and anything else that you could think of, really; it's an excellent source for throwing together prototypes and yoinking a few ideas of other developers after looking at their code
- really big share of the market is taken up by Unity, so professionally it makes sense to use it and learn it
- this also means that most of the external tools that one might want to use also integrate really well with Unity
However, Unity is also a lot worse in other aspects: - there is no networking solution that's actively supported
- DOTS and URP/HDRP were both haphazardly thrown together and feel broken
- frankly, in the past 3-5 years, it seems like Unity doesn't know what it wants to be and as a consequence feels inconsistent
- the closed source nature of it is also a pretty big problem for many projects
Who knows where the industry will be in 10 years, but personally i hope that Godot succeeds where jMonkeyEngine, Xenko/Stride, NeoAxis and many others have failed.I've been doing C# since .Net 1.0, have netcore contributions, and have to conclude that this is "pro" extremely subjective.
- Unity forces you to use ugly non-idiomatic C#.
- GScript is a language built for game engine scripting. It has deep knowledge of game concepts, as well as the scene graph.
- Rust/other via GDNative are just as good as DOTS.
- There is a GD build with first-class C#.
Can you elaborate on this?
Idiomatic C# is PascalCase public members. Look at the BCL. Yes, the capitalization of fields in Unity determines the flavor of property, buy that's exactly what attributes were designed to do.
disclaimer: I wrote the NET6 PR.
Agreed, however it also being purpose built not only makes it so that your skills will be non transferable, but also that learning resources for it will be more limited in comparison as will code libraries.
For example, last i checked the language also has some interesting restrictions, like no Singleton design pattern for example; that alone makes managing global background services in games harder. Edit: seems like you can sort of have Singletons now, though having some that are completely separate from the scene graph would be even better: https://docs.godotengine.org/en/stable/getting_started/step_...
There are some really lovely people making plugins for Godot as we speak (the terrain one is especially cool), however it will take years for an ecosystem to be built around Godot. Historically, it has worked out for some languages nicely, like Lua, but less so for others, like ActionScript. For some people a purpose built language is a boon, for others it's a drawback.
> There is a GD build with first-class C#
I think our definitions of "first class" differ. In Unity, you don't use anything else apart from C# and even when there also was Boo or their version of ECMAScript, C# got a really large amount of love in regards to documentation, examples and tutorials.
Since C# support is so new in Godot, that's not exactly the case and for example, as of now i cannot yet open a project in JetBrains Rider and get information about which API methods are slow and should be used with caution, or common code suggestions like i can for Unity.
Now, personally i believe that C# being supported is a good thing and even Godot having separate builds for versions with/without is an idea that makes sense, but there's still a lot of refinement to be had before it is truly usable enough so that you can breeze through projects with it and be sure that both your code will be performant enough (without having to go down to a lower level) and that you won't hit snags along the way.
The efforts of Unity to have their .NET workflow be smooth and comfortable cannot be praised enough - if they gave as much attention and consideration to the actual editor and plugin ecosystem (as opposed to deprecating features with no replacement, or releasing features before they're stable), they'd really be in a stable spot!
Oh, and you can also look at Xenko/Stride engine to see what another engine that uses C# and has had a bit more attention given to it looks like (even though the engine itself is somewhat half baked and doesn't have terrain support out of the box, much like Godot).
That said, i'm sure that the situation will only improve in the coming years!
If Microsoft hadn't bought Xamarin and rereleased Mono with a more permissive license than AGPL (so that Unity can finally update their Mono runtime), then Unity would have really met its downfall. If this (stealth) partnership between Microsoft and Unity didn't happen, I expect a lot of developers to have already moved on to Unreal/Godot in much faster rates.
Personally I found that the choice of programming language mattered much less than I thought they would, since I spent most of my time and effort on drawing rather than coding.
For example if I want to build a platformer, with tons of special effects, I can do this in about 2 days with Unity.
The asset store itself is Unity's biggest advantage. Want to make a game about finding Easter eggs in the woods, buy Gaia and you have your forest.
From a technical point of view , Unity is amazing. My one concern is the business seems to want to extract more and more from users. You went from being able to buy Unity to needing to subscribe, and subscribe to a bunch of other auxiliary services.
That said, C# is C# so your skills are easily transferable. I'd love to see another commerical C# driven option.
I'm not a big fan of how Godot tries to support 3 or 4 programing languages. This fractures your userbase and makes finding tutorials much harder. Although I will admit my very first programing language was Unity's JavaScript implementation.
Everytime I use unreal I'm blown away by how smooth it is (as long as I find what I'm looking for in their insanely huge toolbox), unity meanwhile just feels like constant roadwork.
Over the last five years it went from "not a professional game engine" to "a professional game engine". That doesn't mean it's a good one.
However, I'm seriously struggling to think some different scenarios. For example, how to structure the application in order to have some procedurally generated contents for a level and how to add that into the godot structure.
Or, another thing was I had some situations where it feels like I need to parametrize a packed scene with some other instances of a packed scene. Think of a toolbox filled with tools, which are again instances of other packed scenes. That grew into a really weird monster pushing paths of instances around, but became very unwieldy quickly.
At that point I'm confused if I have a mental block because I'm thinking incorrectly about the problem, or if godot is not a good fit for stuff like that, or if there is a great way to structure this in godot.
Dunno. Somewhat rambling, but maybe someone has some pointers there.
Plus the pattern for referencing child nodes as NodePath exports and just setting them from the editor, rather than hard-coding (and recoding) resource paths, makes UI design much much easier:
export(NodePath) onready var Header = get_node(Header) as RichTextLabel
Also HeartBeast's action rpg tutorial is a must[0][0]https://www.youtube.com/watch?v=mAbG8Oi-SvQ&list=PL9FzW-m48f...
You can store data anyway you like, so content can be a file, can be in a database, can be through a c++ extension.
Creating a game is often mostly about these choices I found. Whatever engine or language you are using. Maybe Godot just gets you faster to the point where you think about them?
https://github.com/lupoglaz/GodotAIGym
I have succeeded in modifying the interface to send images to a version of Google’s DreamerV2 RL learner. I have a simple test environment I could publish.
But I stalled because I kept getting a segmentation fault and I wasn’t up for debugging it. I have enough plumbing that it begins testing and makes it at most a few thousand cycles but this segfault eventually comes up.
I think it would be very cool to be able to make a game in Godot and then train an agent to play it using DreamerV2 or similar. I’ve still not posted my sample files but if someone responds here saying they would like to see it, I will try to push it all to GitHub.
I'd love a way to make Pytorch work in Godot. I see a lot of future in videogames like that, and it's also just plain fun to simulate RL agents. I'm reminded of the Primer youtube channel [1]
[1] https://www.youtube.com/channel/UCKzJFdi57J53Vr_BkTfN3uQ
Also suprising to me was seeing an app like Pixelorama built on top of godot. The fact they chose it over .net, java, gtk etc is pretty cool.
An alternative OSS 3D engine is Open 3D Engine (O3DE), more here: https://o3de.org/
This is a new Linux Foundation project. (Full disclosure: I work for the LF, though I don't have any connection to O3DE.)
For some reason, my brain has a hard time translating my ideas to scenes and nodes
Anyone knows if this is still the case? There seems to be a lot off stuff that you get off the shelf with Godot which I have to resort doing myself now, using Pixi.js
And it looks like they're making good progress on interop with JS/web code so the socket.io stuff should be possible now/soon: https://godotengine.org/article/godot-web-progress-report-9
I've been writing VRWorkout in GDScript for a bit over 1 1/2 years so far and there haven't been any major roadblocks.
Godot sure has some ways to go, but since it has been compared to Blender in another comment. Blender from 15 years ago is quite different from what is now and they still managed to create something like Elephants Dream with it.
Or look at Sonic Colors: Ultimate that is relasing next week. That's also made with Godot. Granted it's probably a heavily modified version, but that's exactly what's so good about it.
Does anybody know if this applies to the Oculus store?
The distinction you are bringing up between MIT and GPL licenses is an important one that I now know I need to understand better. Thanks.
This has happened previously, with PS3's OtherOS feature, so it's a very real concern.
We aren't on the official store yet but are working on it
Its a fork of the Crytek's CryEngine so its quite large and designed for bigger development teams rather than small indie developers learning.
Its very work in progress, barely supports some platforms, and has less documentation.
I'll wait for it to mature a bit , but this seems like a worthy competitor to Unreal/Unity.
Lua support is exciting