TressFX 3.1

首次发布时间:

我们发布 TressFX 3.1。本次发布中我们最大的更新是新增了一个我们称之为“ShortCut”的独立于顺序的透明度 (OIT) 选项。我们还解决了一些社区反馈的问题。

ShortCut

tressfx_3_1_shortcut_comparison

ShortCut 是我们新的独立于顺序的透明度 (OIT) 选项。它借鉴了 Eidos-Montréal 提出的方法Hybrid Transparency。我们原来的方法侧重于前 k ≈ 8 层头发,而 ShortCut 则适用于 k = 2 或 3 层就可以满足要求的场景,并且更关注内存使用量。

然而,它确实需要提前考虑如何构建模型,因为它具有不同的性能特征和质量权衡。但考虑到更简单的内存限制和潜在的更高性能,我们预计它将是一个受欢迎的选择。

下面概述了四个主要步骤。

  1. 渲染头发几何体,使用一系列 InterlockedMin 调用来更新 k 个最近片段的列表,同时计算总体 alpha。
  2. 屏幕空间传递,将 _k_ 个最近的深度放入深度缓冲区,以便在下一步进行早期 z 剔除。
  3. 再次渲染头发几何体。对片段进行着色,并(根据变体)写入或混合颜色。[earlydepthstencil] 将着色成本集中在前 k 层。
  4. 屏幕空间传递,完成最终混合。

使用原始方法,您需要分配一个足够大的内存池来容纳所有头发片段,而不仅仅是前 k 层。使用 ShortCut,您只需要为前 k 层分配空间:每层深度 4 字节,每层颜色 4 字节,以及每个像素累积的 alpha 项 4 字节。与我们以前的方法另一个不同之处在于,虽然您仍然可以获得仅为前 k 层着色的性能优势,但您不需要在屏幕空间存储着色器输入。

ShortCut 的主要缺点是额外的几何体传递。但当深度复杂度相对于几何体成本较高时,它仍然是性能上的胜利,正如所包含的“马尾”模型所示。它也无法提供与逐像素链表 (PPLL) 方法完全相同的质量结果。但是,只要您了解这些权衡,就应该能够在此约束下创建效果良好的内容。

我们还包含了一些额外的编译时选项。默认版本使用 k = 3。一个编译时开关将其更改为 k = 2。还有一个编译时开关用于非确定性模式,该模式在某些配置下可以提高性能,因此我们提供了此选项。

与 GitHub 社区的合作

我们收到了社区的一些精彩反馈。本次更新还解决了他们提出的一些问题。

一个问题是由于帧率超过 60 Hz 时跳过模拟步骤造成的。这导致熊身上的毛发有时会与下方的网格分离,因为动画会前进,但模拟不会。此问题由 mrgreywater 发现,他甚至还为我们提供了 修复方案!在此次发布中,我们提供了另一种选择,这种选择也使得 ShortCut 方法的性能稍好一些。

我们还在改进库结构和 API,以便更容易集成到引擎中。我们已收到社区关于这些问题的精彩反馈(1314)。这些更改仍在进行中,但我们欢迎更多输入。

© . This site is unofficial and not affiliated with AMD.