Bright Engine v0.1.5c Released – Performance & Optimisation

May 1, 2019
TABLE OF CONTENTS

Here we are at the final update of the 015 update series, happy to present a significantly more stable engine! We bring this update series to a close with a significant boost in performance, drastic improvements to the tools & Editor Interface, and, as promised, the biggest bug-fixing update released to date!

New Features

Object Locking

As the title might suggest, this update was not focused on adding new features, so there is not much to discuss here. However, we did add an object-locking system!

Whenever an object becomes locked, it can no longer be transformed or selected using the mouse click (it can still be selected via the hierarchy panel). This is a small useful tool for preventing edits to objects that you are happy with its settings, for example, terrain. Locked objects, when selected, have a yellow bounding box as opposed to the normal green, so if you try moving it and it isn’t working, you won’t be tearing your hair out wondering why, plus if you decide you do want to edit the transformations of that object again in the future then it can simply be unlocked at any time.

Changes & Improvements

Render Pipeline

The primary focus of this update was improving performance while fixing the large plethora of bugs that have accumulated over the past few updates. But before we dive down that rabbit hole, other improvements to the rendering pipeline and Editor were made.

Starting with models, the importing system got a bit of a makeover due to the large number of crashes that would occur if things were exported from a modelling tool incorrectly. Most of this was bug fixes which have been listed in the next section. However, aside from this, the architecture of Bright Engine’s data handling within the RAM was completely reworked, which saw enormous improvements to loading times!

Model LODs

In addition, we fixed the LOD system, which was causing strange rendering problems in regard to shadows, while also adding a new button to reload the selected model’s textures if they have been edited outside of the Editor.

Animated Models have long been a problem within the engine, so we made some strides forward here as well. FBX skeletal animated models are now fully supported with no more weird and random glitches. Sadly there are still some issues with the DAE format, but it’s a relatively new addition to the engine, so we’re aiming to have these fixed up pronto!

Next, we took a look at the terrain and found a bountiful collection of ideas on how to improve it further. Sadly only two made it into this update, but more will be introduced in future. First is the introduction of Parallax Occlusion Mapping onto terrain objects to create even more realistic environments!

Dynamic Foliage

Second was a minor update to Dynamic Foliage which now snaps itself to the terrain, preventing floating patches of grass on a sloped section.

SSAO

Screen Space Ambient Occlusion has long since had some issues when it came to transparency. Much like Shadows in v0.1.5a, the SSAO effect uses geometry-based calculations since it is a significantly faster approach. But in v0.1.5b, we introduced alpha consideration into the shadow rendering pipeline, and in this update, we actually just took the same concept and applied it for SSAO as well.

We also added a new setting to control the kernel size of the calculations for SSAO. While this is quite an advanced feature in terms of knowledge, the general principle is the greater the kernel size, the more accurate the effect is at the cost of performance. Originally this was fixed at 64, but now you have complete control over it within each zone.

Editor

The last set of improvements before we talk about the performance-related stuff is changes made to the Editor. We’ve moved a few things around for a more fluid workflow while adding a few minor new features. There is now an FPS counter in the bottom left corner so you can see general performance without having to enter diagnostics mode, we’ve added a shortcut button within the animation settings of a model object to quickly open the animation manager, moved the view filters from the Render Panel to the Menu bar under View and adjusted a few default values of some settings to more sensible starting values.

With the continued UI improvements, the World Panel and the Animation Manager have now had their UI updated to the new components resulting in a much nicer-looking interface for both!

CPU & GPU Performance

Now let’s talk performance. This has been something that has steadily been declining with each update despite our best efforts, and we felt it was time that we did something about it. After having the privilege of talking with some leading software engineers within the game development industry, we have begun our drastic improvements to the rendering pipeline, starting with the rework of Occlusion Query. The introduction of Frustum Culling, next frame comparison and adding clip planes into the pipeline saw a performance increase of over 170%!

But it wasn’t all GPU upgrades, we moved our attention towards how the data was being extracted from RAM and then passed between the CPU and GPU. Sometimes it can be quite horrifying how badly something was originally created, but given we are in the business of constantly improving our code as we learn more, it’s always fun to see how far we’ve come. So we have optimised the data handling of:

  • Skeletal Animation
  • Instanced Model Rendering
  • Render Panel Settings
  • OpenGL Viewport Resizing
  • Real-time Shadows

Performance is still far from where we want it to be, though that’s always going to be the case as we aim for the best results with the best performance. For now, however, our community can enjoy a good boost, improving their experience within Bright Engine.

Bug Fixes

