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.

ImporterMesh

Успадковує: Resource < RefCounted < Object

Resource, що містить геометрію на основі вертексу в процесі імпорту.

Опис

ImporterMesh is a type of Resource analogous to ArrayMesh. It contains vertex array-based geometry, divided in surfaces. Each surface contains a completely separate array and a material used to draw it. Design wise, a mesh with multiple surfaces is preferred to a single surface, because objects created in 3D editing software commonly contain multiple materials.

Unlike its runtime counterpart, ImporterMesh contains mesh data before various import steps, such as LOD and shadow mesh generation, have taken place. Modify surface data by calling clear(), followed by add_surface() for each 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()

ImporterMesh

from_mesh(mesh: Mesh) static

void

generate_lods(normal_merge_angle: float, normal_split_angle: float, bone_transform_array: Array)

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

ArrayMesh

get_mesh(base_mesh: ArrayMesh = null)

Array

get_surface_arrays(surface_idx: int) const

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

PackedInt32Array

get_surface_lod_indices(surface_idx: int, lod_idx: int) const

float

get_surface_lod_size(surface_idx: int, lod_idx: int) const

Material

get_surface_material(surface_idx: int) const

String

get_surface_name(surface_idx: int) const

PrimitiveType

get_surface_primitive_type(surface_idx: int)

ImporterMesh

merge_importer_meshes(importer_meshes: Array[ImporterMesh], relative_transforms: Array[Transform3D], deduplicate_surfaces: bool = true) static

void

set_blend_shape_mode(mode: BlendShapeMode)

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. Кожен запис у словнику представляє рівень LOD поверхні, де значенням є масив Mesh.ARRAY_INDEX для використання рівня LOD, а ключ приблизно пропорційний відстані, на якій використовується статистика LOD. Тобто збільшення ключа LOD також збільшує відстань, на якій об’єкти повинні бути від камери до використання LOD.

Аргумент 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) 🔗

Генерує всі lods для цього ImporterMesh.

normal_merge_angle у градусах і використовується так само, як налаштування імпортера в lods.

normal_split_angle не використовується і залишається лише для сумісності зі старішими версіями API.

Доступ до кількості згенерованих lods можна отримати за допомогою get_surface_lod_count(), і кожен LOD доступний у 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 🔗

Повертає розмір натяка цієї сітки для Lightmap-unwrapping в УФ-просторі.


ArrayMesh get_mesh(base_mesh: ArrayMesh = null) 🔗

Повертаємо дані сітки, що представлені цими ImporterMesh, як можна використовувати ArrayMesh.

Цей метод кешує зворотну сіточку, а наступні дзвінки повернеться до тих пір, поки не називається clear().

Якщо ще не передбачено кешування та base_mesh, буде використовуватися base_mesh і мутований.


Array get_surface_arrays(surface_idx: int) const 🔗

Повертає масиви для вершин, нормалей, УФів і т.д., які складають необхідну поверхню. Див. 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 🔗

Повертаємо кількість подів, що сітка тримається на даній поверхні.


PackedInt32Array get_surface_lod_indices(surface_idx: int, lod_idx: int) const 🔗

Повертає індексний буфер льоду для поверхні.


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 🔗

Merges multiple ImporterMeshes into a single ImporterMesh. Each input mesh is transformed by the corresponding Transform3D in the relative_transforms array, which must be the same size as importer_meshes. Negative scales are supported, and the winding order in the mesh data will be corrected to account for this.

If deduplicate_surfaces is true and multiple meshes have surfaces with the same names and formats, the surfaces will be merged together when the meshes are merged, and will use the material from the first matching surface. This is useful for reducing the number of surfaces in the resulting mesh, and avoids duplicating materials. Surfaces with bone weights will never be deduplicated. If deduplicate_surfaces is false, the surfaces will always be kept separate, and will be given unique names.

Warning: Blend shapes and LODs are not supported and will be discarded. Do not use this function to discard blend shapes and LODs, as support for these may be added in the future.


void set_blend_shape_mode(mode: BlendShapeMode) 🔗

Встановлює режим накладання форми.


void set_lightmap_size_hint(size: Vector2i) 🔗

Встановлює розмір натяка цієї сітки для Lightmap-unwrapping в УФ-просторі.


void set_surface_material(surface_idx: int, material: Material) 🔗

Настроювання Material для даної поверхні. Поверхня буде надано за допомогою цього матеріалу.


void set_surface_name(surface_idx: int, name: String) 🔗

Задає назву для заданої поверхні.