
当从DX9到DX10的过渡刚刚开始时,很多游戏开始出现在具有正确效果的凉爽造型的水中。 然后差异非常明显,特别是如果您将前几代游戏与同一个《孤岛危机》进行比较。 因此,当我遇到有关如何通过UE4的Houdini插件进行简单而逼真的河流模拟的指南时,我什至没有想到并迅速进行翻译。
序言
引言
我叫西蒙。 我小的时候就开始在QBasic和Pascal上编程(下面是
示例 ),我立即意识到编码很困难,因此转而使用3D艺术。 同时,我始终对制作游戏的技术方面保持兴趣-事实证明,我成为了VFX艺术家。 这个专业很好地融合了艺术和技术。
我曾在
Sacred 2和
X:Rebirth担任3D美术师,并在
RiME The Invisible Hours中担任VFX美术师。 现在我正在研究
WiLD 。

我也有几个与游戏开发相关的个人项目:
Game Art Trick博客,German
Game Dev Podcast以及带有
Unreal和
Houdini教程的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开发人员!
参考文献