Mesh¶
继承: Resource < RefCounted < Object
派生: ArrayMesh, ImmediateMesh, PlaceholderMesh, PrimitiveMesh
包含基于顶点数组的几何的Resource。
描述¶
网格是一种Resource,包含基于顶点数组的几何体,划分为个表面。每个表面都包含一个完全独立的数组和用于绘制它的材质。在设计方面,具有多个表面的网格比单个表面更受欢迎,因为在3D编辑软件中创建的对象通常包含多个材质。每个网格的最大表面数是RenderingServer.MAX_MESH_SURFACES。
属性¶
|
方法¶
枚举¶
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
顶点位置的PackedVector3Array、PackedVector2Array或Array。
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_MASK是ARRAY_CUSTOM_RGBA8_UNORM、ARRAY_CUSTOM_RGBA8_SNORM、ARRAY_CUSTOM_RG_HALF或ARRAY_CUSTOM_RGBA_HALF。PackedFloat32Array否则。
ArrayType ARRAY_CUSTOM1 = 7
包含自定义颜色通道1。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM1_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASK是ARRAY_CUSTOM_RGBA8_UNORM、ARRAY_CUSTOM_RGBA8_SNORM、ARRAY_CUSTOM_RG_HALF或ARRAY_CUSTOM_RGBA_HALF。PackedFloat32Array否则。
ArrayType ARRAY_CUSTOM2 = 8
包含自定义颜色通道2。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM2_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASK是ARRAY_CUSTOM_RGBA8_UNORM、ARRAY_CUSTOM_RGBA8_SNORM、ARRAY_CUSTOM_RG_HALF或ARRAY_CUSTOM_RGBA_HALF。PackedFloat32Array否则。
ArrayType ARRAY_CUSTOM3 = 9
包含自定义颜色通道3。PackedByteArrayif(format>>Mesh.ARRAY_FORMAT_CUSTOM3_SHIFT)&Mesh。ARRAY_FORMAT_CUSTOM_MASK是ARRAY_CUSTOM_RGBA8_UNORM、ARRAY_CUSTOM_RGBA8_SNORM、ARRAY_CUSTOM_RG_HALF或ARRAY_CUSTOM_RGBA_HALF。PackedFloat32Array否则。
ArrayType ARRAY_BONES = 10
骨索引的PackedFloat32Array或PackedInt32Array。每个顶点包含4或8个数字,具体取决于ARRAY_FLAG_USE_8_BONE_WEIGHTS标志的存在。
ArrayType ARRAY_WEIGHTS = 11
PackedFloat32Array或PackedFloat64Array在0.0到1.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_BONES和ARRAY_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) 🔗
设置用于光照贴图解析的提示。
方法说明¶
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。
如果clean为true(默认),则会自动删除重复顶点和内部顶点。如果不需要,您可以将其设置为false以使过程更快。
如果simplify为true,则可以进一步简化几何以减少顶点数量。默认禁用。
Mesh create_outline(margin: float) const 🔗
从原始网格计算定义偏移量(边距)的轮廓网格。
注意:此方法通常以相反的顺序返回顶点(例如顺时针到逆时针)。
Resource create_placeholder() const 🔗
创建此资源的占位符版本(PlaceholderMesh)。
ConcavePolygonShape3D create_trimesh_shape() const 🔗
从网格计算ConcavePolygonShape3D。
TriangleMesh generate_triangle_mesh() const 🔗
从网格生成TriangleMesh。仅考虑使用以下原始类型之一的表面:PRIMITIVE_TRIANGLES、PRIMITIVE_TRIANGLE_STRIP。
返回局部空间中包围此网格的最小AABB。不受custom_aabb的影响。
注意:这仅针对ArrayMesh和PrimitiveMesh实现。
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()。