r/gameenginedevs

Async asset loading when it’s already fast?

I imagine the answer is yes it’s still better because you don’t want ANY blocking

But basically I have a system where when you load a texture, mesh, material etc it instantly returns the next available ID for the resource and you can immediately apply it to nodes before it’s actually loaded (ie the ID points to an empty resource until it’s loaded)

So you could load in a mesh and get like MeshID(2) before it’s done loading so that by the time we go to draw to the screen it will be ready (and if not we will continue drawing the old mesh id as if we never changed it until it’s ready, so no gameplay or animation freeze)

What’s interesting though is even for big meshes, especially in release with the way I pack and retrieve them, it’s like nanoseconds to retrieve and microseconds to load

So you’d pretty much always get it loaded before the frame is over or very least the next frame

So sure it being async removes blocking in rare cases/in general (I mean you don’t want to block even for a few microseconds)

But I almost feel funny writing the docs/talking about “oh yeah don’t worry it will continue rendering the old one and any animations will continue and no freezing” but at most you’d have like maybe a 2-3 frame delay which you’d never notice anyway

Obviously I’m overthinking it but it’s more of, does the feature matter enough to talk about as a staple

Or is it more “oh yeah we load so fast that you wouldn’t have gameplay freezes anyway” lol

reddit.com
u/TiernanDeFranco — 16 hours ago

How do you keep platform code and RHI code separate?

Hello! I’m currently in the process of re-writing most of my engine. (It kind of just devolved into ai slop due to my own laziness and I wasn’t actually making any design decisions of my own, meaning that not only did I have no idea how anything worked, it didn’t even work the way I wanted it to)

I’ve written a basic platform abstraction layer that polls os events and translates it to my event and input systems, as well as being able to spawn windows.

I’m now at the point where I’d like to consider being able to do something with the screen, so I need to be able to get the window surface.

Now, I’m primarily developing my engine in Vulkan, but I’d like to keep everything outside of Vulkan-specific code as agnostic as possible. So, for example, I could port my engine to Apple’s Metal or whatever PlayStation uses in the future and only have to ADD a new renderer instead of REWRITING all of my code.

Now, as much as I can remember off of the top of my head, in order to make a surface, you need to call a platform-specific function. My current platform is SDL3*, and you need to call SDL_Vulkan_CreateSurface with an instance and the sdl window pointer. In order to create an instance, you have to get your platform-specific extensions, which you need to call SDL for.

So, how do you guys separate the platform (SDL) from the API (Vulkan) effectively and cleanly?

* I know SDL3 already abstracts platforms and stuff, but I’d like to treat it as its own platform. It helps keep SDL code out of everything else and makes porting easier for platforms without SDL support (which is little to none but not 0)

reddit.com
u/VinnyTheVinnyVinny — 18 hours ago

I miss the pre AI version of this community

I know with the current climate, that is a pretty divisive statement, but it does feel different.

I am not particularly against AI usage. I do use it a lot for research, bug finding, etc… I do feel like it is a great productivity boost if you frame its usage correctly.

I guess it’s just a lot of the excitement I used to get from seeing a new post in this community stemmed from the underpinning knowledge that a lot of work went into their respective project. I’m not saying the new posts lack effort, it’s just not the assumption anymore.

I know, I gotta get with the times, I’m just feeling a bit nostalgic.

reddit.com
u/ElPsyKongroo100 — 1 day ago

The Invisible Layer Behind Modern Multiplayer Games

Something I keep coming back to when working on multiplayer: the parts that matter most are the parts players never notice.

Nobody finishes a great co-op session and praises the state synchronization. They talk about the raid, the trade, the moment with a friend. The backend that made that moment real gets exactly zero credit — and that's the whole point of doing it well.

The asymmetry is brutal, though. Invisible when it works, fatal when it doesn't. A single desync turns a great session into "this game is broken." Players don't say "the authoritative state diverged from the client prediction." They just leave.

What's stranger is how much this layer costs to build. Every studio writes its own version. Custom replication, bespoke sync logic, hand-rolled netcode, project after project. A whole industry quietly paying the same tax to reach the same baseline — a multiplayer experience that disappears into the background.

I've been thinking about whether that tax is still inevitable. Whether the invisible layer has to be rebuilt from scratch every time, or whether the same problem keeps deserving the same solution.

I don't think it has to be. More on why soon, with a concrete example.

What's the worst "invisible layer broke and ruined everything" moment you've seen in a shipped game?

u/nandost — 1 day ago

