今天过年回家了,不过要准备面试,认真学习下《Shader入门精要》因为里面不单涉及到shader的知识,还有一些渲染的知识,对我来说很有帮助。
渲染流水线:
渲染流水线的目的是把场景从3维空间转化到2维空间,并最终在屏幕上显示的过程。之所以称之为流水线,是因为渲染有并行性,每个渲染图元可以并行处理,相互之间没有必然的前后顺序。渲染流水线的过程分为:应用阶段,几何阶段,光栅化阶段。
应用阶段:
应用阶段是由CPU负责处理的,主要目的是得到模型,光源,摄像机位置和视锥体,材质,纹理,shader等,最终输出渲染图元。
几何阶段:
主要目的是把模型的游戏坐标空间转化为屏幕空间坐标。几何阶段细分为:
1 顶点着色器:游戏坐标转化为齐次裁剪坐标,顶点着色,以及纹理坐标。
2 曲面细分着色器:细分图元。
3 几何着色器:执行逐片元的着色操作。
4 裁剪:将不在摄像机范围的顶点裁剪掉,部分在视野范围内的进行裁剪得到新的顶点。
5 屏幕映射:图元从裁剪坐标变换到屏幕坐标。
光栅化阶段:
主要目的是决定哪些渲染图会被绘制在屏幕上,并对这些顶点进行坐标,颜色插值,最终得到要在屏幕上绘制的每个像素的信息。光栅化阶段细分为:
1 三角形设置:光栅化一个三角形网格,得到它的3条边的边界像素坐标信息,为下一步做准备。
2 三角形遍历:遍历每一个像素被哪些图元所覆盖,被覆盖就生成一个片元。
3 片元着色器:片元着色器的输入是从顶点着色器输出插值得到的数据,它的最重要操作是纹理采样。
4 逐片元操作:进行深度测试,模板测试等决定片元的可见性。对片元和已存在的颜色进行混合。
Draw Call:
Draw Call其实是一个命令,是CPU通知GPU执行渲染的命令,这个命令包含了一个渲染图元列表。GPU收到这个图元列表后从显卡缓存中找到数据,并传入渲染流水线。
渲染图元:
最基本的图形渲染元素,比如点,线段,三角网格这些。
片元:
光栅化后的产物,它包含了像素位置,深度,颜色,法线信息,纹理坐标等。