13.1.1背后的原理
什么是深度纹理:
实际上就是一张渲染纹理,只不过它里面储存的像素值不是颜色值,而是一个高精度的深度值,由于被储存在一张纹理中,深度纹理里的深度范围是[0,1],而且通常是 非线性分布的。
深度值来自顶点变换后得到的归一化的设备坐标(Normalized Device Coordinates,NDC)
一个模型想要最终被绘制在屏幕上,需要把它的顶点从模型空间变换到齐次裁剪坐标系下,这是通过在顶点着色器中乘以MVP变换矩阵得到的,在变换的最后一步,需要使用一个投影矩阵来变换顶点。当用的是透视投影类型的摄像机时,这个投影矩阵就是非线性的了。正交投影使用的变换矩阵是线性的。
线性关系:两个变量之间存在 一次方函数 关系
线性回归:(Linear Regression)利用线性回归方程的最小平方幻术对一个或多个自变量之间的关系进行建模的一种回归分析。
深度值对应了NDC中顶点坐标的Z分量的值,由于NDC中Z分量的范围是[0,1],为了让这些值能储存在一张图像中,需要进行映射:
映射公式: d=0.5+0.5
如何得到深度纹理:
在Unity中,深度纹理来自于:
【1】直接来自于真正的深度缓存:当使用 延迟渲染路径(包括遗留的延迟渲染路径)时,可以访问到,信息储存在G-buff