Usagi Engine v1 Released - A simple Lua 2D game engine with live reload and cross-platform export

I made a small game engine called Usagi for prototyping 2D games as quickly as possible with Lua. It's free and open source and made with Rust + Raylib. I have been seriously working on the engine and games with it over the past month. I just released v1.0 yesterday and thought it'd be fun to share it.

Here's the project's homepage: https://usagiengine.com/

And you can view the source here: https://github.com/brettchalupa/usagi

The engine is used via a command-line, much like cargo. You can usagi init to create a new project. usagi dev to boot up the dev game that live reloads code and assets. And usagi export to generate cross-platform builds of your game for web, Linux, macOS, and Windows.

My motivation for creating Usagi was that I love using tools like Pico-8 and Love2D for prototyping and game jams. But I wanted a free and open source engine with a nicer developer experience. In particular live reload and easy web exports. Usagi embraces constraints and provides sensible defaults, like a pause menu with input binding, to try to help devs focus on the game rather than the ancillary parts of development.

Since the engine is open source, the hope is that if someone makes a prototype they want to turn into a larger commercial game, they can just fork the engine and customize it themselves, write more bits of it in Rust, and change the API as they see fit.

Rust was a particularly great fit for the project. I've made one public Rust game and a few unreleased smaller ones before Usagi. I experimented with using C, but I really missed cargo and all the crates. Writing tests, working with clippy. Just a great experience, as I think fans of Rust already know.

I'd love it if you check the project out and let me know what you think!

u/brettmakesgames — 1 day ago
▲ 10 r/gameenginedevs+2 crossposts

What do you think about Blender's status bar hints ? (we are trying to implement ours)

We wanted to add status bar hints to our software, inspired by Blender.

We found this feature really useful because it feels like the software teaches you how to use it as you work, so we decided to implement a similar system in our software.

Do you think Blender’s status bar hints is user-friendly?

Do you know an other software with this feature for more inspiration?

For some context, we're developing CYGON, a dedicated level prototyping tool. Our goal is to speed up and simplify the prototyping phase while integrating smoothly into existing workflows.

u/inspyr_studio — 1 day ago
▲ 76 r/gameenginedevs+2 crossposts

I am working on Uverse - a Web Game Engine with native exports!

Hello everyone! I've been working on a web-driven game engine called Uverse which I want to share more to the world! :)

The main idea is pretty simple, its to build directly in the browser instead of being tied to a single machine or setup and, as for now planned, to make optionally multiplayer-server functionality easier too thanks to the custom scripts.

And while it's web-driven game engine, it will still have the option to export it into a native game with Vulkan/Metal/Direct/WebGPU thanks to wgpu!

I'd appreciate your support & feedback! =) Also if you have questions, shoot away here! Also any ideas & thoughts is more than welcome! I have huge passion to work on that project and I've been working almost non-stop for half year already!

Twitter: https://x.com/uverse_dev
Discord: https://discord.gg/BdEGVZg2E

u/Chinafreak — 2 days ago
▲ 29 r/gameenginedevs+1 crossposts

Rendering engine recreating quake 3 strafe jump and plenty more.

Got my interest back in graphics and always wanted to recreate the FPS movement of Quake, while also loading the Quake 3 map that I played for thousands of hours.

The engine support glTF (PBR), skinned meshes, animation and more. Integration with the Jolt physics engine and Imgui.

The driver back-end support Vulkan, D3D12, D3D11 and GL. Also ported for Android.

I've the project as open source: https://github.com/0Camus0/T850/agents?author=0Camus0

I do this for fun, but I might make a small game.

youtube.com
u/LordDarthShader — 2 days ago

Anyone who knows C# and wants to help with this engine?

[GitHub repo]

It’s a 2D game engine (MonoGame backend) inspired by GameMaker 8. It includes its own IDE (built with WinForms) and an interpreted programming language that I wrote myself.

The whole project is written in C#.

I'm doing it mostly for fun and challenge, but I have almost no time to work on it and I would really love to get some help and contribution, for the core engine functionality mostly. If someone finds this project interesting, he is more that welcome to check the GitHub repo and see if he can contribute. It's a very cool project!

The language—definitely the biggest challenge in the project—is a simple dynamically typed language. When I started, I had zero knowledge of how to build something like this. I didn’t even know I was making an interpreter; at first I called it a compiler. It was a personal challenge, and I wanted to figure everything out without using any resources or tutorials. My mindset was basically: “I need to write software that takes a text file containing code and just does what it says.”

