UE4 材质学习笔记03(翻书(Flipbook)动画/环境混合)

一.FlipBook Animation

如果你想让游戏以每秒30帧的速度运行,所有内容都必须在33毫秒内渲染出来,

如果你想让游戏以每秒60帧的速度运行的话,必须在16毫秒内。

所以当一个效果需要很多细节的时候,往往会离线创建它,然后将这个效果的每一帧放到一张纹理上,之后通过shader回放每一帧

例如下面就是一个爆炸效果的每一帧

材质编辑器里的FlipBook节点可以帮助我们播放每一帧,我们只需要连接时间节点以及行列数以及原来的UV,这个节点就可以给出我们合适的UV坐标来进行贴图采样。当我们将时间节点直接连接Animation phase的时候,默认每秒播放30帧,如果想要更改每秒播放的帧数,可以将时间节点乘上一个常数

但是接下来我们要不依靠FlipBook节点,自己来实现这个效果,这有利于我们了解FlipBook节点里面发生了什么,或者帮助我们改变效果或者做一些不同的东西。

要自己实现这个效果,首先就是缩小纹理,这个是使用乘法,这样就成功显示了第一帧的内容

接着要随时间增加变换UV坐标更换显示的图片。Floor函数可以将值向下取整。但是这样只有对角线上的图片

所以我们现在想让它按照每一行来播放,播放完一行就跳转到下一行。所以分别设置行数和列数,每当增加了六列以后行数就会加1,然后仍然将帧率设置成24

最终效果:

二.环境混合

在过去通常要给不同环境下的岩石都做一套纹理,然后就有了一堆不同的岩石资产,但是现在我们可以做的是我们可以创建一套岩石资产,然后根据岩石环境的不同来替换材质。

混合材质的方法就是使用lerp节点,Lerp节点会根据输入的Alpha(默认是0.5)对两张贴图的颜色进行混合,混合公式是lerp(A,B,t)=A+(B−A)×t

但是事实上苔藓应该只覆盖在岩石的顶部,因此我们引入世界空间的顶大法线,因为虚幻引擎是z轴朝上,所以获取到法线的z分量,通过这个分量去决定插值的比例,就可以让顶点法线向上的部分被苔藓覆盖,同时还要将法线的z值限制到0-1。

但是接下俩我们想要在岩石和苔藓之间有明显的分界线 ,首先可以在mask后面加一个power节点,这个可以进行幂运算,base值越大,二者分割线越明显,然后可以加上一个值控制苔藓的范围,加1的时候刚好覆盖一半的范围

但是这样的边缘线太生硬了,所以改为使用岩石自身的法线,使用法线的时候要将法线从切线空间转换到世界空间,这样岩石和苔藓相容的很好,当我们想要将岩石更换到其它环境的时候,只需要更换苔藓的贴图为其它环境的贴图就可以

相关推荐
Nan_Shu_6142 小时前
学习: 尚硅谷Java项目之小谷充电宝(3)
java·后端·学习
头疼的程序员2 小时前
计算机网络:自顶向下方法(第七版)第三章 学习分享(二)
网络·学习·计算机网络
星期五不见面3 小时前
AI学习(三)openclow启动(2)2026/03/05
学习
weixin_443478513 小时前
flutter组件学习之Flex / Expanded弹性布局组件
javascript·学习·flutter
im_AMBER3 小时前
Leetcode 136 最小栈 | 逆波兰表达式求值
数据结构·学习·算法·leetcode·
Xzq2105093 小时前
网络基础学习(一)
网络·学习
Fuliy963 小时前
第三阶段:进化与群体智能 (Evolutionary & Swarm Intelligence)
人工智能·笔记·python·学习·算法
ejinxian3 小时前
Go语言完整学习规划(2026版)- Part 1
学习·go
小陈phd3 小时前
多模态大模型学习笔记(十六)——Transformer 学习之 Decoder Only
人工智能·笔记·深度学习·学习·自然语言处理·transformer
艾莉丝努力练剑3 小时前
【QT】常用控件(一):初识控件,熟悉QWidget
android·linux·数据库·qt·学习·mysql·qt5