MultiMesh
Наследует: Resource < RefCounted < Object
Обеспечивает высокопроизводительную отрисовку сетки несколько раз с использованием GPU-экземпляров.
Описание
MultiMesh обеспечивает низкоуровневое создание экземпляров сетки. Отрисовка тысяч узлов MeshInstance3D может быть медленной, поскольку каждый объект отправляется в графический процессор, а затем отрисовывается индивидуально.
MultiMesh намного быстрее, поскольку он может рисовать тысячи экземпляров за один вызов отрисовки, что приводит к меньшим накладным расходам API.
Недостатком является то, что если экземпляры находятся слишком далеко друг от друга, производительность может снизиться, поскольку каждый экземпляр всегда будет отображаться (они пространственно индексируются как один для всего объекта).
Поскольку экземпляры могут иметь любое поведение, AABB, используемый для видимости, должен быть предоставлен пользователем.
Примечание: MultiMesh — это один объект, поэтому применяется то же ограничение на максимальное количество источников света на объект. Это означает, что после того, как максимальное количество источников света будет использовано одним или несколькими экземплярами, остальные экземпляры MultiMesh не получат никакого освещения.
Примечание: Blend Shapes будут игнорироваться, если используются в MultiMesh.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
get_aabb() const |
|
get_instance_color(instance: int) const |
|
get_instance_custom_data(instance: int) const |
|
get_instance_transform(instance: int) const |
|
get_instance_transform_2d(instance: int) const |
|
void |
reset_instance_physics_interpolation(instance: int) |
void |
|
void |
set_buffer_interpolated(buffer_curr: PackedFloat32Array, buffer_prev: PackedFloat32Array) |
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: Transform3D) |
void |
set_instance_transform_2d(instance: int, transform: Transform2D) |
Перечисления
enum TransformFormat: 🔗
TransformFormat TRANSFORM_2D = 0
Используйте это при использовании 2D-преобразований.
TransformFormat TRANSFORM_3D = 1
Используйте это при использовании 3D-преобразований.
enum PhysicsInterpolationQuality: 🔗
PhysicsInterpolationQuality INTERP_QUALITY_FAST = 0
Всегда выполняйте интерполяцию с использованием Basis lerping, что в некоторых ситуациях может приводить к появлению артефактов деформации.
PhysicsInterpolationQuality INTERP_QUALITY_HIGH = 1
По возможности пытайтесь выполнить интерполяцию с использованием Basis slerping (сферической линейной интерполяции), в противном случае прибегните к lerping.
Описания свойств
PackedFloat32Array buffer = PackedFloat32Array() 🔗
void set_buffer(value: PackedFloat32Array)
PackedFloat32Array get_buffer()
There is currently no description for this property. Please help us by contributing one!
Note: The returned array is copied and any changes to it will not update the original property value. See PackedFloat32Array for more details.
PackedColorArray color_array 🔗
Устарело: Accessing this property is very slow. Use set_instance_color() and get_instance_color() instead.
Массив, содержащий каждый Color, используемый всеми экземплярами этой сетки.
Note: The returned array is copied and any changes to it will not update the original property value. See PackedColorArray for more details.
AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗
Пользовательский AABB для этого ресурса MultiMesh. Установка этого вручную предотвращает дорогостоящие перерасчеты AABB во время выполнения.
PackedColorArray custom_data_array 🔗
Устарело: Accessing this property is very slow. Use set_instance_custom_data() and get_instance_custom_data() instead.
Массив, содержащий каждое пользовательское значение данных, используемое всеми экземплярами этой сетки, как PackedColorArray.
Note: The returned array is copied and any changes to it will not update the original property value. See PackedColorArray for more details.
Количество экземпляров, которые будут отрисованы. Это очищает и (изменяет) размер буферов. Установка формата данных или флагов после этого не даст никакого эффекта.
По умолчанию отрисовываются все экземпляры, но вы можете ограничить это с помощью visible_instance_count.
Mesh ресурс для создания экземпляра.
Внешний вид отдельных экземпляров можно изменить с помощью set_instance_color() и set_instance_custom_data().
PhysicsInterpolationQuality physics_interpolation_quality = 0 🔗
void set_physics_interpolation_quality(value: PhysicsInterpolationQuality)
PhysicsInterpolationQuality get_physics_interpolation_quality()
Выберите, следует ли использовать метод интерполяции, который благоприятствует скорости или качеству.
При использовании низких физических тикрейтов (обычно ниже 20) или высоких скоростей вращения объектов вы можете получить лучшие результаты с настройкой высокого качества.
Примечание: Высокое качество не равно низкому качеству. За исключением особых случаев, упомянутых выше, качество должно быть сопоставимо с высоким качеством.
PackedVector2Array transform_2d_array 🔗
Устарело: Accessing this property is very slow. Use set_instance_transform_2d() and get_instance_transform_2d() instead.
Массив, содержащий каждое значение Transform2D, используемое всеми экземплярами этой сетки, как PackedVector2Array. Каждое преобразование делится на 3 значения Vector2, соответствующих x, y и origin преобразований.
Note: The returned array is copied and any changes to it will not update the original property value. See PackedVector2Array for more details.
PackedVector3Array transform_array 🔗
Устарело: Accessing this property is very slow. Use set_instance_transform() and get_instance_transform() instead.
Массив, содержащий каждое значение Transform3D, используемое всеми экземплярами этой сетки, как PackedVector3Array. Каждое преобразование делится на 4 значения Vector3, соответствующих x, y, z и origin преобразований.
Note: The returned array is copied and any changes to it will not update the original property value. See PackedVector3Array for more details.
TransformFormat transform_format = 0 🔗
void set_transform_format(value: TransformFormat)
TransformFormat get_transform_format()
Формат преобразования, используемый для преобразования сетки, либо 2D, либо 3D.
Если true, MultiMesh будет использовать данные о цвете (см. set_instance_color()). Может быть установлено только тогда, когда instance_count равно 0 или меньше. Это означает, что вам нужно вызвать этот метод перед установкой количества экземпляров или временно сбросить его до 0.
bool use_custom_data = false 🔗
Если true, MultiMesh будет использовать пользовательские данные (см. set_instance_custom_data()). Может быть установлено только тогда, когда instance_count равно 0 или меньше. Это означает, что вам нужно вызвать этот метод перед установкой количества экземпляров или временно сбросить его до 0.
int visible_instance_count = -1 🔗
Ограничивает количество отрисовываемых экземпляров, -1 отрисовывает все экземпляры. Изменение этого значения не изменяет размеры буферов.
Описания метода
Возвращает ограничивающую рамку, выровненную по оси видимости, в локальном пространстве.
Color get_instance_color(instance: int) const 🔗
Получает цветовой множитель конкретного экземпляра.
Color get_instance_custom_data(instance: int) const 🔗
Возвращает пользовательские данные, заданные для конкретного экземпляра.
Transform3D get_instance_transform(instance: int) const 🔗
Возвращает Transform3D определенного экземпляра.
Transform2D get_instance_transform_2d(instance: int) const 🔗
Возвращает Transform2D определенного экземпляра.
void reset_instance_physics_interpolation(instance: int) 🔗
При использовании физической интерполяции эта функция позволяет предотвратить интерполяцию на экземпляре в текущем такте физики.
Это позволяет мгновенно перемещать экземпляры и обычно должно использоваться при первоначальном размещении экземпляра, такого как пуля, чтобы предотвратить графические сбои.
void reset_instances_physics_interpolation() 🔗
При использовании физической интерполяции эта функция позволяет предотвратить интерполяцию для всех экземпляров в текущем физическом такте.
Это позволяет мгновенно перемещать все экземпляры и обычно должно использоваться при первоначальном размещении экземпляров во избежание графических сбоев.
void set_buffer_interpolated(buffer_curr: PackedFloat32Array, buffer_prev: PackedFloat32Array) 🔗
Альтернатива установке свойства buffer, которое можно использовать с физической интерполяцией. Этот метод принимает два массива и может устанавливать данные для текущего и предыдущего тика за один раз. Рендерер будет автоматически интерполировать данные в каждом кадре.
Это полезно в ситуациях, когда порядок экземпляров может меняться от тика к тику физики, например, в системах частиц.
Когда порядок экземпляров согласован, более простую альтернативу установки buffer все еще можно использовать с интерполяцией.
void set_instance_color(instance: int, color: Color) 🔗
Устанавливает цвет определенного экземпляра путем умножения существующих цветов вершин сетки. Это позволяет использовать различную цветовую тонировку для каждого экземпляра.
Примечание: Каждый компонент хранится в 32 битах в методах рендеринга Forward+ и Mobile, но упакован в 16 бит в методе рендеринга Compatibility.
Чтобы цвет вступил в силу, убедитесь, что use_colors имеет значение true на MultiMesh и BaseMaterial3D.vertex_color_use_as_albedo имеет значение true на материале. Если вы собираетесь установить абсолютный цвет вместо тонировки, убедитесь, что цвет альбедо материала установлен на чистый белый (Color(1, 1, 1)).
void set_instance_custom_data(instance: int, custom_data: Color) 🔗
Устанавливает пользовательские данные для определенного экземпляра. custom_data — это тип Color, содержащий только 4 числа с плавающей точкой.
Примечание: Каждое число хранится в 32 битах в методах рендеринга Forward+ и Mobile, но упаковано в 16 бит в методе рендеринга Compatibility.
Для использования пользовательских данных убедитесь, что use_custom_data имеет значение true.
Эти пользовательские данные экземпляра должны быть доступны вручную в вашем пользовательском шейдере с помощью INSTANCE_CUSTOM.
void set_instance_transform(instance: int, transform: Transform3D) 🔗
Устанавливает Transform3D для определенного экземпляра.
void set_instance_transform_2d(instance: int, transform: Transform2D) 🔗
Устанавливает Transform2D для определенного экземпляра.