|
主专栏
概述
传统制作中爆炸特效的资源素材与制作方法已经非常成熟,但面对一些特殊需要,单独调节火焰颜色、烟雾光照、特效变速时还是会相形见肘。随着Houdini对于游戏美术制作更多的支持后,这些问题能暂时得到一个不完美但是较为全面的解决。
输出用于特效的素材不再只使用渲染好的beautiful layer,选择输出Fire Intensity,Density,Normal,Motion Vector.于ue材质中混合计算来制作一个满足基础需求的爆炸材质。
Pyro Shader
爆炸的元素由两部分组成,Fire与Smoke。Houdini中可输出单独的Density layer,Emission Layer分区分两个模块。但这样加入shader中无法计算烟雾正确的光照信息还需要一个Normal。
因此利用四个平行光源在相对于Camera空间的中,上下左右四个方向对体积进行光照合成Fake Normal.xy用于在shader中连接normal channel添加灯光信息。最后合成Smoke与Fire得到最终效果。(这部分是houdini中创建输出节点自带功能)
Figure1:在shader中合并分层元素合成最终效果
Figure2:创建render node并进行设置,输出分层打包需要的序列。
Figure3:载入渲染完成的序列,并进行参数修改后输出Texture。
得到pack tex后载入材质中制作base pyro shader[1]。
Figure 4:Base Pyro shader connect这里B通道的fire只是单色的,所以我使用Curve来remap color得到可调节的火焰颜色。 在图四中我添加了一个Fire mask部分去强制减弱Fre的强度,直接使用Fire合成毕竟不再是真实体积计算了,fire inten过高时会让所有的火焰全部过曝,因此我制作了fire mask来保留部分的火焰为低强度看上去于烟雾更为融合。
Figure5:Fire Mask
Retime
特效材质应用于游戏中会涉及到子弹时间这类变速镜头,在需要该效果时应加入变速功能。
最简易的retime使用current frame lerp next frame,两张图片只有静止着改变透明度lerp,而没有插值中间的动态。这样的效果会有明显的瑕疵。
Figure6:simple retime
较为合适的图像变速方法是输出物体的Motion Vector作为变速的基础,图像的UV加上Motion vector贴图来插值两帧图像之间的运动。流体的motion vector很幸运的可以直接在houdini中一键输出。
Figure7:motion vector的输出操作,Raw Multi是后面要写给retime函数的一个参数。
Figure8:将图七中的code复制到ue创建retime材质函数,在基础材质上再修改即可完成变速功能的设置。
以上是制作shader的所有内容,下面是对于变速插值动画的讲述[2]。
MotionVector Layer实质上就是一个速度层,记录当前物体/流体的速度,对于动力学来说new p=current p + vel。因此使用当前帧位置加速度等于下一帧的结果。
对速度层做一个0-1的强度变化插在两个整数帧之间做插值计算,即可插值出流体到下一帧的过程动画。
Figure9:使用Fractime来乘以motion vector层做插值计算。
图像:静止-变形-下一帧
Lerp current与next不只是当前帧需要运动起来,下一帧在lerp的alpha达到0.5后没有运动也会让整个效果变差出现直接静止出现的效果。
要保证插值完成时next部分的图像是刚好静止的原图,motion vector的插值强度反转为1-0同时uv部分也是uv subtract motion vec,做出图像从上一帧还原到原图的动态效果。
Figure10:合并当前帧与下一帧的插值计算
最终的两帧插值效果
参考
- ^base pyro shaderhttps://vimeo.com/223803985
- ^流体变速http://www.klemenlozar.com/frame-blending-with-motion-vectors/
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|