V-Ray 3.5 for 3ds Max 的 V-Ray GPU 功能改进


Dabarti 工作室制作的短片,里面使用了许多即将推出的 V-Ray 3.5 for 3ds Max 的新功能

引言:

随着我们不断改进 V-Ray,GPU 渲染一直是我们的开发重点,即将推出的 3ds Max(以及其他平台)的 3.5 版本也不例外。这篇博文将概述自 3.4 版以来 GPU 渲染的主要变化。

自适应灯光(Adaptive Lights,简称 AL):

我们之前已经发过一篇文章,讨论了如何添加自适应灯光到 V-Ray 3.5 中的大致思路。在那篇博客文章中,我们都看到了,这种新的计算方法,在面对含有大量灯光(100或更多)的场景时,其渲染效率比 3.0 版本引入的概率灯算法(probabilistic)提高了三倍。

自适应灯光实际上最初是为 GPU 渲染所设计的。事实上,它是一种基于路径跟踪(path tracing)的新型无偏差光照算法(unbiased lighting algorithm),在 Active Shade(或 IPR)以及产品渲染模式下均可运作。这种新算法在我们测试的大部分场景中都能显著提升性能,无论场景中有多少个灯光。在某些场景下,几乎可以使用无数多个光线,速度快好几倍。

另外,当在 GPU 上渲染时,灯光缓存(Light Cache)的预计算(prepass)不是必需的,因此即便只使用了 brute force GI,您仍然可以用这个功能来加速渲染。

我们任职于 Dabarti 工作室的好朋友 Tomasz Wyszolmirski 先生,在不同场景中使用不同的方法进行了多次测试。以下是这些测试的结果:

由 Dabarti 工作室进行的自适应灯光测试1——以四张 NVIDIA Titan X (maxwell)显卡渲染。

算10帧动画的总渲染时间:

  • BF + BF 不使用 AL: 00:24:20
  • BF + BF 使用 AL: 00:10:03
  • 使用 AL 配合 BF + BF 增加的渲染速度:142%
  • BF + LC 不使用 AL: 00:26:51
  • BF + LC 使用 AL: 00:18:15
  • 使用 AL 配合 BF + LC 增加的渲染速度:47%

由 Dabarti 工作室进行的自适应灯光测试2——以四张 NVIDIA GeForce 980ti 显卡渲染。

算10帧动画的总渲染时间:

  • BF + BF 不使用 AL: 04:44:21
  • BF + BF 使用 AL: 01:00:01
  • 使用 AL 配合 BF + BF 增加的渲染速度:373%
  • BF + LC 不使用 AL: 01:29:43
  • BF + LC 使用 AL: 00:30:44
  • 使用 AL 配合 BF + LC 增加的渲染速度:191%

由 Dabarti 工作室进行的自适应灯光测试3——以四张 NVIDIA Titan X (maxwell)显卡渲染。

算10帧动画的总渲染时间:

  • BF + BF 不使用 AL: 07:33:39
  • BF + BF 使用 AL: 01:07:56
  • 使用 AL 配合 BF + BF 增加的渲染速度:567%
  • BF + LC 不使用 AL: 06:20:23
  • BF + LC 使用 AL: 01:16:02
  • 使用 AL 配合 BF + LC 增加的渲染速度:400%

由 Dabarti 工作室进行的自适应灯光测试4——以四张 NVIDIA GeForce 980ti 显卡渲染。

算10帧动画的总渲染时间:

  • BF + BF 不使用 AL: 01:33:08
  • BF + BF 使用 AL: 01:17:50
  • 使用 AL 配合 BF + BF 增加的渲染速度:19%
  • BF + LC 不使用 AL: 01:34:52
  • BF + LC 使用 AL: 01:20:03
  • 使用 AL 配合 BF + LC 增加的渲染速度:18%

按需生成的 Mip-Map 纹理:

长久以来,GPU 渲染的最大问题之一源于 GPU 的 RAM 是有限的。想要更了解 GPU 渲染,请参阅我们的 GPU 渲染指南。一般来说,最大的 RAM 开销是来自于纹理贴图。因此,有几种方法来解决这个问题。

