MultiMesh

Наследует: Resource < RefCounted < Object

Обеспечивает высокопроизводительную отрисовку сетки несколько раз с использованием GPU-экземпляров.

Описание

MultiMesh обеспечивает низкоуровневое создание экземпляров сетки. Отрисовка тысяч узлов MeshInstance3D может быть медленной, поскольку каждый объект отправляется в графический процессор, а затем отрисовывается индивидуально.

MultiMesh намного быстрее, поскольку он может рисовать тысячи экземпляров за один вызов отрисовки, что приводит к меньшим накладным расходам API.

Недостатком является то, что если экземпляры находятся слишком далеко друг от друга, производительность может снизиться, поскольку каждый экземпляр всегда будет отображаться (они пространственно индексируются как один для всего объекта).

Поскольку экземпляры могут иметь любое поведение, AABB, используемый для видимости, должен быть предоставлен пользователем.

Примечание: MultiMesh — это один объект, поэтому применяется то же ограничение на максимальное количество источников света на объект. Это означает, что после того, как максимальное количество источников света будет использовано одним или несколькими экземплярами, остальные экземпляры MultiMesh не получат никакого освещения.

Примечание: Blend Shapes будут игнорироваться, если используются в MultiMesh.

Обучающие материалы

Свойства

PackedFloat32Array

buffer

PackedFloat32Array()

PackedColorArray

color_array

AABB

custom_aabb

AABB(0, 0, 0, 0, 0, 0)

PackedColorArray

custom_data_array

int

instance_count

0

Mesh

mesh

PhysicsInterpolationQuality

physics_interpolation_quality

0

PackedVector2Array

transform_2d_array

PackedVector3Array

transform_array

TransformFormat

transform_format

0

bool

use_colors

false

bool

use_custom_data

false

int

visible_instance_count

-1

Методы

AABB

get_aabb() const

Color

get_instance_color(instance: int) const

Color

get_instance_custom_data(instance: int) const

Transform3D

get_instance_transform(instance: int) const

Transform2D

get_instance_transform_2d(instance: int) const

void

reset_instance_physics_interpolation(instance: int)

void

reset_instances_physics_interpolation()

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() 🔗

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) 🔗

  • void set_custom_aabb(value: AABB)

  • AABB get_custom_aabb()

Пользовательский 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.


int instance_count = 0 🔗

  • void set_instance_count(value: int)

  • int get_instance_count()

Количество экземпляров, которые будут отрисованы. Это очищает и (изменяет) размер буферов. Установка формата данных или флагов после этого не даст никакого эффекта.

По умолчанию отрисовываются все экземпляры, но вы можете ограничить это с помощью visible_instance_count.


Mesh mesh 🔗

  • void set_mesh(value: Mesh)

  • Mesh get_mesh()

Mesh ресурс для создания экземпляра.

Внешний вид отдельных экземпляров можно изменить с помощью set_instance_color() и set_instance_custom_data().


PhysicsInterpolationQuality physics_interpolation_quality = 0 🔗

Выберите, следует ли использовать метод интерполяции, который благоприятствует скорости или качеству.

При использовании низких физических тикрейтов (обычно ниже 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 🔗

Формат преобразования, используемый для преобразования сетки, либо 2D, либо 3D.


bool use_colors = false 🔗

  • void set_use_colors(value: bool)

  • bool is_using_colors()

Если true, MultiMesh будет использовать данные о цвете (см. set_instance_color()). Может быть установлено только тогда, когда instance_count равно 0 или меньше. Это означает, что вам нужно вызвать этот метод перед установкой количества экземпляров или временно сбросить его до 0.


bool use_custom_data = false 🔗

  • void set_use_custom_data(value: bool)

  • bool is_using_custom_data()

Если true, MultiMesh будет использовать пользовательские данные (см. set_instance_custom_data()). Может быть установлено только тогда, когда instance_count равно 0 или меньше. Это означает, что вам нужно вызвать этот метод перед установкой количества экземпляров или временно сбросить его до 0.


int visible_instance_count = -1 🔗

  • void set_visible_instance_count(value: int)

  • int get_visible_instance_count()

Ограничивает количество отрисовываемых экземпляров, -1 отрисовывает все экземпляры. Изменение этого значения не изменяет размеры буферов.


Описания метода

AABB get_aabb() const 🔗

Возвращает ограничивающую рамку, выровненную по оси видимости, в локальном пространстве.


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 для определенного экземпляра.