Progress Update: December 2018


#1

Hi and a Happy New Year!

December has been a month focused on bugfixing, polish and various build enhancements in preparation for v1.1 version release. There have also been some upgrades in the editor, mainly trying to automate some aspects regarding the inspector.

There are only a handful of tasks remaining for v1.1, which should hopefully be resolved soon and I can start the final round of testing, as well as write up the release notes. The release is planned for January, hopefully sooner than later.

More details on changes and additions to the framework follow below.

Changes

New particles example

particlesExample
Particle system example

bsfExamples repository now contains a new example demonstrating the use of particles. The example shows how to use traditional 2D billboard particles, GPU particles using a vector field and 3D mesh particles with support for collision.

Editor inspector improvements


Auto-generated particle system inspector

Currently whenever a new feature is added to the framework I need to manually create the GUI and logic for the editor inspector for that component. This is cumbersome, error-prone, requires maintenance as API changes and ultimately wastes a lot of my time.

My goal is to enhance the inspector so high-quality automatically generated inspector GUI can be created just from the C++ API and some optional hints.

The framework already supports automatic generation of C# (script) and C++ glue code for scripting, which has made that process basically free. With automatic inspector generation adding future features to the framework should be extremely easy, with basically no extra work to expose those features to both the script and the editor.

A few important additions were made on that front this month:

  • SBGen parsing was enhanced so it is now able to parse a variety of hints used for customizing the inspector rendering:
    • range(min,max) - Limit int/float field to a range of values
    • step(x) - Limit int/float field minimal increment
    • slider - Display an int/float field as a slider instead of an input field
    • layerMask - Display a 64-bit int field as a layer selection drop down
    • notNull - Lets the inspector know an object should never be assigned a null. Disallows clearing the object instance from the inspector (e.g. the ‘X’ button isn’t show).
    • passByCopy - Hint to inspector that making changes to the object requires the object to be re-assigned to its parent property. Without this inspector will just make changes to its copy of the object, never apply it to the parent. This is automatically applied for value types, but must be specified for reference types where relevant (which are assumed to be passed by reference).
    • applyOnDirty - Similar to passByCopy but can be less restrictive in some cases. Object is returned by reference but still requires the property setter to be called when changes are made.
    • category(name) - Group all fields with the same category under a expandable group in inspector (Not yet fully implemented)
    • order(x) - Change the order of fields in the inspector (Not yet fully implemented)
  • Enum fields are now displayed as drop downs. Fields containing enum values have all their potential values displayed in a drop-down box, instead of an unintuitive integer input box.

2D/3D/Color distribution fields have now also been mostly finished and should be functional. Some tweaks are still required regarding their visuals.

This process is ongoing so expect more enhancements - my goal is to have this ready by the next editor update.

Vulkan, Linux & macOS fixes

Significant amount of testing was done to ensure all newly added framework features run properly across Linux & macOS systems, and on a recent version of the Vulkan SDK. I’ve also put a special focus on testing the framework on Intel’s integrated GPUs, resolving some important issues. This resulted in a fair number of quality fixes and improvements:

  • Vulkan SDK 1.1.85 is now supported by the framework
  • Cleaner, more performant handling of layout transitions and memory/execution barriers on Vulkan. This was a messy and error-prone part of the framework that always kept failing in new places, and also wasn’t handling various Vulkan aspects in the most performance optimal way. This entire system has been rewritten to be easier to follow (and modify), more correct and especially more performant.
  • Various fixes were applied to the OpenGL renderer so it runs properly on macOS Mojave. Apple changed a few things as well as deprecated OpenGL which broke rendering. This has now been resolved and OpenGL deprecation messages are now hidden. We already have a PR with mostly working Vulkan on macOS, and Metal support is also planned as soon as I get a moment.
  • Particle system has been tested on all platforms and render backends. After a variety of fixes, everything should now be running correctly on all platform/backend combinations.
  • Significant amount of testing and fixes have been done on Intel’s integrated GPUs making sure everything runs correctly. While the framework was tested on dedicated GPU’s previously, integrated GPU testing was glossed over. This has now been rectified. Known issues with Mesa drivers on Linux were also resolved.

Build & website enhancements

Variety of changes have been made to the build system as well as the website, hopefully providing a better experience for all users.

In particular:

  • Nightly & release builds are now uploaded to an S3 bucket. The previous host was prone to having build uploads fail marking the CI as failed. It was an annoyance and it also meant plenty of nightly builds were missing from the download page. As an extra I’ve also added a CDN so any downloads should be lightning fast. The Downloads page has been updated accordingly.
  • Nightly build documentation! As promised, nightly builds will now automatically generate documentation for the most recent version based off the master branch. This allows you to read up on the latest not-released features without having to generate the documentation yourself. You can find it at docs.bsframework.io/nightly/.
  • Documentation versioning. The site has been updated so it can host multiple versions of the documentation. The latest version will always be available at docs.bsframework.io/latest while particular versions are available at docs.bsframework.io/vX.Y. The documentation header has also been updated with a handy version selector drop down which lists all available versions.
  • Mobile friendly site. Various issues were resolved and the main site should now look much better on mobile devices.
  • Discourse (this board) moved to a new server! You might have noticed the board has been a lot snappier lately and that is because it has been moved to a faster, better host. Some issues regarding e-mail sending were also resolved, so board notifications should now hopefully be much less likely to end up in your spam folder.
  • Built-in asset import and upload has moved to build targets instead of running during CMake configure. Built-in asset import has so far ran during the CMake configure set if a flag was set, and was inseparable from upload. This was clumsy, especially as different asset packages were being added, as it was hard to select just one thing to run. Now instead these steps are part of a separate build targets, which can be ran on demand from your build folder.

What’s next?

Finishing up v1.1 is on the top of the priority list. Currently I have just a couple of issues to resolve, as well as some optional features that might or might not make it in. Then it’s a matter of significant testing across all platforms, and writing up a release notes summary and some marketing messages to start spreading the word about the release.

I’m also beginning to focus more on the editor. The biggest features remaining here are exposing the particle system/decals to the editor, along with building the automated inspector system I mentioned - most of which has already been done. Another big feature is adding support for asynchronous scene loading, to make everything even snappier. Aside from that there are dozens of small tweaks and fixes, along with considerable testing and polish to be done. Nothing major, but time consuming none-the-less.

Aside from that I’m also going to work on v1.2, framework C# scripting and BSL 2.0. However editor release is the next big thing on the horizon, so that will take priority since it’s being released before v1.2. v1.2 will include networking and pathfinding systems, as well as new shading models and other renderer enhancements. C# scripting might also make it into v1.2 but it’s undecided as of yet.

That’s it for now. Hope everyone enjoyed the holiday season! Back to work now, cheers!