Replying to @jullerino @t3dotcodes
There weren't any errors. It just looked like this (minus the agent thats sorting it out for me)
A single project seemed to show up which I hadn't worked in for a week or so without any threads which was weird because I'd removed it.
Replying to @NinjoOnline @plasma_node
The limit is only for meshes where FixedSize = false
Send the mesh data to the client and use a pool of unfixed meshes to bake into fixed meshes.
CreateEditableMeshAsync is sync when CollisionFidelity is set to Box and the collision geometry replicates automatically
i implemented various optimisations and got it from p50=40ms, to p50=4-5ms
so an 8x speed up on average
and p99 before was 80ms which felt horrible
theres probably a bit more left to squeeze out plus i could compute the chunks in parallel but its not worth the effort i think
ok its fast again. this is a way more detailed voxel grid and way more explosions than would ever happen in game
average is 4ms and 99th percentile is 19ms which is like 50fps
only performance concern now is memory usage of all the meshes/textures on mobile i think
Replying to @benprototype @cryptidsoftware
Everything is simple to change, here I downsampled the same map to just 4000 voxels
Each voxel is now 5x5 studs. Chunks are now 30x30 (except for the ones on the edge)
It runs much faster when I do this and doesn't look meaningfully worse so I need to find a balance.
Replying to @cryptidsoftware
Chunks are 25x25
Voxels are 2x2
The marching squares are 1x1
Voxels can overlap chunk boundaries and some chunks can be smaller than others. Nothing is forced to line up.
I'm doing some boring performance optimisation stuff next so most of this will change
its a bit slow with this many explosions and chunk updates going on at once
i'll try profiling it and speeding up the slow bits next. it might also be able to run chunk updates in parallel but i've not tried that before
worst case i can just lower the voxel/render resolutions
I need to tune the noise, but adding material variations to the rock is pretty simple. I can use the marching squares to detect contours for each material and generates a few more meshes per chunk
Here's a few screenshots that show a bit more detail.
Each chunk is made up of a rock mesh, a grass mesh, and a mud projection.
Triangulating all this fast enough for real-time destruction was certainly fun.
Rendering the destructible terrain with meshparts. I'm honestly surprised the engine allows this.
Not being able to use a fragment shader makes texturing this so difficult. There's a few layers of dynamic meshes per chunk here to get the grass and mud layers to work.
Silencing issues is especially bad if you've got a big codebase because changing a type somewhere might cause errors in some other random file.
I have this static analysis tool that scans all files and looks for type errors. Catches a lot of issues before I even run the game!
Replying to @averlyst_ @MaximumADHD
I'm not sure I understand what you mean.
If you cast the entire object then you're pretty much defeating the point of the whole type system because issues like this are silenced
casting nil :: string | nil for just the optional properties isnt ideal but a bit better imo
Replying to @benprototype @realmaloni
Lots of things don't work at scale it seems, another example being the beam waterfall on my lovely toolbox terrain 🥲
I expect I'll have to use a lot of tricks to make this game look good
Replying to @realmaloni
I need to be able to zoom the camera out all the way to let players see the whole map.
Even on max graphics, the engine terrain turns so blocky at this distance.
Also the collision mesh of the engine terrain seems pretty unreliable, the grenade kept falling through it.















