123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362 |
- .. _doc_renderers:
- Renderers
- =========
- .. seealso::
- This page gives an overview of Godot's renderers, focusing on the differences
- between their rendering features. For more technical details on the renderers,
- see :ref:`doc_internal_rendering_architecture`.
- Introduction
- ------------
- Godot 4 includes three renderers:
- - **Forward+**. The most advanced renderer, suited for desktop platforms only.
- Used by default on desktop platforms. This renderer uses **Vulkan**, **Direct3D 12**,
- or **Metal** as the rendering driver, and it uses the **RenderingDevice** backend.
- - **Mobile**. Fewer features, but renders simple scenes faster. Suited for mobile
- and desktop platforms. Used by default on mobile platforms. This renderer uses
- **Vulkan**, **Direct3D 12**, or **Metal** as the rendering driver, and it uses
- the **RenderingDevice** backend.
- - **Compatibility**, sometimes called **GL Compatibility**. The least advanced
- renderer, suited for low-end desktop and mobile platforms. Used by default on
- the web platform. This renderer uses **OpenGL** as the rendering driver.
- Renderers, rendering drivers, and RenderingDevice
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- .. figure:: img/renderers_rendering_layers.webp
- :alt: Diagram of rendering layers. The Compatibility renderer runs on the OpenGL
- driver. The Forward+ and Mobile renderers run on RenderingDevice, which can use
- Vulkan, Direct3D 12, or Metal as a rendering driver.
- :align: center
- Godot's rendering abstraction layers.
- The *renderer*, or *rendering method*, determines which features are available.
- Most of the time, this is the only thing you need to think about. Godot's renderers
- are **Forward+**, **Mobile**, and **Compatibility**.
- The *rendering driver* tells the GPU what to do, using a graphics API. Godot can
- use the **OpenGL**, **Vulkan**, **Direct3D 12**, and **Metal** rendering drivers.
- Not every GPU supports every rendering driver, and therefore not every GPU supports
- all renderers. Vulkan, Direct3D 12, and Metal are modern, low-level graphics APIs,
- and requires newer hardware. OpenGL is an older graphics API that runs on most hardware.
- RenderingDevice is a *rendering backend*, an abstraction layer between the renderer
- and the rendering driver. It is used by the Forward+ and Mobile renderers, and
- these renderers are sometimes called "RenderingDevice-based renderers".
- Choosing a renderer
- -------------------
- Choosing a renderer is a complex question, and depends on your hardware and the
- which platforms you are developing for. As a starting point:
- Choose **Forward+** if:
- - You are developing for desktop.
- - You have relatively new hardware which supports Vulkan, Direct3D 12, or Metal.
- - You are developing a 3D game.
- - You want to use the most advanced rendering features.
- Choose **Mobile** if:
- - You are developing for newer mobile devices, desktop XR, or desktop.
- - You have relatively new hardware which supports Vulkan, Direct3D 12, or Metal.
- - You are developing a 3D game.
- - You want to use advanced rendering features, subject to the limitations
- of mobile hardware.
- Choose **Compatibility** if:
- - You are developing for older mobile devices, older desktop devices, or
- standalone XR. The Compatibility renderer supports the widest range of hardware.
- - You are developing for web. In this case, Compatibility is the only choice.
- - You have older hardware which does not support Vulkan. In this case,
- Compatibility is the only choice.
- - You are developing a 2D game, or a 3D game which does not need advanced
- rendering features.
- - You want the best performance possible on all devices and don't need advanced
- rendering features.
- Keep in mind every game is unique, and this is only a starting point. For example,
- you might choose to use the Compatibility renderer even though you have the latest
- GPU, so you can support the widest range of hardware. Or you might want to use the
- Forward+ renderer for a 2D game, so you can advanced features like compute shaders.
- Switching between renderers
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
- In the editor, you can always switch between renderers by clicking on the renderer
- name in the upper-right corner of the editor.
- Switching between renderers may require some manual tweaks to your scene, lighting,
- and environment, since each renderer is different. In general, switching between
- the Mobile and Forward+ renderers will require fewer adjustments than switching
- between the Compatibility renderer and the Forward+ or Mobile renderers.
- Since Godot 4.4, when using Forward+ or Mobile, if Vulkan is not supported, the
- engine will fall back to Direct3D 12 and vice versa. If the attempted fallback
- driver is not supported either, the engine will then fall back to Compatibility
- when the RenderingDevice backend is not supported. This allows the project to run
- anyway, but it may look different than the intended appearance due to the more
- limited renderer. This behavior can be disabled in the project settings by unchecking
- :ref:`Rendering > Rendering Device > Fallback to OpenGL 3<class_ProjectSettings_property_rendering/rendering_device/fallback_to_opengl3>`.
- Feature comparison
- ------------------
- This is not a complete list of the features of each renderer. If a feature is
- not listed here, it is available in all renderers, though it may be much faster
- on some renderers. For a list of *all* features in Godot, see :ref:`doc_list_of_features`.
- Hardware with RenderingDevice support is hardware which can run Vulkan, Direct3D
- 12, or Metal.
- Overall comparison
- ~~~~~~~~~~~~~~~~~~
- .. Note that these tables use emojis, which are not monospaced in most editors.
- .. The tables look malformed but are not. When making changes, check the nearby
- .. lines for guidance.
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=====================+==========================+==========================+==========================+
- | **Required** | Older or low-end. | Newer or high-end. | Newer or high-end. |
- | **hardware** | | Requires Vulkan, Direct3D| Requires Vulkan, Direct3D|
- | | | 12, or Metal support. | 12, or Metal support. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Runs on new hardware| ✔️ Yes. | ✔️ Yes. | ✔️ Yes. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Runs on old and | ✔️ Yes. | ✔️ Yes, but slower than | ✔️ Yes, but slowest of |
- | low-end hardware | | Compatibility. | all renderers. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Runs on hardware | ✔️ Yes. | ❌ No. | ❌ No. |
- | without | | | |
- | RenderingDevice | | | |
- | support | | | |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | **Target platforms**| Mobile, low-end desktop, | Mobile, desktop. | Desktop. |
- | | web. | | |
- | | | | |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Desktop | ✔️ Yes. | ✔️ Yes. | ✔️ Yes. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Mobile | ✔️ Yes (low-end). | ✔️ Yes (high-end). | ⚠️ Supported, but poorly |
- | | | | optimized. Use Mobile or |
- | | | | Compatibility instead. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | XR | ✔️ Yes. Recommended for | ✔️ Yes. Recommended for | ⚠️ Supported, but poorly |
- | | standalone headsets. | desktop headsets. | optimized. Use Mobile or |
- | | | | Compatibility instead. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Web | ✔️ Yes. | ❌ No. | ❌ No. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | 2D Games | ✔️ Yes. | ✔️ Yes, but | ✔️ Yes, but |
- | | | Compatibility is usually | Compatibility is usually |
- | | | good enough for 2D. | good enough for 2D. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | 3D Games | ✔️ Yes. | ✔️ Yes. | ✔️ Yes. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | **Feature set** | 2D and core 3D features. | Most rendering features. | All rendering features. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | 2D rendering | ✔️ Yes. | ✔️ Yes. | ✔️ Yes. |
- | features | | | |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Core 3D rendering | ✔️ Yes. | ✔️ Yes. | ✔️ Yes. |
- | features | | | |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Advanced | ❌ No. | ⚠️ Yes, limited by | ✔️ Yes. All rendering |
- | rendering features | | mobile hardware. | features are supported. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | New features | ⚠️ Some new rendering | ✔️ Most new rendering | ✔️ All new features are |
- | | features are added to | features are added to | added to Forward+. As the|
- | | Compatibility. Features | Mobile. Mobile usually | focus of new development,|
- | | are added after Mobile | gets new features as | Forward+ gets features |
- | | and Forward+. | Forward+ does. | first. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Rendering cost | Low base cost, but | Medium base cost, and | Highest base cost, and |
- | | high scaling cost. | medium scaling cost. | low scaling cost. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- | Rendering driver | OpenGL. | Vulkan, Direct3D 12, or | Vulkan, Direct3D 12, or |
- | | | Metal. | Metal. |
- +---------------------+--------------------------+--------------------------+--------------------------+
- Lights and shadows
- ~~~~~~~~~~~~~~~~~~
- See :ref:`doc_lights_and_shadows` for more information.
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=========================+==========================+==========================+==========================+
- | Lighting approach | Forward | Forward | Clustered Forward |
- | | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Maximum | 8 per mesh. Can be | 8 per mesh, 256 per view.| 512 per cluster. Can be |
- | OmniLights | increased. | | increased. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Maximum | 8 per mesh. Can be | 8 per mesh, 256 per view.| 512 per cluster. Can be |
- | SpotLights | increased. | | increased. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Maximum | 8 | 8 | 8 |
- | DirectionalLights | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | PCSS for | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | OmniLight and SpotLight | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | PCSS for | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | DirectionalLight | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Light projector | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | textures | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- Global Illumination
- ~~~~~~~~~~~~~~~~~~~
- See :ref:`doc_introduction_to_global_illumination` for more information.
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=========================+==========================+==========================+==========================+
- | ReflectionProbe | ✔️ Supported, 2 per | ✔️ Supported, 8 per | ✔️ Supported, unlimited. |
- | | mesh. | mesh. | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | LightmapGI | ⚠️ Rendering of baked | ✔️ Supported. | ✔️ Supported. |
- | | lightmaps is supported. | | |
- | | Baking requires hardware | | |
- | | with RenderingDevice | | |
- | | support. | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | VoxelGI | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Screen-Space | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | Indirect Lighting (SSIL)| | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Signed Distance Field | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | Global Illumination | | | |
- | (SDFGI) | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- Environment and post-processing
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- See :ref:`doc_environment_and_post_processing` for more information.
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=========================+==========================+==========================+==========================+
- | Fog (Depth and Height) | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Volumetric Fog | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Tonemapping | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Screen-Space Reflections| ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Screen-Space Ambient | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | Occlusion (SSAO) | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Screen-Space | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | Indirect Lighting (SSIL)| | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Signed Distance Field | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | Global Illumination | | | |
- | (SDFGI) | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Glow | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Adjustments | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Custom post-processing | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- | with fullscreen quad | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Custom post-processing | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | with CompositorEffects | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- Antialiasing
- ~~~~~~~~~~~~
- See :ref:`doc_3d_antialiasing` for more information.
- +-------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +===================+==========================+==========================+==========================+
- | MSAA 3D | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------+--------------------------+--------------------------+--------------------------+
- | MSAA 2D | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------+--------------------------+--------------------------+--------------------------+
- | TAA | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- +-------------------+--------------------------+--------------------------+--------------------------+
- | FSR2 | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- +-------------------+--------------------------+--------------------------+--------------------------+
- | FXAA | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------+--------------------------+--------------------------+--------------------------+
- | SSAA | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------+--------------------------+--------------------------+--------------------------+
- | Screen-space | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | roughness limiter | | | |
- +-------------------+--------------------------+--------------------------+--------------------------+
- StandardMaterial features
- ~~~~~~~~~~~~~~~~~~~~~~~~~
- See :ref:`doc_standard_material_3d` for more information.
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=========================+==========================+==========================+==========================+
- | Sub-surface scattering | ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- | | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- Shader features
- ~~~~~~~~~~~~~~~
- See :ref:`doc_shading_reference` for more information.
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=========================+==========================+==========================+==========================+
- | Screen texture | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Depth texture | ✔️ Supported. | ✔️ Supported. | ✔️ Supported. |
- | | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Normal/Roughness texture| ❌ Not supported. | ❌ Not supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Compute shaders | ❌ Not supported. | ⚠️ Supported, but comes | ✔️ Supported. |
- | | | with a performance | |
- | | | penalty on older devices.| |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- Other features
- ~~~~~~~~~~~~~~
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Feature | Compatibility | Mobile | Forward+ |
- +=========================+==========================+==========================+==========================+
- | Variable rate | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | shading | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Decals | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Depth of field blur | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | Adaptive and Mailbox | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | VSync modes | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | 2D HDR Viewport | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- +-------------------------+--------------------------+--------------------------+--------------------------+
- | RenderingDevice | ❌ Not supported. | ✔️ Supported. | ✔️ Supported. |
- | access | | | |
- +-------------------------+--------------------------+--------------------------+--------------------------+
|