Unity 渲染管线流程

Unity渲染管线流程大致分为3个阶段,1.应用阶段(程序阶段)2.几何阶段 3.光栅化

1.应用阶段/程序阶段

这个阶段由CPU执行,并且向GPU传递信息,主要做三件事:
1.将模型信息(顶点坐标,顶点颜色,切线,法线等),变换矩阵(M(模型到世界坐标),V(世界到摄像机),P(摄像机到齐次裁剪),FOV等),材质,灯光,渲染顺序等信息先放入内存中,然后再传递给GPU
2.设置渲染状态,比如这个模型要用这个顶点着色器,这个片元着色器,这个材质
3.发出drawcall命令,这个drawcall不会包含顶点信息等,它只会指向某个图元,然后gpu根据渲染状态以及信息执行渲染


2.几何阶段

几何阶段由GPU执行,这个阶段主要进行顶点变换和顶点着色。

几何着色又分为几个小阶段,比如1.顶点着色,2.曲面顶点着色等,3.然后就是可设置的裁剪,4.最后就是不可控制的将点设置到屏幕空间中,然后交给光栅化处理。顶点着色主要在pass块中的pragma的vertex函数

其中顶点变换的过程主要为:
模型空间--->世界空间--->摄像机空间--->齐次裁剪--->屏幕空间
模型到世界空间的变换需要M矩阵来进行转换,主要涉及平移,旋转等操作
世界空间到摄像机空间会以摄像机作为原点,通过V矩阵来进行平移旋转等操作
摄像机到齐次裁剪过程会通过P矩阵主要进行缩放操作,这个过程会将所有顶点放入一个-1到1的立方体中
齐次裁剪到屏幕空间则主要是通过缩放来确定像素点再屏幕上的位置


3.光栅化

光栅化由GPU执行。也分为几个步骤首先是1.三角形遍历,这个过程用于确定三角面,即哪几个顶点可以确定一个三角面,为下一个阶段做准备2.逐片元遍历,这个过程会确定每个片元是否再某个三角面上,并且对每个片元进行颜色,位置等信息进行计算,其中信息是由三角面的三个顶点来进行插值计算的。3.模板检测(Stencil{}) 模板检测与深度检测相似,也有一个缓冲区(Ref)。如果没开启的话直接结束检测,开启的话会对每个片元的一个值与模板对应的值进行比较(Comp),比较通过(Pass)或者不通过(Fail)也会进行相应的处理,如Replace(替换),Keep(保持)等。这里也可以有如果通过了模板测试但没通过深度测试(ZFail),也可以进行操作。4.深度检测,当前值与缓冲区的值进行比较,通过的话会进行判断是否开启了深度写入(ZWrite On/Off),如果开启了,我们会将这个值复写,以后的这个位置的片元值就会和写入的这个值进行比较。没有开启的话就结束检测,深度缓冲区仍然用原来的颜色。

在Unity中光栅化之前会先进行一下深度测试,如果计算完发现深度测试不通过,计算会浪费。

模板测试相关:

Stencil
{
    Ref[_buffer]//括号里面可以由属性进行替换,来达成想要的效果
    ReadMask  读取时与Ref的值怎样计算
    WriteMask 写入时与Ref的值怎样计算
    Comp Greater //其中Comp可以有多种操作,比如Greater,Less,GEqual,LEqual,Equal,NotEqual,Never等
    Fail  Replace  //模板测试失败怎么做 可以Replace替换,Keep保持,Zero将0写入,IncrSat将Ref值加1,但小于等于255,DecrSat将Ref值减1,但大于等于0
    Pass Replace //成功怎么做,Invert将Ref按位取反,IncrWrap将Ref值加1,超过255变为0,DecrWrap将Ref值减1,小于0变为255
    ZFali Replace //如果模板测试通过,但深度测试失败怎么做
}

其中深度检测具体可以看Unity Shader相关的ZTest,ZWrite,Blend-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65009805/article/details/135295091?spm=1001.2014.3001.5501这篇文章

总结:渲染流程一共分为3个阶段,第一个阶段由cpu进行将数据发送到GPU中,同时发送drawcall命令让GPU执行渲染;第二个阶段几何阶段由GPU执行,主要进行顶点变换,即将模型坐标最终变到屏幕坐标上,同时进行顶点的光照处理等;第三个阶段则是对片元的操作,通过对三角面顶点的插值计算片元信息,同时进行一系列的测试来最终确定片元的颜色值是否能以及如何呈现到屏幕上。

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值