Browse Source

classref: Sync with current master branch (f497156)

Godot Organization 1 year ago
parent
commit
07b5a8fb27

+ 1 - 1
classes/class_animation.rst

@@ -877,7 +877,7 @@ Compress the animation and all its tracks in-place. This will make :ref:`track_i
 
 
 void **copy_track** **(** :ref:`int<class_int>` track_idx, :ref:`Animation<class_Animation>` to_animation **)**
 void **copy_track** **(** :ref:`int<class_int>` track_idx, :ref:`Animation<class_Animation>` to_animation **)**
 
 
-Adds a new track that is a copy of the given track from ``to_animation``.
+Adds a new track to ``to_animation`` that is a copy of the given track from this animation.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 

+ 1 - 1
classes/class_basematerial3d.rst

@@ -1227,7 +1227,7 @@ The object's X axis will always face the camera.
 
 
 :ref:`BillboardMode<enum_BaseMaterial3D_BillboardMode>` **BILLBOARD_PARTICLES** = ``3``
 :ref:`BillboardMode<enum_BaseMaterial3D_BillboardMode>` **BILLBOARD_PARTICLES** = ``3``
 
 
-Used for particle systems when assigned to :ref:`GPUParticles3D<class_GPUParticles3D>` and :ref:`CPUParticles3D<class_CPUParticles3D>` nodes. Enables ``particles_anim_*`` properties.
+Used for particle systems when assigned to :ref:`GPUParticles3D<class_GPUParticles3D>` and :ref:`CPUParticles3D<class_CPUParticles3D>` nodes (flipbook animation). Enables ``particles_anim_*`` properties.
 
 
 The :ref:`ParticleProcessMaterial.anim_speed_min<class_ParticleProcessMaterial_property_anim_speed_min>` or :ref:`CPUParticles3D.anim_speed_min<class_CPUParticles3D_property_anim_speed_min>` should also be set to a value bigger than zero for the animation to play.
 The :ref:`ParticleProcessMaterial.anim_speed_min<class_ParticleProcessMaterial_property_anim_speed_min>` or :ref:`CPUParticles3D.anim_speed_min<class_CPUParticles3D_property_anim_speed_min>` should also be set to a value bigger than zero for the animation to play.
 
 

+ 6 - 2
classes/class_control.rst

@@ -1131,7 +1131,9 @@ Sent when the node needs to refresh its theme items. This happens in one of the
 
 
 **NOTIFICATION_SCROLL_BEGIN** = ``47``
 **NOTIFICATION_SCROLL_BEGIN** = ``47``
 
 
-Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has begun being scrolled.
+Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has begun being scrolled when dragging the scrollable area *with a touch event*. This notification is *not* sent when scrolling by dragging the scrollbar, scrolling with the mouse wheel or scrolling with keyboard/gamepad events.
+
+\ **Note:** This signal is only emitted on Android or iOS, or on desktop/web platforms when :ref:`ProjectSettings.input_devices/pointing/emulate_touch_from_mouse<class_ProjectSettings_property_input_devices/pointing/emulate_touch_from_mouse>` is enabled.
 
 
 .. _class_Control_constant_NOTIFICATION_SCROLL_END:
 .. _class_Control_constant_NOTIFICATION_SCROLL_END:
 
 
@@ -1139,7 +1141,9 @@ Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` wh
 
 
 **NOTIFICATION_SCROLL_END** = ``48``
 **NOTIFICATION_SCROLL_END** = ``48``
 
 
-Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has stopped being scrolled.
+Sent when this node is inside a :ref:`ScrollContainer<class_ScrollContainer>` which has stopped being scrolled when dragging the scrollable area *with a touch event*. This notification is *not* sent when scrolling by dragging the scrollbar, scrolling with the mouse wheel or scrolling with keyboard/gamepad events.
+
+\ **Note:** This signal is only emitted on Android or iOS, or on desktop/web platforms when :ref:`ProjectSettings.input_devices/pointing/emulate_touch_from_mouse<class_ProjectSettings_property_input_devices/pointing/emulate_touch_from_mouse>` is enabled.
 
 
 .. _class_Control_constant_NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
 .. _class_Control_constant_NOTIFICATION_LAYOUT_DIRECTION_CHANGED:
 
 

+ 14 - 6
classes/class_gpuparticles2d.rst

@@ -240,7 +240,9 @@ Property Descriptions
 - void **set_amount** **(** :ref:`int<class_int>` value **)**
 - void **set_amount** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_amount** **(** **)**
 - :ref:`int<class_int>` **get_amount** **(** **)**
 
 
