欢迎光临散文网 会员登陆 & 注册

Unity学习笔记 Vol.73 使用VFX Graph创建火焰、烟雾和迷雾

2020-09-12 16:15 作者:NXL2  | 我要投稿

摘要

    在本节中,我们将进一步了解2019.3中的Visual Effect Graph功能,并介绍一些基础概念帮助大家在Unity中开始设计视觉特效(Visual Effect)。详细教程请参考官方视频。


教程

    本节中,我们通过学习VFX Graph基本的思路与概念,在Unity中入门视觉特效制作,在前边的专栏中,我们了解了什么是Visual Effect Graph,如何使用工具制作粒子效果。在本节里,我们将学习如何用有趣的方式修改纹理,来制作炫酷的视觉特效如火焰、迷雾和烟雾。

    图中使用VFX Graph Spaceship Demo场景,Spaceship Demo展示了一系列能用VFX Graph制作的特效,工程可在下方链接中下载,VFX Graph一个很棒的功能是使用纹理表单制作带动画的粒子。

    纹理表单,又称作精灵表单或纹理图集,是一张由许多小图片组成的图片,在使用多个小纹理时,比如在粒子上的纹理,可用纹理表单来高效地引用多张图片,仅需引用一张纹理,不必再引用多个单独的纹理,我们能用纹理表单保存多帧动画,通过更改坐标来生成动态纹理。

    比如,这里有一个 烟雾动画效果的纹理表单,我们看看如何VFX Graph中更迭纹理,制作一种帅气的烟雾效果。

    首先新建VFX Graph称为Smoke Effect,再建立Spawn文本框,烟雾应持续生成。

        那新建Constant Spawn Rate,暂时将值设为1,方便随后预览纹理。

    然后,创建Initialize和Update文本框,在Initialize文本框中,新建Set Lifetime功能块,将其设为5。

    在Output中,将粒子渲染到Quad上,添加Size over Life功能块和Alpha over Life功能块,让烟雾粒子能随时间变大/淡出。

    接着,添加烟雾纹理,在Output中 ,将纹理表单指定为主纹理。

    我们希望图表分离出子纹理,而不是像这样渲染整张纹理,因此需要告诉VFX Graph该纹理为纹理图集。

    在Output的设定中,将uv模式从Default改为Flipbook,接着确定纹理的大小,让图表能正确分离纹理,烟雾纹理以8x8的网格排列,将其设为Flipbook的大小。

    这下纹理的大小正确了,然而纹理并没有动画,貌似VFX Graph仅使用了表单上的第一个子纹理,但我们需要循环过所有的纹理,形成一个动画。

    我们可通过修改纹理索引值,来更改VFX Graph展示出的子纹理,可在Initialize文本框中使用Set Text Index功能块实现。

    如果增加生成速率,在粒子生成时调整索引数值,便能在每次粒子生成时,让图表选择不同的纹理,在明确纹理索引的用法后,我们需要让VFX Graph,随时间按顺序增加纹理索引值,逐帧展示烟雾动画。

    我们能用Flipbook Player功能块实现,在Update文本框添加Flipbook Player功能块,将Frame Rate设为16。

    现在,当每个粒子生成时,VFX Graph会逐个抓取纹理表单,播放烟雾动画的帧。这样看起来很不错了。

    接下来还可以,给烟雾添加矢量,让其像烟雾一样移动,在Initialize文本框中添加Set Velocity(Random)功能块,正如名字所示,功能块会在粒子生成时为其添加一个随机的矢量,这里将最小范围设为-0.1、-0.4、-0.1,将最大范围设为0.1、-1和0.1。

    这下纹理会向下移动,并且向两边有一定轨迹。

    再将Spawn Rate设为20,将Lifetime缩减为1.5。

    最后,还需要在Output文本框中,添加Orient Face Camera Plane功能块,这样会生成所谓“展示牌(Billboard)”的效果,可让平面纹理从任何角度都像是3D的。

    一个好看的烟雾效果完成了。

    VFX Graph的一个优点是可以轻松用同一张图表创建不同的特效,在Initialize文本框内新建Set Color功能块,将其作为属性暴露在检视器中。

    这时复制烟雾特效,将颜色改为红色,烟雾就变红了,但是,如果将Intensity数值提高到约8,再将颜色稍微向黄色偏移,烟雾颜色会自我混合,看起来就像火焰,我们仅点击了几下,就制作出了一个完全不同的特效,我们继续修改,让这里凉快一下,加入一个水汽迷雾效果。

    项目中有一些云朵纹理,我想拿来优先雾气,问题在于它们都是单独的图片纹理,而我想在每次粒子生成时从中随机选择一个纹理。

    因此,我们要将图片组合成一个纹理表单,VFX工具 箱中的图片排序器,可以制作用于视觉特效的纹理表单,从视频访问下方链接便能从GitHub下载VFX Toolbox。

    下载完成后,从Package Manager中安装VFX Toolbox。

    在磁盘上选择包的JSON文件即可。

    安装完成后,打开图片排序器窗口,选择Window > Visual Effects > Image Sequencer。

    选择窗口中的Create  Image Sequence。

    接着,将纹理插入窗口的Input Frame部分。

    在Processors一栏,选择Texture Sheet > Assemble Flipbook,功能会根据uv设定,将几个帧拼接在一起生成采样图片,选择Get按钮来自动为纹理指定最合适的长宽比。

    然后选择Export一栏,选择Export as New来导出、保存纹理,一个能用于VFX Graph的纹理表单就完成了,我们来创建烟雾效果,在检视器中设定纹理。

    新加Texture2D节点,将其转换为属性,再添加Vector2属性,来设定手翻书的大小。

    接着复制效果,将纹理替换成刚刚创建的纹理表单,更新Size来匹配纹理,效果开头不错,

但精灵应该有动画才对。

    在图表中为Frame Rate添加一个属性。

    接着在检视器中将雾气的帧率设为0,停止播放动画,看起来好多了,但效果目前仅使用了表单上的一个纹理,我想要在粒子生成时,随机设定纹理索引值。

    在Initialize文本框中,添加Set Tex Index Random功能块,新加Vector2属性,称为Tex Index Range,将输出指定到功能块。

    这下我们能设定雾气粒子生成时的纹理范围了,希望你了解了如何使用表单和手翻书动画,来为游戏制作有趣的视觉特效,使用、控制纹理来模拟如烟雾、火焰、迷雾和爆炸是初学者入门视觉特效的绝佳课题,你也能修改不同的类型的纹理,看看能做出什么,许多视觉特效都由不同效果组合而来。

Unity学习笔记 Vol.73 使用VFX Graph创建火焰、烟雾和迷雾的评论 (共 条)

分享到微博请遵守国家法律