Here we are at the final update of 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!
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 it’s 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 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 anytime.
Changes & Improvements
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 modeling 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!
In addition, we fixed the LOD system which was causing strange rendering problems in regards to shadows, while also adding a new button to reload the selected models 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 its a relatively new addition to the engine, so we’re aiming to have these fixed up pronto!
Next we took a look at 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!
Second was a minor update to Dynamic Foliage which now snaps itself to the terrain, preventing floating patches of grass on a sloped section.
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 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 a quite advanced feature in terms of knowledge, the general principle is the greater the kernel size, the more accurate the effect at the cost of performance. Originally this was fixed at 64 but now you have complete control over it within each zone.
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 in 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.
As 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!
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 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
- Realtime 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.
- Fixed bug where UV's out of the range of the 0 to 1 don't get drawn.
- Fixed bug where objects moved with the Grab tool didn't save changes to .DAT files unless another setting was changed.
- Fixed bug where starting the editor with Bloom or SSAO disabled in the project, caused a falsely triggered error message.
- Fixed bug where editing the first addition of a model after it has been added to the scene caused a crash.
- Fixed bug where duplicating the first addition of a model after it has been added to the scene caused a crash.
- Fixed bug where selecting an object via the hierarchy would not show the 3D cursor.
- Fixed bug where selecting a model after selecting a light caused the model settings to appear in the wrong order.
- Fixed bug where 3D cursor modes for objects that can't use them could be selected and occasionally caused a crash.
- Fixed bug where loading a zone after a room was added with weather settings and then deleted that room caused a crash.
- Fixed bug where models with missing textures in their material would rendering using textures from previously drawn model instead of dummy textures.
- Fixed bug where importing a model with no material caused a crash.
- Fixed bug where importing a model with a material with no textures caused a crash.
- Fixed bug where importing a model with a material with textures assigned in wrong order caused a crash.
- Fixed bug where importing a model with a material with missing textures caused a crash.
- Fixed bug where changing a texture in a material within the editor sometimes caused a crash.
- Fixed bug where enabled/disabling animations on a model didn't start playing the animation unless another setting was changed.
- Fixed bug where the animation manager was triggering update functions when it wasn't necessary.
- Fixed bug where selecting a different Set then a different sequence sometimes caused a crash.
- Fixed 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 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 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 bug where hitting the enter key in the Animation Manager caused the annoying Ding sound.
- Fixed bug where the Terrain Vertex Normal debugger displayed incorrect values.
- Fixed bug where Dynamic foliage did not translate to the same position of its parent terrain chunk.
- Fixed bug where moving terrain with the 3D cursor did not update the position of its dynamic foliage.
- Fixed bug where changing or removing a terrain texture, caused the old texture to linger in memory (memory leak).
- Fixed bug where changing or removing a foliage texture, caused the old texture to linger in memory (memory leak).
- Fixed bug where Spot Light Shadows were not rendering correctly.
- Fixed bug where certain Vertex Array Properties were not being properly uploaded to the GPU during Instanced Rendering.
- Fixed 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 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 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 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 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 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 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 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 bug where if a LOD level consisted of multiple meshes, only the first one would be rendered.
- Fixed bug where wireframe display didn't work correctly.
- Fixed bug where closing a project after a zone had been loaded caused a crash.
- Fixed bug where animation manager was triggering unnecessary outputs after loading a project.
- Fixed bug where loading a zone with a sun that has not got a texture assigned to it caused a crash.
- Fixed bug where the Model Path of a model Object was no longer visible.
- Fixed bug where disabling animations on a model Object would also disable the UI Button that allows you to turn them back on.
- Fixed bug where approximately half the texture data was not being cleared correctly when switching between zones. (memory leak).
- Fixed bug where switching between zones sometimes caused a crash.
- Fixed bug where the object placement panel was sometimes still visible when an object was selected.
- Fixed 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 bug where using the model brush would deselect the active terrain object causing a crash.
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 to scripting. It’s going to be a busy series and we can’t wait to get started!