-Number of particles emitted in one emission cycle.
+The number of particles to emit in one emission cycle. The effective emission rate is ``(amount * amount_ratio) / lifetime`` particles per second. Higher values will increase GPU requirements, even if not all particles are visible at a given time or if :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` is decreased.
+
+\ **Note:** Changing this value will cause the particle system to restart. To avoid this, change :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` instead.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -259,7 +261,7 @@ Number of particles emitted in one emission cycle.
 
 
 The ratio of particles that should actually be emitted. If set to a value lower than ``1.0``, this will set the amount of emitted particles throughout the lifetime to ``amount * amount_ratio``. Unlike changing :ref:`amount<class_GPUParticles2D_property_amount>`, changing :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` while emitting does not affect already-emitted particles and doesn't cause the particle system to restart. :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` can be used to create effects that make the number of emitted particles vary over time.
 The ratio of particles that should actually be emitted. If set to a value lower than ``1.0``, this will set the amount of emitted particles throughout the lifetime to ``amount * amount_ratio``. Unlike changing :ref:`amount<class_GPUParticles2D_property_amount>`, changing :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` while emitting does not affect already-emitted particles and doesn't cause the particle system to restart. :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` can be used to create effects that make the number of emitted particles vary over time.
 
 
-\ **Note:** Reducing the :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` has no performance benefit, since resources need to be allocated and processed for the total :ref:`amount<class_GPUParticles2D_property_amount>` of particles regardless of the :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>`.
+\ **Note:** Reducing the :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` has no performance benefit, since resources need to be allocated and processed for the total :ref:`amount<class_GPUParticles2D_property_amount>` of particles regardless of the :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>`. If you don't intend to change the number of particles emitted while the particles are emitting, make sure :ref:`amount_ratio<class_GPUParticles2D_property_amount_ratio>` is set to ``1`` and change :ref:`amount<class_GPUParticles2D_property_amount>` to your liking instead.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -276,7 +278,9 @@ The ratio of particles that should actually be emitted. If set to a value lower
 - void **set_collision_base_size** **(** :ref:`float<class_float>` value **)**
 - void **set_collision_base_size** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_collision_base_size** **(** **)**
 - :ref:`float<class_float>` **get_collision_base_size** **(** **)**
 
 
-Multiplier for particle's collision radius. ``1.0`` corresponds to the size of the sprite.
+Multiplier for particle's collision radius. ``1.0`` corresponds to the size of the sprite. If particles appear to sink into the ground when colliding, increase this value. If particles appear to float when colliding, decrease this value. Only effective if :ref:`ParticleProcessMaterial.collision_mode<class_ParticleProcessMaterial_property_collision_mode>` is :ref:`ParticleProcessMaterial.COLLISION_RIGID<class_ParticleProcessMaterial_constant_COLLISION_RIGID>` or :ref:`ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT<class_ParticleProcessMaterial_constant_COLLISION_HIDE_ON_CONTACT>`.
+
+\ **Note:** Particles always have a spherical collision shape.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -414,7 +418,7 @@ Enables particle interpolation, which makes the particle movement smoother when
 - void **set_lifetime** **(** :ref:`float<class_float>` value **)**
 - void **set_lifetime** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_lifetime** **(** **)**
 - :ref:`float<class_float>` **get_lifetime** **(** **)**
 
 
-Amount of time each particle will exist.
+The amount of time each particle will exist (in seconds). The effective emission rate is ``(amount * amount_ratio) / lifetime`` particles per second.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -533,7 +537,9 @@ Particle system's running speed scaling ratio. A value of ``0`` can be used to p
 - void **set_sub_emitter** **(** :ref:`NodePath<class_NodePath>` value **)**
 - void **set_sub_emitter** **(** :ref:`NodePath<class_NodePath>` value **)**
 - :ref:`NodePath<class_NodePath>` **get_sub_emitter** **(** **)**
 - :ref:`NodePath<class_NodePath>` **get_sub_emitter** **(** **)**
 
 
-The :ref:`NodePath<class_NodePath>` to the **GPUParticles2D** used for sub-emissions.
+Path to another **GPUParticles2D** node that will be used as a subemitter (see :ref:`ParticleProcessMaterial.sub_emitter_mode<class_ParticleProcessMaterial_property_sub_emitter_mode>`). Subemitters can be used to achieve effects such as fireworks, sparks on collision, bubbles popping into water drops, and more.
+
+\ **Note:** When :ref:`sub_emitter<class_GPUParticles2D_property_sub_emitter>` is set, the target **GPUParticles2D** node will no longer emit particles on its own.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -550,7 +556,9 @@ The :ref:`NodePath<class_NodePath>` to the **GPUParticles2D** used for sub-emiss
 - void **set_texture** **(** :ref:`Texture2D<class_Texture2D>` value **)**
 - void **set_texture** **(** :ref:`Texture2D<class_Texture2D>` value **)**
 - :ref:`Texture2D<class_Texture2D>` **get_texture** **(** **)**
 - :ref:`Texture2D<class_Texture2D>` **get_texture** **(** **)**
 
 
