渲染管线(Rendering Pipeline)是什么?
在图形工程师和技术美术的就职面试中会经常被问到这样的问题。实际上在我们使用三维建模软件的过程中就已经完整的体验过了渲染管线的存在。
在这里我以实时渲染第四版的内容简单阐述一下具体的过程:
1. Application应用:
传入各种各样基础的数据,例如各种摄像机参数等。
应用程序允许用户选择和移动模型的部分,例如,用户可能会选择盖子,然后移动鼠标来打开它。应用阶段必须将鼠标移动转化为相应的旋转矩阵,然后在渲染时确保该矩阵正确地应用于盖子。另一个例子:当你播放一个动画,摄像机沿着预定义的路径移动,从不同的角度展示华夫饼机(本例中的建模对象)。我们获得摄像机的参数,如位置和视角方向,然后必须由应用程序更新,这取决于时间和操作。对于要渲染的每一帧,应用程序阶段将摄像机的位置、照明和模型的图元输送到管道的下一个主要阶段--几何阶段。
2. Geometry几何处理:
经常听说的顶点着色器Vertex shader就在这个阶段
对于透视视角,我们在此假设应用程序提供了一个投影矩阵。同时,对于每个物体,应用程序已经计算出一个矩阵,描述了视图转换和物体本身的位置和方向。在我们的例子中,华夫饼机的底座有一个矩阵,盖子有一个矩阵...在几何阶段,物体的顶点和法线被这个矩阵转换,将物体放入视图空间。然后,顶点的阴影或其他计算可以使用材料和光源属性进行计算。然后使用一个单独的用户提供的投影矩阵进行投影,将物体转换到代表眼睛所见的单位立方体空间。该立方体之外的所有图元都被丢弃。与这个单位立方体相交的所有基元都被剪切到立方体上,以获得一组完全位于单位立方体内的图元。然后,这些顶点被映射到屏幕上的窗口。在所有这些按三角形和按顶点的操作被执行后,得到的数据被传递到下一个阶段——光栅化阶段。
3. Rasterization光栅化:
转换矩阵、顶点
所有在前一阶段的剪切中幸存下来的基元都会被栅格化,这意味着一个图元内的所有像素都会被找到,并沿着管道进一步被送入像素处理。
4. Pixel Processing像素处理:
模型的纹理会在这个时候被我们经常听说的像素着色器(这是unity的叫法,也会被叫做片元着色器fragment shader)
这里的目标是计算每个可见图元的每个像素的颜色。那些与任何纹理(图像)相关联的三角形被渲染,并根据需要将这些图像应用于它们。
可见性是通过z-buffer算法,以及可选的丢弃和模板测试来解决的。每个对象都被依次处理,最后的图像被显示在屏幕上。
- 思考问题:
渲染管线的几何阶段会进行“顶点的阴影和其他颜色计算”,但是顶点的颜色有什么意义?因为像素着色器才是负责颜色着色和给图元插值的话,那顶点计算得到的颜色矩阵的功能是什么?感觉完全被替代了?
(提示:可以搜索一下Phong shading model是什么,和现在的光照模型有什么区别。这个思考问题的答案我会放在留言区)
在图形工程师和技术美术的就职面试中会经常被问到这样的问题。实际上在我们使用三维建模软件的过程中就已经完整的体验过了渲染管线的存在。
在这里我以实时渲染第四版的内容简单阐述一下具体的过程:
1. Application应用:
传入各种各样基础的数据,例如各种摄像机参数等。
应用程序允许用户选择和移动模型的部分,例如,用户可能会选择盖子,然后移动鼠标来打开它。应用阶段必须将鼠标移动转化为相应的旋转矩阵,然后在渲染时确保该矩阵正确地应用于盖子。另一个例子:当你播放一个动画,摄像机沿着预定义的路径移动,从不同的角度展示华夫饼机(本例中的建模对象)。我们获得摄像机的参数,如位置和视角方向,然后必须由应用程序更新,这取决于时间和操作。对于要渲染的每一帧,应用程序阶段将摄像机的位置、照明和模型的图元输送到管道的下一个主要阶段--几何阶段。
2. Geometry几何处理:
经常听说的顶点着色器Vertex shader就在这个阶段
对于透视视角,我们在此假设应用程序提供了一个投影矩阵。同时,对于每个物体,应用程序已经计算出一个矩阵,描述了视图转换和物体本身的位置和方向。在我们的例子中,华夫饼机的底座有一个矩阵,盖子有一个矩阵...在几何阶段,物体的顶点和法线被这个矩阵转换,将物体放入视图空间。然后,顶点的阴影或其他计算可以使用材料和光源属性进行计算。然后使用一个单独的用户提供的投影矩阵进行投影,将物体转换到代表眼睛所见的单位立方体空间。该立方体之外的所有图元都被丢弃。与这个单位立方体相交的所有基元都被剪切到立方体上,以获得一组完全位于单位立方体内的图元。然后,这些顶点被映射到屏幕上的窗口。在所有这些按三角形和按顶点的操作被执行后,得到的数据被传递到下一个阶段——光栅化阶段。
3. Rasterization光栅化:
转换矩阵、顶点
所有在前一阶段的剪切中幸存下来的基元都会被栅格化,这意味着一个图元内的所有像素都会被找到,并沿着管道进一步被送入像素处理。
4. Pixel Processing像素处理:
模型的纹理会在这个时候被我们经常听说的像素着色器(这是unity的叫法,也会被叫做片元着色器fragment shader)
这里的目标是计算每个可见图元的每个像素的颜色。那些与任何纹理(图像)相关联的三角形被渲染,并根据需要将这些图像应用于它们。
可见性是通过z-buffer算法,以及可选的丢弃和模板测试来解决的。每个对象都被依次处理,最后的图像被显示在屏幕上。
- 思考问题:
渲染管线的几何阶段会进行“顶点的阴影和其他颜色计算”,但是顶点的颜色有什么意义?因为像素着色器才是负责颜色着色和给图元插值的话,那顶点计算得到的颜色矩阵的功能是什么?感觉完全被替代了?
(提示:可以搜索一下Phong shading model是什么,和现在的光照模型有什么区别。这个思考问题的答案我会放在留言区)