1、图像渲染管线描述的是什么
图像渲染管线的主要功能是决定在给定虚拟相机,三维物体,光源,照明模式以及纹理等诸多条件的情况下,生成或者绘制一幅二维图像的过程。
渲染图像的位置,形状是由他们的几何形状,环境特性,摄像机位置决定。而物体的外观是由材质特性,光源,纹理和着色模型确定。
2、图像渲染管线分为那几部分
- 应用程序阶段(The application stage)
- 几何阶段(The Geometry stage)
- 光栅化阶段(The Rasterizer stage)
- 像素处理(Pixel Processing)
要点:
- 每个阶段本身也可能是一条管线,如图中的几何阶段。还可以对有的阶段或者部分的并行化处理,如光栅化阶段。应用程序孙然是一个单独的过程,但是依然可以对之进行管线化或者并行化处理。
- 最慢的管线阶段决定绘制速度,即图像的更新速度,这种速度用FPS表示,也就是每秒绘制的图像数量。
应用程序阶段是由应用驱动,因此常搭载在CPU上运行的应用程序上,这些CPU包含多个核心,他们能够并行执行多个线程。使得GPU可以高效运行各种各样的应用阶段负责的任务。几何处理阶段主要处理变换,投影以及其他类型的几何处理。这个阶段主要去计算需要绘制什么,如何去绘制,还有在哪里绘制。几何阶段通常处于包含很多可编程核心以及固定功能硬件的图像处理单元中(GPU。光栅化阶段通常会读取三个顶点作为输入来构造三角形,并且找到所有的被认为在三角形内部的像素。最后的像素处理阶段,对每一个像素执行程序决定他们的颜色,并进行深度测试来决定是否可见,可能也会执行一些每个像素的操作,如计算颜色与之前的颜色进行混合。光栅化和像素处理是完全在GPU上进行处理的阶段。
2.1 应用程序阶段
应用程序阶段的通常实现的方法有碰撞检测,加速算法,输入检测,动画,力反馈以及纹理动画,变换仿真,几何变形,以及一些不在其他阶段执行的计算,如层次视锥裁剪等。主要的任务是:将需要在屏幕上显示的集合体(渲染图元 rendering primitive, 点 线和三角形),摄像机的位置,光照移交到几何处理阶段。应用程序阶段是基于软件的方式实现的,开发者能对该阶段发生的事情完全控制。虽然该阶段不能像几何和光栅化分为几个阶段,但可以在几个并行处理器上同时执行,提高性能。超标量体系结构,同一阶段,同一时间做不同的几件事情。
2.2 几何阶段
GPU上的几何处理阶段负责大部分的逐多边形和逐顶点的操作。这个阶段可以为分为
- 模型视点变换 Model & view transform
- 顶点着色 vertex shading
2.2.1 模型视点变换
一个模型需要在多个不同的空间或者坐标系统中进行切换。最初模型位于模型空间。每个模型都有相应的模型空间。每个模型都拥有一个模型变换用来变换位置和方向,单个模型可能关联多个模型变换。即允许一个模型的多个复制体在不同的位置,方向和大小,而不需要复制基本几何。
模型变换的是模型的顶点和法向量。物体对象的坐标是模型坐标,经过模型变换后的物体可以说是处于世界坐标系下。世界坐标系是唯一的,所有经过模型变换的模型都位于时间坐标系下。此外,仅仅被相机看到的模型才会被渲染。为了便于投影和裁剪,通过视图变换来变换相机和相应的模型。视图变换的目的是将相机放置原点并对准方向,使他看向Z轴的负方向,Y轴指向上方,X轴指向右边。通过这种方式勾画的空间称作相机空间。下图展示视图变换影响相机和模型的例子:
总之,模型和视图变换分为模型变换和视图变换,模型变换目的是将模型变换到合适的渲染空间中去,视图变换的目的是将摄像机放置于坐标原点,方便后续流程。
2.2.2 顶点着色
渲染一张真实的图像,不仅仅需要对象的位置和形状,还需要对他们的外观进行建模。包括每个对象的材质,光源在对象上的效果。决定灯光在材料上的效果就是所说的着色(shading)。着色过程涉及在对象上各个点处计算着色方程。这些计算一些在你几何阶段期间在模型的顶点上执行,而其他计算可以在每个像素光栅化期间执行。可以在每个顶点存储一些材料数据,如点的位置,法向量,颜色或者其他计算着色所需的数据。顶点着色的结果(颜色,项链,纹理坐标或者其他种类的着色数据)传递到光栅化和像素处理阶段,进一步插值和计算表面颜色。
通常,着色认为在世界空间中进行,实际中,将相关实体(相机和光照)转换到其他空间(模型或者相机空间)中也可得到正确结果。这是因为着色过程中所有实体变换到相同空间,着色计算中的诸多光源,模型和相机的相对位置不变。
总结:顶点的着色阶段在于确定模型上顶点处材质的光照效果。
2.2.3 投影 projection
光照处理后,渲染系统就进行投影操作,即将视体变换到一个单位立方体中,左上角(-1,-1,-1),右下角(1,1,1)。这个单位立方体也称作规范立方体(CVV canonical view volume)。
主要有二种投影算法:
- 正交投影 (orthographic projection)
- 透视投影 (perspective proection)
二种投影算法的主要区别:
- 正交投影的视体通常是一个矩形,正交投影变换将这个视体变换成单位立方体。主要特点是原先平行的线在变换后依旧平行。这个变换是平移和缩放的组合。
Real-Time Rendering 4th Edition 实时渲染第四版 第二章 图形渲染管线(The Graphics Rendering Pipeline)-CSDN博客
https://github.com/QianMo/Game-Programmer-Study-Notes/tree/master/Content/《Real-Time%20Rendering%203rd》读书笔记/Content/BlogPost02