文章目录
前言
在之前的文章中,我们实现了对深度图的使用。因为,深度图不是线性的。所以,在使用时,我们使用了 Linear01Depth 函数对其进行了线性转化。
但是,对深度图进行线性转化 还有其他函数。
在这篇文章中,我们来看一下深度图线性转化的 Linear01Depth函数 和 LinearEyeDepth 函数 干了什么。
一、_ZBufferParams参数有两组值
-
在OpenGL下

-
在类DirectX下

二、LinearEyeDepth
1、使用
-
对采样的深度图纹理进行线性转化

-
转化后的值,就是原来物体的深度 Z 值
float4 cameraDepthTex = SAMPLE_TEXTURE2D(_CameraDepthTexture,sampler_CameraDepthTexture,uv);
float depthTex = LinearEyeDepth(cameraDepthTex,_ZBufferParams);
- 返回结果全白,效果不明显

- 我们对其取小数部分,使其效果明显一点
frac(depthTex)

2、Unity源码推导:


- 这里使用OpenGL下推导
Z v i e w = 1 1 − f n f d + f n f Z_{view}=\frac{1}{\frac{1-\frac{f}{n}}{f}d+\frac{\frac{f}{n}}{f}} Zview=f1−nfd+fnf1
Z v i e w = 1 ( n n − f n ) 1 f d + 1 n Z_{view}=\frac{1}{(\frac{n}{n}-\frac{f}{n})\frac{1}{f}d+\frac{1}{n}} Zview=(nn−nf)f1d+n11
Z v i e w = 1 ( n − f n ) 1 f d + 1 n Z_{view}=\frac{1}{(\frac{n-f}{n})\frac{1}{f}d+\frac{1}{n}} Zview=(nn−f)f1d+n11
Z v i e w = 1 n − f n f d + 1 n Z_{view}=\frac{1}{\frac{n-f}{nf}d+\frac{1}{n}} Zview=n


2186

被折叠的 条评论
为什么被折叠?



