1

背景


我正在开发一个用户被 Kinect (v2) 扫描的项目。结果将是生成的适合在游戏中使用的 3D 模型。

扫描方面进展顺利,我已经生成了一些很好的用户模型。
示例: 用户的 3D 模型 注意:这只是一个早期的测试模型。它仍然需要清理,并且需要更改姿态以正确读取骨骼数据。


问题


我目前面临的问题是我不确定如何将骨骼数据放入生成的 3D 模型中。我似乎找不到可以让我以编程方式将骨架插入 3D 模型的程序。我想通过我可以以编程方式控制的程序来执行此操作,或者以使骨骼数据包含在文件中的方式调整 3D 模型文件。


我试过什么


我一直在 Google 和 StackOverflow 上寻找类似的问题,但它们通常指的是动作捕捉或骨骼动画。我知道 Maya 可以选择在 3D 模型中插入骨架,但据我所知,这始终是手工完成的。对于我要解决的问题,也许有一个更专业的术语,但我不知道。

关于如何实现骨架插入,我确实有一个思路。我想象它是这样的:

  1. 扫描用户并使用 Kinect 生成 3D 模型;

    1.2. 清理用户模型,消除任何变形或不必要的信息。关闭清理过程中留下的孔。

  2. 使用 Kinect 扫描用户骨骼数据。

    2.2. 提取骨架数据。
    2.3. 获取关节位置并存储为 3D 空间的 xyz 坐标。存储骨骼长度和方向。

  3. 在可以创建骨架的程序中读取 3D 骨架数据。

  4. 保存带有插入骨架的新模型。


问题


任何人都可以推荐(我知道,这可能是“基于意见”)一个程序来读取骨骼数据并将其插入到 3D 模型中吗?是否可以为此目的使用 Maya?

提前致谢。

注意:我选择在这里而不是在 Graphics Design Stack Exchange(或其他 Stack Exchange 站点)上发布问题,因为我觉得它与编码更相关,也许对将来会在这里搜索的人更有用。抱歉,如果它发布在错误的网站上。

4

1 回答 1

0

您问题的一个棘手部分是“插入骨架”的意思。通常,骨骼数据与您的几何图形非常分离,并存储在场景图中的不同位置(骨骼数据本质上是分层的)。

您可以将文件格式导出到您可以在几何体和骨架之间建立某种关联的位置,但对于如何将两者关联在一起(例如:FBX 与 Collada),这是非常特定于格式的。

可能最接近“插入”或更恰当地说,将骨架“附加”到网格上的是蒙皮。在那里您计算权重分配,基本上确定每个骨骼对网格中给定顶点的影响程度。

这是一个很难做到的部分(无论是在程序上还是在艺术上),并且根据您的质量需求,通常是一个半自动的解决方案,最多可以满足最高质量的需求(商业游戏、电影等),艺术家们正在努力调整由此产生的权重分配和/或骨架。

有些算法在确定这些权重分配时变得非常复杂,从简单的启发式算法,例如仅根据最近的线距离分配权重(非常粗糙,并且通常会在骨盆或肩部等棘手区域附近分崩离析)或实际考虑网格的算法作为一个实体体积(使用体素或四面体表示)来尝试分配权重。示例:http ://blog.wolfire.com/2009/11/volumetric-heat-diffusion-skinning/

但是,您可能能够使用诸如 delta mush 之类的算法获得不错的结果,该算法允许您在权重分配方面有点草率,但仍然可以获得相当平滑的变形。

现在,如果您想在外部执行此操作,几乎任何 3D 动画软件都可以,包括 Blender 等免费软件。然而,一般来说,皮肤和角色动画往往需要相当多的艺术技巧和很大的耐心,所以值得注意的是,让角色跳跃、跳舞、蹲下和奔跑并不像看起来那么容易即使您提前拥有骨架,仍然看起来不错。从骨架到几何的重量关联是最困难的部分。这通常是艺术家花费数小时努力处理变形以使它们在各种姿势中看起来正确的结果。

于 2015-05-30T11:46:06.120 回答