PART 3 -使用Houdini构建程序化开放世界——创建Biome
1944 2
发布于 2022-4-24 00:59:04

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

x
            

81206981b603f57a91c07389ac43df78.jpg




Hello . 大家好
今天我们继续探索开放世界Biome创建
我是高鹏涛


a8e7f8990925571c6f19c9a600dbce26.png



1420cc30ee4e67b8fb9ed3c20243063d.png


接下来,我们通过制定不同的种类及其分布,区域,限制和约束来建立Landscape的叶脉。这些参数包括土壤类型、与水体的接近程度等。在UnrealEngine中,我们使用材质系统,根据Landscape的图层散布植物,因为,这样能够使我们在Houdini中系统的操纵,并在UnrealEngine中对其进行自定义。


3e723265ae45e57902c3afadc5307693.gif



1  概述

在此 HDA 中,我们采用 3 个输入
  • 导入Heightfield
  • 生成的道路
  • 生成的城市 - 我将在下一部分中介绍。现在,我只是为HDA的第三个输入腾出空间。

然后,我们使用Heightfield,分析和遮盖区域,排除我们不想要叶脉的道路和城市,然后根据一套或规则分配叶脉。这些规则可以基于地貌形态进一步推导。但是,由于我在这个项目中的目标只是试验系统的技术模块,因此,我假设了一些常规的叶脉散布规则。

以下是该过程的散布细分。

2  输入处理

我们需要处理即将获取的Heightfield以及道路和城市。

首先,我们清除高地上现有的mask。

然后,我们计算Heightfield的最小和最大高度,并将其提升细节级别,以便以后可以访问它们。



8e022a3e35110cafe5be67cd64d2631b.gif




3  Masking道路和城市



然后,我们必须mask道路和城市,以便我们可以将这些区域排除在叶脉分布之外。我们可以使用Object节点屏蔽来实现此目的。


然后,我执行maskexpand,以增加要排除的区域,并进行一些清理并建立道路和城市HF图层。


a2cb1d6ca0665d73a8a266685838a669.gif



4  Masking叶脉



现在,我们有了专用的道路和城市图层,我们可以继续屏蔽所需的不同叶脉类型。在这里,我演示了四种类型的叶脉。


14120beac00bd8a4b00bbf08a8abfb98.gif


  • 雪:我按Feature节点使用蒙版,并遮罩掉Heightfield的顶部。我使用之前计算好的hfMax细节,来获得landscape的顶部。相对于实生活中的海拔相比,这样可能并不理想和准确,但是,我发现它对于我正在构建的那种landscape来说效果很好。然后,我使用 copyLayer 节点将图层分配给专用的“雪”图层。

2. 坡度:我再次使用feature节点蒙版,遮罩景观的坡度,并分配一个新的图层蒙版。


3.浅潭:我使用扩大水的遮罩的方法,然后减去原有水的范围,以获得浅滩区域,相当于在水周围添加了新的子元素控制点。

4.草:然后,我使用按noise节点蒙版,用noise模式遮罩整个landscape。然后,我使用VEX VolumeWrangle(或HeightfieldWrangle)减去其他三个层和水,以获得只有草可以生长的区域。

5.一旦我建立了这些子元素层,我就得使用另一个HF VEX节点从每个图层中减去道路和城市的蒙版,这样我们就不会在道路或建筑物和城市中生长树叶。这是一个非常重要的步骤,需要很多来回才能弄清楚。它涉及对不同方式的mask,我们需要大量实验去添加,减去和乘以,在正确的位置获得正确的算法。

6.最后,我将每个图层的值规范化为0到1之间,然后将其他所有的数值减去,使landscape中的任何一个点上只有一个层的数值不为零。这就是在景观上建立不同生物群落的正确方法。

7.未来需要迭代的可能包括Biome之间更平滑的过渡。


7c5e6b1f3f1f1f73e01b660367c30701.gif



5  点分布和Unreal属性



以下是我如何向不同的玩家分配积分。

我使用 “heightfiledScatter”节点,并选择我们之前建立的叶脉图层之一。这只会在我们之前屏蔽好的那一层上散布点。

然后,我将“MaxCount”拉到HADlevel属性,这样我就可以控制Unreal中的植物的密度了。

其他子元素层用同样的方法处理。

我还在点上创建了一个 unreal_instance 属性,因此HEngine可以在Unreal中实例化这些子元素。


4ae59fbf44229194c701ec9ad7cd711e.gif


注意:尽管这种方法为我们提供了大量的控制,但我发现在Unreal中更新和重新查看资源是相当繁琐的,因为我想要在子元素分布中进行一些微小的更改。因此,我使用了另一种方法来散布植物,该方法是从项目中的这一点出发的。

替代方法:在Unreal的材质编辑器中使用LandscapeMaterialLayer,我能够以程序方式将植物放置在我们已建立的不同图层上。这相对简单,而且这个都是在Unreal中完成的,它在时间迭代上比计算HDA更快。

上面两种方案,我们可以根据需要,使用任何一种方法。

6  Unreal数据和Houdini可视化性



然后,我获取所有散射点的点云,并将其与heightfield合并。这个合并的HF +点云是发送到Unreal的资产。然后,HEngine分散的点上实例化子元素。


这还需要进行一些清理,因为Normals和Orient的属性值有时无法正确传递。


1e36d8ba1578c7395f1d59a88c36d27c.gif


7  Houdini可视化



  • 为了可视化叶脉图层,我为每种类型的叶脉制作了一些代理mesh,并将它们复制到点云中。
  • 这里的做法是为了了解植被的密度,并测试HAD不同的参数在level中的不同效果。


b62e4289959eb7bc785f4036476ff123.gif


7  UnrealEngine中的

效果

这就是系统在UnrealEngine中的样子。如前所述,我选择使用材质LandscapeLayer的方法,在UnrealEngine中放置植物后的效果。


2d19beb72b7bef22c7e05eb7e3d04460.png



98f294c1e5f2c121583c845c2982a69a.png



c541688f173e7ccfba04b393eb06b0cb.png






9b03c6a861a4f9a1f34c61c3e19a0e01.png

- End -
Thepoly.png

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

评分

参与人数 7元素币 +85 活跃度 +36 收起 理由
大西几 + 7 + 4 支持一下
Sorexc + 9 + 10 资源哪里好,肯定元素找。
angelanany... + 19 + 1 看起来不错
毒刃丶 + 13 + 7 太赞了!
kazami0620 + 7 + 1 每天一早上元素,挖矿撩妹两不误。
fanlai + 17 + 10 感谢
liudongdon... + 13 + 3 太赞了!

查看全部评分

本帖被以下画板推荐:

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

回复 使用道具 举报 登录

论坛版权
近视的鱼  发表于 2022-4-25 18:46:17  
2#
这次来看看东西好不好
回复 收起回复
B Color Smilies
还可输入 500 个字符

使用道具 举报 登录

假道学  发表于 2022-5-6 17:39:27  
3#
这次来看看东西好不好
回复 收起回复
B Color Smilies
还可输入 500 个字符

使用道具 举报 登录

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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