Reliable headless command line export
This page is our wishlist: it details the improvements that we consider most important to make the Godot Engine a better tool for its users. The items were created by talking to the volunteer maintainers for each area about the current state of things, their personal goals, and what kind of contributions they are looking for.
As with any wishlist, these points are an idealized version of what is to come in the project’s future. To realize them, we will need the support from you, whether you are a representative for a company looking to sponsor Godot or a game developer capable to contribute to the codebase directly. The Godot Engine has always been a community effort — there is only so much ground we can cover with Godot Foundation contractors at the moment.
We hope that by publishing this list, we can align our communal efforts: by showcasing which areas need to see improvements the most and what the next steps would be for anyone taking action. Let this list be an indicator of…
- what kind of contractors we would like to hire if donations increase,
- what areas are ripe with good first issues for new contributors, and
- where corporate sponsors could lend a helping hand
Core
unfold_more
unfold_less
- unfold_more unfold_less
As bigger projects often rely on CI (continuous integration) to test and deploy their projects, they need to be able to export games from lean environments that don’t implement a graphical interface (headless). For this, we need to make headless command line export more reliable, as there’s currently some issues that prevent it from working flawlessly.
Pull requests - unfold_more unfold_less
We put a lot of effort lately to add ways to split the work of nodes into multiple threads. This can lead to great leaps in terms of performance. Unfortunately, many nodes are structured in a way that makes it difficult for them to take advantage of multiple threads. We need to audit our current nodes and fix the ones that are relying on being single threaded.
infoNoteAs part of this work we need to create high quality tests and benchmarks. Both to ensure that we do not break anything, but also to validate the performance improvements.
- unfold_more unfold_less
Much of the engine would benefit from a careful evaluation of the current performance bottlenecks and improvements to ensure that it is running as fast as possible. Godot 4.0 drastically improved the overall architecture of Godot, but there is still a lot of legacy code that is not benefitting from the architectural improvements. We need to seek out those areas and fix them.
infoNoteTo aid in this, we want to create more educational materials on profiling performance issues (both for CPU and GPU workloads).
- unfold_more unfold_less
In order to make the best decisions, we need to rely on measurable data. In order to be able to do this, we need to create more benchmarks. It gives the added benefit over time that we can spot regressions more easily, together with unit tests, as we started lately to track performance of nightly builds.
infoNoteWe do have a public benchmark page! You can follow Godot’s main branch performance on the following website:
Physics
unfold_more
unfold_less
- unfold_more unfold_less
As much as our nodes are made to be compatible with multiple physics engines, the existing integration of Jolt is not optimal, as there are numerous features that can’t be implemented in Godot due to the current way the system works. In addition to integrating Jolt as the default 3D physics engine, we want to modernize our node bindings in order to fully exploit the new library.
warningWarningWe do expect it will create some compatibility issues.
Rendering
unfold_more
unfold_less
- unfold_more unfold_less
We’re really proud of our in-house technology for global illumination, but we think that we can push performance and quality even further. This is a long-term effort, but is something we are very excited about and would like to see finished.
Pull requests - unfold_more unfold_less
Some post-processing effects are currently a weak spot in Godot’s renderer. The performance and quality are both worse than we would like. We want to overhaul or replace most of our post processing effects in order to achieve both better performance and higher quality.
- unfold_more unfold_less
The goal of the rendering compositor is to give users fine control over the order of rendering operations and allow them to implement more custom behavior within the renderer.
Enhance graphics debugging including VRAM debugging and better information from the current profiler
unfold_more unfold_lessDebugging and profiling are necessary tools to release high-fidelity games. Right now Godot’s debugging and profiling tools are relatively basic and unpolished. We want to make it easier to diagnose rendering issues and pinpoint performance problems instead of users having to rely on guessing and checking.
Pull requests- unfold_more unfold_less
Shader templates can be used to have full control over the shaders used to render your assets. This allows you to both optimize your shader by removing unnecessary parts and to dramatically change your shader by adding custom behavior.
- unfold_more unfold_less
This feature would enable the streaming of assets to progressively load scenes, textures, and models in order to boost performance and loading times.
- unfold_more unfold_less
Hardware ray tracing is slowly becoming more widespread. It’s starting to become common for desktop computers to support hardware ray tracing, and mobile devices are starting to follow. We want to expose an API for hardware ray tracing through our
RenderingDeviceso that users can begin to make use of it. Then, eventually, we want to use that API to leverage hardware ray tracing in the Forward+ renderer.Pull requests - unfold_more unfold_less
Deferred rendering is a technique that can be used to increase performance in certain situations at the cost of flexibility. As Godot users create more complex games, we are seeing more games that would benefit from trading the flexibility that comes with our current renderer for more performance.
- unfold_more unfold_less
LightmapGIneeds a lot of polish and improvements for us to meet the goals we have set for it. Baking times are slower than we want and it often takes too much manual effort to get bakes to achieve the quality that users need.list_alt_checkTrackers - unfold_more unfold_less
WebGPU is a new and modern API that offers direct access to GPUs, exposing features that are not otherwise available on the web. Once WebGPU is supported, it will be possible to export high-fidelity Forward+ and Mobile projects to the Web.
Proposals
Animation
unfold_more
unfold_less
- unfold_more unfold_less
The
SkeletonModifier3Dabstract node introduced in 4.3 helps users to modify and add new functionality to bones via script. We want to build upon that new structure to add new features to it.infoNoteWe identified at least two features that we wish to add
- Add a bone constraint (based on the Blender spec)
- Add spring bones (based on the VRM1 spec)
Editor
unfold_more
unfold_less
- unfold_more unfold_less
Some file formats are actually containers that hold multiple resources. FBX and GLTF files are one of these, as they not only contain 3D models, but also can contain animations and textures. Currently, the only way to expose these resources is to tell the editor to pull these out on import.
We are thinking about providing a way to users to access internal subresources.
- unfold_more unfold_less
A lot of modern IDEs offer refactoring tools in order to rename variables and symbols across the codebase. We intend to add this feature to our internal GDScript code editor.
- unfold_more unfold_less
Right now the editor is not able to open or edit GDExtension classes. It effectively treats them like binary blobs. We want to make opening and editing GDExtension classes easier to do from within the engine and provide some of the comforts from regular scripting to GDExtension.
Asset import & export
unfold_more
unfold_less
- unfold_more unfold_less
As Blender is both a FOSS and a very popular 3D editor choice by the majority of our users, it makes sense to improve compatibility with it. You can already import
.blendfiles, but it’s limited to models, textures, lights, and cameras.Godot imports
.blendfiles by calling into Blender and asking Blender to export a.gltffile, which Godot then imports. Therefore, everything we want to export from Blender needs to be exported to the glTF data, including glTF extensions, and then Godot needs to import those, all in order for that data to make its way to Godot.infoNoteFor materials, Khronos has a selection of material extensions. Improving compatibility with Blender materials will require Blender exporting data using these extensions, and then Godot adding support for it.
infoNoteFor constraints, VRM has a series of glTF extensions that add feature to glTF, including
VRMC_node_constraintwhich adds aim, roll, and rotation constraints. However, note that Khronos and VRM recently announced a collaboration, so some of this functionality may end up being replaced by Khronos extensions. Also, users do not have to wait if they want this feature - a GDScript implementation of VRM is available thanks to @lyuma. - unfold_more unfold_less
Godot currently has an advanced import dialogue which allows you to tweak many properties while importing assets. We want to polish and expand this dialogue to be more powerful. At the very least we would like to improve the preview lighting, expose more tools for material editing, and expose many more common properties.