一些图形学的概念介绍,个人摘抄或整理,作为个人文章的词条引用;
渲染流程:
主要工作在于,由一个三维场景出发、生成(或者说渲染)一张二维图像;换句话说,计算机需要从一系列的顶点数据、纹理等信息出发,把这些信息最终转换成一张人眼可以看到的图像;这个工作通常是由CPU和GPU共同完成;
一个渲染流程分为三个阶段(三个阶段为按照基本功能划分的概念阶段,每个阶段还有子流水线):
应用阶段(Application Stage)、几何阶段(Geometry Stage)、光栅化阶段(Rasterizer Stage):
图片源自《Unity Shader入门精要》
应用阶段(应用阶段流水线),由我们的应用所主导,通常由CPU负责实现;开发者有这个阶段的绝对控制权;
这一阶段的主要任务有3个:
首先需要准备好场景数据,例如摄像机的位置、视锥体、场景中包含了哪些模型、使用了哪些光源等等;其次,为了提高渲染性能,需要做一个粗粒度剔除(culling)工作,以把那些不可见的物体剔除出去,这样就不需要再移交给几何阶段进行处理;最后,需要设置好每个模型的渲染状态(如所使用的材质、纹理、着色器等);
这一阶段最重要的输出是渲染所需的几何信息,即渲染图元,然后传递给下一个阶段——几何阶段;
几何阶段(GPU流水线),用于处理所有和我们要绘制的几何相关的事情;例如,决定需要绘制的图元是什么,如何绘制,在哪里绘制等等,这一个阶段在GPU上进行;
几何阶段负责和每个渲染图元打交道,进行逐顶点、逐多边形的操作;这个阶段的一个重要任务就是把顶点坐标变换到屏幕空间中,再交给光栅器进行处理;通过对输入的渲染图元进行多步处理后,这一阶段将会输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息,并传递给下一个阶段;
光栅化阶段(GPU流水线),这一阶段将会使用上个阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像;这一阶段也是在GPU上运行;
光栅化的任务主要决定每个渲染图元中的哪些像素应该被绘制在屏幕上;它需要对上一个阶段得到的逐顶点数据(例如纹理坐标、顶点颜色等)进行插值,然后再进行逐像素处理;