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!
Let’s start things off with the only new feature in this update. A working Undo / Redo system!
This is an essential tool to 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, 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 getting 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
Something which has been annoying our testers for a while now was 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!
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 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.
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 color, 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 Inner and Outer Radius for spot lights 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.
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 rendering 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.
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 is soon going to be getting a complete rework in order to introduce tessellation, however there were a few limitations which our testers wanted 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 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 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 simple 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 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 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 lets move onto the upgrades to the editor itself!
Translating an object along the Y axis using the 3D cursor has been utter chaos if editing from steep angles, and 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, is no longer placed at the scene origin (0, 0, 0) but instead placed in front of the camera. And the cubemap drop down lists for skyboxes now only show the items relevant to each slot, making it significantly less cluttered and confusing.
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.
We’d like to finish this section of the patch notes 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 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.
- Fixed bug where 3D cursor did not rotate correctly when editing camera objects
- Fixed bug where Yaw and Pitch of a camera were being calculated in reverse
- Fixed bug where Emitter Data was not being removed from memory correctly when changing zones
- Fixed bug where Target Data was not being removed from memory correctly when changing zones
- Fixed bug where changing the color of a spot light didn't take effect unless the lampo was changed to the a point light and back again
- Fixed bug where Mipmaps were not correctly rendering for Model Textures
- Fixed bug where objects assigned to a waypoint whose path only consisted of a single node caused a crash
- Fixed bug where waypoint path linking was no longer working correctly
- Fixed bug where 3D models using Mask alpha weren't being ordered correctly, causing incorrect transparency results
- Fixed bug where Selecting Objects is triggering a file update twice if an object is locked
- Fixed bug where some 3D models moving along a path didn't correctly update their shadow positions
- Fixed bug where Flatten Interpolate Sculpting Brush made a hole in the terrain if the terrain was already flat
- Fixed bug where pressing the remove button for a terrain texture that has already been removed caused a crash
- Fixed bug where removing a normal map from a texture layer of terrain would remove the albedo instead
- Fixed bug where transitioning prefilter environment maps were not being correctly uploaded to the GPU when drawing dynamic foliage
- Fixed bug where using the erase tool when painting a terrain with the first texture layer selected, caused the terrain to go black
- Fixed bug where the Camera to Origin menu button didn't work
- Fixed bug where objects assigned to a waypoint would not move along a path unless that waypoint had two or more paths
- Fixed bug where Inherit Rotation setting in waypoint assignment did not get disabled if an object is removed from its path
- Fixed 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 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 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 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 bug where using the drag tool was not clearing offsets from memory once the placement was confirmed (memory leak)
- Fixed bug where using the drag tool on a selection of objects sometimes caused incorrect positional movement
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!