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

Hereda: Resource < RefCounted < Object

Un Resource que contiene geometría basada en un array de vértices durante el proceso de importación.

Descripción

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.

Métodos

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)


Descripciones de Métodos

void add_blend_shape(name: String) 🔗

Añade un nombre para una blend shape que se añadirá con add_surface(). Debe ser llamado antes de añadir la superficie.


void add_surface(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, material: Material = null, name: String = "", flags: int = 0) 🔗

Crea una nueva superficie. Mesh.get_surface_count() se convertirá en el surf_idx de esta nueva superficie.

Las superficies se crean para ser renderizadas usando un primitive, que puede ser cualquiera de los valores definidos en PrimitiveType.

El argumento arrays es un arreglo de arreglos. Cada uno de los elementos Mesh.ARRAY_MAX contiene un arreglo con parte de los datos de la malla para esta superficie, según se describe en el miembro correspondiente de ArrayType, o null si no se utiliza en la superficie. Por ejemplo, arrays[0] es el arreglo de vértices. Este primer sub-arreglo de vértices siempre es obligatorio; los demás son opcionales. Agregar un arreglo de índices coloca esta superficie en "modo índice", donde los arreglos de vértices y otros se usan como fuentes de datos y el arreglo de índices define el orden de los vértices. Todos los sub-arreglos deben tener la misma longitud que el arreglo de vértices (o ser un múltiplo exacto de la longitud del arreglo de vértices, cuando múltiples elementos de un sub-arreglo corresponden a un solo vértice) o estar vacíos, excepto Mesh.ARRAY_INDEX si se utiliza.

El argumento blend_shapes es un arreglo de datos de vértices para cada blend shape. Cada elemento es un arreglo con la misma estructura que arrays, pero Mesh.ARRAY_VERTEX, Mesh.ARRAY_NORMAL y Mesh.ARRAY_TANGENT se establecen únicamente si están presentes en arrays y todas las demás entradas son null.

El argumento lods es un diccionario con claves float y valores PackedInt32Array. Cada entrada del diccionario representa un nivel LOD de la superficie, donde el valor es el arreglo Mesh.ARRAY_INDEX que se utilizará para ese nivel LOD y la clave es aproximadamente proporcional a la distancia a la que se usará el LOD. Es decir, aumentar la clave de un LOD también aumenta la distancia a la que los objetos deben estar de la cámara antes de usar ese LOD.

El argumento flags es la operación OR a nivel de bits de, según se necesite: un valor de ArrayCustomFormat desplazado a la izquierda por ARRAY_FORMAT_CUSTOMn_SHIFT para cada canal personalizado en uso, Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE, Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS o Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY.

Nota: Al usar índices, se recomienda emplear únicamente puntos, líneas o triángulos.


void clear() 🔗

Elimina todas las superficies y las blendshapes de este ImporterMesh.


ImporterMesh from_mesh(mesh: Mesh) static 🔗

Convierte la Mesh dada en un ImporterMesh copiando todas sus superficies, formas de mezcla, materiales y metadatos en un nuevo objeto ImporterMesh.


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

Genera todos los LOD para este ImporterMesh.

normal_merge_angle está en grados y se usa de la misma manera que la configuración del importador en lods.

normal_split_angle no se usa y solo permanece por compatibilidad con versiones anteriores de la API.

El número de LOD generados se puede acceder usando get_surface_lod_count(), y cada LOD está disponible en get_surface_lod_size() y get_surface_lod_indices().

bone_transform_array es un Array que puede estar vacío o contener Transform3Ds que, para cada ID de hueso de la malla, aplicará el skinning de malla al generar las variaciones de la malla LOD. Esto se usa normalmente para tener en cuenta las discrepancias de escala entre la propia malla y sus datos de skinning.


int get_blend_shape_count() const 🔗

Devuelve el número de blend shapes que la malla contiene.


BlendShapeMode get_blend_shape_mode() const 🔗

Devuelve el modo de blend shape para esta malla.


String get_blend_shape_name(blend_shape_idx: int) const 🔗

Devuelve el nombre de la forma de mezcla de este indice.


Vector2i get_lightmap_size_hint() const 🔗

Devuelve la sugerencia de tamaño de esta malla para el desempaquetado de lightmap en el espacio UV.


ArrayMesh get_mesh(base_mesh: ArrayMesh = null) 🔗

Devuelve los datos de la malla representados por este ImporterMesh como un ArrayMesh utilizable.

Este método almacena en caché la malla devuelta, y las llamadas posteriores devolverán los datos almacenados en caché hasta que se llame a clear().

Si aún no está en caché y se proporciona base_mesh, se utilizará y modificará base_mesh.


Array get_surface_arrays(surface_idx: int) const 🔗

Devuelve los arrays para los vértices, normales, UVs, etc. que conforman la superficie solicitada. Véase add_surface().


Array get_surface_blend_shape_arrays(surface_idx: int, blend_shape_idx: int) const 🔗

Devuelve un único conjunto de arrays de blend shape para el índice de blend shape solicitado para una superficie.


int get_surface_count() const 🔗

Devuelve el número de superficies que contiene la malla.


int get_surface_format(surface_idx: int) const 🔗

Devuelve el formato de la superficie que contiene la malla.


int get_surface_lod_count(surface_idx: int) const 🔗

Devuelve el número de LODs que la malla contiene en una superficie determinada.


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

Devuelve el búfer de índices de un LOD para una superficie.


float get_surface_lod_size(surface_idx: int, lod_idx: int) const 🔗

Devuelve la proporción de pantalla que activa un LOD para una superficie.


Material get_surface_material(surface_idx: int) const 🔗

Devuelve un Material en una superficie determinada. La superficie se renderiza usando este material.


String get_surface_name(surface_idx: int) const 🔗

Obtiene el nombre asignado a esta superficie.


PrimitiveType get_surface_primitive_type(surface_idx: int) 🔗

Devuelve el tipo primitivo de la superficie solicitada (véase 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) 🔗

Establece el modo de blend shape.


void set_lightmap_size_hint(size: Vector2i) 🔗

Establece la sugerencia de tamaño de esta malla para el desempaquetado de lightmap en el espacio UV.


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

Establece un Material para una superficie determinada. La superficie se renderizará usando este material.


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

Obtiene un nombre para una superficie dada.