在计算机图形学里面,有一个叫“渲染管线”这样的术语。在Unity3D的官方技术文档里,也有“渲染管线”这样的一个术语。其实,这是两个地方的“渲染管线”虽然名字一样,但实际上,它们却是含意完全不同的两个概念。计算机图形学里所讲的“渲染管线”是一个是物理上(GPU上)的渲染流水线,是一个硬件层的管线,而Unity技术文档里的“渲染管线”是逻辑上(CPU上)的渲染流水线,是一个应用层的管线。
1、计算机图形学中的“渲染管线”
显卡把三维场景的各种数据结构行处理成一张可显示于屏幕的图像的过程称为渲染。现代显卡一般是按现代的计算机图形学理论进行设计的。而现代计算机图形学理论,一般将图形的渲染过程清晰地拆分为几个有序的处理环节,每个环节专注解决一个特定的问题。这种设计思想称为流水线思想。计算机图形学理论一般认为,一个三维图形的渲染过程,应该包含以下几个环节:
也可以简化一下描述为以下过程:
(参考:Graphics pipeline - Wikipedia)
这个图形渲染流水线过程的所有环节中,除了Application环节外,其它所有处理环节都是在显卡里完成的。所以这个流水线是一个硬件上的流水线。
2、Unity引擎中的“渲染管线”
Unity里的渲染流水线,是在GPU渲染流水线之上进行封装、抽象、逻辑化后的一个软件层面的流水线。它包含了图形学渲染流水线中的“Application”阶段,但是不完全等于这个“Application”阶段。
Unity提出渲染管线的概念,也使用了流水线设计细想。这个思想主要体现在自定义渲染流水线(ScriptableRenderPipeline)领域。而实际上,Unity所指的这个流水线,正指是这个ScriptableRenderPipeline里的Render()函数(这个Render函数的处理过程,就是一个流水线)。按Unity官方文档里对渲染管理的解析,开发者在自定义一个Unity的渲染管线时,至少应包含以下处理环节: