Unreal Engine 4 —— Pixel Depth Offset的使用心得

来源:互联网 发布:js上传图片转base64 编辑:程序博客网 时间:2024/04/27 23:11

http://blog.csdn.net/noahzuo/article/details/51361789


这篇博客解释了Unreal Engine 4中的Pixel Depth Offset通道的使用心得,并且结合街头霸王Ⅴ对该通道的使用来归纳出一些注意事项。


街霸Ⅴ所使用的游戏引擎是UE4,相对于街霸Ⅳ来说,街霸Ⅴ在画面上有一个细节上的改进 —— 格斗的双方模型不会出现直接的穿插,取而代之的是优先确保一方模型的完整性。在这个效果中,就是用了Pixel Depth Offset的材质通道。

Pixel Depth Offset说明

Pixel Depth Offset是UE4中材质编辑器中的一个通道: 
Pixel Depth Offset

这个通道表示的是针对于这个像素在Depth Buffer上的值进行一个Offset,说的通俗一些:那就是将这个像素的深度沿着摄像机到该像素的方向往后推一个值。

下图中红色的球使用的是我们自定义的材质,Pixel Depth Offset值目前为0。 
Depth

将该值调整为50.0后: 
Depth2

可以看出,红球右上角的一些像素被推至灰球表面之后了,因此导致灰球的一部分可以显示出来。

街霸Ⅴ中的效果

SF

可以看到,在两个模型相互穿插的时候,Ryu的模型被完全显示出来了,因此可以断定是Ken的材质中Depth Offset被设定为了一个大于0的值,整个模型的像素深度被往后推,从而显示出Ryu的整个模型。

使用Pixel Depth Offset的注意事项

深度换算

由于Pixel Depth Offset的值代表的是将这个像素的深度沿着摄像机到该像素的方向往后推一个值。如果将其设定为一个固定的值,则往往会出现V向量与N向量的夹角越大,平面向后推的像素深度越小的情况。

PDO

上图中描述了如何将一个Surface深度向后推一个距离。因此该值不能设定为一个值,而应当设定为想要后推距离除以N向量与V向量的点乘:

DepthOffset3

通过这样的方法能够将一个面一起推后一个距离,而不会出现一个面上的不同像素推后距离不同的情况。

诡异的阴影

这应该是Pixel Depth Offset所产生的最严重的副作用了 —— 由于针对于深度的操作都是基于Depth Buffer,这样就意味着虽然深度改变了,阴影还是按照原来的情况计算。这个情况目前(包括4.11及之前)无解,在街霸Ⅴ中也有这种问题,分析如下。

Strange Shadow

这种情况可以通过减弱阴影颜色来缓解,但是目前无法避免。Epic的官方回复是已经在解决中,但是还需要做一些工作才行。

<全文完>


0 0