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.

ArrayMesh

Hérite de : Mesh < Resource < RefCounted < Object

Le type Mesh qui fournit un utilitaire pour la construction d'une nouvelle surface à partir de tableaux.

Description

L'ArrayMesh est utilisé pour construire un Mesh en spécifiant les attributs comme des tableaux.

L'exemple le plus trivial est la création d'un simple triangle :

var sommets = PackedVector3Array()
sommets.push_back(Vector3(0, 1, 0))
sommets.push_back(Vector3(1, 0, 0))
sommets.push_back(Vector3(0, 0, 1))

# Initialiser l'ArrayMesh.
var arr_mesh = ArrayMesh.new()
var tableaux = []
tableaux.resize(Mesh.ARRAY_MAX)
tableaux[Mesh.ARRAY_VERTEX] = sommets

# Créer le Mesh.
arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, tableaux)
var m = MeshInstance3D.new()
m.mesh = arr_mesh

La MeshInstance3D est prête à être ajoutée au SceneTree pour être affichée.

Voir aussi ImmediateMesh, MeshDataTool et SurfaceTool pour la génération procédurale de géométries.

Note : Godot utilise le sens horaire pour les faces avant dans les modes de primitives de triangles.

Tutoriels

Propriétés

BlendShapeMode

blend_shape_mode

1

AABB

custom_aabb

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

ArrayMesh

shadow_mesh

Méthodes

void

add_blend_shape(name: StringName)

void

add_surface_from_arrays(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, flags: BitField[ArrayFormat] = 0)

void

clear_blend_shapes()

void

clear_surfaces()

int

get_blend_shape_count() const

StringName

get_blend_shape_name(index: int) const

Error

lightmap_unwrap(transform: Transform3D, texel_size: float)

void

regen_normal_maps()

void

set_blend_shape_name(index: int, name: StringName)

int

surface_find_by_name(name: String) const

int

surface_get_array_index_len(surf_idx: int) const

int

surface_get_array_len(surf_idx: int) const

BitField[ArrayFormat]

surface_get_format(surf_idx: int) const

String

surface_get_name(surf_idx: int) const

PrimitiveType

surface_get_primitive_type(surf_idx: int) const

void

surface_remove(surf_idx: int)

void

surface_set_name(surf_idx: int, name: String)

void

surface_update_attribute_region(surf_idx: int, offset: int, data: PackedByteArray)

void

surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray)

void

surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray)


Descriptions des propriétés

BlendShapeMode blend_shape_mode = 1 🔗

Le mode de blend shape.


AABB custom_aabb = AABB(0, 0, 0, 0, 0, 0) 🔗

  • void set_custom_aabb(value: AABB)

  • AABB get_custom_aabb()

Surcharge le AABB avec celui défini par l'utilisateur pour le calcul du culling d'affichage. Particulièrement utile pour éviter un culling inattendu lors de l'utilisation d'un shader qui décale les sommets.


ArrayMesh shadow_mesh 🔗

Un maillage optionnel qui peut être utilisé pour rendre les ombres et la pré-passe de profondeur. Peut être utilisé pour améliorer les performances en fournissant un maillage avec des sommets fusionnés et seulement des données de position de sommets (sans normales, UV, couleurs, etc.).

Note : Ce maillage doit avoir exactement les mêmes sommets que le maillage source (y compris les LOD du maillage source, si présents). Si les positions des sommets diffèrent, le maillage ne se dessinera pas correctement.


Descriptions des méthodes

void add_blend_shape(name: StringName) 🔗

Ajoute un nom au blend shape qui sera ajouté avec add_surface_from_arrays(). Doit être appelé avant que la surface soit ajoutée.


void add_surface_from_arrays(primitive: PrimitiveType, arrays: Array, blend_shapes: Array[Array] = [], lods: Dictionary = {}, flags: BitField[ArrayFormat] = 0) 🔗

Crée une nouvelle surface. Mesh.get_surface_count() deviendra le surf_idx pour cette nouvelle surface.

Les surfaces sont créées pour être rendues en utilisant une primitive, qui peut être l'une des valeurs définies dans PrimitiveType.

