在Houdini和Unreal中创建河流

前言
您可以在此处下载Unreal和Houdini Assets 。这是安装视频。
对于项目的主要部分,我遵循了Ben Schrijvers和Andreas Glad 的教程。
不要害怕节点和脚本。这并不像看起来那么难。
对于水,我使用了 Unreal Starter 内容中的法线贴图。

介绍
我是西蒙。我很小的时候就开始用 QBasic 和 Pascal 编程(这里是例子),意识到编码很困难,然后转向了 3D 艺术,但我一直对制作游戏的技术方面保持兴趣,现在我最终成为了一名 VFX 艺术家——一个艺术与科技完美结合的职业。
专业上,我在Sacred 2和X:Rebirth担任3D 艺术家,并在RiME、The Invisible Hours和现在的WiLD担任VFX 艺术家。
我还有一些与个人游戏开发相关的项目,其中包括我的Game Art Trick 博客、德国游戏开发播客以及我的Unreal和Houdini教程的Youtube 频道。

认识胡迪尼
Houdini和我在The Invisible Hours的工作期间成为了朋友,我需要制作一个小型液体模拟,可以实时暂停、反转和向前播放(因为在游戏中你可以停止、反转和前进时间)。这是结果:

资料来源:隐形时间的液体模拟
我不知道如何将流体模拟引入Unreal,但幸运的是,一项名为Vertex-Count-Agnostic Morph Target-Based Fluid Animation的惊人技术刚刚在 Houdini 中实现,因此我能够将流体模拟引入游戏中。该技术最初由Norman Schaar开发。
来源:Norman Schaar 在 UE4 中的顶点计数不可知变形目标

河流效应:项目启动
我想学习如何为Realtime VFX River Challenge制作程序生成的河流,但不知道如何开始。偶然地,我偶然发现了Ben Schrijvers 的这个惊人的教程,他在那里谈到了地平线零黎明中的河流。我被迷住了,不得不尝试一下!
这些视频是我的主要基础,并帮助了很多事情的开始。

非常复杂的地形建造方式
地形超级复杂。让我用一个视频来说明创建过程,以确保每个人都能跟上:

来源:Houdini 中的地形创建
只是在开玩笑。架子工具使创建地形变得非常容易。我只是设置了一个较小的尺寸,就可以开始使用了。

河流效应
第一步是从 Ben 的教程 100% 复制的,它们很有趣。首先,您创建一个样条曲线并让它“落在”地形上。这是通过读取样条点位置处的地形高度然后将点移动到此高度来完成的:
接下来,让样条点“滚”下山坡,将河流更好地融入地形:
实际上,它们并不是以物理方式滚动。相反,您使用基础表面法线和点的法线来计算每个点的局部轴(该点远离样条曲线并指向山下)。然后,沿着计算轴稍微移动点(Ben 的视频中很好地记录了这个过程)。
下一步是确保河流不会在地形引导的情况下向上游流动(因为河流流经的地方有一座小山)。
一个小的 Python 脚本确保 3D 空间中的样条点永远不会高于样条上的前一点:
另一个让外观更自然的好技巧是避免连续的斜坡,而是让河流分步流动(为了更好的可视化,我在这里展示了河流的几何形状,但实际上我们现在仍然只使用单个样条)。
最后,我们到了一步,我贡献了自己的想法:我为样条添加颜色以标记斜率的位置(绿色)、起点(绿松石色)和终点(红色)。这将有助于我以后混合不同的水纹理和放置粒子系统。
让我们更快地创建河流几何图形,因为所有这些都在 Ben 的视频中得到了完美的解释。最重要的一点是,只有河流的外边缘再次与地形对齐(就像我们首先对样条所做的那样):

根据流动变形景观
同样,这是 100% Ben 的工作流程,但它首先移动河流几何体下方的地形,使其不会以任何方式相交:

然后,对于地形中的每个点,向上发射一条射线。如果它击中河流几何体,该点将向上移动到击中位置:

每个没有击中任何东西的点都会重新分配其原始高度:

在这里,您可以看到当您更改样条曲线时,一切现在的行为:

然后地形高度场被转换为多边形并重新划分网格。现在它可以在 Unreal 中使用了:

我还想添加一些关于 UV、材料、流图等的细节。

河流几何
您之前看到的河流几何图形只是用来雕刻地形。在实际的河流是一个瘦一点,得到的UV和被细分了(注意,我的斜坡色彩仍然存在):

紫外线产生
由于样条线的长度总是变化的,因此 UV 必须适应它。幸运的是,这在 Houdini 中非常容易。首先,在 0-1-UV-Space 中创建 UV,然后测量样条长度。该值可用于缩放 UV。在这里,您会看到我更改样条曲线,在下半部分,您会看到 UV 如何自动适应。相信我,如果您体验过一次,您将再也不想手动创建 UV!

