如何获取深度值线性化函数的逆变换函数?
线性化深度的逆变换函数
你需要的是将线性深度值转换回原非线性深度值的逆函数,我们可以通过对原函数进行代数推导得到:
设原函数的返回值为z(线性深度),输入的非线性深度为d,原函数表达式为:
float linearize_depth(float d, float zNear, float zFar) { return zNear * zFar / (zFar + d * (zNear - zFar)); }
对该式逆推求解d,最终得到逆函数如下:
float nonlinearize_depth(float z, float zNear, float zFar) { return (zFar * (zNear - z)) / (z * (zNear - zFar)); }
也可以整理成更直观的形式(分子分母同乘-1,结果一致):
float nonlinearize_depth(float z, float zNear, float zFar) { return (zFar * (z - zNear)) / (z * (zFar - zNear)); }
这里的z是原linearize_depth函数输出的线性深度值,返回的d就是对应原函数输入的非线性深度(通常是NDC空间下的深度值,范围一般为[0,1]或[-1,1],取决于你的渲染API配置)。
内容的提问来源于stack exchange,提问作者HenriV
相关产品推荐
相关产品推荐

