PART 2:使用Houdini构建程序化开放世界——道路生成
2489 0
发布于 2022-4-24 00:57:22

您需要 登录 才可以下载或查看,没有帐号?注册

x
            
a7c76e56522bf7e70656df1f4de31afd.gif


81206981b603f57a91c07389ac43df78.jpg



e940ce9a1f575982c0ae15fb3a6cb5f2.jpg




Hello . 大家好
今天我们继续往下探讨,关于开放世界
道路生成

a8e7f8990925571c6f19c9a600dbce26.png




一旦我们有了landscape,我们就开始在landscape上创建道路,比如土路和铺砌的道路。这个环节可以用定义任务点、城市或在landscape里面特定部分发生的游戏事件,并让Houdini计算出所有事物连接在一起的最佳路径。我们使用Heightfield控制和寻路来做到这一点。




1概述
在这个HAD中,我将有3个输出点
Incoming Heightfield:输入高度场
Start Points:在世界中我们要开始绘制路径的点。
End Points:在世界中我们想要结束路径的点。

所有这些都是可以从虚幻引擎读取的输入,Start Points和End Points都可以是放置在landscape上的静态网格上,然后,将其投影到landscape上的一个点,用来绘制往返路径。我们直接将点区分为起点和终点,因为,我们正在绘制连接所有点的路径。但是,我在系统中做出了这种区别,因此,我可以在 Unreal中使用多个路径生成资源,并在需要时指定不同的路径,这只是为了让虚幻中的关卡设计更多样化。
以下是该过程的逐步细分。

2d17fb4e0008a19c7e649342191dcc5a.gif


2HF处理和转换
1. 接收到 HF 输入后,我们首先清除 HF 上的所有遮罩。
2. 然后我们屏蔽掉 HF 的平坦区域,用来定位水域。我们这样做是为了向路径查找系统指定在生成路径时,需要做出避开的landscape区域。
3. 最后,我们将 HF 转换为交替三角形的Primitives。

1b095d732625316c557f0a9517bc7d32.gif


3Start Points和End Points处理
1. 然后,我们将路径起点和终点两个输入进来,并投影到landscape上。
2. 通过这样做,我们得到了跟landscape高度匹配的往返两个节点。

b9e9ec1e71e6ffb305d3dd7cb569b783.gif

4landscape点
有了这些点,我们然后在VEX中融合并运行一个近点函数。Nearpoint函数返回几何图形(在本例中为landscape)上, 最接近几何图形外部指定点的点。

然后,可以将这些点分组到源组和目标组中,以便路径查找节点在它们之间生成路径。我们还添加法线并使用convertline将整个几何图形转换为线,因为,通过 FindShortedPath 节点运行时效率最高。

82e0e2619bdc86795cc8b13c72ac3c59.gif
image.png

5找到最短路径
将landscape上的起点和终点分组后,我们就可以开始生成路径了。
由于 HF 层已作为属性转移到基本模块,因此,我使用水属性将水的模块拆分,并归类到一个组中,这样我们就可以避免穿过它们的路径。
然后,我们使用 Find Shortest Path节点,将起点和终点指定为Source和Destination组的方法,并设置生成为每个起点到每个终点的路径。
在Surface Constraints选项卡中,我们在“边”中提到“水”组,以避免出现“水”的部分。
在路径成本选项卡中,我们编写了一个表达式,该表达式在计算路径时考虑了高度,以便路径避免陡坡,并更平坦的区域作为生成区域。

180ac680e1ec62e339071e517d2d134a.gif


6世界标记
然后,我将两个高大的柱子/盒子复制到起点和终点,以便可视化生成路径的点所在的位置。
我们可以选择是否在Unreal中使用这些,尽管这是多余的,因为,我们还会通过Unreal指定起点和终点。

f6e2dacaa9099380e3b4c6a8cbb53da1.gif


7水系统提取
这里的一个较小的子系统是水系统,我用它来从我们创建的landscape中提取水。
经过一些清理后,我将 HF 转换为primitives,并删除了primitives中具有较低的蓝色部分。这样,我们就只剩下侵蚀系统留下的水体。
然后,我再清理一些零碎的部分,这样我就可以在 Unreal 中,为给上水材质。

fe5dcbd6e13b1acdeb01da7fcf119bc2.gif


7导入Unreal Engine
当我们将HDA导入 Unreal 时,我们需要指定三个输入。
对于Heightfield,我们指定之前的TerrainGeneration HDA,因为,我们希望使用该输出。
我们可以让他们在landscape上放置任意数量的静态网格,并选择它们作为源或目标。这允许最大控制,因为我们可以手动指定位置,如果我们想要不连接的路径,还可以放置多个HDA。


image.png


接下来,我们通过指定不同种类及其分布、区域、限制和约束来确定landscape的叶子。这些参数包括土壤类型、与水流的距离等。在Unreal中,我们使用材料系统根据landscape层次来分散树叶。

- End -
Thepoly.png


喜欢Thepoly的可以通过三种方式与我们建立联系。分别是公众号、微信群以及QQ群。公众号是我们最为官方的窗口,更多内容都必须关注公众号后才能获取。另外现已开通网站:www.thepoly.cn更多精彩请关注我们。

         

评分

参与人数 7元素币 +84 活跃度 +46 收起 理由
元素界王 + 15 + 9 元素帖子强,满满正能量。
AlexanderR... + 18 + 5 好贴子不应默默无闻,我先点了!
auldark + 10 + 5 从业不识微元素,做遍项目不算数。
羊杂OL + 8 + 9 Niubility!!!
lzf123qw + 9 + 8 元素那么大,我想来看看。
hsk1102 + 16 + 5 资源哪里好,肯定元素找。
jinMenShan... + 8 + 5 看起来不错

查看全部评分

本帖被以下画板推荐:

还没有设置签名!您可以在此展示你的链接,或者个人主页!

回复 使用道具 举报 登录

论坛版权
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

元素大事件!上一条 /1 下一条

快速回复 返回顶部 返回列表