MultiMesh
继承
简要描述
提供高性能的网格实例化。
描述
MultiMesh提供了底层网格实例化。绘制数千个MeshInstance节点可能会很慢,因为每个对象都提交给GPU,然后单独绘制。
MultiMesh更快,因为它可以通过一次绘制调用来绘制数千个实例,从而减少了API开销。
缺点是,如果这些实例彼此之间的距离太远,则可能会降低性能,因为每个实例都将始终被渲染(对于整个对象,它们在空间上被索引为一个)。
由于实例可能有任何行为,因此用于可见性的AABB必须由用户提供。
成员
类型 | 属性名 | 默认值 |
---|---|---|
int | color_format | 0 |
int | custom_data_format | 0 |
int | instance_count | 0 |
Mesh | mesh | |
int | transform_format | 0 |
int | visible_instance_count | -1 |
方法
返回值类型 | 方法名称 |
---|---|
AABB | get_aabb() const |
Color | get_instance_color(instance: int) const |
Color | get_instance_custom_data(instance: int) const |
Transform | get_instance_transform(instance: int) const |
Transform2D | get_instance_transform_2d(instance: int) const |
void | set_as_bulk_array(array: PoolRealArray) |
void | set_instance_color(instance: int, color: Color) |
void | set_instance_custom_data(instance: int, custom_data: Color) |
void | set_instance_transform(instance: int, transform: Transform) |
void | set_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_color的Color将使用4个浮点数。
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个浮点数。
常量
成员说明
- int color_format
Default | 0 |
---|---|
setter | set_color_format(value) |
getter | get_color_format |
- int custom_data_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 |
- Mesh mesh
setter | set_mesh(value) |
---|---|
getter | get_mesh |
- int transform_format
Default | 0 |
---|---|
setter | set_transform_format(value) |
getter | get_transform_format |
- int visible_instance_count
Default | -1 |
---|---|
setter | set_visible_instance_count(value) |
getter | get_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_albedo为true
。
- 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。