虚幻4中SceneDepth , PixelDepth ,Customdepth,CustomDepth StencilValue的区别

我之前的博客:解决透明乱序和河水制作里面都有利用到深度值来做一些效果。但是是是否对虚幻4的各种depth和各种value所困扰呢。我查了下文档和各种请教大神终于把虚幻4的各种depth,各种奇奇怪怪的东西捋了一下。


首先来看一下虚幻4的渲染流程:

scenedepth 是在第三步 prepass/depth only pass里面得到的。里面储存了场景深度。

如图所示SceneDepth表示了1+2的这段距离。

pixeldepth则是当前像素点到摄像机的距离。这段距离等于“2”所示距离。

CustomDepth和Pixeldepth在无遮挡的情况下是相等的。比如一个场景里面就只有一个模型,并且这个模型开启了CustomdepthWrite模式。那么输出的CustomDepth和PixelDepth是相等的。如果这个模型前面有堵墙。那么这个PixelDepth和Customdepth就是不想等的。

CustomDepth相当于把此物体的pixeldepth单独存到一个独立的缓冲区里。不受遮挡物的影响。

结合实例看一下:


这是一张典型的乱序图。因为透明物体是在prepass之后绘制的,在总体渲染的倒数第二步进行的,所以透明物体其实没有透明剔除过程。既然没有我们就手动给他进行剔除工作

这时customdepth和pixeldepth的作用就来了。看上图的右下角所示。红色圈内的像素是乱序像素,它的customdepth值是比pixel小的。将CustomDepth和Pixeldepth的值相减就能得到他们深度差值。这个差值就有意思了。如果这个像素应该是在物体表面的内部的,那么这个差值应该是<0的。这时我们用clamp就能强行把物体内部的像素的opacity值变为0.当这个像素的opacity再和基础值0.5相乘时,它就是0了。是完全透明的。如果这个时候开启透明最小值剪裁,就能把这个乱序的像素彻底剪裁掉。


CustomDepth Stencil value 则是一个蒙版。这个蒙版的值是integer的。范围是0到255.可以用来做蒙版遮罩(我的前几篇博客模型勾边就有介绍这个东西的用法)

传送门:

(两个重叠模型模拟双pass,顺便解决透明乱序问题)http://blog.csdn.net/qq_16756235/article/details/76616408

(模型勾边)http://blog.csdn.net/qq_16756235/article/details/75196152


非常抱歉,我的回答有误。在蓝图的Actor中,确实可以使用Set Render Custom Depth节点来设置Render Custom Depth属性为True。感谢您的指正。 因此,修改如下: 1. 创建一个新的Actor,右键选择Add Component -> Camera来添加一个Camera组件。 2. 在蓝图编辑器中,打开Actor的蓝图,在Begin Play事件中添加蓝图节点。 使用Set Render Custom Depth节点将Actor的Render Custom Depth属性设置为True,这样就可以使用Custom Depth材质来实现可视化。 还可以使用Set Custom Depth Stencil Value节点来设置Custom Depth的值,例如设置为1。 3. 创建一个新的材质,并将其Shading Model设置为Unlit。 在材质编辑器中,添加一个Custom Depth节点,并将其输出到一个Constant3Vector节点。 将Constant3Vector节点的RGB值设置为(0, 0, 1),表示可见的部分将显示为蓝色。 在Custom Depth节点上方添加一个One Minus节点,并将其输出连接到Constant3Vector节点的Alpha通道上。 这样,不可见的部分将显示为红色。 4. 在Actor的Camera组件中添加一个Post Process Volume组件。 在Post Process Volume的材质选项中选择刚才创建的Custom Depth材质。 确保Post Process Volume的Priority值比场景中其他Post Process Volume的Priority值都要大,这样就可以确保Custom Depth材质生效。 5. 将Actor拖入场景中,并将Camera的位置和方向调整为需要的位置。 完成上述步骤后,当Actor中的Camera拍摄到的部分将显示为蓝色,而Camera无法看到的部分将显示为红色。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值