From c9f04ae8163d78c555f67ad9e82061c474874982 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 12 May 2023 20:38:42 +0200 Subject: [PATCH] Document faking volumetric fog using QuadMeshes In some cases, it may be better to use specially configured QuadMeshes as an alternative to volumetric fog. - Quads work with any rendering method, including Forward Mobile and Compatibility. - Quads do not require temporal reprojection to look smooth, which makes them suited to fast-moving dynamic effects such as lasers. They can also represent small details which volumetric fog cannot do efficiently. - Quads generally have a lower performance cost than volumetric fog (with some exceptions). --- .../img/volumetric_fog_quad_mesh_texture.webp | Bin 0 -> 10654 bytes tutorials/3d/volumetric_fog.rst | 43 ++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 tutorials/3d/img/volumetric_fog_quad_mesh_texture.webp diff --git a/tutorials/3d/img/volumetric_fog_quad_mesh_texture.webp b/tutorials/3d/img/volumetric_fog_quad_mesh_texture.webp new file mode 100644 index 0000000000000000000000000000000000000000..f5658840c45545660796c6fb413fa45aa3fd0692 GIT binary patch literal 10654 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 literal 0 HcmV?d00001 diff --git a/tutorials/3d/volumetric_fog.rst b/tutorials/3d/volumetric_fog.rst index a96093f147a..60f632fdf3c 100644 --- a/tutorials/3d/volumetric_fog.rst +++ b/tutorials/3d/volumetric_fog.rst @@ -223,3 +223,46 @@ Custom FogVolume shaders This page only covers the built-in settings offered by FogMaterial. If you need to customize fog behavior within a FogVolume node (such as creating animated fog), FogVolume nodes' appearance can be customized using :ref:`doc_fog_shader`. + +Faking volumetric fog using quads +--------------------------------- + +In some cases, it may be better to use specially configured QuadMeshes as an +alternative to volumetric fog: + +- Quads work with any rendering method, including Forward Mobile and Compatibility. +- Quads do not require temporal reprojection to look smooth, which makes + them suited to fast-moving dynamic effects such as lasers. They can also + represent small details which volumetric fog cannot do efficiently. +- Quads generally have a lower performance cost than volumetric fog. + +This approach has a few downsides though: + +- The fog effect has less realistic falloff, especially if the camera enters the fog. +- Transparency sorting issues may occur when sprites overlap. +- Performance will not necessarily be better than volumetric fog if there are + lots of sprites close to the camera. + +To create a QuadMesh-based fog sprite: + +1. Create a MeshInstance3D node with a QuadMesh resource in the **Mesh** + property. Set the size as desired. +2. Create a new StandardMaterial3D in the mesh's **Material** property. +3. In the StandardMaterial3D, set **Shading > Shading Mode** to **Unshaded**, + **Billboard > Mode** to **Enabled**, enable **Proximity Fade** and set + **Distance Fade** to **Pixel Alpha**. +4. Set the **Albedo > Texture** to the texture below (right-click and choose **Save as…**): + + .. image:: img/volumetric_fog_quad_mesh_texture.webp + +5. *After* setting the albedo texture, go to the Import dock, select the texture + and change its compression mode to **Lossless** to improve quality. + +The fog's color is set using the **Albedo > Color** property; its density is set +using the color's alpha channel. For best results, you will have to adjust +**Proximity Fade > Distance** and **Distance Fade > Max Distance** depending on +the size of your QuadMesh. + +Optionally, billboarding may be left disabled if you place the quad in a way +where all of its corners are in solid geometry. This can be useful for fogging +large planes that the camera cannot enter, such as bottomless pits.