UE4材质中的CustomDepth
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万,那么该被挡还是被挡。。
显示物体的轮廓
有了前面的基础,物体轮廓的显示,就呼之欲出了。
原文地址:原文地址
本文首发与翰者学堂