123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- :github_url: hide
- .. Generated automatically by doc/tools/make_rst.py in Godot's source tree.
- .. DO NOT EDIT THIS FILE, but the MultiMesh.xml source instead.
- .. The source is found in doc/classes or modules/<name>/doc_classes.
- .. _class_MultiMesh:
- MultiMesh
- =========
- **Inherits:** :ref:`Resource<class_Resource>` **<** :ref:`RefCounted<class_RefCounted>` **<** :ref:`Object<class_Object>`
- Provides high-performance mesh instancing.
- Description
- -----------
- MultiMesh provides low-level mesh instancing. Drawing thousands of :ref:`MeshInstance3D<class_MeshInstance3D>` nodes can be slow, since each object is submitted to the GPU then drawn individually.
- MultiMesh is much faster as it can draw thousands of instances with a single draw call, resulting in less API overhead.
- As a drawback, if the instances are too far away from each other, performance may be reduced as every single instance will always render (they are spatially indexed as one, for the whole object).
- Since instances may have any behavior, the AABB used for visibility must be provided by the user.
- Tutorials
- ---------
- - :doc:`Animating thousands of fish with MultiMeshInstance <../tutorials/performance/vertex_animation/animating_thousands_of_fish>`
- - :doc:`Optimization using MultiMeshes <../tutorials/performance/using_multimesh>`
- Properties
- ----------
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`PackedFloat32Array<class_PackedFloat32Array>` | :ref:`buffer<class_MultiMesh_property_buffer>` | ``PackedFloat32Array()`` |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`PackedColorArray<class_PackedColorArray>` | :ref:`color_array<class_MultiMesh_property_color_array>` | |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`PackedColorArray<class_PackedColorArray>` | :ref:`custom_data_array<class_MultiMesh_property_custom_data_array>` | |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`int<class_int>` | :ref:`instance_count<class_MultiMesh_property_instance_count>` | ``0`` |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`Mesh<class_Mesh>` | :ref:`mesh<class_MultiMesh_property_mesh>` | |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`PackedVector2Array<class_PackedVector2Array>` | :ref:`transform_2d_array<class_MultiMesh_property_transform_2d_array>` | |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`PackedVector3Array<class_PackedVector3Array>` | :ref:`transform_array<class_MultiMesh_property_transform_array>` | |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`TransformFormat<enum_MultiMesh_TransformFormat>` | :ref:`transform_format<class_MultiMesh_property_transform_format>` | ``0`` |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`bool<class_bool>` | :ref:`use_colors<class_MultiMesh_property_use_colors>` | ``false`` |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`bool<class_bool>` | :ref:`use_custom_data<class_MultiMesh_property_use_custom_data>` | ``false`` |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- | :ref:`int<class_int>` | :ref:`visible_instance_count<class_MultiMesh_property_visible_instance_count>` | ``-1`` |
- +--------------------------------------------------------+--------------------------------------------------------------------------------+--------------------------+
- Methods
- -------
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`AABB<class_AABB>` | :ref:`get_aabb<class_MultiMesh_method_get_aabb>` **(** **)** |const| |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Color<class_Color>` | :ref:`get_instance_color<class_MultiMesh_method_get_instance_color>` **(** :ref:`int<class_int>` instance **)** |const| |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Color<class_Color>` | :ref:`get_instance_custom_data<class_MultiMesh_method_get_instance_custom_data>` **(** :ref:`int<class_int>` instance **)** |const| |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Transform3D<class_Transform3D>` | :ref:`get_instance_transform<class_MultiMesh_method_get_instance_transform>` **(** :ref:`int<class_int>` instance **)** |const| |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | :ref:`Transform2D<class_Transform2D>` | :ref:`get_instance_transform_2d<class_MultiMesh_method_get_instance_transform_2d>` **(** :ref:`int<class_int>` instance **)** |const| |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`set_instance_color<class_MultiMesh_method_set_instance_color>` **(** :ref:`int<class_int>` instance, :ref:`Color<class_Color>` color **)** |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`set_instance_custom_data<class_MultiMesh_method_set_instance_custom_data>` **(** :ref:`int<class_int>` instance, :ref:`Color<class_Color>` custom_data **)** |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`set_instance_transform<class_MultiMesh_method_set_instance_transform>` **(** :ref:`int<class_int>` instance, :ref:`Transform3D<class_Transform3D>` transform **)** |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- | void | :ref:`set_instance_transform_2d<class_MultiMesh_method_set_instance_transform_2d>` **(** :ref:`int<class_int>` instance, :ref:`Transform2D<class_Transform2D>` transform **)** |
- +---------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
- Enumerations
- ------------
- .. _enum_MultiMesh_TransformFormat:
- .. _class_MultiMesh_constant_TRANSFORM_2D:
- .. _class_MultiMesh_constant_TRANSFORM_3D:
- enum **TransformFormat**:
- - **TRANSFORM_2D** = **0** --- Use this when using 2D transforms.
- - **TRANSFORM_3D** = **1** --- Use this when using 3D transforms.
- Property Descriptions
- ---------------------
- .. _class_MultiMesh_property_buffer:
- - :ref:`PackedFloat32Array<class_PackedFloat32Array>` **buffer**
- +-----------+--------------------------+
- | *Default* | ``PackedFloat32Array()`` |
- +-----------+--------------------------+
- | *Setter* | set_buffer(value) |
- +-----------+--------------------------+
- | *Getter* | get_buffer() |
- +-----------+--------------------------+
- ----
- .. _class_MultiMesh_property_color_array:
- - :ref:`PackedColorArray<class_PackedColorArray>` **color_array**
- ----
- .. _class_MultiMesh_property_custom_data_array:
- - :ref:`PackedColorArray<class_PackedColorArray>` **custom_data_array**
- ----
- .. _class_MultiMesh_property_instance_count:
- - :ref:`int<class_int>` **instance_count**
- +-----------+---------------------------+
- | *Default* | ``0`` |
- +-----------+---------------------------+
- | *Setter* | set_instance_count(value) |
- +-----------+---------------------------+
- | *Getter* | get_instance_count() |
- +-----------+---------------------------+
- Number of instances that will get drawn. This clears and (re)sizes the buffers. Setting data format or flags afterwards will have no effect.
- By default, all instances are drawn but you can limit this with :ref:`visible_instance_count<class_MultiMesh_property_visible_instance_count>`.
- ----
- .. _class_MultiMesh_property_mesh:
- - :ref:`Mesh<class_Mesh>` **mesh**
- +----------+-----------------+
- | *Setter* | set_mesh(value) |
- +----------+-----------------+
- | *Getter* | get_mesh() |
- +----------+-----------------+
- Mesh to be drawn.
- ----
- .. _class_MultiMesh_property_transform_2d_array:
- - :ref:`PackedVector2Array<class_PackedVector2Array>` **transform_2d_array**
- ----
- .. _class_MultiMesh_property_transform_array:
- - :ref:`PackedVector3Array<class_PackedVector3Array>` **transform_array**
- ----
- .. _class_MultiMesh_property_transform_format:
- - :ref:`TransformFormat<enum_MultiMesh_TransformFormat>` **transform_format**
- +-----------+-----------------------------+
- | *Default* | ``0`` |
- +-----------+-----------------------------+
- | *Setter* | set_transform_format(value) |
- +-----------+-----------------------------+
- | *Getter* | get_transform_format() |
- +-----------+-----------------------------+
- Format of transform used to transform mesh, either 2D or 3D.
- ----
- .. _class_MultiMesh_property_use_colors:
- - :ref:`bool<class_bool>` **use_colors**
- +-----------+-----------------------+
- | *Default* | ``false`` |
- +-----------+-----------------------+
- | *Setter* | set_use_colors(value) |
- +-----------+-----------------------+
- | *Getter* | is_using_colors() |
- +-----------+-----------------------+
- If ``true``, the ``MultiMesh`` will use color data (see :ref:`color_array<class_MultiMesh_property_color_array>`).
- ----
- .. _class_MultiMesh_property_use_custom_data:
- - :ref:`bool<class_bool>` **use_custom_data**
- +-----------+----------------------------+
- | *Default* | ``false`` |
- +-----------+----------------------------+
- | *Setter* | set_use_custom_data(value) |
- +-----------+----------------------------+
- | *Getter* | is_using_custom_data() |
- +-----------+----------------------------+
- If ``true``, the ``MultiMesh`` will use custom data (see :ref:`custom_data_array<class_MultiMesh_property_custom_data_array>`).
- ----
- .. _class_MultiMesh_property_visible_instance_count:
- - :ref:`int<class_int>` **visible_instance_count**
- +-----------+-----------------------------------+
- | *Default* | ``-1`` |
- +-----------+-----------------------------------+
- | *Setter* | set_visible_instance_count(value) |
- +-----------+-----------------------------------+
- | *Getter* | get_visible_instance_count() |
- +-----------+-----------------------------------+
- Limits the number of instances drawn, -1 draws all instances. Changing this does not change the sizes of the buffers.
- Method Descriptions
- -------------------
- .. _class_MultiMesh_method_get_aabb:
- - :ref:`AABB<class_AABB>` **get_aabb** **(** **)** |const|
- Returns the visibility axis-aligned bounding box in local space. See also :ref:`VisualInstance3D.get_transformed_aabb<class_VisualInstance3D_method_get_transformed_aabb>`.
- ----
- .. _class_MultiMesh_method_get_instance_color:
- - :ref:`Color<class_Color>` **get_instance_color** **(** :ref:`int<class_int>` instance **)** |const|
- Gets a specific instance's color.
- ----
- .. _class_MultiMesh_method_get_instance_custom_data:
- - :ref:`Color<class_Color>` **get_instance_custom_data** **(** :ref:`int<class_int>` instance **)** |const|
- Returns the custom data that has been set for a specific instance.
- ----
- .. _class_MultiMesh_method_get_instance_transform:
- - :ref:`Transform3D<class_Transform3D>` **get_instance_transform** **(** :ref:`int<class_int>` instance **)** |const|
- Returns the :ref:`Transform3D<class_Transform3D>` of a specific instance.
- ----
- .. _class_MultiMesh_method_get_instance_transform_2d:
- - :ref:`Transform2D<class_Transform2D>` **get_instance_transform_2d** **(** :ref:`int<class_int>` instance **)** |const|
- Returns the :ref:`Transform2D<class_Transform2D>` of a specific instance.
- ----
- .. _class_MultiMesh_method_set_instance_color:
- - void **set_instance_color** **(** :ref:`int<class_int>` instance, :ref:`Color<class_Color>` color **)**
- Sets the color of a specific instance by *multiplying* the mesh's existing vertex colors.
- For the color to take effect, ensure that :ref:`use_colors<class_MultiMesh_property_use_colors>` is ``true`` on the ``MultiMesh`` and :ref:`BaseMaterial3D.vertex_color_use_as_albedo<class_BaseMaterial3D_property_vertex_color_use_as_albedo>` is ``true`` on the material.
- ----
- .. _class_MultiMesh_method_set_instance_custom_data:
- - void **set_instance_custom_data** **(** :ref:`int<class_int>` instance, :ref:`Color<class_Color>` custom_data **)**
- Sets custom data for a specific instance. Although :ref:`Color<class_Color>` is used, it is just a container for 4 floating point numbers.
- For the custom data to be used, ensure that :ref:`use_custom_data<class_MultiMesh_property_use_custom_data>` is ``true``.
- ----
- .. _class_MultiMesh_method_set_instance_transform:
- - void **set_instance_transform** **(** :ref:`int<class_int>` instance, :ref:`Transform3D<class_Transform3D>` transform **)**
- Sets the :ref:`Transform3D<class_Transform3D>` for a specific instance.
- ----
- .. _class_MultiMesh_method_set_instance_transform_2d:
- - void **set_instance_transform_2d** **(** :ref:`int<class_int>` instance, :ref:`Transform2D<class_Transform2D>` transform **)**
- Sets the :ref:`Transform2D<class_Transform2D>` for a specific instance.
- .. |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.)`
- .. |vararg| replace:: :abbr:`vararg (This method accepts any number of arguments after the ones described here.)`
- .. |constructor| replace:: :abbr:`constructor (This method is used to construct a type.)`
- .. |static| replace:: :abbr:`static (This method doesn't need an instance to be called, so it can be called directly using the class name.)`
- .. |operator| replace:: :abbr:`operator (This method describes a valid operator to use with this type as left-hand operand.)`
|