没看过(一)的同学建议先看前一篇
接下来要制作的效果展示:
1.轮播屏添加随机感
1.1 寻找思路
还记得咱们做的第一台特效吗?基础款燥波轮播屏。最近收到反馈,如果在场景里放置大量该资产,重复度十分明显,每一块屏幕都是按照同样的顺序播放,除了绘制更多的贴图(原画:嗯?)还有什么办法可以添加随机感呢?原画同学提出了一台想法,让图片随机播放,我在大脑里搜索了一下,flipbook没这功能啊,材质没有random啊,一边说着这个需求做不了,一边暗想恐怕只能蓝图里写随机传值到材质了,然后到群里问小伙伴,大概有三种方案,一是蓝图传值,二是noise取值,三是curve K值,最后决定用蓝图,喊来了程序老弟跟我一起研究。
1.2 flipbook节点深入
我们把重点挪到flipbook上的第一台输入值,animation phase(0-1),官方说明:此处的默认值为 "Time" 节点。如果要更改速度,则需在此链接 Time*Speed (scalar parameter)。
这个括号里的0-1是指什么,让我们打开flipbook函数一探到底,这里有个开关控制钳制0-1,他让我们see tooltip,百度翻译一下:分形操作应用于动画阶段。这将导致动画阶段输入中正好为1的值返回0。启用此功能将使动画阶段值从0钳制到.9999,从而避免了此问题。
理一下思路:我们输入的Time(0-1)是一台连续的线性值。然后通过行列给他分成好多份,比如4*2分成8份,那么每1/8秒(0.125s)会切换一次图,但是这样太快了,我们给time乘了一台变量作为速度的调节。我们想控制这个值让他输入0.25,0.625,0.125……这样随机的数,就可以让uv随机轮播了。
1.3 蓝图传值
- 创建一台actor,左上角添加static mesh组件,放入屏幕的模型,我直接用引擎自带的plane了,添加它的材质。
蓝图传值,这里用的方法是MID而不可以用MPC,原因是我们要让每一台屏幕显示不同,所以要在游戏运行时动态的创建材质实例,这样每一台放置在场景中的(屏幕)才会有各自的材质参数。
回到母材质,给flipbook连入一台变量,取名random。在构造函数里,创建一台动态材质实例,然后存成变量,把source material也存成变量并暴露到外面(Instance Editable)。
在event tick里 set scalar parameter value,target就是刚才创建的动态材质,parameter name是我们在母材质里要改的值的name。我们使用random float in range(0-1)进行赋值。这样我们会得到一台每帧都在切换图像狂闪的屏幕,我们需要在前面加一台delay节点,delay的时间便是每次切换图像的间隔时间,开成变量并暴露出来,省事在外面调节。
1.4 大功告成:
2.全息视频播放器
先看效果:
2.1 基于sin的Glitch+1
再介绍一种故障艺术的制作方法,或是用我们熟悉的三角函数sin。先通过Mask UV得到一台渐变,然后计算两次sin,再取整就能得到一些横条。用panner让他向上流动,如果我们叠加两次,给不同的速度,就能得到更丰富的效果。
UE4的四种取整
我们把它封一台材质函数,后半部分如下,Glitch_Texture是单通道贴图,Glitch Intensity作为lerp的alpha来控制强度,输出结果是我们扰乱后的uv
2.2制作材质
把刚才的材质函数连入一张贴图看看效果(Glitch默认强度给的0.03)
添加一点点细节
2.3制作蓝图
导入一段炫酷的视频,然后创建一台小电视机(media player)和一台media texture。
创建一台蓝图,导入一台显示器mesh,并添加一台media sound组件。把新建的贴图替换到材质上,赋给mesh。
接下来是重点,使用Open source 这个方法在游戏开始时激活播放。target存成变量,选我们上面创建的小电视机,source选择那段炫酷的视频。
我们刚刚添加了sound 组件,但是这样不管角色在哪都能听见音乐,我们需要的是靠近屏幕音乐声音变大,远离屏幕声音变小,再远就没声音的效果。很省事啊,引擎提供了声音衰减的方法。参数自个调吧,很简单,主要是两个半径和衰减方式。
大功告成。
3. 全息鱼
终于到了期待已久的3D立体全息特效,母庸质疑,肯定是用模型做了。
让我们先去找一台模型,自个建或者找模型同学资产同学要,我就直接到sketchfab下载了一台鱼的模型。模型一般都带base color贴图,RMA贴图(Roughness、Metallic、AO)和法线贴图,不过我们制作全息特效,肯定使用的是半透明材质,用不到RMA贴图。
3.1 横条
因为我们想要的是 无论模型怎样摆放,看到的都是横条,所以使用ViewportUV,或是熟悉的三角函数sin,Lines_Numb来控制横条线的密度,这里add的time跟panner是一台道理,让横条往上走。
然后把材质改成半透明模型,把刚才的节点输入opacity,随便给emissive color连个蓝色,得到了这样的结果,已经有全息内味了,但离最终结果还差得远。
3.2 菲涅尔
可以说是很多特效的核心啊,我们用它来给模型描边,以后会经常经常用到,还不会的看这里:
菲涅尔节点官方文档
这个模型附带了两张贴图,一张base color,一张emissive color,我们将两张图进行混合,UE的混合模式和PS是一样的。半透明材质默认法线是灰的,在链接反射后才生效,我们给反射连个默认值,就可以使用发现贴图来凸显更多细节了,比如鱼鳞。
PS中的blend混合模式
3.3 透明乱序
相信大家已经发现问题了,透明物体遮挡不住后面,鱼头后面的鱼鳍被渲染出来很突兀,让我们分不清它们谁在前谁在后,这是因为透明物体不会被渲染到深度通道,无法正确排序。搜索了一堆方法,最终使用yivanlee大佬提供的方法。
UE4 解决半透明材质显示错误_Deveuper的博客-CSDN博客
YOung:在UE4中实现Depth Peeling
YivanLee:虚幻4渲染编程(特效篇)【第一卷:Hologram Effect】
再加点小细节,扫描线效果
最终效果:
做到这里已经快半夜两点了,程序小哥喊我回家了,给他看看效果,被吐槽不能动,嘤嘤嘤,这就去学动画。
4.全息3D家用投影
模仿一下2077路边的传送点全息特效,先分析一波。由三个部分组成,旋转的三棱柱,射灯,光斑。
4.1 模型制作
三棱柱的三个面图案是一样的,可以把UV叠在一起。四面体是下面射灯的边界,三角片就是模拟射灯的了。
4.2 形态模拟
新建一台Niagara System(以后简称NS),新建3个Niagara Emitter(以后简称NE),把三个模型丢进去,调整位置把位置对好。为了能看见粒子,给一台简单半透明双面材质。
- 永久存在粒子:在cascade粒子的life time给0,便会永久存在。在Niagara里我们需要把particle state里的Kill 勾去掉。然后发射模型选择burst 1个,设置发射器循环次数1,永久。
- 旋转:我们想让他一直以一台速度绕Z轴旋转,所以速度要加在粒子spawn的时候,如果加在update里,速度会持续增加。和旋转相关的有两个节点,一台是速度,一台是增加力来产生速度(这里可以看出,Niagara里的这套物理算法跟cascade已经不一样了,以后慢慢讲)不管用哪个节点都需要一台解算器,点击fix issue 引擎会自动帮你加一台,很人性化。
涉及到旋转的,一般都可以选坐标空间,节点里转换的。详情双击节点打开module script看。
- 射线:这里最难搞的是模拟射线,我们要让它绕自身Z轴旋转,然后给他一定的角度,再绕着世界空间的Z轴旋转。
三角片发射的要多一些,我发射了5个并且给了一定范围内随机的size。做到这里已经有内味了。
4.3 材质制作
继续给上面的射灯添加细节,非常简单,叠加一台四方连续的纹理,做一台mask,让射线的光柱下面亮上面暗。四面体也用这个材质。
4.4 主体三棱柱
接下来,我们制作主体三棱柱的贴图。上pinterest找张地图,拖进PS里抠一下图,我们只要单色,所以我去色了,画点小边框加工一下,最后别忘了缩放拉伸铺满画布,因为我们的UV是铺满的。
一层太单薄,我叠加了两层模型,有重影的感觉,2077里应该是加了三层。这里有个小技巧。Niagara的render可以渲染多个,我只需要再设置一台scale比第一台模型偏小一丢丢,然后到第二个模型的binding里给到它。是不是很省事,如果是cascade还要复制一台发射器。
最后添加一点细节,灯光和光斑(lens flare),灯光影响体积雾的参数拉大效果更佳。
最终效果:
下期预告:
- 全息UI没讲上(又鸽了),下期跟GIF一起讲
- 全息人物
已更新: |