UnityShader《入门精要》第二章

渲染流水线:

         概念阶段:应用阶段(输出渲染图元,CPU)->几何阶段(输出屏幕坐标的顶点信息,GPU)->光栅化阶段(GPU)

        应用阶段:(1) 数据加载到显存(HDD->RAM->VRAM)

                          (2)设置渲染状态(如何被渲染)

                          (3)DRAW CALL  CPU向GPU发送的命令,仅仅指向需要被渲染的图元队列,不会包含材质信息(上一步已经完成)

         

        几何阶段:(1)顶点着色器:完全可编程,对于顶点的空间变换和着色。必须的是把顶点从模型空间转化到其次裁剪空间(之后再由硬件做透视除法转化为NDC),

                          (2)曲面细分着色器:可选着色器,用于细分图元

                          (3)几何着色器:可选着色器,逐图元着色操作或者是生成更多图元

                          (4)裁剪:可配置,剔除视野外的区域。分三种,不在视野中,完全在视野中,部分在视野中。对于部分在视野中的,需要重新构建顶点进行裁剪。

                          (5)屏幕映射:不可变成,把图片映射到屏幕。(注意OpenGL和DirectX的屏幕坐标系的差异)

        光栅化阶段:(1)三角形设置。确定每个图元。

                              (2)三角形遍历(扫描变换)。检查像素是否被三角形覆盖,被判定覆盖就生成一个片元,对于其中的信息进行插值处理。输出的片元序列。(片元不是像素,片元只是状态集合,比如深度信息,坐标,法线,纹理等等用于计算颜色的元素)

                              (3)片元着色器。输出一个或者多个颜色值。可以完成纹理采样技术。限制是只能影响自己这个片元。

                              (4)逐片元操作(合并输出阶段)。首先对于片元进行模板测试,深度测试,然后把目前颜色和目标颜色进行混合(看是否开启了混合),写入颜色缓冲区。Early-Z,在片元着色器之前进行深度测试,这样可以提高GPU性能。但是如果进行透明度测试,如果被Clip函数舍弃了这个像素,那么无法提前进行这些测试,这就产生冲突,就需要GPU对于像素进行判断该,这样就会加大性能消耗。   为了避免我们能够看到正在进行光栅化的图元,,GPU采用了双重缓冲

                Draw Call:CPU调用图像编程接口。

                CPU和GPU通过命令缓冲区进行并行工作

               

                Draw Call 多了会影响帧率的原因是因为需要做很多的重复操作,比如拿,写等。

                如何优化:使用批处理,但是得注意批处理需要用同一种材质。

                 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值