我之前的博客:解决透明乱序和河水制作里面都有利用到深度值来做一些效果。但是是是否对虚幻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