TressFX
TressFX 库是 AMD 的头发/毛发渲染和模拟技术。TressFX 旨在利用 GPU 来模拟和渲染高质量、逼真的头发和毛发。
TressFX 4 引入了多项改进。本文博客重点介绍其中三项,它们都与模拟相关。
我们在示例代码中还包含了一些额外的功能。虽然不直接属于 TressFX,但您可能会觉得它们有用。它们是:
TressFX 3 引入了毛发支持,这意味着每个毛发根部都可以随着下方蒙皮网格而移动。这是通过将蒙皮后的三角形流式传输出来,然后使用这些三角形来计算根部毛发的变换来实现的。这种方法很棒,因为它非常通用——无论顶点如何被蒙皮,它都可以处理,例如,它也可以处理形变(blend shapes)。缺点是它依赖于知道哪个三角形控制哪个毛发,这在从 Maya® 导出毛发时指定。如果网格发生变化或重新排序,或者由于材质分配而以不同的方式分割,则还需要重新映射毛发索引。此外,从三角形导出变换以用于毛发的运行时成本相当高。
在 TressFX 4 中,我们切换到了一个更直接的蒙皮模型,类似于 Monster Hunter Online 中使用的模型。导出毛发时,您像以前一样选择网格,但不是导出三角形分配列表,而是为每个毛发根部导出骨骼索引和权重。此外,还有一个骨骼名称表,以便它们可以轻松地映射到引擎的骨骼索引。

动态有符号距离场生成可实现高保真碰撞响应。
我们对模拟最大的功能添加是引入了一个动态有符号距离场碰撞系统。这使得高保真地与动态动画、蒙皮网格进行碰撞成为可能。
包含的演示程序会生成三个有符号距离场——一个用于身体,一个用于我们蒙皮角色的每只手。将其分解可以让我们在需要的地方集中分辨率。例如,我们想展示对单个手指的响应。每个有符号距离场都会在每一帧更新。
SSH 是 TressFX 4 中的另一项新功能。其主要目的是处理快速移动的动画。当角色改变速度或方向时,会产生高加速度,从而产生很大的外部力。由于 TressFX 毛发模拟使用基于迭代的约束求解器,当施加高加速度时,毛发很容易失去其物理正确的形状并显示出令人不快的拉伸。SSH 通过根据加权因子将加速度从毛发根部传播到尖端来缓解这些问题。加权因子在零和一之间变化。当为一 时,毛发将完全刚性地移动——从而为完全模拟提供了一种模拟细节级别 (LOD) 的替代方案。除了权重之外,还有一个阈值设置,仅在快速运动时启用它。
快速运动会导致拉伸。突发冲击处理能更好地处理这些情况,并提供一种模拟细节级别 (LOD)。

快速运动会导致拉伸。突发冲击处理能更好地处理这些情况,并提供一种模拟细节级别 (LOD)。
示例代码还包含了一些额外的内容。其中之一是基于计算的蒙皮系统,包括一个 Maya 导出器,它可以导出网格几何以及蒙皮权重。我们使用它来蒙皮作为有符号距离场系统输入的网格。
为了帮助可视化有符号距离场,我们还包含了一个基于计算的 Marching Cubes 可视化系统。
我们已经涵盖了 TressFX 4 模拟中的大部分改动,从现有方法的改进(基于骨骼的蒙皮),新功能(SDF 碰撞和突发冲击传播),以及示例代码中的一些相关部分(基于计算的蒙皮和 Marching Cubes)。我们还有许多其他改动和新增功能,希望能在后续的帖子中介绍。