MultiMesh
Inherits: Resource < Reference < Object
提供高性能的网格实例化。
描述
MultiMesh提供了低级别的网格实例化功能。绘制数以千计的MeshInstance节点可能会很慢,因为每个对象都要提交给GPU然后单独绘制。
MultiMesh要快得多,因为它可以通过一次绘制调用来绘制成千上万的实例,从而减少API的开销。
缺点是,如果实例之间的距离太远,性能可能会降低,因为每一个实例总是会被渲染(它们在空间上被索引为整个对象)。
由于实例可能具有任何行为,用于可见性的AABB必须由用户提供。
教程
属性
| ||
| ||
| ||
| ||
|
方法
get_aabb ( ) const | |
get_instance_color ( int instance ) const | |
get_instance_custom_data ( int instance ) const | |
get_instance_transform ( int instance ) const | |
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_color 的 Color 将使用 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_data 的 Color 将使用 4 个浮点数。使用它以获得最高精度。
属性说明
- ColorFormat color_format
Default |
|
Setter | set_color_format(value) |
Getter | get_color_format() |
传递给着色器的颜色数组中的颜色格式。
- CustomDataFormat custom_data_format
Default |
|
Setter | set_custom_data_format(value) |
Getter | get_custom_data_format() |
传递给着色器的自定义数据数组中的自定义数据格式。
- int instance_count
Default |
|
Setter | set_instance_count(value) |
Getter | get_instance_count() |
将被绘制的实例的数量。这将清除并(重新)调整缓冲区的大小。默认情况下,所有的实例都会被画出来,但你可以用visible_instance_count来限制它。
- Mesh mesh
Setter | set_mesh(value) |
Getter | get_mesh() |
将要绘制的网格。
- TransformFormat transform_format
Default |
|
Setter | set_transform_format(value) |
Getter | get_transform_format() |
用于变换网格的变换格式,可以是2D或3D。
- int visible_instance_count
Default |
|
Setter | set_visible_instance_count(value) |
Getter | get_visible_instance_count() |
限制绘制的实例数量,-1会绘制所有的实例。改变这一点并不改变缓冲区的大小。
方法说明
- AABB get_aabb ( ) const
返回局部空间中可见性轴对齐的包围框。请参阅 VisualInstance.get_transformed_aabb。
获取一个特定实例的颜色。
返回已经为特定实例设置的自定义数据。
返回一个特定实例的Transform。
- Transform2D get_instance_transform_2d ( int instance ) const
返回特定实例的 Transform2D。
- void set_as_bulk_array ( PoolRealArray array )
一次性设置所有与实例相关的数据。这在从磁盘加载数据或从GDNative准备数据时特别有用。
所有的数据都被打包在一个大的浮点数数组中。数组可能看起来像这样。实例1的变换,实例1的颜色数据,实例1的自定义数据,实例2的变换,实例2的颜色数据,等等。
Transform存储为12浮点数,Transform2D存储为8浮点数,COLOR_8BIT
/ CUSTOM_DATA_8BIT
存储为1浮点数(原为4字节),COLOR_FLOAT
/ CUSTOM_DATA_FLOAT
存储为4浮点数。
通过乘以网格的现有顶点颜色来设置特定实例的颜色。
为了使颜色生效,请确保MultiMesh
上的color_format不是null
,并且SpatialMaterial.vertex_color_use_as_albedo上的材质是true
。
为特定的实例设置自定义数据。虽然使用了Color,但它只是一个容纳4个浮点数的容器。数字的格式可以根据使用的CustomDataFormat来改变。
为特定实例设置 Transform。
- void set_instance_transform_2d ( int instance, Transform2D transform )
为特定实例设置 Transform2D。