Bright Engine v0.1.6c Released – Performance & Optimisation

December 14, 2019

Here it is, the last update of 2019! We wanted to end the year with a near-usable product, and our community certainly seems to think we’ve hit that target! In this update, we took a step back from adding new features and focused on improving existing systems drastically while fixing up quite a few annoying bugs that, until now, appeared to be squash resistant! New lighting systems, faster high-quality shadows, working alpha blending (finally) and more, along with a plethora of optimisations to performance!

New Features

Undo Redo System

Let’s start things off with the only new feature in this update. A working Undo / Redo system!

This is an essential tool for any developer, which until now has been frankly a disaster within Bright Engine. The Undo/ Redo system was actually first introduced in v0.1.3c almost a year ago. However, it was designed in a manner that was very difficult to keep stable with each new feature added, and after a few updates, it became a buggy mess. So we have completely rebuilt this system in a manner that makes it significantly easier to maintain as well as actually get it working again.

Unlike before, the Undo/Redo system now works on more than just object transformations. It works on everything! Including object properties, terrain sculpting, World parameters etc.

Changes & Improvements

Alpha Blending

Something which has been annoying our testers for a while now is alpha blending. Until now, alpha blending worked but created a lot of artefacts when blending with objects such as clouds and mask alpha wasn’t exactly much of an improvement. In fact, mask alpha wasn’t being ordered correctly and resulted in alpha objects near the camera being hidden behind other objects that were miles away!

Material Settings

In addition to an Alpha Blending rework, 3D model objects also got a minor improvement in the material settings. There is now a slider to control the roughness strength of materials which gives you a bit more control. This was actually being added for debugging purposes as we were discovering inaccuracies with lighting, but since it gave users more customizability, we left it in. The material system, in fact, is actually going to be completely redone but more on that later.

Area Lights

Lighting is one of the most important aspects of achieving realistic rendering, and it’s something we are determined to get right! While working on some test environments, we found that lights could be a nuisance when building a scene, so we’ve added a very simple feature of just turning them on or off.

But the most exciting addition to lighting in this update is the introduction of a new light source: Area Lights!

Area lights are an incredibly useful and versatile method of lighting your scene. It’s often one of the most sought-after lighting methods for game engines, and Bright now has them working in real-time with no need for baking whatsoever!

But why stick with just a static area light? We’ve integrated them into the timeline system so that you can fluctuate their colour, strength, and dimensions, allowing for the creation of some crazy effects.

As part of this integration, we re-ordered the UI of the Timeline editor so that the Inner and Outer Radius for spotlights are visible at the same time, allowing for a faster and easier workflow, and the same was done for area light dimensions.

Shadows are a crucial part of the lighting equation, and we certainly weren’t going to leave them behind.

Cascade Shadow Mapping

Directional Shadows got a complete overhaul with the introduction of Cascade Shadow Mapping! Originally, to have high-quality shadows, the render distance had to be very limited, even with a high-resolution shadow map. Cascade Shadow Mapping fixes this problem, and now you can have shadows rendered from very long distances without destroying the quality of the shadow close to the camera.

Developers have complete control over the cascade distances, and there is a debugging tool that clearly shows the cut-off points for each cascade, making the whole process a lot easier.

Dynamic Shadows

We next turned our attention to dynamic light shadows. Aside from a whole rework of the shadow map rendering pipeline (more details later), both Spot Light Shadows and Point Light shadows now have Percentage-Close-Filtering (PCF), which helps drastically reduce the pixel artefacts of the shadow map by blurring them.

In addition, Spot Light Shadows now have correct intensity polar fading applied to shadows near the edge of the outer radius.

Terrain

The terrain is soon going to be getting a complete rework in order to introduce tessellation. However, there were a few limitations which our testers wanted to be resolved, so we obliged. UV Scaling for terrain originally was a single setting that controlled both the XY axis of the textures. However, this caused a problem when using rectangular terrain textures. To resolve this, you can now adjust the U and V scale separately.

Furthermore, a lot of confusion surrounding the Flatten/Ramp Sculpting Brush was being created due to a default setting just being bad. So we have adjusted the default height value for this brush to help clarify things

Cameras

Cameras were a new addition in the last update and brought about some really cool new features. Fortunately, a few photographers in the community were not impressed and explained exactly what the problems and limitations were of the implemented system. Based on their feedback, we’ve added several new settings to cameras.

Firstly lining up the camera for a shot was an enraging experience, as we soon discovered, since while in preview mode, the only way to make adjustments to position and angle was through the UI. To solve this, we have simply added new controls so that while in preview mode, you can simply move and rotate the camera as you would with the Editor free camera.

Alternatively, you could simply select your camera object, line up the shot with the editor-free camera and press a magic button that will automatically reposition and rotate the selected camera to match that of the Editor free camera.

Preview mode also got an additional upgrade with new overlays. These work similarly to how you would expect on a standard DSLR. While in preview mode, you can enable overlays such as the Rule of Thirds or Golden Ratio in order to perfectly line up the most pleasing screenshot possible!

A final addition was requested by our photographers surrounding the field of view settings. Cameras don’t operate on a simple FOV angle, so simulating a physical camera using one made no sense. We have therefore added two new settings that can be used instead of FOV (for those that want to) that allow you to set your Horizontal Sensor size and Focal Length in mm.

As cameras received some TLC, it made sense that the depth of field post-processing effect did as well! We added a new DoF effect method thus, users can now choose between Polar and Planar blurring methods.

And just as we did for Cascade Shadow Maps, we’ve added a viewport visualizer making it really easy to see where the effect is taking place!

