Graphical Rendering

Hi i follow Mount & Blade Bannerlord and recently i’ve seen they talked alot about modifications to engine they made to make it render faster and better even on low end pc’s ,this took me to a lot of questions . How does it works here ? Can it be made better? What are Limits ? I’m making a game with a lot of soldiers ,and it is FPS soo quality (at least i will try) will be some what high ,or at least medium .I intend to reach at least Skyrim graphics and put at least 300 soldiers each side ,will it be reasonalby possible ? will it be heavy or slow? I’ve had some mods on Skyrim and spawned around 500 companions without lags soo … i dont know …
And i dont know anything about graphical rendering of engine and all of that stuff … Soo i any one could help me with this at least by generic idea on what to expect and what are limits here ?
By limits i intend Limits of rendering, how many different Hight/Medium Quality at time .
By limits i intend actually limits for graphycs ,limit of object and of theyr quality

What do you mean by “limits”?

I’m assuming he means roughly how many models can be rendered without dropping FPS unacceptably low.

To answer @angel999’s question, there’s really no way to say. It depends entirely on how you design your game, how those models are displayed, and what kind of graphics hardware it’s running on. If you’re doing lots of CPU-intense work per soldier, your game will be CPU bound before it will be GPU bound. If you’re not careful, you can hit draw count limits (too many individual models rendered by the GPU per frame - each “draw this model” call takes time to reach the GPU, and these calls take far more time than actually rendering the geometry unless the geometry is hugely complex). It also depends on how expensive your shaders are - complex shaders could become a bottleneck also.

In short, jME won’t limit you any more than OpenGL/the graphics hardware will, but you’ll need to understand OpenGL performance traps and what causes FPS drops and the techniques you can use to work around those. You’ll also need to spend time profiling your game and find out where precious rendering time is being spent if you hit unacceptably low limits.

2 Likes

Rendering 300 or 1000 characters is possible.

To get a general idea, lets say all are animated, 10k tris each. for 1000 chars that would be 10M tris. Now, not all of your characters are visible at the same time, well unless you’re viewing them from far. But let’s say all are visible in the camera. 10M animated tris is quite a lot.

One optimization is Level of Detail, characters that are far away do not need the full 10k tris, since a lot of tris will be even smaller than a single pixel and not at all visible. A character at a certain distance will use let’s say, eg 5k mesh, at further distance 3k mesh and really far away 1k mesh.

Thus, let’s say 95% characters are far away, from 10M tris, we are down to 1450K tris.
You can make even smaller mesh for more distant characters and get even less and tweak the distance/number of tris so that the decrease of visual quality is not apparent.

Another optimization is to reduce number of draw calls. 1 draw call for 1k chars = 1k draw calls.
Do some characters share meshes? share animations? If yes, instanced drawing can be used to render multiple characters with a single draw call.

Are the distant characters not moving at all or are some moving in sync? Billboarding can be used for very distant ones.

Here is some video showing animated billboards (Animated Billboards - YouTube). 16k animated billboards are rendered.While the animation in the video is not smooth, nothing is stopping from making it so.

If you make a good billboard system, you can get plenty of chars showing, 100k chars should be no problem.
In the end its about using your resources wisely, use more for close objects, since these need to be detailed and use less for the further ones.

2 Likes