Mesh

继承: Resource < RefCounted < Object

派生: ArrayMesh, ImmediateMesh, PlaceholderMesh, PrimitiveMesh

包含基于顶点数组的几何的Resource

描述

网格是一种Resource,包含基于顶点数组的几何体,划分为个表面。每个表面都包含一个完全独立的数组和用于绘制它的材质。在设计方面,具有多个表面的网格比单个表面更受欢迎,因为在3D编辑软件中创建的对象通常包含多个材质。每个网格的最大表面数是RenderingServer.MAX_MESH_SURFACES

属性

Vector2i

lightmap_size_hint

Vector2i(0, 0)

方法

AABB

_get_aabb() virtual const

int

_get_blend_shape_count() virtual const

StringName

_get_blend_shape_name(index: int) virtual const

int

_get_surface_count() virtual const

void

_set_blend_shape_name(index: int, name: StringName) virtual

int

_surface_get_array_index_len(index: int) virtual const

int

_surface_get_array_len(index: int) virtual const

Array

_surface_get_arrays(index: int) virtual const

Array[Array]

_surface_get_blend_shape_arrays(index: int) virtual const

int

_surface_get_format(index: int) virtual const

Dictionary

_surface_get_lods(index: int) virtual const

Material

_surface_get_material(index: int) virtual const

int

_surface_get_primitive_type(index: int) virtual const

void

_surface_set_material(index: int, material: Material) virtual

ConvexPolygonShape3D

create_convex_shape(clean: bool = true, simplify: bool = false) const

Mesh

create_outline(margin: float) const

Resource

create_placeholder() const

ConcavePolygonShape3D

create_trimesh_shape() const

TriangleMesh

generate_triangle_mesh() const

AABB

get_aabb() const

PackedVector3Array

get_faces() const

int

get_surface_count() const

Array

surface_get_arrays(surf_idx: int) const

Array[Array]

surface_get_blend_shape_arrays(surf_idx: int) const

Material

surface_get_material(surf_idx: int) const

void

surface_set_material(surf_idx: int, material: Material)


枚举

enum PrimitiveType: 🔗

PrimitiveType PRIMITIVE_POINTS = 0

将数组渲染为点(一个顶点等于一个点)。

PrimitiveType PRIMITIVE_LINES = 1

将数组渲染为线(每两个顶点创建一条线)。

PrimitiveType PRIMITIVE_LINE_STRIP = 2

将数组渲染为线段。

PrimitiveType PRIMITIVE_TRIANGLES = 3

将数组渲染为三角形(每三个顶点创建一个三角形)。

PrimitiveType PRIMITIVE_TRIANGLE_STRIP = 4

将数组渲染为三角形条带。


enum ArrayType: 🔗

ArrayType ARRAY_VERTEX = 0

顶点位置的PackedVector3ArrayPackedVector2ArrayArray

ArrayType ARRAY_NORMAL = 1

顶点法线的PackedVector3Array

注意:数组必须由法向量组成,否则它们将被引擎归一化,从而可能导致视觉差异。

ArrayType ARRAY_TANGENT = 2

顶点切线的PackedFloat32Array。每个元素每组4个浮点数,前3个浮点数决定切线,最后一个副法线方向为-1或1。

ArrayType ARRAY_COLOR = 3

顶点颜色的PackedColorArray

ArrayType ARRAY_TEX_UV = 4

PackedVector2Array用于UV坐标。

ArrayType ARRAY_TEX_UV2 = 5

PackedVector2Array用于第二个UV坐标。

ArrayType ARRAY_CUSTOM0 = 6

包含自定义颜色通道0。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM0_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASKARRAY_CUSTOM_RGBA8_UNORMARRAY_CUSTOM_RGBA8_SNORMARRAY_CUSTOM_RG_HALFARRAY_CUSTOM_RGBA_HALFPackedFloat32Array否则。

ArrayType ARRAY_CUSTOM1 = 7

包含自定义颜色通道1。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM1_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASKARRAY_CUSTOM_RGBA8_UNORMARRAY_CUSTOM_RGBA8_SNORMARRAY_CUSTOM_RG_HALFARRAY_CUSTOM_RGBA_HALFPackedFloat32Array否则。

