0.渲染流水线
目标:生成(或渲染)一张二维纹理
三个阶段:
0.1.应用阶段
0.1.1.把数据加载到显存中
硬盘 --> 数据内存 -->(网格、纹理)--> 显存
0.1.2.设置渲染状态
着色器、光源、材质等
0.1.3.调用DrawCall
·CPU调用图像编程接口
·DrawCall:cpu调用一个渲染命令,告诉gpu开始渲染。
-- 其中包含须要被渲染的图元列表,再也不包含任何材质信息
0.2.几何阶段
·几何阶段的主要工做就是“变换三维顶点坐标”和“光照计算”。
0.2.1.顶点着色器
BIG:可编程
坐标变换、逐定点光照
·输出:每一个顶点对应的纹理坐标
0.2.2.曲面细分着色器
0.2.3.几何着色器
0.2.4.裁剪
摄像机视野范围
0.2.5.屏幕映射
-- 输出网格顶点
0.3.光栅化阶段
·计算每一个图元覆盖了那些像素,为这些像素计算他们的颜色
3.1.三角形设置
计算光栅化一个三角形网格的信息
0.3.2.三角形遍历
扫描变换
·输出:片元序列
0.3.3.片元着色器(像素着色器)
BIG:可编程
纹理采样等
0.3.4.逐片元操做
BIG:高度可配置性
0.3.4.1.决定每一个片元的可见性
模板测试
深度测试
0.3.4.2.片元的颜色和已经存储在颜色缓冲区的颜色进行合并(混合)
0.4.CPU\GPU的并行工做
CPU -- 命令缓冲区(命令队列) -- GPU
每次调用前,CPU须要准备不少的内容(数据、状态、命令),同时有检查渲染状态等不少准备工做
·GPU的渲染能力很强,可是CPU会花时间在提交命令(DrawCall)上,形成CPU过载
0.4.1.减小DrawCall
4.1.1.静态物体的批处理。
4.1.2.避免使用大量很小的网格
4.1.3.避免使用过多的材质
0.4.2.shader
·GPU流水线上可高度编程的阶段
·特定类型:顶点着色器、片元着色器等
·依靠着色器能够用来控制流水线中渲染的细节编程