我们在Houdini和Unreal Engine 4中模拟一条逼真的河流



当从DX9到DX10的过渡刚刚开始时,很多游戏开始出现在具有正确效果的凉爽造型的水中。 然后差异非常明显,特别是如果您将前几代游戏与同一个《孤岛危机》进行比较。 因此,当我遇到有关如何通过UE4的Houdini插件进行简单而逼真的河流模拟的指南时,我什至没有想到并迅速进行翻译。

序言


  • 下载Unreal和Houdini 资产 。 安装视频在这里
  • 我的大部分项目都遵循Ben ShriverAndreas Glad的教程。
  • 不要害怕节点和脚本。 它并不像看起来那样困难。
  • 对于水,我使用了Unreal Starter内容中的法线贴图。

引言


我叫西蒙。 我小的时候就开始在QBasic和Pascal上编程(下面是示例 ),我立即意识到编码很困难,因此转而使用3D艺术。 同时,我始终对制作游戏的技术方面保持兴趣-事实证明,我成为了VFX艺术家。 这个专业很好地融合了艺术和技术。

我曾在Sacred 2X:Rebirth担任3D美术师,并在RiME The Invisible Hours中担任VFX美术师。 现在我正在研究WiLD



我也有几个与游戏开发相关的个人项目: Game Art Trick博客,German Game Dev Podcast以及带有UnrealHoudini教程的YouTube频道。

Houdini简介


在制作《隐形时刻》时,我和Houdini交了朋友。 然后,我制作了一个小型的流体模拟器,可以实时暂停,部署和向后播放。 结果是这样的:


资料来源: 《隐形时刻》中的流体模拟

我不知道如何向Unreal添加流体建模。 幸运的是,Houdini中实现了一项惊人的技术,称为“基于顶点计数不可变形的基于目标的流体动画” ,因此我能够将流体仿真添加到游戏中。 该技术最初是由Norman Shaar开发的。


来源: UE4 Norman Shaar中与顶点计数无关的变形目标

如果您想了解更多有关实现的信息,请查看我的“带纹理的东西”一章的这一部分:


河水的影响:项目的开始


我想学习如何为实时VFX河挑战赛制作程序生成的河,但不知道从哪里开始。 偶然地,我从Ben Shriver那里找到了很棒的教程 ,他在其中谈到了《地平线零黎明》中的河流。 我迷上了,我决定尝试一下!


顺便说一句,关于安德烈亚斯·格拉德Andreas Glad)的霍迪尼(Houdini)河,还有另一本非常酷的教程:


这些视频一开始确实为我提供了帮助,并成为了基础。

一种非常困难的景观设计方法


救济非常复杂。 我将说明创建过程,以便每个人都了解:


资料来源: 在Houdini中创建地形

开玩笑的 太容易了。

河效应


第一步是从Ben的教程中复制的,而且很酷。 首先,创建一个样条并使其“掉落”在地面上。 这是通过读取样条曲线点处的释放高度,然后将这些点移至该高度来完成的:



然后,让样条曲线点“沿斜坡向下滑动”以更好地将河流整合到地形中:



实际上,它们不是以物理方式滚落的。 取而代之的是,使用表面的基本法线和点的法线来计算每个点的局部轴(从样条线向下倾斜)。 然后,沿计算轴稍微移动点(Ben的视频很好地显示了此过程)。

下一步是确保河道不会因景观而向上游流动(因为河道沿途有一座小山丘)。



一个小的Python脚本可确保3D空间中的样条点永远不会比上一个高:



增加自然度的另一个技巧是避免连续倾斜。 取而代之的是让河流分阶段流动(为了获得更好的可视化效果,我在这里显示了河流的几何形状,但实际上,我们仍然只使用一条样条线)。



最后,我们介绍我自己的想法:在样条曲线上添加颜色以标记斜率在哪里(绿色),斜率在哪里开始(绿松石)和斜率在哪里(红色)。 这将有助于我以后混合不同的水纹理并放置粒子系统。



让我们继续更快地创建河流几何图形,因为在Ben的视频中可以很好地解释所有这些内容。 最重要的一点是,仅河流的外边缘再次与浮雕对齐(就像我们首先对样条线所做的那样):



