Reyes渲染架构

Reyes 渲染架构,是三维计算机图形学的一个软件架构,用于渲染照片一样真实的图像。该架构是 80 年代中期由卢卡斯影业的计算机图形研究小组成员艾德文·卡特姆洛伦·卡彭特罗伯特·库克所开发的,那个研究小组最后发展成了今天的皮克斯[1] 该架构最早使用于 1982 年的科幻片《星际迷航 2:可汗之怒》中的创世片段。皮克斯的 PRMan 是 Reyes 算法的一个实现。

根据最初描述该算法的论文,Reyes 渲染系统是一个用于复杂图像的快速高质量渲染的“架构”,论文中指出 Reyes 包括一系列算法和数据处理系统,不过本词条中的“算法”和“架构”是同义的。

ReyesRenders Everything You Ever Saw(渲染你曾见到的任何物体)的首字母缩写,这也是卢卡斯影业以前所在地——加州雷耶斯角的名字,因此 Reyes 是双关语,它还暗指和光学影像系统有关的过程。根据罗伯特·库克的说法,Reyes 的正确写法是首字母大写,其余小写,和 1987 年库克/卡彭特/卡特姆的 SIGGRAPH 论文中一样。

Reyes 架构的设计目标

Reyes 架构的设计遵从以下目标:

  • 模型复杂性和多样性:为了产生复杂和样式丰富的图像,渲染系统的用户必须能通过分形粒子系统等,经由编写程序生成大量复杂的几何结构。
  • 复杂着色:场景的复杂度通常由光线和物体表面的相互作用产生。通常,在计算机图形学里,这是通过使用纹理来表现的,纹理可以是一组像素,用于描述表面位移(置换)、透明度或反射率等。Reyes 允许用户用计算机程序来描述表面结构和光学互作用,而不是简单的数据查询表,并和可编程着色器结合。算法的一个重要目标是减少处理器从存储器中读取纹理的时间。
  • 避免光线追踪:Reyes 架构提出的时候,计算机的处理能力和存储量都很有限,意味着使用光线追踪需要耗费几万小时才能渲染完一个图像,Reyes 算法避免使用光线追踪,因此渲染快的多,并且图像也非常逼真。
  • 速度:(单个计算机)一年能渲染完成一部每秒 24 帧的两小时影片,即平均每帧只需要渲染 3 分钟。
  • 图像质量:任何图像,若带有无用的、因算法导致的缺陷,都是不可接受的。
  • 灵活性:该架构必须足够灵活,在引入新技术时,不需把算法完全重写。

Reyes 算法能很高效的渲染一些电影画面要求的必不可少的效果:光滑的曲面、表面纹理、运动模糊景深

Reyes 渲染流程

Reyes 渲染流程

Reyes 算法通过把参数曲面分割成微多边形(micropolygon)——小于一个像素的四边形,来渲染光滑曲面。虽然要精确逼近曲面需要很多微多边形,不过他们可以简单并行的进行处理。Reyes 渲染器对高级的几何图形进行细分时,会根据需要来进行,它只需要刚好细分到使图形在最终图像中看起来光滑的程度。

然后,一个着色系统给微多边形的每个顶点赋予一个颜色和透明度,许多 Reyes 渲染器允许用户使用着色语言编写任意的灯光和纹理函数。微多边形可以在一个大的网格里进行处理,因此可以进行并行向量处理。

经过着色的微多边形在屏幕空间进行采样,以生成输出图像。Reyes 引入了一个开创性的隐面判别算法或者叫 hider,算法对运动模糊和景深进行必要的整合,而无需比未加模糊的渲染使用更高的模型和着色采样数。hider 通过一种称为随机采样蒙特卡洛方法收集一定时间和镜头位置内每个像素里微多边形的颜色。

基本 Reyes 渲染管线工序

  1. Bound,计算几何图形的边界。
  2. Split,把大的图形分割为更小的图形。
  3. Dice,把图形转换成微多边形网格,每个大概一个像素大小。
  4. Shade,计算每个微多边形网格顶点的灯光和颜色。
  5. Bust,把网格炸开成单个的微多边形,对每个计算边界并判断是否可见。
  6. Hide,对微多边形进行采样,并生成最后的平面图像。

在这个设计中,渲染器必须把整个图像缓存在内存中,因为必须把所有的图形都处理完成以后才能输出最终图像。一般在dice步骤之前会进行一步叫 bucketing 的常见内存优化,这一步中,输出图像被分割成若干指定大小的小块,通常每一块是 16x16 像素大小,之后,场景中的物体沿着每小块的大致边缘按照位置分割到不同的块里,然后每个小块分别进行处理,处理下一小块之前会先丢弃上一个小块的数据。如此只有当前的小块区域里的图形被加载到内存里,通常的情况下,这种处理能比未修改的 Reyes 算法显著的减少内存的使用。

Reyes 渲染器

以下渲染器使用了 Reyes 算法,或者用户可以根据需要选择使用 Reyes 算法:

参考资料