From 275dc116aecd34e1aaac747eaac8286f35db64ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo?= Date: Thu, 26 Sep 2024 11:29:35 -0300 Subject: [PATCH] Add tutorial for reducing pipeline compilation stutters. Tutorial for the new functionality added by https://github.com/godotengine/godot/pull/90400 --- .../pipeline_compilations_hidden_node.webp | Bin 0 -> 15744 bytes .../img/pipeline_compilations_monitors.webp | Bin 0 -> 22432 bytes tutorials/performance/index.rst | 1 + .../performance/pipeline_compilations.rst | 79 ++++++++++++++++++ 4 files changed, 80 insertions(+) create mode 100644 tutorials/performance/img/pipeline_compilations_hidden_node.webp create mode 100644 tutorials/performance/img/pipeline_compilations_monitors.webp create mode 100644 tutorials/performance/pipeline_compilations.rst diff --git a/tutorials/performance/img/pipeline_compilations_hidden_node.webp b/tutorials/performance/img/pipeline_compilations_hidden_node.webp new file mode 100644 index 0000000000000000000000000000000000000000..f4ef68e5343d331aed3a5eb0550f921e829a6638 GIT binary patch literal 15744 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 literal 0 HcmV?d00001 diff --git a/tutorials/performance/img/pipeline_compilations_monitors.webp b/tutorials/performance/img/pipeline_compilations_monitors.webp new file mode 100644 index 0000000000000000000000000000000000000000..e8d7bf478f6895f05d4f393157faea963c90dbbf GIT binary patch literal 22432 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 ehc|1^zDVr&c%Y%};h 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 literal 0 HcmV?d00001 diff --git a/tutorials/performance/index.rst b/tutorials/performance/index.rst index 3ece173e178..8eded24c9e0 100644 --- a/tutorials/performance/index.rst +++ b/tutorials/performance/index.rst @@ -69,6 +69,7 @@ GPU gpu_optimization using_multimesh + pipeline_compilations 3D -- diff --git a/tutorials/performance/pipeline_compilations.rst b/tutorials/performance/pipeline_compilations.rst new file mode 100644 index 00000000000..aa15cc01dac --- /dev/null +++ b/tutorials/performance/pipeline_compilations.rst @@ -0,0 +1,79 @@ +Reducing Stutter from Shader (Pipeline) Compilations +==================================================== + +Pipeline compilation, also commonly known as shader compilation, is an expensive operation required by the engine to be able to draw any kind of content with the GPU. + +In more precise terms, *Shader Compilation* involves the translation of the GLSL code that Godot generates into an intermediate format that can be shared across systems (such as SPIR-V when using Vulkan). However, this format can't be used by the GPU directly. *Pipeline Compilation* is the step the GPU driver performs where it'll convert the intermediate shader format (the result from shader compilation) to something the GPU can actually use for rendering. Drivers usually keep a cache of pipelines stored somewhere in the system to avoid repeating the process every time a game is run. This cache is usually deleted when the driver is updated. + +Pipelines contain more information than just the shader code, which means that for each shader, there can be dozens of pipelines or more! This makes it difficult for an engine to compile them ahead of time, both because it would be very slow, and because it would take up a lot of memory. On top of that, this step can only be performed on the user's system and it is very tough to share the result between users unless they have the exact same hardware and driver version. + +Before **Godot 4.4**, there was no solution to pipeline compilation other than generating them when an object shows up inside the camera's view, leading to the infamous *shader stutter* or hitches that only occur during the first playthrough. With **Godot 4.4**, new mechanisms have been introduced to mitigate stutters from pipeline compilation. + +- **Ubershaders**: Godot makes use of specialization constants, a feature that allows the driver to optimize a pipeline's code around a set of parameters such as lighting, shadow quality, etc. Specialization constants are used to optimize a shader by limiting unnecessary features. Changing a specialization constant requires recompiling the pipeline. Ubershaders are a special version of the shader that are able to change these constants while rendering, which means Godot can pre-compile just one pipeline ahead of time and compile the more optimized versions on the background during gameplay. This reduces the amount of pipelines that need to be created significantly. +- **Pipeline Pre-Compilation**: By using ubershaders, the engine can pre-compile pipelines ahead of time in multiple places such as when meshes are loaded or when nodes are added to the scene. By being part of the resource loading process, pipelines can even be pre-compiled in multiple background threads if possible during loading screens or even gameplay. + +Starting in Godot 4.4, Godot will detect which pipelines are needed and pre-compile them at load time. This detection system is mostly automatic, but it relies on the RenderingServer seeing evidence of all shaders, meshes, or rendering features at load time. For example, if you load a mesh and shader while the game is running, the pipeline for that mesh/shader combination won't be compiled until the mesh/shader is loaded. Similarly, things like enabling MSAA, or instancing a VoxelGI node while the game is running will trigger pipeline recompilations. Read on for more details. + +Pipeline Pre-Compilation Monitors +--------------------------------- + +Compiling pipelines ahead of time is the main mechanism Godot uses to mitigate shader stutters, but it's not a perfect solution. Being aware of the situations that can lead to pipeline stutters can be very helpful, and the workarounds are pretty straightforward compared to previous versions. These workarounds may be less necessary over time with future versions of Godot as more detection techniques are implemented. + +The Godot debugger offers monitors for tracking the amount of pipelines created by the game and the step that triggered their compilation. You can keep an eye on these monitors as the game runs to identify potential sources of shader stutters without having to wipe your driver cache every time you wish to test. Sudden increases of these values outside of loading screens can show up as hitches during gameplay the first time someone plays the game on their system. **It is recommended you take a look at these monitors to identify possible sources of stutter for your players**, as you might be unable to experience them yourself without deleting your driver cache or testing on a weaker system. + +.. figure:: img/pipeline_compilations_monitors.webp + :align: center + :alt: Screenshot of the Godot Pipeline Compilations monitors + + Pipeline compilations of one of the demo projects. + +.. note:: We can see the pipelines compiled during gameplay and + verify which steps could possibly cause stuttters. Note + that these values will only increase and never go down, + as deleted pipelines are not tracked by these monitors + and pipelines may be erased and recreated during gameplay. + +- **Canvas**: Compiled when drawing a 2D node. The engine does not currently feature pre-compilation for 2D elements and the stutters will show up when the node is drawn for the first time. +- **Mesh**: Compiled as part of loading a 3D mesh and identifying what pipelines can be pre-compiled from its properties. These can lead to stutters if a mesh is loaded during gameplay, but they can be mitigated if the mesh is loaded by using a background thread. **Modifiers that are part of nodes such as material overrides can't be compiled on this step**. +- **Surface**: Compiled when a frame is about to be drawn and 3D objects were instanced on the scene tree for the first time. This can also include compilation for nodes that aren't even visible on the scene tree. The stutter will occur only on the first frame the node is added to the scene, which won't result in an obvious stutter if it happens right after a loading screen. +- **Draw**: Compiled on demand when a 3D object needs to be drawn and an ubershader was not pre-compiled ahead of time. The engine is unable to pre-compile this pipeline due to triggering a case that hasn't been covered yet or a modification that was done to the engine's code. Leads to stutters during gameplay. This is identical to Godot versions before **4.4**. If you see compilations here, please let the devs know as this should never happen with the Ubershader system. +- **Specialization**: Compiled in the background during gameplay to optimize the framerate. Unable to cause stutters, but may result in reduced framerates if there are many happening per frame. + +Pipeline Pre-Compilation Features +--------------------------------- + +Godot offers a lot of rendering features that are not necessarily used by every game. Unfortunately, pipeline pre-compilation can't know ahead of time if a particular feature is used by a project. Some of these features can only be detected when a user adds a node to the scene or toggles a particular setting in the project or the environment. The pipeline pre-compilation system will keep track of these features as they're encountered for the first time and enable pre-compilation of them for any meshes or surfaces that are created afterwards. + +If your game makes use of these features, **make sure to have an scene that uses them as early as possible** before loading the majority of the assets. This scene can be very simple and will do the job as long as it uses the features the game plans to use. It can even be rendered off-screen for at least one frame if necessary. You should also keep in mind that changing any of these features during gameplay will result in immediate stutters. Make sure to only change these features from configuration screens if necessary and insert loading screens and messages when the changes are applied. + +- **MSAA Level**: Enabled when the level of 3D MSAA is changed on the project settings. Unfortunately, different MSAA levels being used on different viewports will lead to stutters as the engine only keeps track of one level at a time to perform pre-compilation. +- **Reflection Probes**: Enabled when a ReflectionProbe node is placed on the scene. +- **Separate Specular**: Enabled when using effects like sub-surface scattering or a compositor effect that relies on sampling the specularity directly off the screen. +- **Motion Vectors**: Enabled when using effects such as TAA, FSR2 or a compositor effect that requires motion vectors (such as motion blur). +- **Normal and Roughness**: Enabled when using SDFGI, VoxelGI, Screen Space Reflections, SSAO, SSIL, or using the normal_roughness_buffer in a custom shader or CompositorEffect. +- **Lightmaps**: Enabled when a LightmapGI node is placed on the scene and a node uses a baked lightmap. +- **VoxelGI**: Enabled when a VoxelGI node is placed on the scene. +- **SDFGI**: Enabled when the WorldEnvironment enables SDFGI. +- **Multiview**: Enabled for XR projects. +- **16/32-bit Shadows**: Enabled when the configuration of the depth precision of shadowmaps is changed on the project settings. +- **Omni Shadow Dual Paraboloid**: Enabled when an omni light casts shadows and uses the dual paraboloid mode. +- **Omni Shadow Cubemap**: Enabled when an omni light casts shadows and uses the cubemap mode. + +If you witness stutters during gameplay and the monitors report a sudden increase in compilations during the **Surface** step, it is very likely a feature was not enabled ahead of time. Ensuring that this effect is enabled while loading your game will likely mitigate the issue. + +Pipeline Pre-Compilation Instancing +----------------------------------- + +One common source of stutters in games is the fact that some effects are only instanced on the scene because of interactions that only happen during gameplay. For example, if you have a particle effect that is only added to the scene through a script when a player does an action. Even if the scene is preloaded, the engine might be unable to pre-compile the pipelines until the effect is added to the scene at least once. Luckily, it's possible for **Godot 4.4** to pre-compile these pipelines as long as the scene is instantiated at least once on the scene, even if it's completely invisible or outside of the camera's view. + +.. figure:: img/pipeline_compilations_hidden_node.webp + :align: center + :alt: Screenshot of an example of a Hidden Node for an effect + + Hidden bullet node attached to the player in one of the demo + projects. + +.. note:: An example of a hidden node attached to the player to + help the engine pre-compile the effect's pipelines ahead of time. + +If you're aware of any effects that are added to the scene dynamically during gameplay and are seeing sudden increases on the compilations monitor when these effects show up, a very easy workaround is to attach a hidden version of the effect somewhere that is guaranteed to show up. For example, if the player character is able to cause some sort of explosion, you can attach the effect as a child of the player as an invisible node. Make sure to disable the script attached to the hidden node or to hide any other nodes that could cause issues, which can be easily done by enabling 'Editable Children' on the node.