Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
ImporterMesh
Наследует: Resource < RefCounted < Object
Resource содержащий геометрию на основе массива вершин во время процесса импорта.
Описание
ImporterMesh — это тип Resource, аналогичный ArrayMesh. Он содержит геометрию на основе вершинных массивов, разделённую на поверхности. Каждая поверхность содержит полностью отдельный массив и материал, используемый для её отрисовки. С точки зрения проектирования, сетка с несколькими поверхностями предпочтительнее сетки с одной поверхностью, поскольку объекты, созданные в программах 3D-редактирования, обычно содержат несколько материалов.
В отличие от своего аналога во время выполнения, ImporterMesh содержит данные сетки до выполнения различных этапов импорта, таких как генерация сетки LOD и теней. Изменить данные поверхности можно, вызвав clear(), а затем add_surface() для каждой поверхности.
Методы
void |
add_blend_shape(name: String) |
void |
add_surface(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, material: Material = null, name: String = "", flags: int = 0) |
void |
clear() |
void |
generate_lods(normal_merge_angle: float, normal_split_angle: float, bone_transform_array: Array) |
get_blend_shape_count() const |
|
get_blend_shape_mode() const |
|
get_blend_shape_name(blend_shape_idx: int) const |
|
get_lightmap_size_hint() const |
|
get_surface_arrays(surface_idx: int) const |
|
get_surface_blend_shape_arrays(surface_idx: int, blend_shape_idx: int) const |
|
get_surface_count() const |
|
get_surface_format(surface_idx: int) const |
|
get_surface_lod_count(surface_idx: int) const |
|
get_surface_lod_indices(surface_idx: int, lod_idx: int) const |
|
get_surface_lod_size(surface_idx: int, lod_idx: int) const |
|
get_surface_material(surface_idx: int) const |
|
get_surface_name(surface_idx: int) const |
|
get_surface_primitive_type(surface_idx: int) |
|
merge_importer_meshes(importer_meshes: Array[ImporterMesh], relative_transforms: Array[Transform3D], deduplicate_surfaces: bool = true) static |
|
void |
|
void |
set_lightmap_size_hint(size: Vector2i) |
void |
set_surface_material(surface_idx: int, material: Material) |
void |
set_surface_name(surface_idx: int, name: String) |
Описания метода
void add_blend_shape(name: String) 🔗
Добавляет имя для формы смешивания, которая будет добавлена с помощью add_surface(). Необходимо вызвать перед добавлением поверхности.
void add_surface(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, material: Material = null, name: String = "", flags: int = 0) 🔗
Создает новую поверхность. Mesh.get_surface_count() станет surf_idx для этой новой поверхности.
Поверхности создаются для визуализации с использованием primitive, который может быть любым из значений, определенных в PrimitiveType.
Аргумент arrays — это массив массивов. Каждый из элементов Mesh.ARRAY_MAX содержит массив с некоторыми данными сетки для этой поверхности, как описано соответствующим членом ArrayType или null, если он не используется поверхностью. Например, arrays[0] — это массив вершин. Этот первый подмассив вершин всегда обязателен; остальные необязательны. Добавление индексного массива переводит эту поверхность в «индексный режим», где вершины и другие массивы становятся источниками данных, а индексный массив определяет порядок вершин. Все подмассивы должны иметь ту же длину, что и массив вершин (или быть кратными длине массива вершин, когда несколько элементов подмассива соответствуют одной вершине) или быть пустыми, за исключением Mesh.ARRAY_INDEX, если он используется.
Аргумент blend_shapes — это массив данных вершин для каждой формы смешивания. Каждый элемент — это массив той же структуры, что и arrays, но Mesh.ARRAY_VERTEX, Mesh.ARRAY_NORMAL и Mesh.ARRAY_TANGENT устанавливаются тогда и только тогда, когда они установлены в arrays, а все остальные записи — null.
Аргумент lods — это словарь с ключами float и значениями PackedInt32Array. Каждая запись в словаре представляет уровень детализации поверхности, где значение — это массив Mesh.ARRAY_INDEX, используемый для уровня детализации, а ключ примерно пропорционален расстоянию, на котором используются характеристики детализации. То есть, увеличение ключа детализации также увеличивает расстояние, на котором объекты должны находиться от камеры, прежде чем будет использован детализация.
Аргумент flags представляет собой побитовое ИЛИ, при необходимости: одного значения ArrayCustomFormat, сдвинутого влево на ARRAY_FORMAT_CUSTOMn_SHIFT для каждого используемого пользовательского канала, Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE, Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS или Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY.
Примечание: При использовании индексов рекомендуется использовать только точки, линии или треугольники.
void clear() 🔗
Удаляет все поверхности и формы смешивания из этого ImporterMesh.
ImporterMesh from_mesh(mesh: Mesh) static 🔗
Преобразует заданный Mesh в ImporterMesh, копируя все её поверхности, формы смешивания, материалы и метаданные в новый объект ImporterMesh.
void generate_lods(normal_merge_angle: float, normal_split_angle: float, bone_transform_array: Array) 🔗
Генерирует все уровни детализации для этого ImporterMesh.
normal_merge_angle указывается в градусах и используется так же, как настройки импортера в lods.
normal_split_angle не используется и остается только для совместимости со старыми версиями API.
К количеству сгенерированных уровней детализации можно получить доступ с помощью get_surface_lod_count(), а каждый уровень детализации доступен в get_surface_lod_size() и get_surface_lod_indices().
bone_transform_array — это Array, который может быть как пустым, так и содержать Transform3D, которые для каждого идентификатора костей сетки будут применять скиннинг сетки при генерации вариаций сетки LOD. Обычно это используется для учета расхождений в масштабе между самой сеткой и ее данными скиннинга.
int get_blend_shape_count() const 🔗
Возвращает количество форм смешивания, которые содержит сетка.
BlendShapeMode get_blend_shape_mode() const 🔗
Возвращает режим смешивания форм для данной сетки.
String get_blend_shape_name(blend_shape_idx: int) const 🔗
Возвращает имя формы смешивания по данному индексу.
Vector2i get_lightmap_size_hint() const 🔗
Возвращает подсказку о размере этой сетки для развертки карты освещения в UV-пространстве.
ArrayMesh get_mesh(base_mesh: ArrayMesh = null) 🔗
Возвращает данные сетки, представленные этим ImporterMesh, как пригодный для использования ArrayMesh.
Этот метод кэширует возвращенную сетку, и последующие вызовы будут возвращать кэшированные данные до тех пор, пока не будет вызван clear().
Если еще не кэшированы и предоставлен base_mesh, base_mesh будет использоваться и мутироваться.
Array get_surface_arrays(surface_idx: int) const 🔗
Возвращает Texture2D заданного кадра.Возвращает массивы вершин, нормалей, UV и т. д., которые составляют запрошенную поверхность. См. add_surface().
Array get_surface_blend_shape_arrays(surface_idx: int, blend_shape_idx: int) const 🔗
Возвращает один набор массивов форм смешивания для запрошенного индекса формы смешивания для поверхности.
int get_surface_count() const 🔗
Возвращает количество поверхностей, которые содержит сетка.
int get_surface_format(surface_idx: int) const 🔗
Возвращает формат поверхности, которую содержит сетка.
int get_surface_lod_count(surface_idx: int) const 🔗
Возвращает количество уровней детализации (LOD), которые сетка содержит на заданной поверхности.
PackedInt32Array get_surface_lod_indices(surface_idx: int, lod_idx: int) const 🔗
Возвращает индекс буфера уровня детализации (LOD) данных для поверхности.
float get_surface_lod_size(surface_idx: int, lod_idx: int) const 🔗
Возвращает соотношение сторон экрана, которое активирует уровень детализации для поверхности.
Material get_surface_material(surface_idx: int) const 🔗
Возвращает Material в заданной поверхности. Поверхность визуализируется с использованием этого материала.
String get_surface_name(surface_idx: int) const 🔗
Получает имя, назначенное этой поверхности.
PrimitiveType get_surface_primitive_type(surface_idx: int) 🔗
Возвращает тип примитива запрошенной поверхности (см. add_surface()).
ImporterMesh merge_importer_meshes(importer_meshes: Array[ImporterMesh], relative_transforms: Array[Transform3D], deduplicate_surfaces: bool = true) static 🔗
Объединяет несколько ImporterMesh в один ImporterMesh. Каждая входная сетка преобразуется соответствующим Transform3D из массива relative_transforms, который должен иметь тот же размер, что и importer_meshes. Поддерживаются отрицательные масштабы, и порядок обхода в данных сетки будет скорректирован с учетом этого.
Если deduplicate_surfaces имеет значение true и несколько сеток имеют поверхности с одинаковыми именами и форматами, поверхности будут объединены при слиянии сеток и будут использовать материал первой совпадающей поверхности. Это полезно для уменьшения количества поверхностей в результирующей сетке и позволяет избежать дублирования материалов. Поверхности с весами костей никогда не будут дедуплицированы. Если deduplicate_surfaces имеет значение false, поверхности всегда будут храниться отдельно и им будут присвоены уникальные имена.
Предупреждение: Формы смешивания и уровни детализации (LOD) не поддерживаются и будут отброшены. Не используйте эту функцию для отбрасывания форм смешивания и уровней детализации, так как поддержка этих параметров может быть добавлена в будущем.
void set_blend_shape_mode(mode: BlendShapeMode) 🔗
Устанавливает режим смешивания форм.
void set_lightmap_size_hint(size: Vector2i) 🔗
Задает подсказку по размеру этой сетки для развертки карты освещения в UV-пространстве.
void set_surface_material(surface_idx: int, material: Material) 🔗
Устанавливает Material для заданной поверхности. Поверхность будет визуализироваться с использованием этого материала.
void set_surface_name(surface_idx: int, name: String) 🔗
Задает имя для данной поверхности.