GPU synchronization in Godot 4.3 is getting a major upgrade
godotengine.org
godotengine.org
- Can't use C# at all
- Has issues running on MacOS / iOS
Meanwhile as much as Unity irritates me, they're working on even better web platform support in Unity 6 and smaller runtime bundled deployments.
https://unity.com/solutions/web
I think if I was predominantly focused on traditional console/platform gaming it would be a different story.
[1] https://apps.apple.com/us/app/atlas-fury-space-arcade-game/i...
"Godot 4's HTML5 exports currently cannot run on macOS and iOS due to upstream bugs with SharedArrayBuffer and WebGL 2.0. We recommend using macOS and iOS native export functionality instead, as it will also result in better performance."
Additionally that game spins indefinitely on my iPad for which all browsers (including Chrome) are WebKit based.
https://docs.godotengine.org/en/stable/tutorials/export/expo...
It's a known issue - Godot 4 web exports 100% do not work properly on MacOS Safari / iOS.
There were two links that were posted. The vast majority of Godot devs are well aware of the limitations around web export in Godot 4, and the Godot devs themselves have said that you are better off sticking to Godot 3 if your intent is to release an HTML5 game.
That first link is a collection of web games (ostensibly in Godot). It would therefore be reasonable to assume that most of the developers behind those WEB BASED games were savvy enough to build them in Godot 3.
An export limitation that affects Safari by definition does not affect Chromium-based browsers. Repeating that Safari is unsupported when someone explicitly asks/talks about Chromium-based browsers just sounds like you aren't really listening to what you're being asked.
Also if you think developers knowingly releasing web apps (of any kind, not just games) that only work in one browser and/or straight up don't work on mobile at all is somehow remarkable, you might be very new to the web.
Furthermore, juvenile personal attacks are not appreciated (such as insulting comments like "you are very new to the web") and go against the spirit of HN. I'm done with this conversation because I feel like you are deliberately being antagonistic and are acting in bad faith.
>Currently, projects written in C# cannot be exported to the web platform. To use C# on that platform, consider Godot 3 instead.
https://docs.godotengine.org/en/stable/tutorials/scripting/c...
I know nothing about it, but I wonder if web assembly could help out here.
I guess there needed some trial-and-error in the gamedev world for about a decade to really nail down a nice to use but also performant graphics API design. Vulkan being originated from the Mantle API from AMD didn't help - since it was a low-level console API mainly accustomed to AMD's GPUs and really didn't seem like it would fit for a more "general-purpose" API spanning a huge range of hardware and can stand the test of time. And with Microsoft's DX12 hastely copying from AMD's initial design it also has all the same issues (The irony is that DX11 is still the best graphics API you can use in gamedev in Windows in terms of ergonomics and even performance - seeing many trying to dauntingly build a DX12 backend and end up performing worse than DX11...)
Nowadays I'm obversing that the industry has known these issues for a while and are experimenting with alternative API designs... there are some experiental render-graph extensions available in both DX12 / Vulkan (albeit in a limited fashion):
- DX12's Work Graph API as preview (https://devblogs.microsoft.com/directx/d3d12-work-graphs-pre...)
- Vulkan's VK_AMDX_shader_enqueue extension (https://gpuopen.com/gpu-work-graphs-in-vulkan/)
Other parts of Vulkan are clear wins. Pipelines with their explicit state look more cumbersome than the OpenGL state machine when starting out on a toy renderer, but they are absolutely invaluable in anything slightly more complex. All OpenGL based renderers that I've worked with ended up building a state management abstraction on top of OpenGL to work around the debugging nightmare of forgotten state variable updates. Pipeline add this state management at the driver level.
I've written a detailed comment about this before here (https://news.ycombinator.com/item?id=37843946#37845431) but for a much more comprehensive explanation by an engineer from Nintendo read the initial proposal for the VK_EXT_shader_object extension: https://github.com/KhronosGroup/Vulkan-Docs/blob/main/propos...).
And the slightly less-official behind-the-scenes tweet thread about the background for VK_EXT_shader_object: https://twitter.com/gfxstrand/status/1641914602756644867
There's also Casey Muratori's mail to the Vulkan advisory on 2015 that basically predicts this whole clusterfuck would happen: https://github.com/cmuratori/misc/blob/main/vulkan_dynamic_s...
It's a bit like how even the best performance-oriented engineers rarely go down to directly writing assembly to optimize their C/C++ code - sure you can do that, but excluding the rare hot spots it's mostly a waste of time. It is incredibly useful to get a debugger/profiler and observe how your code is compiled down to, but actually writing it is cumbersome and requires too much of a discipline with too many footguns.
On a tangential note: I am also excited to see whether Embark Studios will open source their engine once it's ready.
And reasonably so, since it will take quite some time to build an entire triple-A-grade game engine from scratch (not just in Rust, but with any language! Though building it in Rust will make things much harder since they need to first build entire ecosystems from scratch...)
I think Embark Studios ultimately do want to use Rust for their projects and are pursuing small R&D projects to go in that direction (rust-gpu and also their Kajiya renderer) - but they're first and foremost a game company that needs to release games for profit, so made the pragmatic decision of using UE5 at the meantime.
Respawns use of Source 1 was a similar story, they ended up rewriting practically everything in the course of developing Titanfall and Apex Legends, to the point that it's almost unrecognisable as Source at this point.
If you haven't taken a look at S&box recently it's looking a lot more like Unity now. https://sbox.game/news/scene-system
Also, indie games are a billion dollar market. Maybe it's time to stop using it as a synonym for "not serious." The consumer doesn't care that Undertale was made with Game Maker.
>There's also O3DE which last I checked isn't ready.
Literally no one cares about O3DE.
To me "indie" is usually more a reflection of budget, which heavily impacts graphical sophistication, size of the game (as in how many levels, how many hours of play, etc), and usually means the price of the game will be between $5 and $30. AAA I expect $60 and 100+ hours of playable content. Indie game I expect 5 to 6 hours and I'm pleasantly surprised when it's more. When it comes to choice of game engine, that usually means they prefer less flexibility but more simplicity and "free stuff" from the framework, whereas a AAA game might prefer maximum flexibility, but that comes with complexity. As in all things it's a budget (time & money) tradeoff, not necessarily an "are we serious" tradeoff.
My experience is much more the opposite, with plenty of indie games providing many hours of actual gameplay (including replayability) and plenty of AAA games inflating their runtime with long cutscenes and other fluff (or milking people for all they're worth through live service).
There was a time when Unity was the 'indie game engine' as well. Give Godot some time (especially since it's progress seems to be picking up steam.)
> UE5 on the other hand is leaps and bounds greater
UE5 has the benefit of standing on the shoulders of giants, not to mention giant-sized pockets of cash to spend on developing it. UE has been around since 1998, so we're talking a quarter of a century of development leading up to what UE5 is today. It also has the added benefit of having been used for a huge number of different games, so there's an additional level of refinement in the toolset that it offers, since it's had to adapt to suit so many games.
That's still the case, depending on how you define indie. I'm not aware of any major AAA game made with Unity.
Some Unity games I know of:
Genshin Impact (maybe the closest to "AAA")
Rust
Fall Guys
Escape from Tarkov
Cuphead
Fallout Shelter
The Elder Scrolls: Legends
Magic: The Gathering Arena
Super Mario Run
Mario Kart Tour
Hollow Knight
Untitled Goose Game
The latest round of WGPU improvements now has copying content into the GPU memory concurrent with rendering. That level of synchronization has been fixed. But it's still too slow.
I dread having to learn how things work down at that level.
By the way, what's the thread situation in WASM now? Previously, it was multiprocess with some shared memory, not real threads. Various real threading proposals were floating around. Did that happen yet?
It's my understanding that commands inside of a command buffer are guaranteed to complete in order. The synchronization must happen when you are `vkQueueSubmit`ing multiple command buffers, no? I think that's what they meant to say?
Per kronos:
> Commands are also guaranteed to start in the exact order they were inserted, but because they can run in parallel, there is no guarantee that the commands will complete in that same order
https://www.khronos.org/blog/understanding-vulkan-synchroniz...