New features and changes in the Kuesa 1.1.0 release
KUESA™ is a solution that provides an integrated and unified workflow for designers and developers to create, optimize and integrate real time 3D content in a 3D or hybrid 2D/3D software user interface. Models, including geometry, materials, animations and more, can smoothly be shared between designers and developers. Kuesa relies on glTF 2.0, an open standard which is being broadly used in the industry, so it can easily and seamlessly integrate with a growing number of authoring tools.
Kuesa is made of 3 main components:
- In addition to supporting any compliant glTF 2.0 files, Kuesa provides plugins for content creation tools Blender and 3DS Max for creating glTF 2.0 files which support custom extensions.
- A Qt module designed to load, render and manipulate glTF 2.0 models in applications using Qt 3D, making it easy to do things like triggering animations contained in the glTF files, finding camera details defined by the designer, etc. It also includes a library of post processing effects which can be easily extended.
- Tools to help designers and developers inspect and optimise the models, including command line tools to automate the process
This blog post outlines the new features and changes in the 1.1.0 release.
The main objective for this release was to ensure compliance with the Khronos glTF 2.0 specification. We made sure that Kuesa works on a wide range of target hardware, be it desktop, mobile or embedded. In addition, a great deal of work has been put into a nice technical documentation, following the Qt standards. This documentation is available at the following address : https://www.kdab.com/kuesa/
Kuesa 1.1.0 supports Qt 5.12.5, 5.13 and the recently released Qt 5.14.
This release is marked by an ever-growing ecosystem of Kuesa-related tools, bindings and integrations.
First and foremost, full Python bindings for Kuesa have been developed – learn more about this here. Support for Kuesa extensions, such as layer support, is being worked on in the official Khronos Blender glTF exporter ; we will keep you posted about the progress on that. The 3DS Max Kuesa exporter can on its side be downloaded here.
gltfEditor (ex-assetpipelineeditor) has been improved, and a simple, minimal-dependency glTF 2 viewer has been implemented. It supports a few command line flags useful for testing and is simply named gltfViewer.
A new tool to process glTF 2.0 assets from the command line has been implemented. It is named assetprocessor. It allows for instance to compress meshes, and embed buffers in a glTF file or extract them.
Some tools have been renamed in order to make their main use case clearer.
- assetpipelineeditor has been renamed gltfEditor.
- The extension of shader graph save files has been changed from .qt3d to .graph (the files in kuesa/src/core/shaders/graphs).
- The Material API has been refactored : all the properties on materials (MetallicRoughnessMaterial, UnlitMaterial) are now instead grouped in material-specific “Properties” class – MetallicRoughnessProperties, UnlitProperties. This allows to decouple the actual material logic from the parameters needed for rendering it.
glTF 2.0 support has been greatly improved in this release. Morph targets, which were missing in Kuesa 1.0, are now available.
Support for a few extensions and niceties has been added :
- KHR_lights_punctual : this feature manifests itself through the new Kuesa.DirectionalLight, Kuesa.PointLight and Kuesa.SpotLight objects.
- KHR_materials_unlit : unlit materials are now also supported in glTF 2.0 files.
- Support for loading GLB files (single-file binary glTF format) has landed
- The GLTF2Importer now supports multiple glTF scenes.
- Support for 2 UV sets was added as the spec requires it.
- A BRDF look-up table texture is now used.
The Kuesa API has been augmented in a few ways : The Kuesa API now provides a way to pass options to the parser, through the GLTF2Options C++ class and Kuesa.GLTF2Options QML object.
Post-processing filters have seen an overhaul, and can now leverage depth textures. In addition, a few new effects were implemented : depth-of-field and bloom. Bloom can be tested in the car scene demo, and all effects are showcased in the framegraph_scene test project.
Normals and tangents can now be automatically generated when missing (through the help of the MikkTSpace open-source library) – see the GLTF2Options.
gltfEditor (ex-assetpipelineeditor) has gained a few new features, too :
- It is now possible to configure the exposure, gamma, and the tonemapping algorithm in the settings.
- The editor is able to save and load camera settings, under the camera pane.
- Tangents can conveniently be generated from the user interface.
A few new examples and demos were added :
- A music box moved by a mechanical arm. Bonus points for who will find the original melody used in the demo 🙂
- A demo of the various tonemapping algorithms implemented in Kuesa :
The codebase was thoroughly tested on a wide range of hardware ; as such, many fixes in multiple areas of the codebase were implemented. Various HiDPI and multisampling related issues were fixed. For instance, post-processing effects now support multisampling correctly.
Better performance was achieved for the car demo on low-power devices thanks to the use of pregenerated images for the user interface.
The tonemapping and PBR pipelines were also reworked. The changes fix color space issues in the frame graph, in particular with post-processing effects. The PBR rework also fixes various subtle rendering artefacts.
Contributing to Kuesa
An infrastructure change has been put in place during this release cycle : dissatisfied by the pull request UI of Github, we migrated the code review to an open Gerrit instance, linked with our Github repository.
This instance is available at https://kuesa-codereview.kdab.com. Please use it to contribute!
Finally, a big thanks to all the contributors for this new version : Jim Albamont, Robert Brock, Timo Buske, Juan Jose Casafranca, Jean-Michaël Celerier, Wieland Hagen, Sean Harmer, Mike Krus, Paul Lemire, David Morgan, Mauro Persano, Nuno Pinheiro, Allen Winter.