写在前面
以前一直觉得自己学会的东西就没有必要再记录下来,觉得这样会浪费自己的时间,最近看了简书上的一些文章觉得写得很有意思就有了写随笔的冲动,毕竟好记性不如烂笔头嘛,把自己知道的或平时想到的东西当做随笔记下来也不失为一件趣事。
言归正传
作为一名游戏开发人员图形学基础知识还是很重要的,下面我就介绍一下openGl渲染管线流程吧就当是自己的一次总结或许也能帮助到一些不知道渲染管线是怎么回事的人,也希望有大佬能够批评指正。
CPU操作
在整个渲染管线之前CPU需要做的主要操作就是将一些参数传递给gpu,这些信息主要包含但不限于顶点,法线信息。在u3d中是通过网格过滤器从资源中拿出网格信息并将其传递给网格渲染器MeshRender来在屏幕上进行渲染。网格过滤器中的mesh就是用于存放网格数据的。另外一些带有骨骼系统蒙皮信息的资源可直接用skinmeshrender进行渲染。
GPU操作
顶点着色器
CPU将fbx文件中的顶点信息传递给顶点着色器,顶点着色器会先进行一次矩阵坐标转换将顶点从物体坐标系转移到相机坐标系并且计算好顶点的颜色信息等。
面的剔除
光栅化
光栅化简而言之就是将顶点转化为像素的过程,经过顶点着色器处理后的顶点之间的像素以插值的形式进行填充。
片元着色器
片元着色器顾名思义就是逐片元进行处理,一般进行纹理的采样,通过采集纹理上的信息替换掉光栅化过程中进行插值填充的像素。另外片元着色器还用来处理与灯光的运算,值得注意的是顶点着色器的计算量要远远高于顶点着色器,所以能在顶点着色器进行的运算就不要放在片元着色器。有些只需要计算一次的操作就放到CPU里进行计算,也没必要放到顶点着色器里计算。
alphaTest
经过片元着色器后,过滤掉符合alpha值的像素。
模板测试
通过模板进行过滤
深度测试
通过像素深度进行过滤
blend操作
与其他纹理以怎样的形式进行混合
GBuffer
最终一个存很多信息的 float数组
frontBuffer
计算的结果信息写入front缓存
frameBufder
显示到屏幕上
……alpha值是一个rgba8888 可用float
网友评论