-Particle texture. If ``null``, particles will be squares.
+Particle texture. If ``null``, particles will be squares with a size of 1×1 pixels.
+
+\ **Note:** To use a flipbook texture, assign a new :ref:`CanvasItemMaterial<class_CanvasItemMaterial>` to the **GPUParticles2D**'s :ref:`CanvasItem.material<class_CanvasItem_property_material>` property, then enable :ref:`CanvasItemMaterial.particles_animation<class_CanvasItemMaterial_property_particles_animation>` and set :ref:`CanvasItemMaterial.particles_anim_h_frames<class_CanvasItemMaterial_property_particles_anim_h_frames>`, :ref:`CanvasItemMaterial.particles_anim_v_frames<class_CanvasItemMaterial_property_particles_anim_v_frames>`, and :ref:`CanvasItemMaterial.particles_anim_loop<class_CanvasItemMaterial_property_particles_anim_loop>` to match the flipbook texture.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 

+ 12 - 8
classes/class_gpuparticles3d.rst

@@ -317,7 +317,9 @@ Property Descriptions
 - void **set_amount** **(** :ref:`int<class_int>` value **)**
 - void **set_amount** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_amount** **(** **)**
 - :ref:`int<class_int>` **get_amount** **(** **)**
 
 
-Number of particles to emit.
+The number of particles to emit in one emission cycle. The effective emission rate is ``(amount * amount_ratio) / lifetime`` particles per second. Higher values will increase GPU requirements, even if not all particles are visible at a given time or if :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` is decreased.
+
+\ **Note:** Changing this value will cause the particle system to restart. To avoid this, change :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` instead.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -336,7 +338,7 @@ Number of particles to emit.
 
 
 The ratio of particles that should actually be emitted. If set to a value lower than ``1.0``, this will set the amount of emitted particles throughout the lifetime to ``amount * amount_ratio``. Unlike changing :ref:`amount<class_GPUParticles3D_property_amount>`, changing :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` while emitting does not affect already-emitted particles and doesn't cause the particle system to restart. :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` can be used to create effects that make the number of emitted particles vary over time.
 The ratio of particles that should actually be emitted. If set to a value lower than ``1.0``, this will set the amount of emitted particles throughout the lifetime to ``amount * amount_ratio``. Unlike changing :ref:`amount<class_GPUParticles3D_property_amount>`, changing :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` while emitting does not affect already-emitted particles and doesn't cause the particle system to restart. :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` can be used to create effects that make the number of emitted particles vary over time.
 
 
-\ **Note:** Reducing the :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` has no performance benefit, since resources need to be allocated and processed for the total :ref:`amount<class_GPUParticles3D_property_amount>` of particles regardless of the :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>`.
+\ **Note:** Reducing the :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` has no performance benefit, since resources need to be allocated and processed for the total :ref:`amount<class_GPUParticles3D_property_amount>` of particles regardless of the :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>`. If you don't intend to change the number of particles emitted while the particles are emitting, make sure :ref:`amount_ratio<class_GPUParticles3D_property_amount_ratio>` is set to ``1`` and change :ref:`amount<class_GPUParticles3D_property_amount>` to your liking instead.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -353,9 +355,9 @@ The ratio of particles that should actually be emitted. If set to a value lower
 - void **set_collision_base_size** **(** :ref:`float<class_float>` value **)**
 - void **set_collision_base_size** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_collision_base_size** **(** **)**
 - :ref:`float<class_float>` **get_collision_base_size** **(** **)**
 
 
-.. container:: contribute
+The base diameter for particle collision in meters. If particles appear to sink into the ground when colliding, increase this value. If particles appear to float when colliding, decrease this value. Only effective if :ref:`ParticleProcessMaterial.collision_mode<class_ParticleProcessMaterial_property_collision_mode>` is :ref:`ParticleProcessMaterial.COLLISION_RIGID<class_ParticleProcessMaterial_constant_COLLISION_RIGID>` or :ref:`ParticleProcessMaterial.COLLISION_HIDE_ON_CONTACT<class_ParticleProcessMaterial_constant_COLLISION_HIDE_ON_CONTACT>`.
 
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** Particles always have a spherical collision shape.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -599,7 +601,7 @@ Enables particle interpolation, which makes the particle movement smoother when
 - void **set_lifetime** **(** :ref:`float<class_float>` value **)**
 - void **set_lifetime** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_lifetime** **(** **)**
 - :ref:`float<class_float>` **get_lifetime** **(** **)**
 
 
-Amount of time each particle will exist.
+The amount of time each particle will exist (in seconds). The effective emission rate is ``(amount * amount_ratio) / lifetime`` particles per second.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -718,9 +720,9 @@ Speed scaling ratio. A value of ``0`` can be used to pause the particles.
 - void **set_sub_emitter** **(** :ref:`NodePath<class_NodePath>` value **)**
 - void **set_sub_emitter** **(** :ref:`NodePath<class_NodePath>` value **)**
 - :ref:`NodePath<class_NodePath>` **get_sub_emitter** **(** **)**
 - :ref:`NodePath<class_NodePath>` **get_sub_emitter** **(** **)**
 
 
