UnityShaderLab_07_3D图形渲染完整流水线

171 阅读2分钟

「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」。

作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈 不同的平台的渲染流水线并不是完全一样,有的可能会合并几个步骤,有的可能会有部分顺序的颠倒,但是绝大多数的游戏引擎具有普普遍的共性,那么这些步骤都干了什么呢?

image-20220207185024162.png 0. 建立场景

在真正开始渲染之前,需要对整个场景进行预先设置,例如:摄像机视角,灯管的设计,雾化的设置等等.

0. 可见性检查

有了摄像机,就可以基于摄像机的视角,来检测场景中所有物体的可见性,这一步在实时渲染中非常重要,因为可以避免把时间和性能浪费在渲染一些视角之外的物体上

1.  设置渲染状态

在摄像机视野内,可见的东西,就要把他绘制出来,但是由于不同的物体的渲染状态是不同的,因此要在开始渲染之前先设置物体的渲染状态,比如如何进行深度测试,如何与背景图形进行混合等等.

0. 几何体的生成与提交

设置完状态后,就要想渲染API提供几何体的数据了,比如几何体的三角形的顶点数据(顶点坐标,法线向量,UV等等)

0. 交换与光照

当渲染API获取到三角形顶点数据后,就需要将顶点坐标从模型空 间转换到摄像机空间,并且同时进行光照计算

0. 背面剔除与裁切

变换到摄像机空间后,那些背对着摄像机的三角面就会被剔除,然后在被交换到裁切空间中,将视锥体之外的部分再裁切掉

0. 投影到屏幕空间

在裁切空间中经过裁切之后的多边形会通过投影从三位变成平面,输出到屏幕空间中

0. 光栅化

屏幕空间的几何体还需要经过光栅化处理才能转变成2D的像素信息

0. 像素着色

最后,计算每个像素的颜色,并把这些颜色信息输出到屏幕上