ArrayType ARRAY_CUSTOM2 = 8

包含自定义颜色通道2。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM2_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASKARRAY_CUSTOM_RGBA8_UNORMARRAY_CUSTOM_RGBA8_SNORMARRAY_CUSTOM_RG_HALFARRAY_CUSTOM_RGBA_HALFPackedFloat32Array否则。

ArrayType ARRAY_CUSTOM3 = 9

包含自定义颜色通道3。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM3_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASKARRAY_CUSTOM_RGBA8_UNORMARRAY_CUSTOM_RGBA8_SNORMARRAY_CUSTOM_RG_HALFARRAY_CUSTOM_RGBA_HALFPackedFloat32Array否则。

ArrayType ARRAY_BONES = 10

骨索引的PackedFloat32ArrayPackedInt32Array。每个顶点包含4或8个数字,具体取决于ARRAY_FLAG_USE_8_BONE_WEIGHTS标志的存在。

ArrayType ARRAY_WEIGHTS = 11

PackedFloat32ArrayPackedFloat64Array0.01.0(包括)范围内的骨骼权重。每个顶点包含4或8个数字,具体取决于ARRAY_FLAG_USE_8_BONE_WEIGHTS标志的存在。

ArrayType ARRAY_INDEX = 12

整数的PackedInt32Array,用作引用顶点、颜色、法线、切线和纹理的索引。所有这些数组必须具有与顶点数组相同数量的元素。没有索引可以超过顶点数组的大小。当这个索引数组存在时,它将函数置于“索引模式”,其中索引选择i的第1个顶点、法线、切线、颜色、UV等。这意味着如果你想沿着一条边有不同的法线或颜色,你必须复制顶点。

对于三角形,索引数组被解释为三元组,指的是每个三角形的顶点。对于线,索引数组成对表示每行的开始和结束。

ArrayType ARRAY_MAX = 13

表示ArrayType枚举的大小。


enum ArrayCustomFormat: 🔗

ArrayCustomFormat ARRAY_CUSTOM_RGBA8_UNORM = 0

指示此自定义通道包含从0到1的无符号规范化字节颜色,编码为PackedByteArray

ArrayCustomFormat ARRAY_CUSTOM_RGBA8_SNORM = 1

指示此自定义通道包含从-1到1的有符号规范化字节颜色,编码为PackedByteArray

ArrayCustomFormat ARRAY_CUSTOM_RG_HALF = 2

指示此自定义通道包含半精度浮点颜色,编码为PackedByteArray。仅使用红色和绿色通道。

ArrayCustomFormat ARRAY_CUSTOM_RGBA_HALF = 3

指示此自定义通道包含半精度浮点颜色,编码为PackedByteArray

ArrayCustomFormat ARRAY_CUSTOM_R_FLOAT = 4

指示此自定义通道在PackedFloat32Array中包含完整的浮点颜色。仅使用红色通道。

ArrayCustomFormat ARRAY_CUSTOM_RG_FLOAT = 5

指示此自定义通道在PackedFloat32Array中包含完整的浮点颜色。仅使用红色和绿色通道。

ArrayCustomFormat ARRAY_CUSTOM_RGB_FLOAT = 6

指示此自定义通道在PackedFloat32Array中包含完整的浮点颜色。仅使用红色、绿色和蓝色通道。

ArrayCustomFormat ARRAY_CUSTOM_RGBA_FLOAT = 7

指示此自定义通道在PackedFloat32Array中包含完整的浮点颜色。

ArrayCustomFormat ARRAY_CUSTOM_MAX = 8

表示ArrayCustomFormat枚举的大小。


flags ArrayFormat: 🔗

ArrayFormat ARRAY_FORMAT_VERTEX = 1

网格数组包含顶点。所有网格都需要一个顶点数组,因此它应该始终存在。

ArrayFormat ARRAY_FORMAT_NORMAL = 2

网格数组包含法线。

ArrayFormat ARRAY_FORMAT_TANGENT = 4

网格数组包含切线。

ArrayFormat ARRAY_FORMAT_COLOR = 8

网格数组包含颜色。

ArrayFormat ARRAY_FORMAT_TEX_UV = 16

