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 — це тип 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()

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 🔗

Об'єднує декілька ImporterMesh в одну ImporterMesh. Кожна вхідна сітка трансформується за допомогою відповідного Transform3D з масиву relative_transforms, який повинен мати той самий розмір, що й importer_meshes. Підтримуються від'ємні масштаби, і порядок обертання в даних сітки буде скориговано з урахуванням цього.

Якщо deduplicate_surfaces дорівнює true і декілька сіток мають поверхні з однаковими іменами та форматами, поверхні будуть об'єднані під час об'єднання сіток, і буде використано матеріал з першої відповідної поверхні. Це корисно для зменшення кількості поверхонь у результуючій сітці та дозволяє уникнути дублювання матеріалів. Поверхні з вагами кісток ніколи не будуть дублюватися. Якщо deduplicate_surfaces має значення false, поверхні завжди будуть зберігатися окремо і отримуватимуть унікальні імена.

Попередження: Форми змішування та LOD не підтримуються і будуть відкинуті. Не використовуйте цю функцію для відкидання форм змішування та LOD, оскільки підтримка цих елементів може бути додана в майбутньому.


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

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