说起UE4的透明材质,就不得不说到Unlit Translucency、Decal材质了,为了让大家更加了解UE4的透明材质,以下结合角色进行讲解!


UE4如何理解与应用透明材质


Decal材质和透明、非透明材质有什么区别


   ●  普通透明材质仅能拿到Gbuffer信息,但无法写入;因此我们能做的是对这些信息做一些处理后画回SceneColor上。但Deferred Decal可以更新Gbuffer(无Depth),这提供了计算灯光前让我们“改变材质属性”的机会。直观的应用是单独或者同时写入BaseColor,Normal, Roughness等等。


       Decal材质还能采样到部分buffer信息,比如 WorldNormal, AO, SceneDepth, CustomDepth, CustomStencil,提供进一步应用想象空间。但它并没有像普通透明材质能看到的背景信息类型那么多(比如无法取到SceneColor)。


   ●  非透明材质当然也直接了地写入Gbuffer(有Depth);Deferred Decal的透明材质没有Depth,这个特性决定了Decal是叠加绘制到背景上,非透明材质是直接绘制在当前几何体表面上。另外非透明材质无法单独写入个别材质属性到Gbuffer,而是全部。比如无法单独写入BaseColor而不画其Normal和Roughness。从这点上看如果希望使用Decal完全改变背景的所有材质属性,直接用非透明材质即可,效果类似并高效。


概念的理解有利于增加应用想象空间的自由度:就如同上面角色的特效叠加,效果虽然也是可以直接写在角色本身材质里,但分开作为Mesh Decal的好处除了上面提到的易于维护和减少复杂度外,分开的Mesh还可以有各种动画,变形等,有不少本身复杂材质很难实现的区域效果变化;比如角色的皱纹添加和变形(更新 normal+顶点动画);熨斗烫平褶皱(更新 normal+MeshDecal平移动画);一片有形状区域干湿的变化,这也许跨越了多个物体的多个材质,或者一个材质的部分区域(更新Roughness和BaseColor)。




   继续往下实践其他背景信息:利用场景深度(SceneDepth)模拟区域雾效:比如大概来实现一下以下的需求;


   1、雾的颜色需要远近可控;


   2、雾的浓度衰减方式需要随距离可控;


   3、雾的颜色和衰减在垂直距离上也需要同样的控制自由度;


   4、在不同朝向(逆光/顺光)需要有不同的颜色,并可控强度;


   5、可排除个别物体受雾影响


UE4如何理解与应用透明材质


Curve的RGB定义了远近颜色变化;A定义了远近浓度变化。


UE4如何理解与应用透明材质


高度雾的控制需要考虑雾本身绘制到物体表面的高度以及摄像机高度对于雾可见度的影响。


这里用到了WorldPositionBehindTranslucency的材质函数。


UE4如何理解与应用透明材质


这里还可以加太阳和天空对于雾的影响,甚至可以采样天空cube的低mip的贴图来增加色彩变化。


UE4如何理解与应用透明材质


选择性排除不需要被雾影响的物件。需要接入Opacity通道。


UE4如何理解与应用透明材质


效果展示。


UE4如何理解与应用透明材质


这个例子主要是想说明SceneDepth和WorldPosition在透明材质里被采样后的一种应用;当然这个作为全局雾效在后期材质里做可能更方便;但是透明物体具有区域可控的便利性;比如水体,洞穴等。


像洞穴这种类似Portal从一个空间到另一个空间的过度区域也是经常用到这种区域雾;相对于在雾中的效果,这提供了从外部看一个起雾区域的效果。


深度的采样在表现水体真实性作用很大;比如随着深度增加水的颜色和透明变化,水底景物折射偏移程度,深度比较后(Pixel Depth和SceneDepth)产生交界处的渐变遮罩,这个遮罩可以用来做半透的融合,岸边的水泡区域。关于“体”的概念后文有更进一步的描述。


目前大概了解了一些UE4的透明材质,透明材质应用在模型表面可以有区域性后期效果,加上材质物件的顶点,骨骼动画,或作为粒子发射,或物理模拟等可以带来很多后期无法实现的动态效果及灵活自由度。

,Unreal Engine技巧,Unreal Engine教程