我用 JavaScript 编写了一个布料模拟程序(见链接),我想用它来以编程方式控制角色的头发和衣服。也就是说,我会在网格上“固定”一些向量,根据运动/重力/力实时获取枢轴点,然后将它们应用于网格。我没有使用自定义布料模拟器,因为它们没有给我所需的完全控制权。
在网格上应用我生成的矢量的最佳方法是什么?我应该用骨头还是什么?我正在尝试使用 Three.js 来做到这一点,但它不是为此而设计的。我正在尝试做的事情是否有合适的工具?实际上,我正在尝试做什么?
3d 中的头发管理是一项非常艰巨的任务,它将大量模拟与大量伪造混合在一起。如果您只需要一点点运动就可以使传统的发网看起来不像静态的那么您可以使用带有固定点的高阻尼软体模拟器。然而,这很少看起来很逼真——它只是没有头盔头发那么不切实际。逼真的头发渲染是一项非常复杂的业务 -迪士尼的这个 pdf提供了一个很好的例子,说明了电影制作必须达到的长度(同一网站也有很好的头发渲染参考,标准着色模型不能很好地处理)
VFX 渲染中的一个常见技巧是模拟股的子集,然后在附近的模拟股之间插入其余部分。这使计算成本保持在合理范围内。您可以尝试 - 将引导毛发模拟为简单的骨骼链,并通过链中的关节绘制 b 样条线,然后使用引导样条线作为大量插值的基础。根据您的渲染器,这些样条线可以渲染为线段或带有 alpha 纹理的纹理色带,以赋予它们正确的外观。这是Blender 中有限模拟方法的示例
但是,很难想象在JS中做一个彻底的头发模拟,模拟非常耗时。这通常不是实时完成的:您会注意到,目前很少有游戏实时进行头发或详细的布料模拟。
通常的电影/电视方法是创建一组手动编辑的指南(两条样条线用于引导头发和“力场”来塑造它),然后运行冗长的离线模拟。例如,Maya包括头发渲染,但大多数真正关心的作品都使用专用插件,例如Shave And A Haircut。