-.. container:: contribute
+Path to another **GPUParticles3D** node that will be used as a subemitter (see :ref:`ParticleProcessMaterial.sub_emitter_mode<class_ParticleProcessMaterial_property_sub_emitter_mode>`). Subemitters can be used to achieve effects such as fireworks, sparks on collision, bubbles popping into water drops, and more.
 
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** When :ref:`sub_emitter<class_GPUParticles3D_property_sub_emitter>` is set, the target **GPUParticles3D** node will no longer emit particles on its own.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -794,10 +796,12 @@ The amount of time the particle's trail should represent (in seconds). Only effe
 - void **set_visibility_aabb** **(** :ref:`AABB<class_AABB>` value **)**
 - void **set_visibility_aabb** **(** :ref:`AABB<class_AABB>` value **)**
 - :ref:`AABB<class_AABB>` **get_visibility_aabb** **(** **)**
 - :ref:`AABB<class_AABB>` **get_visibility_aabb** **(** **)**
 
 
-The :ref:`AABB<class_AABB>` that determines the node's region which needs to be visible on screen for the particle system to be active.
+The :ref:`AABB<class_AABB>` that determines the node's region which needs to be visible on screen for the particle system to be active. :ref:`GeometryInstance3D.extra_cull_margin<class_GeometryInstance3D_property_extra_cull_margin>` is added on each of the AABB's axes. Particle collisions and attraction will only occur within this area.
 
 
 Grow the box if particles suddenly appear/disappear when the node enters/exits the screen. The :ref:`AABB<class_AABB>` can be grown via code or with the **Particles → Generate AABB** editor tool.
 Grow the box if particles suddenly appear/disappear when the node enters/exits the screen. The :ref:`AABB<class_AABB>` can be grown via code or with the **Particles → Generate AABB** editor tool.
 
 
+\ **Note:** :ref:`visibility_aabb<class_GPUParticles3D_property_visibility_aabb>` is overridden by :ref:`GeometryInstance3D.custom_aabb<class_GeometryInstance3D_property_custom_aabb>` if that property is set to a non-default value.
+
 .. rst-class:: classref-section-separator
 .. rst-class:: classref-section-separator
 
 
 ----
 ----

+ 9 - 0
classes/class_immediatemesh.rst

@@ -35,6 +35,15 @@ Here's a sample on how to generate a triangular face:
     mesh.surface_add_vertex(Vector3.ZERO)
     mesh.surface_add_vertex(Vector3.ZERO)
     mesh.surface_end()
     mesh.surface_end()
 
 
+ .. code-tab:: csharp
+
+    var mesh = new ImmediateMesh();
+    mesh.SurfaceBegin(Mesh.PrimitiveType.Triangles);
+    mesh.SurfaceAddVertex(Vector3.Left);
+    mesh.SurfaceAddVertex(Vector3.Forward);
+    mesh.SurfaceAddVertex(Vector3.Zero);
+    mesh.SurfaceEnd();
+
 
 
 
 
 \ **Note:** Generating complex geometries with **ImmediateMesh** is highly inefficient. Instead, it is designed to generate simple geometry that changes often.
 \ **Note:** Generating complex geometries with **ImmediateMesh** is highly inefficient. Instead, it is designed to generate simple geometry that changes often.

+ 3 - 1
classes/class_light3d.rst

@@ -331,6 +331,8 @@ Light is ignored when baking. This is the fastest mode, but the light will be ta
 
 
 Light is taken into account in static baking (:ref:`VoxelGI<class_VoxelGI>`, :ref:`LightmapGI<class_LightmapGI>`, SDFGI (:ref:`Environment.sdfgi_enabled<class_Environment_property_sdfgi_enabled>`)). The light can be moved around or modified, but its global illumination will not update in real-time. This is suitable for subtle changes (such as flickering torches), but generally not large changes such as toggling a light on and off.
 Light is taken into account in static baking (:ref:`VoxelGI<class_VoxelGI>`, :ref:`LightmapGI<class_LightmapGI>`, SDFGI (:ref:`Environment.sdfgi_enabled<class_Environment_property_sdfgi_enabled>`)). The light can be moved around or modified, but its global illumination will not update in real-time. This is suitable for subtle changes (such as flickering torches), but generally not large changes such as toggling a light on and off.
 
 
+\ **Note:** The light is not baked in :ref:`LightmapGI<class_LightmapGI>` if :ref:`editor_only<class_Light3D_property_editor_only>` is ``true``.
+
 .. _class_Light3D_constant_BAKE_DYNAMIC:
 .. _class_Light3D_constant_BAKE_DYNAMIC:
 
 
 .. rst-class:: classref-enumeration-constant
 .. rst-class:: classref-enumeration-constant
@@ -435,7 +437,7 @@ The distance from the camera at which the light's shadow cuts off (in 3D units).
 - void **set_editor_only** **(** :ref:`bool<class_bool>` value **)**
 - void **set_editor_only** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_editor_only** **(** **)**
 - :ref:`bool<class_bool>` **is_editor_only** **(** **)**
 
 
-If ``true``, the light only appears in the editor and will not be visible at runtime.
+If ``true``, the light only appears in the editor and will not be visible at runtime. If ``true``, the light will never be baked in :ref:`LightmapGI<class_LightmapGI>` regardless of its :ref:`light_bake_mode<class_Light3D_property_light_bake_mode>`.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 

