跳到主要内容

MultiMesh

继承

Resource

简要描述

提供高性能的网格实例化。

描述

MultiMesh提供了底层网格实例化。绘制数千个MeshInstance节点可能会很慢,因为每个对象都提交给GPU,然后单独绘制。

MultiMesh更快,因为它可以通过一次绘制调用来绘制数千个实例,从而减少了API开销。

缺点是,如果这些实例彼此之间的距离太远,则可能会降低性能,因为每个实例都将始终被渲染(对于整个对象,它们在空间上被索引为一个)。

由于实例可能有任何行为,因此用于可见性的AABB必须由用户提供。

成员

类型属性名默认值
intcolor_format0
intcustom_data_format0
intinstance_count0
Meshmesh
inttransform_format0
intvisible_instance_count-1

方法

返回值类型方法名称
AABBget_aabb() const
Colorget_instance_color(instance: int) const
Colorget_instance_custom_data(instance: int) const
Transformget_instance_transform(instance: int) const
Transform2Dget_instance_transform_2d(instance: int) const
voidset_as_bulk_array(array: PoolRealArray)
voidset_instance_color(instance: int, color: Color)
voidset_instance_custom_data(instance: int, custom_data: Color)
voidset_instance_transform(instance: int, transform: Transform)
voidset_instance_transform_2d(instance: int, transform: Transform2D)

枚举

enum TransformFormat:

  • **TRANSFORM_2D = 0**

使用2D变换时,请使用此选项。

  • **TRANSFORM_3D = 1**

使用3D变换时,请使用此选项。


enum ColorFormat:

  • **COLOR_NONE = 0**

不使用每个实例的Color时使用。

  • **COLOR_8BIT = 1**

传递到着色器时,将Color数据压缩为8位。这使用更少的内存,可以更快,但[颜色]失去精度。

  • **COLOR_FLOAT = 2**

传递给set_instance_colorColor将使用4个浮点数。


enum CustomDataFormat:

  • **CUSTOM_DATA_NONE = 0**

不使用每个实例的自定义数据时使用。

  • **CUSTOM_DATA_8BIT = 1**

传递给着色器时,将custom_data压缩为8位。这样使用的内存更少,速度更快,但会失去精度和范围。被包装成8位的浮点数只能表示0到1之间的值,超出这个范围的数字将被限制。

  • **CUSTOM_DATA_FLOAT = 2**

传递给set_instance_custom_dataColor将使用4个浮点数。


常量

成员说明

  • int color_format
Default0
setterset_color_format(value)
getterget_color_format
  • int custom_data_format
Default0
setterset_custom_data_format(value)
getterget_custom_data_format
  • int instance_count
Default0
setterset_instance_count(value)
getterget_instance_count
  • Mesh mesh
setterset_mesh(value)
getterget_mesh
  • int transform_format
Default0
setterset_transform_format(value)
getterget_transform_format
  • int visible_instance_count
Default-1
setterset_visible_instance_count(value)
getterget_visible_instance_count

方法说明

  • get_aabb get_aabb() const

返回与可见性轴对齐的边界框。


  • get_instance_color get_instance_color(instance: int) const

获取特定实例的颜色。


  • get_instance_custom_data get_instance_custom_data(instance: int) const

返回已为特定实例设置的自定义数据。


  • get_instance_transform get_instance_transform(instance: int) const

返回特定实例的Transform


  • get_instance_transform_2d get_instance_transform_2d(instance: int) const

返回特定实例的Transform2D


  • set_as_bulk_array set_as_bulk_array(array: PoolRealArray)

一次性设置与实例相关的所有数据。这在从磁盘加载数据或从GDNative准备数据时特别有用。

所有数据打包在一个大的float数组中。数组可能是这样的:转换为实例1,颜色数据为实例1,自定义数据为实例1,转换为实例2,颜色数据为实例2,等等。

Transform存储为12个浮点数,Transform2D存储为8个浮点数,COLOR_8BIT /CUSTOM_DATA_8BIT存储为1个浮点数(按原样4个字节)并且COLOR_FLOAT /CUSTOM_DATA_FLOAT 存储为4个浮点数。


  • set_instance_color set_instance_color(instance: int, color: Color)

设置特定实例的颜色。

为了使颜色生效,请确保MultiMesh上的color_format为非null,并且在材质上确保SpatialMaterial.vertex_color_use_as_albedotrue


  • set_instance_custom_data set_instance_custom_data(instance: int, custom_data: Color)

设置特定实例的自定义数据。


  • set_instance_transform set_instance_transform(instance: int, transform: Transform)

设置特定实例的Transform


  • set_instance_transform_2d set_instance_transform_2d(instance: int, transform: Transform2D)

设置特定实例的Transform2D