You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Skeleton3D中与指定网格绑定的带权重骨骼?

获取绑定到目标网格的专属骨骼(Godot 环境)

由于你的每个网格都完全权重绑定到单个骨骼,可以通过以下几种高效方式定位对应的骨骼:

方法1:从Mesh的Skin资源提取(通用可靠)

带权重的网格都会关联Skin资源,其中存储了骨骼绑定的权重数据。因为所有顶点都绑定到同一骨骼,只需检查任意一个顶点的权重即可:

Godot 4 代码示例

func get_assigned_bone(mesh_instance: MeshInstance3D) -> BoneAttachment3D:
    var skeleton = mesh_instance.get_skeleton()
    if not skeleton:
        return null
    
    var skin = mesh_instance.mesh.skin
    if not skin:
        return null
    
    # 取第一个顶点的权重数据(所有顶点权重一致)
    var weights = skin.get_weights(0)
    for bone_idx in weights.size():
        # 用0.99阈值避免浮点精度误差
        if weights[bone_idx] > 0.99:
            var bone_name = skeleton.get_bone_name(bone_idx)
            return skeleton.find_child(bone_name, true, false) as BoneAttachment3D
    return null

Godot 3 代码示例

func get_assigned_bone(mesh_instance: MeshInstance) -> BoneAttachment:
    var skeleton = mesh_instance.get_skeleton()
    if not skeleton:
        return null
    
    var skin = mesh_instance.mesh.skin
    if not skin:
        return null
    
    var weights = skin.get_weights(0)
    for bone_idx in range(weights.size()):
        if weights[bone_idx] > 0.99:
            var bone_name = skeleton.get_bone_name(bone_idx)
            return skeleton.find_child(bone_name, true, false) as BoneAttachment
    return null

方法2:利用命名规范快速匹配(适合有统一命名规则的场景)

如果你的网格和对应骨骼有固定命名关联(比如网格名Mesh_Arm对应骨骼名Bone_Arm),可以直接通过名称查找:

func get_assigned_bone_by_name(mesh_instance: MeshInstance3D) -> BoneAttachment3D:
    var skeleton = mesh_instance.get_skeleton()
    if not skeleton:
        return null
    
    # 根据你的命名规则调整替换逻辑
    var bone_name = "Bone_" + mesh_instance.name.replace("Mesh_", "")
    return skeleton.find_child(bone_name, true, false) as BoneAttachment3D

注意事项

  • 无需遍历所有顶点,取任意一个顶点的权重即可,大幅节省性能。
  • 使用0.99而非1.0作为阈值,避免导出或编辑过程中浮点精度导致的判断错误。
  • 如果网格未关联Skin(手动绑定场景),可通过MeshInstance的skeleton属性,结合骨骼绑定关系反向排查。

内容的提问来源于stack exchange,提问作者Manas R. Makde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 08:55:02