How will you use bevy to render?

Bevy’s PBR system doesn’t seem to work well with voxel games


There are 90,000 blocks with 10 light sources. It will have a low FPS when moving, and can’t add more light sources.

2 Likes

IIRC, Greg said he’d be using Amethyst, not Bevy.

10 lights limit is about dynamic lights, is it not? If that’s the case then that’s not really a problem for a voxel game.
If someone tries to make a voxel sandbox game where every light source is a dynamic one, they are going to be in for a baaaad time. Players will ask why their 100x100x100 block of only light sources are frying their PC’s while giving them a single frame to look at.

90,000 blocks doesn’t really say much either. It’s all in how they are rendered.
If they don’t cull unseen triangles (marching cubes kinda deal) then you are rendering 90k x 2 x 6 = 1 million triangles. Whereas a properly setup scene would draw just 90k x 2 triangles or 180 k tris.
And even then, there are some optimizations one can make in just the triangle count alone. But never optimize before you have a sound foundation and only optimize when you run into problems.

And then there’s the question of batching. All i can see here is a bunch of colored blocks.
Are each of these blocks drawn one at a time with a specific color, or are they drawn in a single batch with just their coordinates and color info/UV’s being fed to the GPU?
Again, the difference is HUGE in the amount of data and processing needed.
Instancing is a technique where you say “draw this object at these coordinates” instead of telling the GPU to draw each and every cube separately.

With instancing, any decent graphics pipeline can easily draw millions of unculled cubes on even the most basic hardware with some resemblance of manageable FPS. And when they are properly culled or even made into a mesh, FPS can easily double under certain circumstances.

If Bevy doesn’t provide this functionality in some way to the programmer then it’s a bad engine. But i highly doubt they would do that.

3 Likes

Bevy is the successor to Amethyst and Amethyst died like a few months ago thanks to that, lol.So this is just a basic update of the Engine. :wink:

90000 unoptimized blocks, I bet you those are all Entities instead of one singular Mesh of Textures. It is impressive that those over 90000 Blocks even managed to render well like this. So yeah, batching is important for sure.

I dont think they have a dedicated Voxel Engine, but in that particular case it is better to have a custom Voxel Builder so customization and optimization could work better.

Also I am very soon designing the User Interface of Mechaenetia, at least for GUIs (Main Menu, etc), because there is finally enough basement work for me to understand how to actually make anything (I am really not a backend kind of person so I somewhat relied on @OvermindDL1 doing it for me, especially when it comes to structuring the whole thing in an orderly and professional fashion)

3 Likes

I am still seeing activity on Amethyst’s Github but i am not invested in either of them so yeah.

No, of course they don’t have a Voxel engine. That’s for the programmers to implement themselves.
But ability to use the GPU properly is a must. Otherwise it’s just another playtool.
Most other game engines (even Unity) can customize how things are batched.

2 Likes

Yeah I’m very surprised that 90,000 unbatched cubes are that fast as it is, 90,000 batched cubes will be a single draw call, so not slow.

1 Like

After more testing, I found that the program did not use GPU, so did other bevy programs, which may be the reason for the slow running.

2 Likes

Are you sure you did everything right? Did you install the Vulkan DEV Drivers on your Machine so you can actually test it?

2 Likes

The result is that Windows 10 shows the wrong data. In fact, the program uses GPU normally.

2 Likes

Add “unlit:true” can make blocks get rid of PBR rendering. As for batching,GPU Instance maybe a possible way,but it’s still unimplemented, and I’m not sure if there are some ways can be used in bevy now.

2 Likes

For a block renderer the chunks will need to be manually batched regardless, so no issue.

2 Likes