Performance overview and bugfix


First of all I should apologize for a bug which led to inability to move on the GameShell, this was due to a conflict of inputs between platforms.

This update brings an improvement in render times for the default “baked light scene” and the ability to switch a copy of the same scene but with an unshaded (unlit) material (via [Y] button on GameShell or [I] everywhere else). Here’s a quick description of how I got here:

The last few days I’ve been researching ways to improve performance on the GameShell (or any low-end device really) and trying to pin point the bottleneck.

Initially I thought that it was the poly count, the use of separate textures per mesh and the texture’s sizes. But the models were quite low poly already and setting them all to a single material with a texture reduced to mere 64px didn’t yield any significant improvements.

This is when I decided to set a “control” scene, something that I could measure against. I’ve setup an exact copy of the scene but set all the meshes to be unlit and given the same draw distance the result was a 200-300% increase in frame rates. And changing the draw distance from 20 to 100, yielded an improvement from 5-20 frames depending on the location, but considering a 5x draw distance increase that’s pretty great.

The only differences between the 2 scenes were baked light and the lights themselves. The former couldn’t really be removed or improved upon within the engine, but simply setting the lights to be hidden gave me an increase of about 10-30 FPS, the downside obviously being that dynamic objects like the shotgun are no longer lit as nicely as they were, but given the hardware this is really not a huge surprise.

On top of that Godot’s light mapping is quite resource intensive for the hardware as well, at least for the scene that I’ve setup, which is a worst case scenario - an open outside scene. I believe almost the same effect could be achieved for free if lights were baked in Blender and joined in one or several atlas maps, you’d lose the ability to light dynamic objects based on the lightmap though.

In the end I can conclude that the biggest offender in terms of performance is the lack of any kind of culling besides the basic frustrum culling. Meaning that we’re rendering everything that’s in front of the camera including the objects behind walls etc, even if they’re not directly visible to us. Thankfully Godot has several systems to aid us in that, although somewhat tedious to implement. Perhaps if done right this will free up resources for us to have at least a few dynamic lights or other effects.

Files

Windows x64 23 MB
Version 1 Jan 24, 2024
GameShell x32 25 MB
Version 1 Jan 24, 2024
Linux x64 24 MB
Version 1 Jan 24, 2024

Get GameShell 3D Godot demo

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.