After the success of eradicating all the known bugs that survived the World Panel update, we have spent the last few weeks working in a more improved back-end system. Instanced Rendering. Through clever use of CPU to GPU memory batching, the total draw calls have drastically been reduced resulting in a much more efficient rendering pipeline. We’ve also thrown in some new Particle features as well as a slight improvement to the UI.
The biggest and most exciting development for this update is the anticipated Instance Rendering system. Draw calls are the bane of most performance problems in both single and multiplayer games. While graphics cards are constantly getting better and faster, they still have a fundamental flaw which cannot be avoided. The instructions telling them when and what data to draw comes from the CPU and its the process of sending these signals back and forth is the problem. While rendering a field of grass with 100,000’s of blades of grass would be a piece of cake for a modern GPU, sending 100,000 signals back and forth is very slow!
This is where instancing comes in, when models have the same mesh data, there is no point sending the data to the GPU for each duplicate object since it never changes, so Bright simply doesn’t do it anymore, instead the data from the first model is stored and then just drawn over and over again in different positions in the scene. And this is all done Automatically. Users will not have to set up any complicated systems whatsoever as its all done for you.
To clearly explain why this process is so awesome here is an example: Let's say you have 10 barrels in a scene. In previous versions the engine would draw them one by one, sending a signal each time totalling in 10 draw calls. Now, Bright can identify duplicated objects and stores the data of the first barrel and keeps it for later. This allows all 10 barrels to be drawn in 1 draw call. That's a 90% efficiency boost!
This is all happening under the hood of course, so to make sure users can clearly see what the engine is doing, we’ve added some additional information as to the number of draw calls in each render pass.
Changes & Improvements
Upon community request we’ve revamped the particle editor UI once more and think its now in a much cleaner and better place. While working in that portion of the engine we also added a new Orbit setting to allow for some very cool spiral effects and optimised data passing within the Particle Editor for more efficiency.
The Editor got a small UI tweak as well with some newer cleaner icons for the toolbar. We’ve also added a “Bypass Fog” option to disable rendering the fog effect for easier long distance editing. Dynamic Lights now have a Shadow Mod option just like Sun’s to allow for control over shadow strength and we added a new setting for Weather Layers which allow you to set a cool down period between triggers, to solve the problem where something like rain would stop and then immediately start again by chance (even through the probability of this happening before was low)
- Fixed bug where Occlusion checking was still occurring for models which were beyond their max render distance.
- Fixed bug where Point Lights were still rendering shadows beyond their max render range.
- Fixed bug where selecting a node in the hierarchy panel displayed a fire icon.
- Fixed bug where terrain was sometimes not drawn correctly in the SSAO pass leading to some strange visual errors.
- Fixed bug where particles didn't apply color correctly in the Particle Editor making them invisible.
- Fixed bug where color values for particles were not being correctly stored in the emitters.dat archive file.
- Fixed bug where creating a new emitter resulted in incorrect data being fed to the shader until a restart of the particle editor.
- Fixed bug where fog on terrain would break whenever there was an active weather layer.
- Fixed bug where some particle settings were remaining disabled even after timeline mode was turned off.
As we said before the 0.1.3 update series wouldn’t be adding many new features but rather improving and optimizing what we already have in place. Thus for the final entry of this series that’s exactly what we’re going to do. We’ll be introducing interpolated weather and room changes as well as revamping the 3D cursor to use a much more accurate positioning calculation, and of course, another round of performance boosts!
If you are interested in Bright Engine and want to snag up a free copy you are welcome to join the Discord community Ask questions to existing testers, get real time development progress updates or even download the engine to try it out for yourself!