Unity SRP中关于各种矩阵的差异和ZBffer到底记录什么值的总结
这里只讨论DX11环境下的情况,别的平台请自行研究。
矩阵相关
首先我们需要了解两种矩阵,一个是你在C#代码中使用camera.xxxMatrix获得的矩阵,一种是你从shader里拿到的builtin的矩阵,例如unity_CameraProjection矩阵。这两个矩阵是有区别的!下面详细讲一下这两个矩阵的区别
camera.xxxMatrix
从代码中获得的矩阵是真正意义上的用到的矩阵。例如我们要把物体从世界空间变换到投影空间,假如我们获得了camera.worldToViewMatrex(V)和 camera.projectionMatrix §,注意这里需要使用
GL.GetGPUProjectionMatrix( camera.projectionMatrix,false)
来获取GPU上使用的projection矩阵。
那么你的clip space(CS) 的坐标应该是 P * V * worldPosition
上面用到的矩阵是对齐到DX11的,这样在 cs /cs.w 变到 NDC之后z的结果是0-1(和记录在ZBuffer里的值不一定相同!)
unity_XXXMatrix in shader
shader里使用的builtin matrix都是在openGL空间下的!!
怎么理解这句话:
首先unity_WorldToCame