根据流量地形变形


同样,这是Ben的100%工作流程,首先是将浮雕移动到河流的几何形状下方,以使它们不会以任何方式相交:



然后,针对地形中的每个点绘制光线。 如果它们落入河流的几何形状,那么这些点将向上移动到影响点:



每个未命中任何地方的点将获得其原始高度。



此gif显示了样条线更改时发生的情况:



然后,将景观高度区域转换为多边形并重新混合。 现在可以在虚幻引擎中使用了:



现在让我们谈谈紫外线转换,材料,流图等。

河流几何


您之前看到的河流的几何形状仅用于切割区域。 真正的河更薄一些,具有紫外线并且被劈开了(请注意,我的斜坡颜色仍然存在):



紫外线产生


由于花键的长度总是变化的,因此紫外线必须适应于此。 幸运的是,在Houdini中这很容易。 首先,在0-1-UV-Space中创建UV,然后测量样条线的长度。 此值可用于缩放UV。 在这里,您将看到我如何更改样条线,在底部,您将看到UV如何自动适应。 相信我,如果您尝试过此操作,则永远不会再希望手动创建UV。



频道


另一个细节:我想使通道更暗,更湿。 为此,我从景观的每个多边形中绘制了几条光线,如果进入河中,则会为该多边形的所有点分配一种颜色。 创建的遮罩如下:



这是在材质中使用遮罩分配不同的模糊度和粗糙度值的示例:



流程图


用Houdini创建河流流量图非常容易。 您只需要对特殊节点说“这是我的河流几何形状,这是指示河流方向的样条线”和喷杆,几何形状突然得到代表河流流量的峰的颜色:



您可以添加另一个使流图响应障碍物的节点。 现在水将在它们周围流动:



最酷的事情是:您可以在虚幻引擎中烘焙流程图! 无需在虚幻和Houdini之间切换。 只需将Houdini中的“渲染”按钮设置为参数即可。 在这里,您将看到我如何改变障碍,然后可视化一个新的流程图(请注意,烘烤比在GIF上花费的时间更长):



泡沫面膜


为了在障碍物周围的水上产生泡沫,我使用了所谓的isoOffset节点。 它基本上以河顶的颜色存储到对象的距离。 然后我添加了一些噪音,并准备好了面具:



为了使泡沫蒙版的静态性降低,我使用了一个简单的Photoshop云模板,该模板沿着河流移动并将其从原始蒙版中减去:



而且,由于我们在谈论泡沫:小瀑布还具有简单的泡沫质地,仅在河边显示。 泡沫结构的滚动速度比河水滚动的速度快:



粒子系统


我注意到了层叠的上部和下部的位置,因此我可以过滤这些元素(使用线来创建河流的几何形状),在其中心创建一个点,然后将虚拟盒子复制到其中。 稍后,我们用虚幻引擎中的粒子系统替换它:



对于障碍物周围的粒子,我使用一个名为“相交分析”的节点来获取障碍物与河流的交点。 这些相交边具有点。 将它们的随机数再次复制到虚拟盒(稍后将其与虚幻中的粒子系统交换):



这是我在虚幻引擎中替换虚拟框时的样子:



将项目导出到虚幻引擎


所谓的Houdini引擎是Unity,Unreal,3ds Max,Maya和Cinema 4D的插件,并直接在这些程序中运行您在Houdini中创建的节点网络。 我需要使地形和河流看起来像将Houdini文件另存为数字资产。 它可以像虚幻引擎中的任何其他资源一样导入和使用:



现在,我可以更改参数(在Houdini中设置)或更改样条线,以使河流以不同的方式流动:



材质仍然是在虚幻引擎中创建和分配的,但是您可以提前分配它们(下面是我的教程)。



我们应该平等地研究Houdini工作流程吗?


胡迪尼有很多东西要学。 另外,这些是新的开发工具,因此文档中将出现错误。

但这是游戏开发人员的常见情况。 我们一直与需要首先被驯服的先进技术合作。 最重要的是:您并不孤单。 思维程序不和谐充满了很多乐于助人和教书的家伙。 在这些聊天中,您甚至可以找到SideFX开发人员!

参考文献


Source: https://habr.com/ru/post/zh-CN430144/


All Articles