1.Shader中的渲染顺序
是按照Queue"="Geometry" "RenderType"="Opaque,Queue是一般渲染时候的顺序,RenderType是后处理特效使用的渲染顺序。
Background, Geometry, AlphaTest,Transparent和Overlay,分别对应数值1000,2000,2450,3000和4000。
Shader中,如果要C#访问的uniform变量,还要声明一遍。
记得引擎渲染时候,是先更新物体,再排序,再渲染的,所以渲染为了提高效率做了合并批次(合为一张大图纹理,如果全部是透明的或者不透明的,那么各个网格可以合并尽管有先后),和渲染先后的处理。
渲染时候一帧里面有N个drawcall,每个drawcall会驱动进行一次渲染管线操作,会进行一次blend。
2.C#脚本或Shader中变换和坐标系
都是用向量左乘矩阵,矩阵也是左乘矩阵,从视图->模型的乘法顺序。是右手坐标系,列式存储。
其实世界坐标系是左手坐标系,视图坐标系是标准的右手坐标系。
透视
空间:刚好是D3DXMatrixPerspectiveFovRH中的公式,
得x'=x*xScale, y'=y*yScale,z'=a*z + b=(z + zn)*zf
/ (zn-zf)。zn,zf都是距离是正数,因为|z| > zn,且z是负数,所以z'是正数。
上面的变换一般用一个ShaderLab 中的MVP坐标系即可,右手坐标系的乘法顺序也要自裁剪矩阵乘以视图矩阵乘以世界矩阵的形式进行。
ndc坐标:左下角为(0,0)点,右上角为(1,1)点,屏幕中心为[0.5,0.5],z值保留了透视投影中的正值但是值的大小是世界坐标系的值。不同于D3D中的[-1,-1,0]到[1,1,1],也不同于OGL中的[-1,-1,-1]到[1,1,1]。NDC坐标系一般由硬