Unity SRP中关于各种矩阵的差异和ZBffer到底记录什么值的总结

本文探讨了Unity中C#代码与Shader中矩阵的差异,包括camera.xxxMatrix和unity_XXXMatrix的对比,解释了ZBuffer记录的值,并详细阐述了ZBuffer的非线性处理以及如何反算世界坐标。关键点在于矩阵转换的右手系与左手系差异,以及OpenGL与DX11在Z值范围上的不同。
摘要由CSDN通过智能技术生成

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值