+ 1 - 1
classes/class_lightmapgi.rst

@@ -420,7 +420,7 @@ The strength of denoising step applied to the generated lightmaps. Only effectiv
 - void **set_directional** **(** :ref:`bool<class_bool>` value **)**
 - void **set_directional** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_directional** **(** **)**
 - :ref:`bool<class_bool>` **is_directional** **(** **)**
 
 
-If ``true``, bakes lightmaps to contain directional information as spherical harmonics. This results in more realistic lighting appearance, especially with normal mapped materials and for lights that have their direct light baked (:ref:`Light3D.light_bake_mode<class_Light3D_property_light_bake_mode>` set to :ref:`Light3D.BAKE_STATIC<class_Light3D_constant_BAKE_STATIC>`). The directional information is also used to provide rough reflections for static and dynamic objects. This has a small run-time performance cost as the shader has to perform more work to interpret the direction information from the lightmap. Directional lightmaps also take longer to bake and result in larger file sizes.
+If ``true``, bakes lightmaps to contain directional information as spherical harmonics. This results in more realistic lighting appearance, especially with normal mapped materials and for lights that have their direct light baked (:ref:`Light3D.light_bake_mode<class_Light3D_property_light_bake_mode>` set to :ref:`Light3D.BAKE_STATIC<class_Light3D_constant_BAKE_STATIC>` and with :ref:`Light3D.editor_only<class_Light3D_property_editor_only>` set to ``false``). The directional information is also used to provide rough reflections for static and dynamic objects. This has a small run-time performance cost as the shader has to perform more work to interpret the direction information from the lightmap. Directional lightmaps also take longer to bake and result in larger file sizes.
 
 
 \ **Note:** The property's name has no relationship with :ref:`DirectionalLight3D<class_DirectionalLight3D>`. :ref:`directional<class_LightmapGI_property_directional>` works with all light types.
 \ **Note:** The property's name has no relationship with :ref:`DirectionalLight3D<class_DirectionalLight3D>`. :ref:`directional<class_LightmapGI_property_directional>` works with all light types.
 
 

+ 24 - 3
classes/class_lightmapgidata.rst

@@ -29,9 +29,11 @@ Properties
 .. table::
 .. table::
    :widths: auto
    :widths: auto
 
 
-   +---------------------------------------------+-------------------------------------------------------------------+
-   | :ref:`TextureLayered<class_TextureLayered>` | :ref:`light_texture<class_LightmapGIData_property_light_texture>` |
-   +---------------------------------------------+-------------------------------------------------------------------+
+   +-----------------------------------------------+---------------------------------------------------------------------------+--------+
+   | :ref:`TextureLayered<class_TextureLayered>`   | :ref:`light_texture<class_LightmapGIData_property_light_texture>`         |        |
+   +-----------------------------------------------+---------------------------------------------------------------------------+--------+
+   | :ref:`TextureLayered[]<class_TextureLayered>` | :ref:`lightmap_textures<class_LightmapGIData_property_lightmap_textures>` | ``[]`` |
+   +-----------------------------------------------+---------------------------------------------------------------------------+--------+
 
 
 .. rst-class:: classref-reftable-group
 .. rst-class:: classref-reftable-group
 
 
@@ -77,6 +79,25 @@ Property Descriptions
 
 
 The lightmap atlas texture generated by the lightmapper.
 The lightmap atlas texture generated by the lightmapper.
 
 
+\ *Deprecated.* The lightmap atlas can now have multiple textures. See :ref:`lightmap_textures<class_LightmapGIData_property_lightmap_textures>`.
+
+.. rst-class:: classref-item-separator
+
+----
+
+.. _class_LightmapGIData_property_lightmap_textures:
+
+.. rst-class:: classref-property
+
+:ref:`TextureLayered[]<class_TextureLayered>` **lightmap_textures** = ``[]``
+
+.. rst-class:: classref-property-setget
+
+- void **set_lightmap_textures** **(** :ref:`TextureLayered[]<class_TextureLayered>` value **)**
+- :ref:`TextureLayered[]<class_TextureLayered>` **get_lightmap_textures** **(** **)**
+
+The lightmap atlas textures generated by the lightmapper.
+
 .. rst-class:: classref-section-separator
 .. rst-class:: classref-section-separator
 
 
 ----
 ----

+ 1 - 3
classes/class_lightoccluder2d.rst

@@ -98,9 +98,7 @@ The LightOccluder2D's occluder light mask. The LightOccluder2D will cast shadows
 - void **set_as_sdf_collision** **(** :ref:`bool<class_bool>` value **)**
 - void **set_as_sdf_collision** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_set_as_sdf_collision** **(** **)**
 - :ref:`bool<class_bool>` **is_set_as_sdf_collision** **(** **)**
 
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If enabled, the occluder will be part of a real-time generated signed distance field that can be used in custom shaders.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 19 - 0
classes/class_navigationagent3d.rst

