Browse Source

Document converting CSG nodes to MeshInstance3D and related lightmapping workflow (#10229)

* Document converting CSG nodes to MeshInstance3D and related lightmapping workflow

---------

Co-authored-by: Max Hilbrunner <[email protected]>
Co-authored-by: tetrapod <[email protected]>
Hugo Locurcio 8 months ago
parent
commit
338c19ca9d

+ 32 - 1
tutorials/3d/csg_tools.rst

@@ -296,8 +296,39 @@ in the **Scale** property will cause the texture to repeat more often.
          the material onto, click the dropdown arrow next to its material
          the material onto, click the dropdown arrow next to its material
          property then choose **Paste**.
          property then choose **Paste**.
 
 
+.. _doc_csg_tools_converting_to_mesh_instance_3d:
+
+Converting to MeshInstance3D
+----------------------------
+
+Since Godot 4.4, you can convert a CSG node and its children to a :ref:`class_MeshInstance3D` node.
+
+This has several benefits:
+
+- Bake lightmaps, since UV2 can be generated on a MeshInstance3D.
+- Bake occlusion culling, since the occlusion culling bake process only takes MeshInstance3D into account.
+- Faster loading times, since the CSG mesh no longer needs to be rebuilt when the scene loads.
+- Better performance when updating the node's transform if using the mesh within another CSG node.
+
+To convert a CSG node to a MeshInstance3D node, select it, then choose
+**CSG > Bake Mesh Instance** in the toolbar. The MeshInstance3D node
+will be created as a sibling. Note that the CSG node that was used for baking is **not** hidden
+automatically, so remember to hide it to prevent its geometry from overlapping with the newly created
+MeshInstance3D.
+
+You can also create a trimesh collision shape using **CSG > Bake Collision Shape**.
+The generated :ref:`class_CollisionShape3D` node must be a child of a :ref:`class_StaticBody3D`
+or :ref:`class_AnimatableBody3D` node to be effective.
+
+.. tip::
+
+    Remember to keep the original CSG node in the scene tree, so that you can
+    perform changes to the geometry later if needed. To make changes to the
+    geometry, remove the MeshInstance3D node and make the root CSG node visible
+    again.
+
 Exporting as glTF
 Exporting as glTF
-------------------------
+-----------------
 
 
 It can be useful to block out a level using CSG, then export it as a 3d model, to
 It can be useful to block out a level using CSG, then export it as a 3d model, to
 import into 3D modeling software. You can do this by selecting **Scene > Export As... >
 import into 3D modeling software. You can do this by selecting **Scene > Export As... >

+ 19 - 0
tutorials/3d/global_illumination/using_lightmap_gi.rst

@@ -202,6 +202,25 @@ lightmap texture, which varies depending on the mesh's size properties and the
 **UV2 Padding** value. **Lightmap Size Hint** should not be manually changed, as
 **UV2 Padding** value. **Lightmap Size Hint** should not be manually changed, as
 any modifications will be lost when the scene is reloaded.
 any modifications will be lost when the scene is reloaded.
 
 
+Generating UV2 for CSG nodes
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Since Godot 4.4, you can
+:ref:`convert a CSG node and its children to a MeshInstance3D <doc_csg_tools_converting_to_mesh_instance_3d>`.
+This can be used to bake lightmaps on a CSG node by following these steps:
+
+- Select the root CSG node and choose **CSG > Bake Mesh Instance** at the top of the 3D editor viewport.
+- Hide the root CSG node that was just baked (it is not hidden automatically).
+- Select the newly created MeshInstance3D node and choose **Mesh > Unwrap UV2 for Lightmap/AO**.
+- Bake lightmaps.
+
+.. tip::
+
+    Remember to keep the original CSG node in the scene tree, so that you can
+    perform changes to the geometry later if needed. To make changes to the
+    geometry, remove the MeshInstance3D node and make the root CSG node visible
+    again.
+
 Checking UV2
 Checking UV2
 ^^^^^^^^^^^^
 ^^^^^^^^^^^^
 
 

+ 6 - 1
tutorials/3d/occlusion_culling.rst

@@ -79,7 +79,8 @@ How occlusion culling works in Godot
 
 
 .. note::
 .. note::
 
 
-    *"occluder" refers to the shape blocking the view, while "occludee" refers to the object being hidden.*
+    "occluder" refers to the shape blocking the view, while "occludee" refers to
+    the object being hidden.
 
 
 In Godot, occlusion culling works by rasterizing the scene's occluder geometry
 In Godot, occlusion culling works by rasterizing the scene's occluder geometry
 to a low-resolution buffer on the CPU. This is done using
 to a low-resolution buffer on the CPU. This is done using
@@ -124,6 +125,10 @@ Automatically baking occluders (recommended)
     those to be treated as occluders, you have to manually create occluder
     those to be treated as occluders, you have to manually create occluder
     shapes that (roughly) match their geometry.
     shapes that (roughly) match their geometry.
 
 
+    Since Godot 4.4, CSG nodes can be taken into account in the baking process if they are
+    :ref:`converted to a MeshInstance3D <doc_csg_tools_converting_to_mesh_instance_3d>`
+    before baking occluders.
+
     This restriction does not apply to *occludees*. Any node type that inherits
     This restriction does not apply to *occludees*. Any node type that inherits
     from GeometryInstance3D can be occluded.
     from GeometryInstance3D can be occluded.