UE4 Fade out Mesh

 

  由于项目需要一个将场景慢慢淡入以及淡出的效果,所以就想了想实现思路。因为PBR光照模型是不支持透明物体的渲染的,所以UE4中的PBR材质在为Opaque时是无法改变透明度的,想来想去想不出解决方法,然后就找啊找找啊找,发现一种偷鸡摸狗的方法,为每个Mesh准备两种材质,一种透明,一种不透明,在需要的时候切换材质并调整透明度即可,不知还有木有更炫酷的解决方法,先记录一哈。

  在这个项目中,我选择将这个功能做成一个Actor Component,这样需要这种效果的Mesh只需添加这个组件就能实现Fade Out Fade in的效果。下图为该组件的变量及函数:

  ParentMesh:为获取组件被挂在到的Mesh。

  Hidden:控制Mesh消失。

  BaseMaterial:保存Mesh的原有材质。

  FadeMaterial:Mesh Fade时的材质,指定为可编辑的,每个Mesh单独指定。

  FadeMaterialDynamicInstance:Fade材质的动态实例。

  FadeCurve:Mesh Fade时的控制曲线,可编辑。

  CurrentFade:作为曲线的X输入,得到的值控制Fade时的透明度(即材质的透明度参数)。

  FadeRate:Mesh Fade的速率。

  IsStartHidden:Mesh的初始状态是否为隐藏。

  Toggle Hide Mesh:当Hidden为true时,设为动态材质实例,并在tick中根据曲线修改透明度。

  

  BeginPlay:初始化一些变量,生成动态材质实例,根据IsStartHidden来指定初始状态。

  Tick:根据Hidden决定曲线中的X输入是递增还是递减,并且设置最大值最小值的限制,赋值给材质中的Fade参数,这种材质中的参数统一为Fade,最后判断CurrentFade为1而且Hidden为true时,设为原有材质。

  用法:将组件挂在有Mesh的Actor中,设置曲线,Fade材质,FadeRate,及初始时是否隐藏。调用ToggleHideMesh,参数为true为隐藏,false为显示。

  总结:要实现一个Mesh的Fade out需要准备两种材质,一种透明,一种不透明,在Fade Out的时候切换为透明材质,根据一个渐变的值赋值给材质的参数即可。

 

  如果需要做出将挡住主角的Mesh Fade out只需要在主角和摄像机之间发出射线,将碰撞的物体加入一个数组,跟上一帧比较,将上一帧数组中不在这一帧数组的物体恢复原样,再把这一帧数组的物体Fade Out。

 

posted @ 2017-04-24 12:47  Litmin  阅读(692)  评论(0编辑  收藏  举报