@@ -59,6 +59,8 @@ Properties
    +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
    +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
    | :ref:`float<class_float>`                                                                      | :ref:`height<class_NavigationAgent3D_property_height>`                                             | ``1.0``               |
    | :ref:`float<class_float>`                                                                      | :ref:`height<class_NavigationAgent3D_property_height>`                                             | ``1.0``               |
    +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
    +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
+   | :ref:`bool<class_bool>`                                                                        | :ref:`keep_y_velocity<class_NavigationAgent3D_property_keep_y_velocity>`                           | ``true``              |
+   +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
    | :ref:`int<class_int>`                                                                          | :ref:`max_neighbors<class_NavigationAgent3D_property_max_neighbors>`                               | ``10``                |
    | :ref:`int<class_int>`                                                                          | :ref:`max_neighbors<class_NavigationAgent3D_property_max_neighbors>`                               | ``10``                |
    +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
    +------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------+-----------------------+
    | :ref:`float<class_float>`                                                                      | :ref:`max_speed<class_NavigationAgent3D_property_max_speed>`                                       | ``10.0``              |
    | :ref:`float<class_float>`                                                                      | :ref:`max_speed<class_NavigationAgent3D_property_max_speed>`                                       | ``10.0``              |
@@ -411,6 +413,23 @@ The height of the avoidance agent. Agents will ignore other agents or obstacles
 
 
 ----
 ----
 
 
+.. _class_NavigationAgent3D_property_keep_y_velocity:
+
+.. rst-class:: classref-property
+
+:ref:`bool<class_bool>` **keep_y_velocity** = ``true``
+
+.. rst-class:: classref-property-setget
+
+- void **set_keep_y_velocity** **(** :ref:`bool<class_bool>` value **)**
+- :ref:`bool<class_bool>` **get_keep_y_velocity** **(** **)**
+
+If ``true``, and the agent uses 2D avoidance, it will remember the set y-axis velocity and reapply it after the avoidance step. While 2D avoidance has no y-axis and simulates on a flat plane this setting can help mitigate the most obvious clipping on uneven 3D geometry.
+
+.. rst-class:: classref-item-separator
+
+----
+
 .. _class_NavigationAgent3D_property_max_neighbors:
 .. _class_NavigationAgent3D_property_max_neighbors:
 
 
 .. rst-class:: classref-property
 .. rst-class:: classref-property

+ 11 - 15
classes/class_particleprocessmaterial.rst

