CustomDepth是什么

CustomDepth,可以用来显示特定物体的轮廓,比如UE4编辑器中,选中的物体,有一个黄色的轮廓。

可以通过比较CustomDepth和SceneDepth来实现。

所谓的Depth,就是被渲染的点距离镜头的像素个数。

深度越大,距离镜头越远。

CustomDepth示例

在后处理材质中使用。

下图为效果。

注意到,整个场景被蒙上了一层紫色,而用红圈标识的三个物体,则显示为紫色(姑且这么叫吧)(其实是半紫色,因为颜色花样不多,看不出来)

这三个物体,在Detail中,设置了渲染customdepth pass:

后处理材质

而在后处理材质中,根据SceneTexture:CustomDepth和SceneTexture:SceneDepth的相对大小,设置了不同的颜色,如下图所示:

渲染CustomDepthPass情况下CustomPath的值

可以清楚地看到,一般情况下,CustomDepth要大于SceneDepth,也就是平时不起作用。

如果设置了渲染CustomDepthPass,那么这两个值则相等了。

那么,一般情况下,CustomDepth值是多大呢?文档中并没有提及,应该是非常大的一个数,从下面的示例中就可以看出来。

一般情况下CustomDepth的值

我写了一个材质用来测试CustomDepth的值,材质节点如下:

if出去的节点连接到EmissiveColor。

通过这个材质,一般情况下,CustomDepth的值为10^8。我以为会是一个很不整的数,结果很快就找到这个数了。

目前并不知道这个数是否和平台相关。

根据CustomDepth显示被挡住的物体

上面的示例,当物体被挡住时,并不能显示。

那么,怎么才能显示被挡住的物体的轮廓呢?下图是效果。

这是怎么做到的?其实只要在材质中,对CustomDepth减去一个数就可以了。如下所示。

这里减去的数是100000,相当于把CustomDepth往前提升了10万个像素的距离。

这样具有CustomDepth的物体,相当于往前放了。

这样被挡住的物体,就可以被显示了。但是如果物体距离相机超过了10万,那么该被挡还是被挡。。

显示物体的轮廓

有了前面的基础,物体轮廓的显示,就呼之欲出了。