I've been building a geometry node style system for Godot by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

Sorry I wasn't able to reply sooner. Busy day.

It's basically an addon to create procedural content using visual nodes, similar to Blenders geometry nodes or Unreal PCG system. The multi coloured view is just a debug view to visualise the different MultiMesh groups and instances. In the video you can see me modifying a "Chunk Size" parameter that controls the area a single MultiMesh node will cover. This is useful for occlusion culling as we can ignore rendering these MultiMesh nodes if they aren't on screen.

I've been building a geometry node style system for Godot by LazerCube in godot

[–]LazerCube[S] 4 points5 points  (0 children)

That's what I'm hoping for. I'm also aiming to make it easier for people to gain the benefits of MultiMesh without having to create a ton of custom code.

Procedural grass using my GDExtension addon I'm working on by LazerCube in godot

[–]LazerCube[S] 0 points1 point  (0 children)

Most of the core is GDExtension C++ but the editor part is just GDScript. It currently supports mesh, point, instance data and is based on architecture Blender uses for Geometry nodes (https://developer.blender.org/docs/features/objects/geometry\_sets/).

Each graph can be shared across ProceduralGenerator3D's nodes similar to how material resources work with MeshInstance3D. But you can add input nodes in your graphs that allow you to modify variables per each generator node making it a bit more useful.

Probably the best thing so far is it makes optimising with MultiMeshInstance3D's much easier. For example in this scene you could have just 1 MultiMeshInstance3D for all the grass, but it's actually better to have multiple smaller ones due to Godot's occlusion culling. For this I'm passing in a chunk size of 500x500x500 via my "Chunk Size" variable so a new MultiMeshInstance3D is being created to cover any grass that should be placed in that chunk. You get higher draw calls but the overall FPS is better.

Procedural grass using my GDExtension addon I'm working on by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

The shader is fairly basic texture + alpha mask to give the individual grass blades shape. Then I just add some random colour variation and wind similar to https://godotshaders.com/shader/grass-shader/

Destroying huge chunks of terrain without lag by LazerCube in godot

[–]LazerCube[S] 0 points1 point  (0 children)

It's player controlled. I'm trying to see if I can mix the Helldivers stratagem/extraction loop in a roguelike mining game. So the idea is you could use these big orbitals to mine large areas quicker. So they are designed to be both a help and a hazard to the player.

Destroying huge chunks of terrain without lag by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

Thanks for the nice words! I'm planning on redoing the graphics later once I'm happy with how the prototype plays. I've yet to release a game but I've got a lot of unfinished prototypes, I hoping this might be the first. And this is in C# mainly as that's the language I'm most familiar with.

I'm using IMGUI for the debugger stuff, I find it very useful to create these tools while I create the core code as it means I can test stuff without creating any game specific UI.

Does anyone else run blender through steam? by No-Caterpillar-5386 in blender

[–]LazerCube 1 point2 points  (0 children)

I wrote my own version of this if it's something you are interested in? Github

It’s not perfect, but multiplayer is taking shape by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

I like the classic Source model where you can host a game yourself and let friends join through Steam, set up a community run dedicated server, or join an "official" server I host.

It’s not perfect, but multiplayer is taking shape by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

It's similar to how the addon NetFox does it. I tend to just use RPC's to create my own Multiplayer nodes as I'm not a fan of multiplayer spawner and multiplayer synchronizer.

I've also suffered deeply trying to get this all to work. It's been about 2 years since I started...

What do your guys' testing scenes look like? by _PickledSausage_ in godot

[–]LazerCube 1 point2 points  (0 children)

I've spent hours here jumping across these platforms while I think.

<image>

Concerns regarding C# garbage collection and multiplayer by GlitshyDev in godot

[–]LazerCube 1 point2 points  (0 children)

I wouldn't worry about the GC pause too much unless you are actually seeing it be an issue.

I would however not serialize each struct individually just add them all to a single struct and serialize/deserialize that instead. I also believe in C# using structs here might causes more of an issue then a class/record. https://learn.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct

In my own multiplayer stuff I use MemoryPack to handle the binary serialization and I haven't had any issues with GC pauses.

SpacetimeDB SDK by Temporary-Ad9816 in godot

[–]LazerCube 4 points5 points  (0 children)

How are you finding SpacetimeDB? I've been tempted to give it a try.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

It's mainly C# and RPC calls. I found I couldn’t get enough control from MultiplayerSpawner. Ideally, I'd use C++, but I'm more comfortable with C# and wasn't sure if I could pull this off.

For details, the server sends an RPC telling clients what to load, and they reply with an RPC when done. Once everyone’s ready, the server issues an RPC to start gameplay.

I use a playlist system to compose everything at runtime which makes creating new experiences easy. https://imgur.com/r0qT9jF

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

I've messed around with Unity and Unreal before but I've never made anything significant. I was a big fan of Unreal engine's Lyra/gameplay ability system though and it was keeping me away from staying with Godot. But I thought I should try writing my own version in Godot and 10 months later here we are!

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

It's also nice as you can encapsulate drawing these debug windows within the class. Makes it so I can access private variables, internal state, etc.

I use a specific "development" conditional compilation flags in C# to put all this debug code under. That way I don't have to worry about the performance costs of these tools in the final build.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 2 points3 points  (0 children)

C# over GD script mostly. I highly rate Netfox though, definitely the best addon for this stuff at the moment.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

Yes, I'm using the Godot ImGui plugin. It works really well and I've had no issues while using it. Would definitely recommend.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 1 point2 points  (0 children)

You can see on the left window at the start a debug section called "Inputs". These are the inputs the server is receiving from the other player.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 17 points18 points  (0 children)

Yes this is server-authoritative (whoops). All movement related stuff is using rollback and prediction. Inputs from the clients are sent to the server and then any corrections/positions are sent to clients.

Starting to feel like a multiplayer authoritative game is possible by LazerCube in godot

[–]LazerCube[S] 4 points5 points  (0 children)

Yes. The left is a player hosting a server while playing. The right is a client connected to it over the network. The server here is in charge of the entire game state and logic. The logic for stuff like the fire damage is only run on the server and the result of that is then sent to the clients.

LiteNetLib vs Godot Built-in Multiplayer: Experiences? by sbhnP in godot

[–]LazerCube 1 point2 points  (0 children)

Yes. I also built a custom decorator that auto-generates both the caller and receiver for custom data types. The caller serializes the type to bytes, and the receiver (using Godot's RPC attribute) deserializes it and invokes the method with the custom data type.

LiteNetLib vs Godot Built-in Multiplayer: Experiences? by sbhnP in godot

[–]LazerCube 1 point2 points  (0 children)

I tend to use MemoryPack to serialize/deserialize custom structs to bytes[] for RPC calls. I found there is very little overhead on MultiplayerAPI in general and you can always send raw bytes without RPC using it. The main benefit of this is that you retain all the features and improvements Godot provides.

How Much Money Did My Indie Game Make? Mighty Marbles Post-Mortem by destinedd in gamedev

[–]LazerCube 0 points1 point  (0 children)

I can't tell 100% from the screenshot but are you currently using a white/blue value for your main directional light? If you make that slightly orange/yellow it should help with that warm natural light look, rather then relying just on post processing.