Open christianclavet opened 5 years ago
I was thinking of trying to implement it in the ECS renderer module fork I have. have you seen any already-existing implementations out there for a high-level renderer? What i was thinking was just if an entity has a
the real benefit would be to start integrating indirect command buffers too likely... https://bazhenovc.github.io/blog/post/gpu-driven-occlusion-culling-slides-lif/
It's an approach I've been thinking about, doing the rendering almost completely on the GPU. Although dealing with mesh and texture data would be problematic, likely requiring them to be grouped in a large buffer/texture array. Ultimately if using normal instancing, along with low-overhead Vulkan with multiple command buffers, it might be fast enough to do it just on the CPU even for extreme cases, which would be a significantly cleaner approach I believe.
yea cpu occlusion and instancing is going to be better for most use-cases. Once terrain is done then it would benefit from the indirect command for static trees and landscape assets cause that's really the only use-case where it becomes necessary if you want the massive landscape.
https://github.com/GameFoundry/bsf/issues/364 referencing this issue as it's tied to the instanced skel anim
It's called GPU Instancing or Hardware instancing.
Here is a video showing how it can improve performance of rendering more meshes (Unity Example) https://www.youtube.com/watch?v=fryX28vvHMc
From the video, you can have 100 000 entities on screen with almost no performance degradation, since the mesh buffer reside in the GPU memory and is instanced from there to build the scene.
Here is render stress test using the same technique on UnrealEngine: https://www.youtube.com/watch?v=GmFYPotzLhc
In almost any scene that need to be realistic there a need to have multiple instance of a model (building structure, props, vegetation), this technique will improve performance a lot and will help creating incredible realistic scenes using the engine.
I asked and it's integrated in some form as low level code in the engine, would be great to have access to this as a high level function and also in the Banshee Editor (copy paste and checkmark?).