World Editor

  • Fixed a bug where UV’s out of the range of 0 to 1 don’t get drawn.
  • Fixed a bug where objects moved with the Grab tool didn’t save changes to .DAT files unless another setting was changed.
  • Fixed a bug where starting the editor with Bloom or SSAO disabled in the project caused a falsely triggered error message.
  • Fixed a bug where editing the first addition of a model after it has been added to the scene caused a crash.
  • Fixed a bug where duplicating the first addition of a model after it has been added to the scene caused a crash.
  • Fixed a bug where selecting an object via the hierarchy would not show the 3D cursor.
  • Fixed a bug where selecting a model after selecting a light caused the model settings to appear in the wrong order.
  • Fixed a bug where 3D cursor modes for objects that can’t use them could be selected which occasionally caused a crash.
  • Fixed a bug where loading a zone after a room was added with weather settings and then deleting that room caused a crash.
  • Fixed a bug where models with missing textures in their material would render using textures from the previously drawn models instead of dummy textures.
  • Fixed a bug where importing a model with no material caused a crash.
  • Fixed a bug where importing a model with a material with no textures caused a crash.
  • Fixed a bug where importing a model with a material with textures assigned in the wrong order caused a crash.
  • Fixed a bug where importing a model with a material with missing textures caused a crash.
  • Fixed a bug where changing a texture in a material within the editor sometimes caused a crash.
  • Fixed a bug where enabled/disabling animations on a model didn’t start playing the animation unless another setting was changed.
  • Fixed a bug where the animation manager was triggering update functions when it wasn’t necessary.
  • Fixed a bug where selecting a different Set and then a different sequence sometimes caused a crash.
  • Fixed a bug where removing an animation sequence within the animation manager would not remove the selected sequence but rather the one at the end of the list.
  • Fixed a bug where changing to a different animation set with the first sequence selected would not update the UI correctly, renaming the first sequence of the newly selected set incorrectly.
  • Fixed a bug where adding a new Animation Set in the Animation Manager after a new set was just created but wasn’t renamed caused a duplication of data that led to crashes later.
  • Fixed a bug where hitting the enter key in the Animation Manager caused the annoying Ding sound.
  • Fixed a bug where the Terrain Vertex Normal debugger displayed incorrect values.
  • Fixed a bug where Dynamic foliage did not translate to the same position as its parent terrain chunk.
  • Fixed a bug where moving terrain with the 3D cursor did not update the position of its dynamic foliage.
  • Fixed a bug where changing or removing a terrain texture caused the old texture to linger in memory (memory leak).
  • Fixed a bug where changing or removing a foliage texture caused the old texture to linger in memory (memory leak).
  • Fixed a bug where Spot Light Shadows were not rendering correctly.
  • Fixed a bug where certain Vertex Array Properties were not being properly uploaded to the GPU during Instanced Rendering.
  • Fixed a bug where if the core of an array of instanced models was no longer being rendered due to lod, SSAO would not be drawn for the rest of the instances.
  • Fixed a bug where if the core of an array of instanced models was no longer being rendered due to lod, Directional Shadows would not be drawn for the rest of the instances.
  • Fixed a bug where if the core of an array of instanced models was no longer being rendered due to lod, Omni Light Shadows would not be drawn for the rest of the instances.
  • Fixed a bug where if the core of an array of instanced models was no longer being rendered due to lod, Spot Light Shadows would not be drawn for the rest of the instances.
  • Fixed a bug where if the core of an array of instanced models had “No cast” enabled in its settings, all models within that instance would not cast Omni-light shadows.
  • Fixed a bug where if the core of an array of instanced models had “No cast” enabled in its settings, all models within that instance would not cast Spotlight shadows.
  • Fixed a bug where if the core of an array of instanced models was set to animated, all models within that instance would also then become animated in the SSAO Pass even if they were set to not.
  • Fixed a bug where if the core of an array of instanced models was set to animated, all models within that instance would also then become animated in the Shadow Pass even if they were set to not.
  • Fixed a bug where if a LOD level consisted of multiple meshes, only the first one would be rendered.
  • Fixed a bug where the wireframe display didn’t work correctly.
  • Fixed a bug where closing a project after a zone had been loaded caused a crash.
  • Fixed a bug where the animation manager was triggering unnecessary outputs after loading a project.
  • Fixed a bug where loading a zone with a sun that has not got a texture assigned to it caused a crash.
  • Fixed a bug where the Model Path of a model Object was no longer visible.
  • Fixed a bug where disabling animations on a model Object would also disable the UI Button that allows you to turn them back on.
  • Fixed a bug where approximately half the texture data was not being cleared correctly when switching between zones. (memory leak).
  • Fixed a bug where switching between zones sometimes caused a crash.
  • Fixed a bug where the object placement panel was sometimes still visible when an object was selected.
  • Fixed a bug where the UI of the Terrain Painting Panel was enabled even when no layer was selected, and using any of the settings would cause a crash.
  • Fixed a bug where using the model brush would deselect the active terrain object causing a crash

What’s Next?

It’s time Bright Engine started becoming an Engine instead of a glorified world-building tool. The 016 update series will be introducing Actors, Waypoints, Audio and Physics while also improving what is already in place even further. Plans for Shadow Baking, a new Particle Suite, further expansion to lighting and post-processing effects, as well as laying the groundwork for scripting. It’s going to be a busy series, and we can’t wait to get started!

Home » News » Patch Notes » Bright Engine v0.1.5c Released – Performance & Optimisation
Bright Engine 2022 R3 Released – Performance & Optimisation

Bright Engine 2022 R3 Released – Performance & Optimisation

Continuing on from the upgrades introduced in R2, the engineering team have been redesigning major parts of Bright Engine’s rendering system. Plenty of redundant code has been removed, and significant chunks of the CPU-sided code have been rewritten to be both more memory efficient and reduce GPU idling.

Bright Engine 2022 R2 Released – Performance & Optimisation

Bright Engine 2022 R2 Released – Performance & Optimisation

It’s been two months of an architectural overhaul for the Bright Engine render pipeline. The engineering team have been making substantial changes to how the engine draws the scene, resulting in significant performance boosts without loss of graphical fidelity. Let’s dive under the hood to see what’s changed.

Bright Engine 2022 R1 Released – UI & Resource Management

Bright Engine 2022 R1 Released – UI & Resource Management

After months of programming, the time has come again to show off what our engineering team has been up to. A lot of under-the-hood architecture has been rewritten, drastically reducing memory usage and improving frame rate. Meanwhile, a brand new UI system and editor have emerged. This is more of a technical update than a visual, so pretty pictures will make a return next time.