眼睛处理
材质处理
母材质设置
先将母材质改为半透明

关闭深度测试和开启自定义深度

在改回不透明

因为深度测试会有深度剔除,这里关闭之后就没有剔除了

手动深度测试
这里深度测试仅针对半透明物体,PixelDepth表示当前物体深度,用Step和ScenceDepth比较,如果PixelDepth小于ScenceDepth,那么表示当前物体没有遮挡,使用Alpha来控制透明度,反之则表示物体前有遮挡需要剔除,这里直接将透明度给0就相当于剔除了。

深度测试剔除后就正常了

开启模型自定义深度
找到蓝图中的网格体,这里眼睛这3个是半透明,不做处理

除开头发以外的模型全部开启自定义深度

只需要开启就行了,不需要改蒙版值

判断眼睛的深度是否大于自定义深度
这里得详细分析一下,PixelDepth其实就理解为材质实例化后眼睛的深度,而自定义深度刚才上面也操作过了,相当于除开头发眼睛以外身体部分的深度。那么这里就好理解了,两者相减相当于判断前后关系,阈值表示允许的误差范围,如果自定义深度更大那么表示眼睛深度更小,在前方无遮挡,所以直接给透明度Alpha,反之被遮挡返回0直接剔除

这里Alpha是做了处理的乘了0.5,因为头发贴图中其实有一个Alpha通道能用来混合,但是因为眼睛和头发模型不互通,材质实例化后眼睛材质是读不到头发的UV的,自然也就没法使用头发的Alpha做混合,所以这里随意给的一个0.5

判断眼睛和头发之间的深度
和上面同理,但是这里换了一个东西,PixelDepth是眼睛深度,这里作比较的是场景深度,之前操作的时候除了眼睛部分,头发也是没有开启自定义深度的,所以这里场景深度是包括头发深度的,也就可以理解为是在和头发做比较,差值更大表示眼睛深度更大,就返回0,反之返回前面判断过的Alpha

最终通过两个条件就得到眼睛的深度和Alpha关系了

输出调整
然后设置一个开关来控制,输出给透明度

覆层材质指定
当前输出是没有效果的,还需要做下面的处理。至于为什么没效果,是因为虽然材质里面我们可以调用自定义深度这些东西计算,但是在UE中半透明材质是不会传入生成自定义深度,所以调用失败,但是覆层材质可以,它应该是属于后期处理材质一类(我猜测具体指定的时候可能进行过强转或者是直接进行传值),所以可以获取自定义深度。
找到眼睛相关材质

创建材质实例

将这些材质实例全部设置为半透明,开启ExtraPass开关

现在就生效了

问题优化
穿帮问题
现在这个方法虽然计算了眼透,但是会有穿帮问题,因为关闭了深度写入,计算时我们是采用了场景深度和阈值来计算的 当阈值较大,就会穿帮

修改阈值小一些会比较好

此外还有一个问题是侧面的时候太显眼了,问题很严重

优化调整
这里我使用法线的G通道和实现点乘从而让眼透Alpha跟着变化,同时使用深度影响。这里自己看着改吧


最终效果