Somehow, I made it work. In the beginning, running an empty loop counting to 1M took 7 seconds. After a lot of performance work and rebuilding parts of the system, the same machine can now run a 30M loop in 2–3 seconds. Pretty nice improvement.

Here's a YouTube video showing me using the engine to build a little game

Anyway, add i said, these days I barely have time to work on the project, so I decided to open-source it. I’m hoping people here will find it interesting and help turn it into something real.

u/Alert-Neck7679 — 1 day ago
▲ 109 r/gameenginedevs+1 crossposts

How I made my Zig gameplay code hot reloadable

A couple of months ago I made the zig parts of my game’s codebase hot reloadable. A few people have asked me about challenges and issues with doing that, so I wrote a blog post about it.

Not a how-to tutorial, but rather “this is what I did”. Hoping it will be useful to someone trying to do the same thing :)

madrigalgames.com
u/unvestigate — 3 days ago
▲ 17 r/gameenginedevs+5 crossposts

Would love feedback on the first teaser for our upcoming action-adventure game, The Ultimate Twins

Hey everyone,

We’re currently developing The Ultimate Twins, an action-adventure game focused on immersive storytelling, cinematic gameplay, and a world inspired by rich cultural narratives.

We’ve been quietly building the project for a while, and recently decided it’s finally time to start sharing the journey publicly and connect with the community.

As a first step, we’d genuinely love to hear your thoughts on the Teaser we released back in February:

https://www.youtube.com/watch?v=bJsKIA_jvqw

We’re especially interested in hearing feedback on:

Character designs

The overall atmosphere and tone

Combat presentation

Visual style and world design

What stood out to you most (good or bad)

We still have a long road ahead, but we’re excited to finally start engaging with fellow gamers and developers here.

Looking forward to hearing your thoughts.

u/TheUltimateTwins_Dev — 3 days ago

Engine Architecture Deep Dive: How Far Cry New Dawn constructs its Perspective and Inverse Projection matrices in SIMD

I recently spent a few weeks reverse-engineering the Dunia Engine's rendering pipeline to see how a AAA engine handles its per-frame matrix construction.
The write-up breaks down how the engine interleaves _mm_unpacklo_ps instructions to build the matrices, how it handles asymmetric frustum offsets for the camera, and how it avoids heavy MatrixInverse calls (like Cramer's rule) in favor of a hardcoded, inline algebraic "fast inverse" to save CPU cycles and a lot more

Read the full 6-part series here: https://zero-irp.github.io/Proj-Blog/

reddit.com
u/zer0_1rp — 2 days ago

How do I use Qt with the Editor of my Game Engine?

My Game Engine uses SDL3 to create the Game Window and power Input for the Game. But now I want to write my Editor using Qt. How do I do that? How do I show my Viewport which is rendered in Vulkan? And how do I integrate it into the main loop of the Game Engine?

Thanks for Advice in Advance!

reddit.com
u/No-Foundation9213 — 2 days ago
▲ 25 r/gameenginedevs+2 crossposts

Mercury (Apple Native Game Engine) Update #2

mer·cu·ry

Mercury is an Apple-native game engine focused on Metal, Swift, and Apple Silicon without cross-platform rendering abstractions.

SwiftUI for the editor shell for native UI workflow, while the editor components and runtime systems are rendered directly with Metal.

A modular WorkspaceToolbar and Sidebar system designed around flexible editor workflows.

USD models (.usd)

ASTC textures (.astc) are used for GPU-optimized texture storage.

CAF audio containers (.caf) are used for low-level, system-friendly audio streaming and processing.

M4A audio (.m4a) is used for compressed, distribution-ready audio assets.

JSON is used for runtime-oriented data

XML is used for hierarchical or tool-driven data

All authored data stays tool-agnostic and engine-independent.

Video Timestamps

00:00 - AnimationSystem
00:30 - MaterialSystem
00:55 - WorkspaceToolbar
01:00 - Sidebar
01:05 - Visual Scripting
01:21 - Asset Library
01:36 - Material Library
01:54 - Split View
02:49 - Terrain Builder
03:58 - RuntimeWindow
04:24 - In-Game

Editor is for macOS and iPadOS

Engine confirmed working on iOS, iPadOS, macOS, and tvOS from a single codebase.

u/Lithalean — 3 days ago
▲ 65 r/gameenginedevs+3 crossposts

Updated Grass System

Updated grass system to use instanced glb file with billboard grass clumps instead of procedurally generated grass blades(couldnt get this to look right)

u/underwatr_cheestrain — 3 days ago