MultiMesh

Inherits: Resource < Reference < Object

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

描述

MultiMesh提供了低级别的网格实例化功能。绘制数以千计的MeshInstance节点可能会很慢,因为每个对象都要提交给GPU然后单独绘制。

MultiMesh要快得多,因为它可以通过一次绘制调用来绘制成千上万的实例,从而减少API的开销。

缺点是,如果实例之间的距离太远,性能可能会降低,因为每一个实例总是会被渲染(它们在空间上被索引为整个对象)。

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

教程

属性

ColorFormat

color_format

0

CustomDataFormat

custom_data_format

0

int

instance_count

0

Mesh

mesh

TransformFormat

transform_format

0

int

visible_instance_count

-1

方法

AABB

get_aabb ( ) const

Color

get_instance_color ( int instance ) const

Color

get_instance_custom_data ( int instance ) const

Transform

get_instance_transform ( int instance ) const

Transform2D

get_instance_transform_2d ( int instance ) const

void

set_as_bulk_array ( PoolRealArray array )

void

set_instance_color ( int instance, Color color )

void

set_instance_custom_data ( int instance, Color custom_data )

void

set_instance_transform ( int instance, Transform transform )

void

set_instance_transform_2d ( int instance, Transform2D transform )

枚举

enum TransformFormat:

  • TRANSFORM_2D = 0 —- 使用 2D 变换时使用此选项。

  • TRANSFORM_3D = 1 —- 使用 3D 变换时使用此选项。


enum ColorFormat:

  • COLOR_NONE = 0 —- 当您不使用每个实例的 Color 时使用。

  • COLOR_8BIT = 1 —- 传递给着色器时将 Color 数据压缩为 8 位。这使用更少的内存并且可以更快,但 Color 会失去精度。

  • COLOR_FLOAT = 2 —- 传递给 set_instance_colorColor 将使用 4 个浮点数。使用它以获得最高精度 Color


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 个浮点数。使用它以获得最高精度。

属性说明

Default

0

Setter

set_color_format(value)

Getter

get_color_format()

传递给着色器的颜色数组中的颜色格式。


Default

0

Setter

set_custom_data_format(value)

Getter

get_custom_data_format()

传递给着色器的自定义数据数组中的自定义数据格式。


  • int instance_count

Default

0

Setter

set_instance_count(value)

Getter

get_instance_count()

将被绘制的实例的数量。这将清除并(重新)调整缓冲区的大小。默认情况下,所有的实例都会被画出来,但你可以用visible_instance_count来限制它。


Setter

set_mesh(value)

Getter

get_mesh()

将要绘制的网格。


Default

0

Setter

set_transform_format(value)

Getter

get_transform_format()

用于变换网格的变换格式,可以是2D或3D。


  • int visible_instance_count

Default

-1

Setter

set_visible_instance_count(value)

Getter

get_visible_instance_count()

限制绘制的实例数量,-1会绘制所有的实例。改变这一点并不改变缓冲区的大小。

方法说明

  • AABB get_aabb ( ) const

返回局部空间中可见性轴对齐的包围框。请参阅 VisualInstance.get_transformed_aabb


  • Color get_instance_color ( int instance ) const

获取一个特定实例的颜色。


  • Color get_instance_custom_data ( int instance ) const

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


返回一个特定实例的Transform


返回特定实例的 Transform2D


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

所有的数据都被打包在一个大的浮点数数组中。数组可能看起来像这样。实例1的变换,实例1的颜色数据,实例1的自定义数据,实例2的变换,实例2的颜色数据,等等。

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


  • void set_instance_color ( int instance, Color color )

通过乘以网格的现有顶点颜色来设置特定实例的颜色。

为了使颜色生效,请确保MultiMesh上的color_format不是null,并且SpatialMaterial.vertex_color_use_as_albedo上的材质是true


  • void set_instance_custom_data ( int instance, Color custom_data )

为特定的实例设置自定义数据。虽然使用了Color,但它只是一个容纳4个浮点数的容器。数字的格式可以根据使用的CustomDataFormat来改变。


  • void set_instance_transform ( int instance, Transform transform )

为特定实例设置 Transform


  • void set_instance_transform_2d ( int instance, Transform2D transform )

为特定实例设置 Transform2D