@@ -875,7 +875,7 @@ Minimum equivalent of :ref:`anim_speed_max<class_ParticleProcessMaterial_propert
 - void **set_attractor_interaction_enabled** **(** :ref:`bool<class_bool>` value **)**
 - void **set_attractor_interaction_enabled** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_attractor_interaction_enabled** **(** **)**
 - :ref:`bool<class_bool>` **is_attractor_interaction_enabled** **(** **)**
 
 
-True if the interaction with particle attractors is enabled.
+If ``true``, interaction with particle attractors is enabled. In 3D, attraction only occurs within the area defined by the :ref:`GPUParticles3D<class_GPUParticles3D>` node's :ref:`GPUParticles3D.visibility_aabb<class_GPUParticles3D_property_visibility_aabb>`.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -928,7 +928,7 @@ The particles' friction. Values range from ``0`` (frictionless) to ``1`` (maximu
 
 
 The particles' collision mode.
 The particles' collision mode.
 
 
-\ **Note:** 3D Particles can only collide with :ref:`GPUParticlesCollision3D<class_GPUParticlesCollision3D>` nodes, not :ref:`PhysicsBody3D<class_PhysicsBody3D>` nodes. To make particles collide with various objects, you can add :ref:`GPUParticlesCollision3D<class_GPUParticlesCollision3D>` nodes as children of :ref:`PhysicsBody3D<class_PhysicsBody3D>` nodes.
+\ **Note:** 3D Particles can only collide with :ref:`GPUParticlesCollision3D<class_GPUParticlesCollision3D>` nodes, not :ref:`PhysicsBody3D<class_PhysicsBody3D>` nodes. To make particles collide with various objects, you can add :ref:`GPUParticlesCollision3D<class_GPUParticlesCollision3D>` nodes as children of :ref:`PhysicsBody3D<class_PhysicsBody3D>` nodes. In 3D, collisions only occur within the area defined by the :ref:`GPUParticles3D<class_GPUParticles3D>` node's :ref:`GPUParticles3D.visibility_aabb<class_GPUParticles3D_property_visibility_aabb>`.
 
 
 \ **Note:** 2D Particles can only collide with :ref:`LightOccluder2D<class_LightOccluder2D>` nodes, not :ref:`PhysicsBody2D<class_PhysicsBody2D>` nodes.
 \ **Note:** 2D Particles can only collide with :ref:`LightOccluder2D<class_LightOccluder2D>` nodes, not :ref:`PhysicsBody2D<class_PhysicsBody2D>` nodes.
 
 
@@ -947,7 +947,7 @@ The particles' collision mode.
 - void **set_collision_use_scale** **(** :ref:`bool<class_bool>` value **)**
 - void **set_collision_use_scale** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **is_collision_using_scale** **(** **)**
 - :ref:`bool<class_bool>` **is_collision_using_scale** **(** **)**
 
 
-Should collision take scale into account.
+If ``true``, :ref:`GPUParticles3D.collision_base_size<class_GPUParticles3D_property_collision_base_size>` is multiplied by the particle's effective scale (see :ref:`scale_min<class_ParticleProcessMaterial_property_scale_min>`, :ref:`scale_max<class_ParticleProcessMaterial_property_scale_max>`, :ref:`scale_curve<class_ParticleProcessMaterial_property_scale_curve>`, and :ref:`scale_over_velocity_curve<class_ParticleProcessMaterial_property_scale_over_velocity_curve>`).
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -1950,9 +1950,9 @@ Each particle's initial direction range from ``+spread`` to ``-spread`` degrees.
 - void **set_sub_emitter_amount_at_collision** **(** :ref:`int<class_int>` value **)**
 - void **set_sub_emitter_amount_at_collision** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_sub_emitter_amount_at_collision** **(** **)**
 - :ref:`int<class_int>` **get_sub_emitter_amount_at_collision** **(** **)**
 
 
-Sub particle amount on collision.
+The amount of particles to spawn from the subemitter node when a collision occurs. When combined with :ref:`COLLISION_HIDE_ON_CONTACT<class_ParticleProcessMaterial_constant_COLLISION_HIDE_ON_CONTACT>` on the main particles material, this can be used to achieve effects such as raindrops hitting the ground.
 
 
-Maximum amount set in the sub particles emitter.
+\ **Note:** This value shouldn't exceed :ref:`GPUParticles2D.amount<class_GPUParticles2D_property_amount>` or :ref:`GPUParticles3D.amount<class_GPUParticles3D_property_amount>` defined on the *subemitter node* (not the main node), relative to the subemitter's particle lifetime. If the number of particles is exceeded, no new particles will spawn from the subemitter until enough particles have expired.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -1969,9 +1969,9 @@ Maximum amount set in the sub particles emitter.
 - void **set_sub_emitter_amount_at_end** **(** :ref:`int<class_int>` value **)**
 - void **set_sub_emitter_amount_at_end** **(** :ref:`int<class_int>` value **)**
 - :ref:`int<class_int>` **get_sub_emitter_amount_at_end** **(** **)**
 - :ref:`int<class_int>` **get_sub_emitter_amount_at_end** **(** **)**
 
 
-.. container:: contribute
+The amount of particles to spawn from the subemitter node when the particle expires.
 
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** This value shouldn't exceed :ref:`GPUParticles2D.amount<class_GPUParticles2D_property_amount>` or :ref:`GPUParticles3D.amount<class_GPUParticles3D_property_amount>` defined on the *subemitter node* (not the main node), relative to the subemitter's particle lifetime. If the number of particles is exceeded, no new particles will spawn from the subemitter until enough particles have expired.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -1988,9 +1988,9 @@ Maximum amount set in the sub particles emitter.
 - void **set_sub_emitter_frequency** **(** :ref:`float<class_float>` value **)**
 - void **set_sub_emitter_frequency** **(** :ref:`float<class_float>` value **)**
 - :ref:`float<class_float>` **get_sub_emitter_frequency** **(** **)**
 - :ref:`float<class_float>` **get_sub_emitter_frequency** **(** **)**
 
 
-.. container:: contribute
+The frequency at which particles should be emitted from the subemitter node. One particle will be spawned every :ref:`sub_emitter_frequency<class_ParticleProcessMaterial_property_sub_emitter_frequency>` seconds.
 
 
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+\ **Note:** This value shouldn't exceed :ref:`GPUParticles2D.amount<class_GPUParticles2D_property_amount>` or :ref:`GPUParticles3D.amount<class_GPUParticles3D_property_amount>` defined on the *subemitter node* (not the main node), relative to the subemitter's particle lifetime. If the number of particles is exceeded, no new particles will spawn from the subemitter until enough particles have expired.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -2007,9 +2007,7 @@ Maximum amount set in the sub particles emitter.
 - void **set_sub_emitter_keep_velocity** **(** :ref:`bool<class_bool>` value **)**
 - void **set_sub_emitter_keep_velocity** **(** :ref:`bool<class_bool>` value **)**
 - :ref:`bool<class_bool>` **get_sub_emitter_keep_velocity** **(** **)**
 - :ref:`bool<class_bool>` **get_sub_emitter_keep_velocity** **(** **)**
 
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+If ``true``, the subemitter inherits the parent particle's velocity when it spawns.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 
@@ -2026,9 +2024,7 @@ Maximum amount set in the sub particles emitter.
 - void **set_sub_emitter_mode** **(** :ref:`SubEmitterMode<enum_ParticleProcessMaterial_SubEmitterMode>` value **)**
 - void **set_sub_emitter_mode** **(** :ref:`SubEmitterMode<enum_ParticleProcessMaterial_SubEmitterMode>` value **)**
 - :ref:`SubEmitterMode<enum_ParticleProcessMaterial_SubEmitterMode>` **get_sub_emitter_mode** **(** **)**
 - :ref:`SubEmitterMode<enum_ParticleProcessMaterial_SubEmitterMode>` **get_sub_emitter_mode** **(** **)**
 
 
-.. container:: contribute
-
-	There is currently no description for this property. Please help us by :ref:`contributing one <doc_updating_the_class_reference>`!
+The particle subemitter mode (see :ref:`GPUParticles2D.sub_emitter<class_GPUParticles2D_property_sub_emitter>` and :ref:`GPUParticles3D.sub_emitter<class_GPUParticles3D_property_sub_emitter>`).
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 

+ 1 - 1
classes/class_projectsettings.rst

@@ -9096,7 +9096,7 @@ Controls how much physics ticks are synchronized with real time. For 0 or less,
 
 
 \ **Note:** For best results, when using a custom physics interpolation solution, the physics jitter fix should be disabled by setting :ref:`physics/common/physics_jitter_fix<class_ProjectSettings_property_physics/common/physics_jitter_fix>` to ``0``.
 \ **Note:** For best results, when using a custom physics interpolation solution, the physics jitter fix should be disabled by setting :ref:`physics/common/physics_jitter_fix<class_ProjectSettings_property_physics/common/physics_jitter_fix>` to ``0``.
 
 
-\ **Note:** This property is only read when the project starts. To change the physics FPS at runtime, set :ref:`Engine.physics_jitter_fix<class_Engine_property_physics_jitter_fix>` instead.
+\ **Note:** This property is only read when the project starts. To change the physics jitter fix at runtime, set :ref:`Engine.physics_jitter_fix<class_Engine_property_physics_jitter_fix>` instead.
 
 
 .. rst-class:: classref-item-separator
 .. rst-class:: classref-item-separator
 
 

+ 1 - 1
classes/class_renderingdevice.rst

@@ -5362,7 +5362,7 @@ Once finished with your RID, you will want to free the RID using the RenderingDe
 
 
 :ref:`Error<enum_@GlobalScope_Error>` **texture_clear** **(** :ref:`RID<class_RID>` texture, :ref:`Color<class_Color>` color, :ref:`int<class_int>` base_mipmap, :ref:`int<class_int>` mipmap_count, :ref:`int<class_int>` base_layer, :ref:`int<class_int>` layer_count, |bitfield|\<:ref:`BarrierMask<enum_RenderingDevice_BarrierMask>`\> post_barrier=32767 **)**
 :ref:`Error<enum_@GlobalScope_Error>` **texture_clear** **(** :ref:`RID<class_RID>` texture, :ref:`Color<class_Color>` color, :ref:`int<class_int>` base_mipmap, :ref:`int<class_int>` mipmap_count, :ref:`int<class_int>` base_layer, :ref:`int<class_int>` layer_count, |bitfield|\<:ref:`BarrierMask<enum_RenderingDevice_BarrierMask>`\> post_barrier=32767 **)**
 
 
-Clears the specified ``texture`` by replacing all of its pixels with the specified ``color``. ``base_mipmap`` and ``mipmap_count`` determine which mipmaps of the texture are affected by this clear operation, while ``base_layer`` and ``layer_count`` determine which layers of a 3D texture (or texture array) are affected by this clear operation. For 2D textures (which only have one layer by design), ``base_layer`` and ``layer_count`` must both be ``0``.
+Clears the specified ``texture`` by replacing all of its pixels with the specified ``color``. ``base_mipmap`` and ``mipmap_count`` determine which mipmaps of the texture are affected by this clear operation, while ``base_layer`` and ``layer_count`` determine which layers of a 3D texture (or texture array) are affected by this clear operation. For 2D textures (which only have one layer by design), ``base_layer`` must be ``0`` and ``layer_count`` must be ``1``.
 
 
 \ **Note:** ``texture`` can't be cleared while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to :ref:`FINAL_ACTION_CONTINUE<class_RenderingDevice_constant_FINAL_ACTION_CONTINUE>`) to clear this texture.
 \ **Note:** ``texture`` can't be cleared while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to :ref:`FINAL_ACTION_CONTINUE<class_RenderingDevice_constant_FINAL_ACTION_CONTINUE>`) to clear this texture.
 
 

+ 1 - 1
classes/class_tabcontainer.rst

@@ -263,7 +263,7 @@ Emitted when a tab is hovered by the mouse.
 
 
 **tab_selected** **(** :ref:`int<class_int>` tab **)**
 **tab_selected** **(** :ref:`int<class_int>` tab **)**
 
 
-Emitted when a tab is selected, even if it is the current tab.
+Emitted when a tab is selected via click or script, even if it is the current tab.
 
 
 .. rst-class:: classref-section-separator
 .. rst-class:: classref-section-separator