UE4中的动画雨滴材质
介绍
你好!我的名字是Harry “deBug” Emelianov,我是一名来自莫斯科的自学艺术家。
CG 成为我 14 岁时的爱好。我一直在做 ArchViz 和高多边形建模,但我对电脑游戏的热爱使我选择了 Gamedev。那时,我开始学习游戏引擎(当时的 UE3 和 Unity4),并学习 C#、C++ 以及如何使用 GLSL 和 HLSL 编写着色器。有一段时间,我为TraceStudio 和Fox3D外包,参与了很多有趣的项目,比如使命召唤:无限战争、Arktika 1、瘟疫故事:无罪等等。现在我是一名自由职业者,并在莫斯科的ScreamSchool教授环境设计和游戏纹理课程。
UE4 中的动画纹理
虚幻引擎非常适合创建简单而美观的动画着色器和效果,因为它不需要很强的编程技能,只需要基本的数学知识。您需要两个参数来调整动画材质:会改变纹理的时间相关坐标,以及您可能已经猜到的时间。
雨滴材质
动画水滴的工作流程几乎相同。我开始制作一些包含材料所需信息的静态纹理。
它需要创建一些地图:
静态滴的法线贴图和打包的蒙版。
R,一个时移掩码,负责水滴在正确的时间出现和消失。
G,用于将液滴与表面混合的蒙版。
B,一个噪音遮罩,使水滴看起来更混乱。
用于移动水滴和包装蒙版的法线贴图。
R,滴本身的掩码。
G,滴路径的掩码,不允许其他静态滴出现在运行滴的路径上。
以及扭曲的法线贴图,它影响水滴在表面上流动的方式,使其更加不规则。
然后,我用所有必要的信息和逻辑制作了两个过滤器。它们分为两组:静态液滴随时间出现和消失,以及流过表面的动画液滴。
工作流程
首先,我们需要获取纹理的坐标并开始在必要的方向上移动它们。稍后,我们将使用这些坐标对扭曲的法线贴图进行采样,并在水滴的纹理坐标中添加轻微的扭曲。有了关于失真和纹理坐标位移的信息,我们可以对法线和蒙版进行采样。然而,为了让不仅仅是简单的水滴流动,我使用了面具的红色通道,并使其强度随时间变化。此外,我还通过添加一些简单的数学函数,让水滴在一段时间内出现和消失。
第二个过滤器也是如此。它包含置换纹理坐标和扭曲,但略有不同。当我制作流动水滴的纹理时,我只为它制作了一个水滴和一套面具。为了填充水滴,我不得不添加一个循环,其中水滴被复制、置换、具有不同的速度(每个水滴都是唯一的),并最终相互混合。为了使失真更有趣,我使用了两次失真贴图:用于大失真和不太密集的失真。然后,它们沿着轴以不同的强度混合在一起。假设,可以在一张地图中使用多个水滴或一张地图用于所有水滴,但在这种情况下,所有水滴将以相同的速度相互平行移动,因为您将无法影响单滴的速度和时间。
我还有一个自定义节点,其中包含有关最大滴数的信息,并使用滴的当前位置和速度设置了一个静态数组。它可以手动或在 Unreal 中完成,但我使用了3ds Max的旧脚本。
此脚本获取有关编辑器中所选对象的位置和大小的信息,并将其返回到定义的数组中。在我的例子中,我只使用了 XY 坐标和一个下落速度的索引。类似地,我们可以创建一个包含有关液滴大小信息的数组并将其添加到材料中。
当过滤器准备好后,我调整了它们的输出参数。我还创建了一些可以在材质中更改的输入参数,例如,动画速度、平铺、下降失真强度、法线贴图强度和使用过滤器的纹理。
之后,这些过滤器可用于任何材料,无论其类型如何。材料的参数可以在其遮罩的帮助下进行调整。
作为示例,我制作的第一个基础材质是哑光不透明表面,这是混合必要蒙版和设置诸如颜色、粗糙度和水滴法线等参数的起点。
如果我们将材质类型更改为透明并类似地添加透明度和扭曲,我们将得到一个简单的玻璃材质。
为了使物体更加有趣和复杂,我们可以通过模糊玻璃后面的背景来添加冷凝效果。此技巧仅适用于透明材料和后期处理。我们还必须降低透明度,仍然保持材质类型透明。之后,是时候给材质添加模糊效果了。
然后您可以添加一个遮罩,以避免在平行于地面的表面上移动水滴。以同样的方式,我们可以将它与现有纹理混合,例如,水滴从屋顶上落下的纹理,或任何其他材料。
以下是在后处理中使用过滤器的示例:
结论
不幸的是,所有这些效果都非常苛刻,这意味着它们更适合不占用屏幕太多空间的小表面。例如房间里的窗户。
使用的纹理、混合和复杂的数学越多,渲染材质就越困难。
为了优化,我们可以简化纹理,例如,如果我们不想要这样或那样的效果,可以减小它们的大小或去掉一些数学运算。在这个过滤器的情况下,我没有针对某些特定的结果,而是尝试制作一些可以在必要时简化的多用途东西。