After a trying few months, we are finally ready to unveil the next update for Bright Engine. As we stated in our last patch notes, this update series is all about moving the engine away from world editing, toward gameplay systems. As such strap yourself in, because we are about to go through a whirlwind of new features, improvements and bug fixes!
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!
Before we dive into the technical stuff, we’d like to give a shout out to our awesome community who have helped get Bright Engine working on Linux! While there is yet to be a dedicated build for the Linux platform, if you are using it, you can now play with Bright Engine without having to wait any longer!
First up, a brand new Project Launcher. Over the last few months, we’ve had growing complaints from the community over having to constantly search for the project file when booting up the engine. These were well founded since even we, the developers found it annoying. Thankfully those days are over!
The project launcher allows you to quickly open your projects in an instant, while also making the process of creating a new project simpler to understand!
With a more streamlined project loading system in place, we next turned our attention to world building tools. While this is not the primary focus of this update series, we noticed a rather glaring problem: You could only select one object at a time. Well, not anymore! Multi-object selection is now fully functional, along with a brand new Grouping System and Rotation Methods!
By holding the Shift Key (Default) you can select multiple objects of different types at the same time and perform transformations on them concurrently. To further extend this, enter the Grouping System. This is a method of saving previous selections if the user wishes to, that way in the future, if they think they might need to edit that specific collection of objects again, they can select the group instead which will select all the objects for them!
In addition to this, new Rotation methods have been implemented, that allow for a more extended transformation tool box! (This subsequently meant we had to rewrite the code for the 3d cursor and in doing so were able to remove 120 lines of code)
There are three rotation methods:
- Median Point
- Individual Origins
- Primary Point
We recently introduced Reflection Probes in version 0.1.5b which were adjusted slightly so that their indicators in the world aren’t so huge anymore while also fixing the weird visual bug where strange shadows from the SSAO pass were still being applied
But more importantly, that came with a Baking Suite which has now been extended to Shadows. You can now Bake your shadows on any light source placed in the world! This has plenty of optimisation opportunities for developers and is completely optional per light source. Meaning that you could have a combination of baked and dynamic shadow light sources!
In terms of bringing the world more alive, enter Waypoints. Waypoints are a method of creating paths for objects to follow, when used in combination with scripting they allow for all sorts of crazy creations, from NPC’s walking along a road, to advanced camera movements in a cutscene!
Each waypoint can be a part of an unlimited amount of paths which any object can follow, switch to or jump off of.
The shape of the paths can be determined by the user, with the options between Linear straight lines, great for mechanical movements for something like a robot, and Bezier which gives a more natural smooth movement which humans or cameras tend to follow!
Currently only lights can be attached to paths since this is part one of the waypoint implementations, but by the end of this update series, we intend to have any object capable of using a path. This would include: Lights, Models, Cameras, Emitters, Sound Sources, Reflection Probes, Collision Fields and so on.
When developing the waypoint system we wanted to keep its design compatible with our future scripting update and therefore a new tool had to be created: The Property Manager.
The property manager is a tool which allows you to assign… well… properties to an object. These properties can then be accessed and edited by scripts. An example would be something like a Characters health points. All you would need to do is create a new property set in the Property Manager, add a Property called “Health” and then assign that property to the object in question, either in the Editor or via a script. It takes about 15 seconds by our count.
But what has this got to do with Waypoints? Well, objects moving along a path require a speed value which is set via the Property Manager, the advantage in doing this, is you could have two objects moving along the same path at different speeds.
Alternatively, you can enable the override speed on the path itself which will force all objects on the path to move at the set speed.
Our last new addition to the engine, was one to improve user experience, specifically when it came to color selection. In older versions you had to manually enter an RGB value each time, which for most wasn’t a problem, but it slows things down. To get around this, we have introduced a proper color selection tool!
Aside from making color selection much more visual, you are now able to copy+paste hexadecimal color codes, as well as use a color picking tool that allows you to select a color from anywhere on your screen, whether it be a color from the scene you are editing in Bright, or a reference photo you have open on the side!
Changes & Improvements
For those who have been following our progress so far, you may have noticed we like to get our lighting as advanced as possible. Afterall, so much of modern PBR rendered is dependent on good lighting. So as usual we still weren’t happy with our lighting system.
We started out with some basic improvements. Lights now slowly fade out as they reach their maximum render range rather than popping out of existence (which is optional for those who like the pop) and we changed how the color data was passed on to the GPU resulting in a small performance boost.
But those are not the star of the show, for we added something much more special: The Timeline Editor.
Previous versions of the engine had a collection of flickering settings. These allowed for variations in light strength to create a flickering effect for more atmospheric lighting. The Timeline Editor has replaced this system entirely. It actually does the same thing as the older system, the difference however, is now every light setting can be varied, including color!
This new tool opens up a whole new collection of design opportunities and lighting once again has been drastically improved. Despite this, I'm certain in the future we’ll find more ways to improve lighting even more!
Next on the improvement list was Terrain. Our existing terrain painting system is rather decent (we think so anyways) but there were some old school tools which never made it into the original terrain painting update, specifically Vertex Color Painting. While it's not a tool used by many, used well and subtly, it can create some really impressive results…. Or you can do what we did, and make Repulsion Gel from Portal 2 :P
This vertex painting suite was further extended into the Dynamic foliage system. Using vertex colors you can add subtle variations in color across a single foliage layer which adds an extra layer of realism!
But aside from that fun stuff, the texture painting needed more work. We want Bright Engine to be able to create photo-realistic results and terrain in its current form, just couldn’t quite do that and we pinned it down to one thing: Blending. Up to this point Terrain has been rendered with linear blending between layers, which in-combination with alpha masks, can create good results. We we want great results and so we’ve added an entirely new blending method for you to use, if you so wish. Height Based Blending.
This method takes the data from a heightmap for each texture layer and uses that to calculate which layer should be on top (unlike linear where layer 2 is on top of layer 1, layer 3 is on top of layer 2 etc). The result allows for much more realistic blending results. Effects like sand filling up the cracks between rocks is now completely possible!
But adjusting height map data can be a pain, so we’ve added height modifiers to the settings which allow you to move layers forcibly on top of each other. If used in conjunction with scripting, effects such as snow or puddle accumulation is now completely possible and the results look great!
Using brush strength, you can get a nice variation of height throughout your layer, so if you want a specific patch where snow fully covers rocks and another where it doesn’t, that's perfectly possible as well!
The last system that got some TLC this update is the Hierarchy Panel. Up to this point, it was more of a nuisance than a helpful tool and we think it was due to the fact that it became a clustered mess in complex scenes with 1000’s of objects. So we gave it a complete makeover!
It's got a much more fluid interface which fits better with the rest of the editor, as well as a brand new collection of organisational tools! You are now able to create folders within the Hierarchy and organise your objects accordingly. Furthermore whenever placing objects within the scene you can select which folder they should be placed in, within the hierarchy to automate the process in future.
In terms of editor performance, despite this not being the primary focus of the update, we did make some improvements. After adding more barrels to the stress test scene, the fps dropped to 43. We tweaked the methods of which data was being accessed and cut the number of cpu cycles along with altering how Vertex Buffers were being created for dynamic foliage, diagnostic, and instancing render calls. The result was a lovely boost back up to 62 fps!
We were also able to adjust the time of day calculations along with the auto saving system. All these changes put together amounted to around 400 lines of code being removed and each system subsequently working more efficiently.
As a final tweak, we updated New Zone creation to have a default skybox set up so new users aren’t met with a black screen, and fixed the bug where clouds weren’t being affected by the time of day modifiers
- Fixed bug where particle IDs were not being correctly written to the dat file
- Fixed various shader bugs where some shaders were unable to compile correctly on AMD cards
- Fixed bug where the UI for Reflection Probes was not updating correctly when a state was selected
- Fixed bug where Reflection Probes could not be Removed from a scene
- Fixed bug where deleting an emitter would cause a crash
- Fixed bug where the Project Emitters file wasn't being closed by the Editor after reading causing a memory leak
- Fixed bug where toggling the visibility of certain objects wasn't being saved
- Fixed bug where scaling a Terrain Object with the 3D cursor would cause a crash
- Fixed bug where clicking on the Reflection Probe UI components sometimes caused the camera to stop working
- Fixed bug where circle Brush does not fill in the cross, giving wrong results when sculpting and when painting
- Fixed bug where circle Brush caused a crash if it was used on the East edge of an Unrotated Terrain Chunk
- Fixed bug where changing a terrain texture would not update the Icon box unless the mouse hovered over it
- Fixed bug where weather sun light color modifier is incorrectly loaded
- Fixed bug where newly created reflection probes are still being fed the texture data of the last reflection probe in the render loop
- Fixed bug where a Model which wasn't casting AO was still being fed incorrect AO data
- Fixed bug where reflection probes were receiving incorrect AO data
- Fixed bug where the Panels were not being resized correctly when the Editor window was resized.
- Fixed bug where the group box order of settings kept being mixed up when selecting different types of objects after each other
- Fixed bug where clicking on an item in a drop down menu would trigger object selection in the scene
- Fixed bug where switching off point light shadows sometimes caused weird visual artefacts
- Fixed bug where switching off point light shadows would also disable spot light shadows
- Fixed bug where performing a right click on the Editor UI while object placement mode was entered caused strange results
- Fixed bug where mouse button processes were still being triggered outside the viewport area
- Fixed bug where objects would move incredibly quickly when being transformed with Grid Movement Enabled
- Fixed bug where the 3D cusor's position didn't update when an object was moved via the UI rather than the 3D cursor
- Fixed bug where moving a Model using the UI rather than 3D cursor did not update the position of the object in the SSAO pass giving strange shadow results
- Fixed bug where the camera speed and camera view range were inverted
- Fixed bug where cancelling a move operation with a Right Click didn't reset the position of the 3D cursor
- Fixed bug where deleting a terrain that was created using a Heightmap and then immediately removing it caused a crash
- Fixed bug where creating a new terrain then closing the editor, would cause the terrain to double in size the next time the zone was loaded.
We have made some excellent progress in this latest update but the mission continues. We plan on continuing the toolbox beyond world building. Aside from the continuation of waypoints, audio and cameras are going to be next on the list along with a complete overhaul for the particle system and some further improvements to post processing!