unity中深度纹理CameraDepthTexture的使用须知

此篇清楚以后的更深层解析:深度图采样解析
深度图CameraDepthTexture,网上的介绍一大堆,很多人可能会使用深度图并且能够实现一定的效果。。。。然而,问题依然存在:
(1)他并不明白深度图中的深度是怎么比较的?
(2) 从深度图_CameraDepthTexture中采样出的深度,对应场景中哪个点?

例如:水的颜色是怎么样通过 深度 来确定的?!
下面来详细的讲解一下:
第一:深度图的形成:
(1)图中存的是像素d:[0,1];归一化的NDC坐标的Z值是[-1,1],将NDC坐标转化为[0,1]就是存在深度图中的值
在这里插入图片描述

(2)NDC坐标中的Z值是哪来的?!
坐标转换:从模型空间- 世界空间 - 视图空间 - 裁剪空间 - 屏幕空间
直接略过前两个空间,这里说一下 :从视图空间 - 屏幕空间这个转换
视图空间 - 乘以齐次裁剪矩阵- (齐次)裁剪空间
注意!!!
首先:从视图 - 裁剪: 此时并未进行“齐次除法”,不是归一化的坐标!!!在shader中vert着色器中,也只是转化到了这个阶段,并未在vert中进行归一化

然后:在frag中进行齐次除法归一化,
以上两步在 冯乐乐的 入门精要中已经说的很清楚了,附网址:
https://blog.csdn.net/linuxheik/article/details/79446780
(3)哪些物体会被存储到深度图中?!!!
看似很简单,但如果这个搞不清楚,在计算深度差值的时候,绝对是一脸懵逼!!!
我直接说结论:
第一条:Queue = Transparent 的不会被存进深度图
第二条:没有被ShadowCaster通道,或者没有单独画进深度图的通道

符合1或2条,就不会被计算存储到深度图中(**

是不是半透明,非常关键

**)
下面我举个例子:
第一种情况:水面 Queue != Transparent
第二种情况:水面 Queue = Transparent
这两种情况下的深度计算的意义是啥?!
在这里插入图片描述
搞清楚 从深度图_CameraDepthTexture中采样出的深度,是哪个位置的值。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 黑客帝国 设计师:上身试试 返回首页