网格数组包含UV。

ArrayFormat ARRAY_FORMAT_TEX_UV2 = 32

网格阵列包含第二个UV。

ArrayFormat ARRAY_FORMAT_CUSTOM0 = 64

网格数组包含自定义通道索引0。

ArrayFormat ARRAY_FORMAT_CUSTOM1 = 128

网格数组包含自定义通道索引1。

ArrayFormat ARRAY_FORMAT_CUSTOM2 = 256

网格数组包含自定义通道索引2。

ArrayFormat ARRAY_FORMAT_CUSTOM3 = 512

网格数组包含自定义通道索引3。

ArrayFormat ARRAY_FORMAT_BONES = 1024

网格阵列包含骨骼。

ArrayFormat ARRAY_FORMAT_WEIGHTS = 2048

网格数组包含骨骼权重。

ArrayFormat ARRAY_FORMAT_INDEX = 4096

网格数组使用索引。

ArrayFormat ARRAY_FORMAT_BLEND_SHAPE_MASK = 7

混合形状允许的网格通道掩模。

ArrayFormat ARRAY_FORMAT_CUSTOM_BASE = 13

第一个自定义频道的转变。

ArrayFormat ARRAY_FORMAT_CUSTOM_BITS = 3

每个自定义通道的格式位数。请参阅ArrayCustomFormat

ArrayFormat ARRAY_FORMAT_CUSTOM0_SHIFT = 13

用于自定义通道索引0的shiftArrayCustomFormat的数量。

ArrayFormat ARRAY_FORMAT_CUSTOM1_SHIFT = 16

用于自定义通道索引1的shiftArrayCustomFormat的数量。

ArrayFormat ARRAY_FORMAT_CUSTOM2_SHIFT = 19

用于自定义通道索引2的shiftArrayCustomFormat的数量。

ArrayFormat ARRAY_FORMAT_CUSTOM3_SHIFT = 22

用于自定义通道索引3的shiftArrayCustomFormat的数量。

ArrayFormat ARRAY_FORMAT_CUSTOM_MASK = 7

每个自定义通道的自定义格式位掩码。必须由SHIFT常量之一移动。请参阅ArrayCustomFormat

ArrayFormat ARRAY_COMPRESS_FLAGS_BASE = 25

第一个压缩标志的移动。压缩标志应传递给ArrayMesh.add_surface_from_arrays()SurfaceTool.commit()

ArrayFormat ARRAY_FLAG_USE_2D_VERTICES = 33554432

用于标记数组包含2D顶点的标志。

ArrayFormat ARRAY_FLAG_USE_DYNAMIC_UPDATE = 67108864

标记网格数据将在GLES上使用GL_DYNAMIC_DRAW的索引。在Vulkan上未使用。

ArrayFormat ARRAY_FLAG_USE_8_BONE_WEIGHTS = 134217728

用于标记网格每个顶点最多包含8个骨骼影响的标志。此标志表示ARRAY_BONESARRAY_WEIGHTS元素将具有双倍长度。

ArrayFormat ARRAY_FLAG_USES_EMPTY_VERTEX_ARRAY = 268435456

用于标记网格故意不包含顶点数组的标志。

ArrayFormat ARRAY_FLAG_COMPRESS_ATTRIBUTES = 536870912

用于标记网格正在使用压缩属性(顶点、法线、切线、UV)的标志。启用这种形式的压缩时,顶点位置将被打包到RGBA16UNORM属性中,并在顶点着色器中缩放。法线和切线将被打包到表示轴的RG16UNORM中,以及存储在顶点A通道中的16位浮点数。UV将使用16位规范化浮点数,而不是完整的32位有符号浮点数。使用这种压缩模式时,您必须使用顶点、法线和切线或仅使用顶点。您不能使用没有切线的法线。如果可以,导入器将自动启用此压缩。


enum BlendShapeMode: 🔗

BlendShapeMode BLEND_SHAPE_MODE_NORMALIZED = 0

混合形状被规范化。

BlendShapeMode BLEND_SHAPE_MODE_RELATIVE = 1

混合形状相对于基本重量。


属性说明