河床
另一个细节:我想让河床更暗更湿。为此,我从每个地形多边形向上发射一些光线,如果我碰到河流,我会为该多边形的所有点指定一种颜色。创建的掩码如下所示:
这是一个示例,说明在材质中使用遮罩指定不同的漫反射和粗糙度值时会产生多大差异:

流程图
使用 Houdini 生成河流的流程图非常容易。你只要告诉一个特殊的节点“这是我的河流几何图形,这是指示河流方向的样条曲线”和繁荣,你的河流几何图形突然分配了代表河流流动的顶点颜色:
可以添加另一个节点,使流程图对障碍物做出反应。现在水可以在它们周围流动:
最好的事情是:您可以在 Unreal 中触发流程图的烘焙!无需在 Unreal 和 Houdini 之间来回切换。只需将 Houdini-“Render”-Button 作为参数公开。在这里你看到我改变了障碍物,然后渲染了一个新的流程图(注意烘焙比 gif 花费的时间更长):

泡沫面膜
为了在障碍物周围的水上获得一些泡沫,我使用了所谓的“isoOffset”节点。它基本上将到对象的距离存储到河流的顶点颜色中。然后我用一点点噪音来调味它,面具很好去:
为了使泡沫蒙版不那么静态,我使用了一个简单的 Photoshop 云图案,我沿着河流移动并从原始蒙版中减去它。这增加了一种更有趣的感觉:
由于我们在谈论泡沫:级联也获得了一个简单的泡沫纹理,它只显示在河流的斜坡上(我在创建样条线时用顶点颜色掩盖了这个斜坡)。泡沫结构比河水滚动得更快:

粒子系统
因为我存储了级联顶部和底部的位置,所以我现在可以过滤这些元素(这些线用于生成河流几何图形),在它们的中心创建一个点并将一个虚拟立方体复制到这个点,该点将被交换稍后针对 Unreal 中的粒子系统:
对于障碍物周围的粒子,我使用了一个名为“Intersection Analysis”的很好的节点来获得障碍物和河流的交点。那些交叉边有点。对于其中的随机数,我再次复制了一个虚拟框(稍后在 Unreal 中与粒子系统交换):
在这里你可以看到我在虚幻中交换假人时的样子:

将项目导出到 Unreal
所谓的Houdini Engine是Unity、Unreal、3ds Max、Maya和Cinema 4D的插件,直接在提到的程序中执行你在Houdini中创建的节点网络。所以我要做的,让地形和河流出现是将我的Houdini文件保存为数字资产。这可以像虚幻中的任何其他资产一样导入和使用:
现在,我可以更改参数(我在 Houdini 中公开)或更改样条曲线以使河流走不同的道路:

材质仍然是在 Unreal 中创建和分配的,但您可以预先分配材质(查看我的教程如下)。
当然,它还不是完美的。例如,进一步的改进是:避免将障碍粒子放置在物体“后面”(远离河流流动方向),沿着流图设置障碍粒子的方向,以便粒子移动到流动方向,接受 Unreal – 地形作为输入,提高节点网络的性能,以便更快地计算样条上的变化,根据区域缩小/扩展河流宽度(如 Ben 的视频)。

我们应该学习 Houdini 工作流程吗?
Houdini 有一个陡峭的学习曲线。此外,由于游戏开发工具是全新的,有时您会在文档中发现错误、异常,或者您将难以获得想要的输出。
但这对于游戏开发者来说是一种常见的情况,不是吗?我们经常使用必须首先驯服的尖端技术。最重要的是:你并不孤单。该思考程序不和谐充满非常好的人,其渴望学习和帮助。您甚至可以在这些聊天中找到 Sidefx 开发人员!
我完全可以推荐检查软件解决方案。每天都会出现新的令人惊叹的教程,游戏开发工具是使用该软件的好方法,它不仅“只是”将一些模拟烘焙成翻书,而且以某种方式改进工作流程,经典工作流程感觉像石器时代。

结束
感谢 Damien、lKruel、mgw、Ambrosiussen、Glad 和 Julián(都来自“Thinking Procedural”Discord!没有你就不可能完成这个项目。

链接
您可以在此处下载 Unreal 和 Houdini Assets 。这是安装视频。
不和谐:Houdini“思维程序”
Ben Schrijvers 的 Houdini 河教程
Andreas Glad 的 Houdini 河教程
西蒙的河流挑战主题有更多细节
西蒙在“隐形时间”中包含液体实施的演讲
Simon 的Unreal和Houdini Youtube 频道
Norman Schaar 的顶点计数不可知变形目标

返回首页

作者 CG-BOX

发表评论