紫色:大类概念或简短有力的总结
蓝色:细分概念或重要部分
红色:重要的补充注释
第二章:渲染流程与流程分工
渲染的流程分三个阶段:
应用阶段(开发者控制阶段)
由开发者全权进行管理,控制场景内摄像机位置,需要用到的模型以及他们的位置.在布置结束后DrawCall进入下一阶段(由CPU发布渲染指令被称为DrawCall)
几何阶段(3D转2D阶段)
由GPU进行管理,将所有3D物体坐标进行变换,输出2D坐标并传输到下一阶段
光栅化阶段(将图像渲染到屏幕上)
由GPU进行管理,根据坐标决定要如何渲染,并将处理好的图像绘制在屏幕上
几何阶段过程详解
顶点着色器:将顶点进行空间变换并着色
曲面细分着色器:用于细分图元
几何着色器:产生更多图元或对图元依次着色
裁剪:将不在摄像机范围内的顶点去除掉,并去除一些三角图元的面片
屏幕映射:把每个图元的x和y坐标转换到屏幕坐标系下
光栅化阶段过程详解
三角形设置:计算由几何阶段传过端点而构成的三角形的边的坐标
三角形遍历:检查每个像素是否被三角网格所覆盖
片元着色器:将片元逐一着色
逐片元操作:将片元依次渲染,不可编程但可配置.对片元进行测试通过后可对片元进行各种重要操作.如修改颜色,颜色混合等(若未通过测试则舍弃片元)
模板测试:
读取模板缓冲区该片元的位置,然后和读取到的参考值进行比较
开发者可对比较函数进行配置。如小于参考值时舍弃,或大于等于时舍弃
不管片元有没有通过测试,开发者都可以根据测试结果修改模板缓冲区
常用于实现阴影效果
深度测试:
GPU将该片元的深度和深度缓冲区的数值进行比较,常用于实现透明效果
当一个片元完成了以上测试,就进入了混合(合并)环节
在渲染时,因为物体是逐一被绘制到屏幕上的,而每个像素的颜色都被保存在颜色缓冲区
那么当我们执行下次渲染时,是要直接替换掉之前的颜色,还是和之前的颜色进行一些混合操作?
对于不透明物体,开发者可以关闭混合。这样,由于绘制时会覆盖掉之前的像素,绘制到屏幕上的结果就是不透明的。反之,通过混合操作可以让物体看起来像是透明
章节总结:
阶段与各环节流程
渲染流程的三个阶段.在应用阶段由开发者自由配置
在几何阶段由GPU进行空间转换.将端点坐标计算好来为光栅化阶段做准备
光栅化阶段负责