Vector2i lightmap_size_hint = Vector2i(0, 0) 🔗

  • void set_lightmap_size_hint(value: Vector2i)

  • Vector2i get_lightmap_size_hint()

设置用于光照贴图解析的提示。


方法说明

AABB _get_aabb() virtual const 🔗

为扩展Mesh的自定义类覆盖AABB的虚拟方法。


int _get_blend_shape_count() virtual const 🔗

用于覆盖扩展Mesh的自定义类的混合形状数量的虚拟方法。


StringName _get_blend_shape_name(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖混合形状名称的检索的虚拟方法。


int _get_surface_count() virtual const 🔗

用于覆盖扩展Mesh的自定义类的曲面计数的虚拟方法。


void _set_blend_shape_name(index: int, name: StringName) virtual 🔗

用于覆盖扩展Mesh的自定义类的混合形状名称的虚拟方法。


int _surface_get_array_index_len(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖表面数组索引长度的虚拟方法。


int _surface_get_array_len(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖表面数组长度的虚拟方法。


Array _surface_get_arrays(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖表面数组的虚拟方法。


Array[Array] _surface_get_blend_shape_arrays(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖混合形状数组的虚拟方法。


int _surface_get_format(index: int) virtual const 🔗

用于覆盖扩展Mesh的自定义类的表面格式的虚拟方法。


Dictionary _surface_get_lods(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖表面LOD的虚拟方法。


Material _surface_get_material(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖表面材质的虚拟方法。


int _surface_get_primitive_type(index: int) virtual const 🔗

为扩展Mesh的自定义类覆盖表面基元类型的虚拟方法。


void _surface_set_material(index: int, material: Material) virtual 🔗

为扩展Mesh的自定义类覆盖给定index处的material设置的虚拟方法。


ConvexPolygonShape3D create_convex_shape(clean: bool = true, simplify: bool = false) const 🔗

从网格计算ConvexPolygonShape3D

如果cleantrue(默认),则会自动删除重复顶点和内部顶点。如果不需要,您可以将其设置为false以使过程更快。

如果simplifytrue,则可以进一步简化几何以减少顶点数量。默认禁用。


Mesh create_outline(margin: float) const 🔗

从原始网格计算定义偏移量(边距)的轮廓网格。

注意:此方法通常以相反的顺序返回顶点(例如顺时针到逆时针)。


Resource create_placeholder() const 🔗

创建此资源的占位符版本(PlaceholderMesh)。


ConcavePolygonShape3D create_trimesh_shape() const 🔗

从网格计算ConcavePolygonShape3D


TriangleMesh generate_triangle_mesh() const 🔗

从网格生成TriangleMesh。仅考虑使用以下原始类型之一的表面:PRIMITIVE_TRIANGLESPRIMITIVE_TRIANGLE_STRIP


AABB get_aabb() const 🔗

返回局部空间中包围此网格的最小AABB。不受custom_aabb的影响。

注意:这仅针对ArrayMeshPrimitiveMesh实现。


PackedVector3Array get_faces() const 🔗

返回构成网格面的所有顶点。每个三个顶点代表一个三角形。


int get_surface_count() const 🔗

返回Mesh包含的表面数。这等效于MeshRender.get_surface_override_material_count()


Array surface_get_arrays(surf_idx: int) const 🔗

返回构成请求曲面的顶点、法线、UV等的数组(参见ArrayMesh.add_surface_from_arrays())。


Array[Array] surface_get_blend_shape_arrays(surf_idx: int) const 🔗

返回请求曲面的混合形状数组。


Material surface_get_material(surf_idx: int) const 🔗

返回给定表面中的Material。使用此材质渲染表面。

注意:这将返回Mesh资源中的材质,而不是与MeshRender的表面材质覆盖属性关联的Material。要获取与MeshRender的表面材质覆盖属性关联的Material,请改用MeshRender.get_surface_override_material()


void surface_set_material(surf_idx: int, material: Material) 🔗

为给定表面设置Material。表面将使用此材质渲染。

注意:这将分配Mesh资源中的材质,而不是与MeshRender的Surface Material Overrid属性关联的Material。要设置与MeshRender的Surface Material Overrid属性关联的Material,请改用MeshRender.set_surface_override_material()