L'argument arrays est un tableau de tableaux. Chacune des Mesh.ARRAY_MAX éléments contient un tableau contenant certaines données du maillage pour cette surface, comme le décrit le membre correspondant de ArrayType ou null s'il n'est pas utilisé par la surface. Par exemple, arrays[0] est le tableau des sommets. Ce premier sous-tableau de sommets est toujours nécessaire ; les autres sont optionnels. L'ajout d'un tableau d'index met cette surface en "mode index" où les sommets et les autres tableaux deviennent les sources de données et le tableau d'index définit l'ordre des sommets. Tous les sous-tableaux doivent avoir la même longueur que le tableau des sommets (ou être un multiple exact de la longueur du tableau des sommets, lorsque plusieurs éléments d'un sous-réseau correspondent à un seul sommet) ou être vides, à l'exception de Mesh.ARRAY_INDEX s'il est utilisé.

L'argument blend_shapes est un tableau de données sommet pour chaque blend shape. Chaque élément est un tableau de la même structure que arrays, mais Mesh.ARRAY_VERTEX, Mesh.ARRAY_NORMAL, et Mesh.ARRAY_TANGENT sont définis si et seulement si ils sont définis dans arrays et toutes les autres entrées sont null.

L'argument lods est un dictionnaire avec des clés float et des valeurs PackedInt32Array. Chaque entrée dans le dictionnaire représente un niveau de LOD de la surface, où la valeur est le tableau Mesh.ARRAY_INDEX à utiliser pour le niveau de LOD et la clé est grossièrement proportionnelle à la distance à laquelle les statistiques de LOD sont utilisées. Par exemple, augmenter la clé d'un LOD augmente également la distance à laquelle les objets doivent être de la caméra avant que le LOD soit utilisé.

L'argument flags est le OU par bits de, comme requis : Une valeur de ArrayCustomFormat décalée à gauche par ARRAY_FORMAT_CUSTOMn_SHIFT pour chaque canal personnalisé utilisé, Mesh.ARRAY_FLAG_USE_DYNAMIC_UPDATE, Mesh.ARRAY_FLAG_USE_8_BONE_WEIGHTS, ou Mesh.ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY.

Note : Lors de l'utilisation d'indices, il est recommandé d'utiliser uniquement des points, des lignes ou des triangles.


void clear_blend_shapes() 🔗

Retire toutes les blend shapes de ce ArrayMesh.


void clear_surfaces() 🔗

Retirer toutes les surfaces de ce ArrayMesh.


int get_blend_shape_count() const 🔗

Renvoie le nombre de blend shapes détenues par ce ArrayMesh.


StringName get_blend_shape_name(index: int) const 🔗

Renvoie le nom de la blend shape à cette position.


Error lightmap_unwrap(transform: Transform3D, texel_size: float) 🔗

Exécute un dépliage des UV sur l'ArrayMesh pour préparer le maillage au lightmapping.


void regen_normal_maps() 🔗

Régénère les tangentes pour chacune des surfaces de ArrayMesh.


void set_blend_shape_name(index: int, name: StringName) 🔗

Définit le nom de la blend shape à cet index.


int surface_find_by_name(name: String) const 🔗

Renvoie l'index de la première surface avec ce nom dans ce ArrayMesh. Si aucune surface n'existe, -1 est renvoyé.


int surface_get_array_index_len(surf_idx: int) const 🔗

Renvoie la longueur des indices du tableau d'indices pour la surface spécifiée (voir add_surface_from_arrays()).


int surface_get_array_len(surf_idx: int) const 🔗

Renvoie la longueur en sommets du tableau des sommets dans la surface spécifiée (voir add_surface_from_arrays()).


BitField[ArrayFormat] surface_get_format(surf_idx: int) const 🔗

Renvoie le masque de format de la surface demandée (voir add_surface_from_arrays()).


String surface_get_name(surf_idx: int) const 🔗

Obtient le nom assigné à cette surface.


PrimitiveType surface_get_primitive_type(surf_idx: int) const 🔗

Renvoie le type primitif de la surface demandée (voir add_surface_from_arrays()).


void surface_remove(surf_idx: int) 🔗

Supprime la surface à l'index donné du maillage, en décalant les surfaces avec un index plus élevé d'un vers le bas.


void surface_set_name(surf_idx: int, name: String) 🔗

Définit le nom donné à cette surface.


void surface_update_attribute_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

Updates the attribute buffer of this mesh's surface with the given data. The expected data per attribute is 12 or 8 bytes (4 bytes per float, 2 floats per Vector2, and 3 floats per Vector3) depending on if the mesh is using Vector3 or Vector2 vertices. This value can be determined with RenderingServer.mesh_surface_get_format_attribute_stride().

The starting point of the updates can be changed with offset. The value of offset should be a multiple of 12 bytes in most cases to align to each attribute.

A PackedVector3Array of attribute locations can be converted into a PackedByteArray using PackedVector3Array.to_byte_array() for use in data.


void surface_update_skin_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

Updates the skin buffer of this mesh's surface with the given data. The expected data per skin is 12 or 8 bytes (4 bytes per float, 2 floats per Vector2, and 3 floats per Vector3) depending on if the mesh is using Vector3 or Vector2 vertices. This value can be determined with RenderingServer.mesh_surface_get_format_skin_stride().

The starting point of the updates can be changed with offset. The value of offset should be a multiple of 12 bytes in most cases to align to each skin.

A PackedVector3Array of skin locations can be converted into a PackedByteArray using PackedVector3Array.to_byte_array() for use in data.


void surface_update_vertex_region(surf_idx: int, offset: int, data: PackedByteArray) 🔗

Updates the vertex buffer of this mesh's surface with the given data. The expected data per vertex is 12 or 8 bytes (4 bytes per float, 2 floats per Vector2, and 3 floats per Vector3) depending on if the mesh is using Vector3 or Vector2 vertices. This value can be determined with RenderingServer.mesh_surface_get_format_vertex_stride().

The starting point of the updates can be changed with offset. The value of offset should be a multiple of 12 bytes in most cases to align to each vertex.

A PackedVector3Array of vertex locations can be converted into a PackedByteArray using PackedVector3Array.to_byte_array() for use in data.