zhouqijie

渲染管线概述

Pipeline的概念

渲染引擎的渲染步骤是由名为管道(pipeline)的软件架构锁实现的。(Pipeline意为流水线或者管道)

管线只是一连串的顺序计算阶段(stage),每个阶段有其具体目的,各个阶段会操作输入流中的数据项,并对输出流产生数据。
管线中每个阶段的操作过程通常独立于其他阶段,所以能很好地实现并行。

管线的吞吐量(throughput)量度总体每秒可产生的数据量。管道的潜伏期(latency)量度单个数据需要多少时间才能走完整个管线。

渲染管线几个阶段

工具阶段 (脱机)

定义几何和表面特性,即网格材质。

资产调节阶段 (脱机)

把几何和材质数据处理为引擎可用的格式。

应用程序阶段 (CPU)

识别出潜在的网格实例,并把它们及其材质呈交给图形硬件。

几何阶段 (GPU)

把顶点变换、照明,然后投影至齐次裁剪空间。可选择用几何着色器处理三角形,然后对三角形根据平截头体进行裁剪。

光栅化阶段 (GPU)

把三角形转换为片段(对应一个像素),并对片段进行着色。片段经过多种测试(深度测试、alpha测试、模板测试等)后,最终混合或写入帧缓冲。



工具阶段

在工具阶段,三维建模师在数字内容创作(DCC)软件里制作三维模型。常见的软件有Maya、3DMax、Blender等。

CRE:DCC软件和游戏引擎的材质一般是不通用的,一般在游戏引擎里进行材质和着色设置。

CRE:虚幻引擎和Unity引擎以及Blender的渲染引擎都能实现图形化着色语言。



资产调节阶段

资产调节阶段本身也是一个管道,称为资产调节管道(ACP)。其工作是导出、处理、链接多个种类的资产,生成内聚的整体。

资产调节管道把DCC提取出的数据处理成专用格式(有的跨平台引擎可能会先处理为平台无关中间格式)。引擎专用格式能直接载入内存,无需运行时处理或者只需要少量的处理。

资产调节管道的部分功能 :

  1. 有时原来的网格不含法线或切线,那么资产调节管道就需要给网格生成法线、切线、副切线矢量供着色器使用。
  2. ACP可能会计算高级的场景图(scene graph)数据结构。(例如会处理静态关卡几何以生成BSP树)
  3. ACP阶段可以进行静态光照计算,即脱机时计算好光照,称为烘焙(bake)。
  4. 除此之外,还可以生成预计算辐射传输(PRT)的系数,这些通常是球谐函数(spherical harmonic)的系数。





GPU简史

早期游戏都使用CPU渲染。游戏如德军总部和毁灭战士在没有专门图形硬件的情况下,把早期PC渲染3D互动三维场景的程度推至极致。

由于PC游戏的普及,硬件厂商开始图形硬件,把一些原来由CPU执行的工作交给专门的硬件处理,最早期的图形加速器如3Dfx的Voodoo系列,能处理管道中最耗时的光栅化阶段。之后的图形加速器也提供几何处理阶段的支持。

最初的图形硬件只提供硬接线(hard-wired)却可配置的管道实现,称为固定功能管线(fixed-function pipeline)。此技术也称为硬件变换及光照(hardware transform and lighting)

之后,管道中的数个子阶段变为可编程的(programmable)。可以编写名为着色器(shader)的程序控制管道。最初只有顶点着色器(vertex shader)片段(或称像素)着色器(fragment/pixel shader),后来增加第三种着色器名为几何着色器(geometry shader),这种着色器可以允许修改、剔除、创建整个图元。DX11又增加了外壳着色器(hull shader)、域着色器(domain shader),用于自定义镶嵌。以及计算着色器(compute shader),用于GPU通用计算。

图形硬件已进化成一种专门的微处理器,称为图形处理器(GPU)。GPU为最大化管道吞吐量设计,当中利用了庞大的并行性处理。但就算GPU在完全可编程形式下,GPU不是也不应该是通用微处理器。GPU能达到高处理速度的原因在于精细控制管道的数据流。有些管道阶段是完全固定功能的,有些是可配置但不能编程的。内存只能在控制范围内存取,并且使用专门的缓存把不需要的重复计算减至最少。




(END)