之前总是想搞清楚unity渲染的原理,但是在网上看到的都是不够全面的结论,都是基于某种条件下得出的,于是,我就自行设计了一些对比实验来验证unity渲染的原理,我的测试工程是基于unity5.5.0f3版本,并且已经开启了dynamic batch

结论如下:


首先根据Camera的depth来 排序,高的后渲染,然后是根据renderqueue分出是否是半透明材质,renderqueue只要>2500(最高5000),就属于半透明材质渲染,≤2500就是不透明材质渲染,所以不透明材质一定在半透明材质之前渲染,两种类型会有不同的处理方式这个一会说;当属于同种类型(同为透明或者同为不透明)的材质时,则根据renderqueue的值来排序,高的后渲染;但如果材质类型相同(同为透明或者同为不透明),RQ又相同,那么又会由sortring layer和sorting order来排序,且layer优先级高于order,并且排序 规则都是值高的后渲染;离相机的距离z仅在其他这些条件都相同的时候才能起作用,对于不透明材质是离得近的先渲染(先画近的后画远的,因为近的会遮挡远的,这样画远的时候可以少画一些),对于半透明材质是离得远的先渲染(先画远的后画近的,因为是透明,要是先画近的效果就不对了,肯定得一层一层这样画)   综合一下渲染优先级:Camera.Depth>材质类型(是否透明,由RQ来判断)>renderQueue>sorting layer>sorting order>离相机距离z  


但是如果在同一个相机下,两个材质相同的话(材质相同是RQ相同的充分条件,材质相同则RQ相同,但是RQ相同不代表材质相同),GPU只会画一次(因为 已经被批处理了,是因为我开启了dynamic batch)





以上内容为个人测试结果得出结论,如有谬误,欢迎斧正