虽然用了unity工作很久了,但是我一般很少关心工作以外的事,即使是工作内容上,也是一样,一直比较专注于应用层的编写,对于特效,材质什么的除了比较基础的内容,对底层都漠不关心。但是最近打算研究下shader grap,然后被渲染管线等一堆内容搞的头晕眼花,所以这几天决定整理一下思路与内容。这里借一张图(侵删)
1.渲染管线和shader的关系.
这里我关于shader和材质的关系,我想对unity有经验人都知道,不再赘述。
我们都知道渲染管线,它是一个物体从获取数据到渲染到屏幕的整个流水线过程过程。这中间要经过光源顶点等一堆数据,坐标换算等一堆过程。而我们的shader则是其中顶点渲染部分和光栅化部分的计算。这中间还有,Forward等(比如forwardMode),我目前是这么理解。这里我们称处理整个过程的处理程序为渲染器,shader则是这整个过程的最终部分,shader能够处理的东西依赖于渲染管线在shader处理之前能为其提供的东西(暂时这么理解)。因此,当配置unity的新的渲染管线之后,以前的默认材质就会失效,就是因为以前的默认材质的shader和当前的渲染管线不对应。这里比如投影,我们和光照等,在顶点函数下我们并不知道,而这些都是由前面的流程提供,因此前面流程提供的东西越多,这个shader能做的事就越多。当然这里是粗浅理解,因为有些精确的效果本身就是可以通过编写shader来做到。这取决于渲染管线是否能做到。这里比如在屏幕上渲染某些东西,这可以用渲染管线编程得到(比如cookie),然而这也可以用shader来做到。总之就是可编程渲染管线使得开发者可以自定义某些配置化和模块化的东西,从而减少在shader上花费的精力。
2.渲染管线来源。
unity提供了几个渲染管线,内置渲染管线,URP(通用渲染管线,原来称LWRP)和HDRP(高清渲染管线),SRP是unity的支持的渲染管线特性(可编写),URP和HDRP是unity官方自己用SRP特性编写的两个不同配置需求的渲染管线。如果没有使用其他渲染管线,那么默认就是内置渲染管线,比如一般情况下建立的3D项目。当前,这里也可利用SRP特新编写自定义的渲染管线,具体如何编写,可以看官方文档(文档好少),如果要上哔哩哔哩上看的话,艰难了,搜到的结果都是介绍如何使用URP和HDRP。
但是目前的话由于精力有限,和没有这方面的需求,我决定打住,不再深究如何编写渲染管线,仅限于如何使用内置RP,URP,HDRP,使用原来的渲染效果。