一种方法是将一些 GPU 的显存数据分流到主系统的内存 RAM 里。这个过程通常被称为“移出核心处理(out of core)”。尽管这个方法允许渲染器使用更多的 RAM,但这样操作会明显降低渲染的性能,因为系统内存,以及其与 GPU 之间的传输线路要慢很多。

另一种已经比较有历史的技术叫做 Mip Mapping。该技术的基本概念是,虽然纹理例如可以是 2048×2048 像素,但渲染图像并不需要纹理所有的像素。因此,纹理可以存储自己的多个不同版本分辨率:2048×2048,1024×1024,512×512等。然后,渲染器在渲染过程中实时选择适当的分辨率,一般总是会小于原本的最大分辨率版本。

在 V-Ray 3.5 版本中,V-Ray GPU 渲染器以非常聪明的方式利用 Mip Mapping 技术的优点。另外,这个技术被称为“按需生成(on-demand)”的原因是,只有当摄影机射线打中物体时,我们才会读取纹理,实时生成合适分辨率的 mip-map。如果画面不需要这张纹理,就不会加载它。这个过程实际上是非常迅速的,甚至于比直接读取一张纹理本身还要省时间。同时这个技术也使用明显更少的内存。

这对 V-Ray 用户意味着什么?这意味着,V-Ray 在进行 GPU 渲染的时候,永远会以最大的纹理显存利用率进行渲染。这项技术将显著减少渲染场景所需的 RAM 量,用户将不再需要手动选择不同的纹理分辨率来试图减少场景中所需的内存。此外,由于 V-Ray 会根据需要进行 Mip-Mapping 生成,因此用户就可以使用他们想要的任何文件格式的纹理,不需要为了预先生成 mip-map 而不得不使用特殊格式的文件。

ForestColor map 支持 Forest Pack:

我们一直在与 iToo Software 公司紧密合作,以更直接的方式从 GPU 渲染的代码中支持 Forest Pack 的 ForestColor 纹理。此功能将允许用户更好地利用 ForestColor map 提供的颜色变化。V-Ray GPU 现在也支持此功能。

总体较低的 RAM 使用量:

除了 Mip Mapping 对内存使用率提供的贡献以外,V-Ray GPU 还降低了渲染时所需要的总内存量,不管是在 GPU 显存还是系统内存。

所有程序纹理支持凹凸贴图:

GPU 渲染的另一个难点是支持所有种类的程序纹理。使用 VRayColor2Bump 映射节点,任何程序纹理都可以被它加载并输出,这样,所有 GPU 支持的程序纹理都可以作为凹凸贴图(bump map)。

图像由 Dabarti 提供

许多其他 V-Ray CPU 的功能现在也在 GPU 渲染中得到了支持:

除了上面列出的主要功能外,若干过去在 CPU 渲染中独有的功能现在也可以在 GPU 渲染中使用了:

  • 渲染遮罩(Render Mask)
  • 剖切平面(Clipper Plane)
  • 空气透视(Aerial Perspective)
  • 哑光阴影承接面(Matte Shadow Catcher)
  • V-Ray 方向性矩形灯
  • MDL 材质
  • 更快的反馈
  • 可设定低 GPU 线程优先级
  • 能够加载和使用发光贴图(Irradiance Maps)

结论:

在 V-Ray 3.5 for 3ds Max 中,V-Ray GPU 有很多大的改进。除了提供许多新功能,还明显地增强了运算性能,可以大幅改善工作流程和提高整体的渲染速度。如果你趁过节刚刚买了新的 GPU 显卡,想看看这张显卡能做什么,那么这即将问世的新版本 V-Ray 很值得一试。

另外必须说明,以上的功能仍然处在 beta 阶段,其中一些功能在官方更新的最终版本中可能会有变化。

Dabarti 制作的空气透视效果范例

剖切平面(Clipper Plane)范例

Dabarti 制作的方向性矩形灯(Directional Rectangle Light)的范例