Waypoints & Paths

Waypoints were next to receive some attention. We’ve added a brand new Path Hopping system, which will allow objects to independently switch to a different path!

Path hopping was something we originally planned to be handled by scripting, and it still is, however, after some inspirational thought, we found a flexible method of doing it without the developer needing to write one line of code, and so we implemented it

Path hopping has plenty of applications, whether it be an NPC switching to a different patrol path or a camera tracking an object during a cutscene. That concludes the improvements made to in-game features, now, let’s move on to the upgrades to the editor itself!

Object Transformations

Translating an object along the Y axis using the 3D cursor has been utter chaos if editing from steep angles, so we re-wrote the transformation algorithm for y-axis translation, and now it works like a charm. In addition, we’ve also added a feature where holding down the shift key while translating an object using the 3D cursor will also move the camera along with it.

Objects being placed in a scene where no terrain is present are no longer placed at the scene origin (0, 0, 0) but instead placed in front of the camera. And the cube map drop-down lists for skyboxes now only show the items relevant to each slot, making it significantly less cluttered and confusing.

Scene Hierarchy

The hierarchy also had a nice improvement on the UI side of things. We’ve made items in the list slightly taller, and Icon backgrounds no longer mismatch. Locked objects now appear with yellow text, making them easy to identify in the list, and checkboxes have been added for objects in the scene. These checkboxes allow you to easily toggle the visibility of the object within the viewport, and you will also find a new button in the object settings next to the lock button, which performs the same thing.

Performance

We’d like to finish this section of the patch notes by talking about a few optimisations that have been introduced, namely the improvements to shadows.

Both spot light and point light shadow maps are now rendered using layered rendering techniques, which has allowed for them to be all calculated in a single pass, cutting the draw called down by 75%! In other words, they are drawn about 4x faster and consume a quarter of the original memory usage.

Terrain Sculpting algorithms were adjusted, removing a lot of redundant code and lowering the CPU usage while also optimising the data handling of tone mapping data as well as rewriting most of the post-processing shaders.

The end result of an approximate 10% increase in FPS for the desert scene.

Bug Fixes

World Editor

  • Fixed a bug where the 3D cursor did not rotate correctly when editing camera objects
  • Fixed a bug where the Yaw and Pitch of a camera were being calculated in reverse
  • Fixed a bug where Emitter Data was not being removed from memory correctly when changing zones
  • Fixed a bug where Target Data was not being removed from memory correctly when changing zones
  • Fixed a bug where changing the colour of a spot light didn’t take effect unless the lampo was changed to the point light and back again
  • Fixed a bug where Mipmaps were not correctly rendering for Model Textures
  • Fixed a bug where objects assigned to a waypoint whose path only consisted of a single node caused a crash
  • Fixed a bug where waypoint path linking was no longer working correctly
  • Fixed a bug where 3D models using Mask alpha weren’t being ordered correctly, causing incorrect transparency results
  • Fixed a bug where Selecting Objects is triggering a file update twice if an object is locked
  • Fixed a bug where some 3D models moving along a path didn’t correctly update their shadow positions
  • Fixed a bug where Flatten Interpolate Sculpting Brush made a hole in the terrain if the terrain was already flat
  • Fixed a bug where pressing the remove button for a terrain texture that has already been removed caused a crash
  • Fixed a bug where removing a normal map from a texture layer of terrain would remove the albedo instead
  • Fixed a bug where transitioning prefilter environment maps were not being correctly uploaded to the GPU when drawing dynamic foliage
  • Fixed a bug where using the erase tool when painting terrain with the first texture layer selected caused the terrain to go black
  • Fixed a bug where the Camera to Origin menu button didn’t work
  • Fixed a bug where objects assigned to a waypoint would not move along a path unless that waypoint had two or more paths
  • Fixed a bug where Inherit Rotation setting in waypoint assignment did not get disabled if an object is removed from its path
  • Fixed a bug where activating the camera when editing World Settings would increase the selected index of the room setting by one, causing unwanted file writes
  • Fixed a bug where selecting a waypoint with the Override speed mode selected would not enable the Speed setting unless the Speed mode was changed to Inherit and then back to Override
  • Fixed a bug where unchecking shadow casting or AO casting status of a 3D Model didn’t take effect unless the 3D Model was then moved
  • Fixed a bug where items in the hierarchy could have their text edited even if the item was not a filter. This caused a lot of problems when trying to select an object from the hierarchy.
  • Fixed a bug where using the drag tool was not clearing offsets from memory once the placement was confirmed (memory leak)
  • Fixed a bug where using the drag tool on a selection of objects sometimes caused incorrect positional movement

What’s Next?

Over the last few weeks, while Bright Engine is constantly getting more powerful, one recurring weakness keeps reappearing: Performance. The desert scene is a prime example of this as it’s a fairly small scene and yet struggles to reach 60fps. This is something we want to address right away before delving further into the project. Fortunately, we have a plan on how to solve these performance issues, and that is what we will focus on next. This means a brand new rendering pipeline and a brand new node-based material system. If our calculations are correct, we should see performance double, so stay tuned for a much faster engine!

But this is only part A of the 0.1.7 series. By the end of the update series, we want the engine to be production ready. This doesn’t mean that it’s going to be able to produce AAA titles just yet, as there will be plenty more work to do, but it does mean developing a working game will be possible, with scripting, advanced audio effects and basic physics in place!

Happy Christmas, and here’s to another year of Bright Development!

Home » News » Patch Notes » Bright Engine v0.1.6c 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.