You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rendering experiments in godot, occasional godot PRs
Describe the problem or limitation you are having in your project
Godot's rendering code uses RenderingDevice and RenderingDeviceDriver to interact with the underlying rendering API. This means that developers can write generic rendering code targeting this custom abstraction layer and godot will automatically take care of "translating" those instructions to the underlying API using a so called "rendering driver". We are thus able to support a multitude of modern rendering APIs (Vulkan, Metal, DX12, ...)
However, this also means that when we are developing new features for godot itself or including custom rendering instructions in our projects using the recent-ish hooks(godot/pull/80214) we are limited to rendering features that have already been added to this abstraction layer.
Describe the feature / enhancement and how it helps to overcome the problem or limitation
Mesh Shading is a more modern geometry pipeline that aims to provide an alternative to the traditional vertex/fragment pipeline rendering engineers have been using so far. Instead of having a vertex shader that processes single vertices at a time the mesh shader stage operates on entire meshes at once (usually called "meshlets"). Since these mesh shaders are fully customizeable the developer has a lot more control over how exactly the geometry is organized and processed.
Additionally, a new optional stage is introduced, so called "task shader" which are capable of dispatching the mesh shader.
Utilizing this more compute-like approach to rendering makes it easier implement GPU driven rendering and makes it trivial to do stuff such as culling or LOD selection on the GPU instead.
Mesh shaders can also be used for efficient multi mesh rendering or procedural geometry.
For more in depth information I would suggest one takes a look at the following link and the other resources linked there.
NOTE: this proposal is only about exposing mesh shaders and not about actually using them in one of the built in renderers. This is merely about laying the foundation for future proposals and allowing interested developers to use mesh shaders in their own forks of the engine or any plugins/extensions they develop.
Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams
Logic needs to be added added to the rendering device, the graph and the drivers to expose the already existing "mesh shader" functionality. Luckily all three major graphics APIs (Vulkan, DX12, Metal) support mesh shaders in a fairly similar way. Furthermore thimenesup has already taken the time to write a PR that exposes this functionality: https://github.com/godotengine/godot/pull/88934/files
Given that this has been pretty much standardized across all major vendors and there is only really one way to expose this I don't expect this to need any major updates or maintenance once it has been approved & merged.
If this enhancement will not be used often, can it be worked around with a few lines of script?
No, this needs to be exposed at the lowest level of our rendering code.
Is there a reason why this should be core and not an add-on in the asset library?
No, rendering device, graph & drivers are core.
The text was updated successfully, but these errors were encountered:
Describe the project you are working on
Rendering experiments in godot, occasional godot PRs
Describe the problem or limitation you are having in your project
Godot's rendering code uses RenderingDevice and RenderingDeviceDriver to interact with the underlying rendering API. This means that developers can write generic rendering code targeting this custom abstraction layer and godot will automatically take care of "translating" those instructions to the underlying API using a so called "rendering driver". We are thus able to support a multitude of modern rendering APIs (Vulkan, Metal, DX12, ...)
However, this also means that when we are developing new features for godot itself or including custom rendering instructions in our projects using the recent-ish hooks(godot/pull/80214) we are limited to rendering features that have already been added to this abstraction layer.
Describe the feature / enhancement and how it helps to overcome the problem or limitation
Mesh Shading is a more modern geometry pipeline that aims to provide an alternative to the traditional vertex/fragment pipeline rendering engineers have been using so far. Instead of having a vertex shader that processes single vertices at a time the mesh shader stage operates on entire meshes at once (usually called "meshlets"). Since these mesh shaders are fully customizeable the developer has a lot more control over how exactly the geometry is organized and processed.
Additionally, a new optional stage is introduced, so called "task shader" which are capable of dispatching the mesh shader.
Utilizing this more compute-like approach to rendering makes it easier implement GPU driven rendering and makes it trivial to do stuff such as culling or LOD selection on the GPU instead.
Mesh shaders can also be used for efficient multi mesh rendering or procedural geometry.
For more in depth information I would suggest one takes a look at the following link and the other resources linked there.
NOTE: this proposal is only about exposing mesh shaders and not about actually using them in one of the built in renderers. This is merely about laying the foundation for future proposals and allowing interested developers to use mesh shaders in their own forks of the engine or any plugins/extensions they develop.
Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams
Logic needs to be added added to the rendering device, the graph and the drivers to expose the already existing "mesh shader" functionality. Luckily all three major graphics APIs (Vulkan, DX12, Metal) support mesh shaders in a fairly similar way. Furthermore thimenesup has already taken the time to write a PR that exposes this functionality: https://github.com/godotengine/godot/pull/88934/files
Given that this has been pretty much standardized across all major vendors and there is only really one way to expose this I don't expect this to need any major updates or maintenance once it has been approved & merged.
If this enhancement will not be used often, can it be worked around with a few lines of script?
No, this needs to be exposed at the lowest level of our rendering code.
Is there a reason why this should be core and not an add-on in the asset library?
No, rendering device, graph & drivers are core.
The text was updated successfully, but these errors were encountered: