


这个工程的主要目的是在Houdini中创建程序化地形,计算各种不同的地形的同时还能与UE4实时交互,程序化地形是我大学课程中技术美术课程研究中的一个案例,整个场景仅仅只用了两天,我想要测试学习从Houdini到UE4整个HeighField工作流,这样就能在之后的项目中大有作为!

在创建虚拟环境之前收集大量参考以及概念设计是一种行之有效的方法,旨在设计跟绘制过程中能够帮助自己提供很多灵感跟思路,谷歌还有图钉网这两个网站我花了大量的时间去尽可能的收集我所需要的素材,直到最后决定投入制作一个类似“巫师3之血与酒”风格的场景。
Houdini 部分:
首先,我大部分时间都是通过Houdini中的 “HeightField”节点来计算地形,我添加了“HeightField Noise ”节点,通过它我能创建一些基础的地形起伏高度,也可以让自己能够从中产生一些想法。

然后我使用了“HeightField Erode 节点”来减少一些噪波制造一些平地效果。

接着,我添加了一个“HeightField Distort 节点”来做一些地形细节变化。

如果你要创建一些有意思的图案,你可以使用“HeightField Pattern 节点”,通过它可以通过一个渐变遮罩创建一些沙石效果,它可以很好地将图案跟你的地形很好地混合,只要你完成了基础地形的形状跟高度,就是时候通过制作三张不同遮罩来为UE4中的分层地形材质做准备了。
第二步,我通过“HeightField Mask by Feature 节点”创建了三种不同的遮罩分别控制山顶、岩石、以及地面,这是一个很酷的节点允许我可以通过修改“Mask by Slop” 以及“Mask by Height”节点参数来控制调节不同的遮罩效果。

当你开始创建第一个遮罩时,必要时可以通过添加一个“HeightField Copy Layer 节点”来给你的遮罩命名,该节点允许我们给分层地形材质命名以便于在UE4的地形系统中能够容易识别,你可以在右侧选项卡的目标空白处键入名称。

第三步,如果你已经创建了两种不同的遮罩层,便可以通过“HeightField 节点”来整合它们了,这个节点在右侧选项卡中提供了很多很酷的功能,例如作为一个类似PS里中的图层模式,你可以通过调节缩放值以及位移值混合两种不同的HeightField。

但是,这里最基本的就是空白图层,就我而言我会定义为一个遮罩亦或是高度height,我在这里把图层作为“遮罩”使用,然后我改变了图层叠加模式为“ADD”,这样以来我便可以把之前创建的两个不同遮罩给合并起来了。
然后,我想要通过使用“HeightField Remap 节点”来将HeightField节点中的遮罩mask进行反转,这个节点中,我修改了output min输出最小值为1以及outputmax输出最大值为0。

在这之后我又再次使用了“HeightField Copy Layer节点”,在右侧选项卡中给它命名为“Base”来作为最终的基础地形。

第四步,我创建了“Attribute Create 节点”来关联UE4里面的实例材质系统,并且命名修改为“unreal_material_instance”,我修改了层级以及类型分别为“Primitive”以及“String”,最后一步就是添加String参数后面的空白路径了,该路径取决于UE4的工程路径。

一些小技巧:
UE4中的实例材质是如何跟Houdini进行关联的?
1.在UE4工程中创建一个地形实例材质
2.在地形实例材质中右键单击选择“Copy Reference”。
3. 然后你将会得到:
MaterialInstanceConstant'/Game/Art/Materials/Landscape_Master_01_Inst.Landscape_Master_01_Inst'
4. 如果你想要在湖底泥中通过“Attribute Create Node”连接UE4实例地形材质,你需要修改这里:MaterialInstanceConstant'/Game/Art/Materials/Landscape_Master_01_Inst.Landscape_Master_01_Inst'
5. 复制这一段路径“/Game/Art/Materials/Landscape_Master_01_Inst”
(引号内的内容)到右边面板的String空白栏处。
第五步,是时候在地形上创建一个散布效果了,创建一个“HeightField Scatter 节点”然后命名为“Tree”,散布节点基于你之前创建的mask遮罩,我使用了SteepSlopes遮罩层,同时选择小箭头作为散布对象。

之后我创建了一个新的管道物体然后添加了“Color 节点”作为输入节点并连接到树的散布节点“Scattering Node”中,我修改了管道基础类型为多边形物体,然后修改了“Color 节点”把树设置为绿色。
' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

同时你可以调节一些散布设置,例如Coverage覆盖范围, 过渡半径, 以及值域。(见上图)
对于树木的散布这块,你需要取消勾选“Match Normals with Terrain ”这一选项,否则树木的朝向将会跟随地形的垂直方向。(如下图)

小技巧:
如何将管道物体的中心坐标设置到底部?

(不正确的顶点坐标位置截图示意)

(正确的点坐标位置截图示意)
具体方法:
1.通过Polygon PrimitiveType创建一个新的管道模型

2.在Height上按住鼠标左键拖拽至坐标中间的Y轴空白栏里
3.DropAction下选择Relative Channel Reference

4.在“ch("height")”后面添加 “/2”

5.现在当你调节右边面板的height参数时就能看到管道坐标点已经是矫正过的了。
最终节点图表:

最终,你可以以HAD文件格式导出你的HeightField地形,这是Houdini的一个数字资产格式,如果你想要在UE4中实时调节,可以在Houdini中暴露出一些你的设置。
小技巧:
如何暴露自己想要的设置到HAD中供UE4所用?
1. 去到Assets >> Edit AssetProperties 路径然后选择你的HAD文件
2. 扩展开基础参数标签
3. 选择所有Root下面的设置并设置为不可见并应用。
4. 拖拽设置root中你想要暴露的部分。

5. 如果做完了就应用并接受。
6.接下来你可以导入HAD格式文件到任何支持Houdini的类似UE4引擎中
更多关于Houdini 的一些特殊属性以及分组,请参见UE4引擎中的SideFX Houdini Engine:
https://www.sidefx.com/docs/unreal/_attributes.html
Unreal Engine 4部分:
首先,我导入我的HAD文件到UE4,我使用了Quixel Megascan 来作为整个地形材质贴图。

正如你在上图中看到的,你可以在右边的面板中调节很多Houdini 提供给我们的参数。同时,可以通过Houdini Instanced Inputs来替换自己喜欢的树木植被等资源。你也可以通过点击Houdini Instanced Inputs来添加更多网格阵列,这样就可以做更多的随机变化,这在UE4中的效果是非常酷的~
对于地形来说,材质设置很简单,我创建了五种不同的材质贴图函数并通过Layer Blend Node节点加以整合。
我使用了“LandscapeGrassOutput” 跟“LandscapeLayerSample” 节点在UE4地形材质编辑器中生成花草类资源,这是一种比较常用的方式来基于遮罩并通过分层地形材质计算生成地面草地效果。

材质函数流程解析
图表概览:

我使用了Collection Parameter 来控制地形纹理的重复度,可以很快捷高效的方式在材质编辑器中调整纹理重复度。

你需要确保你所有的贴图的资源采样属性设置为“Shared Wrap”,否则你的地形会显示为黑色,以防万一,我把其他贴图也进行了输出,如非必要,你可以根据自己情况略过。

本次教程分享最终章截图:

UE4的地形工具跟Houdini相比之下对于程序化以及遮罩计算有诸多限制,我觉得这方面Houdini给予了我更多优势,例如迭代、程序化建模、物理计算、以及HeightField,而且现如今,通过Houdini的一些插件,还支持大多数游戏引擎以及纹理工具,通过使用Houdini引擎我可以暴露任何自己想要在其他引擎中调节使用的参数,而无需再在Houdini跟其他引擎之间循环往复,正因如此,我才得以能够快速而高效的迭代。

本次分享的这个使用Houdini与UE4的工程项目中,我用了三种不同的散布方式。
首先,我针对树木创建了一个“HeightField Scatter 节点”,散布工具是基于我之前通过“Mask by Feature 节点”生成的mask遮罩信息,同时,我创建了简单的管道模型并赋予绿色材质来作为数目位置的占位,一旦我导入HAD文件到UE4中,它会自动被识别为网格物体,然后我就可以把它替换为真正UE4美术资源里的树木了,不仅如此,你还可以在Houdini实例输入下通过点击“+”号来添加更多的模型阵列,这样就能针对不同的植被添加很多不同的网格增加随机性、多样性,这是UE4中很酷的一点。

在UE4中使用散布工具的第二种方式被称之为Procedural Foliage Spawner tool(程序化植被生成工具),它有助于我在UE4中可以很方便的生成随机画的树木植被并做散布效果,当时做这一块是很有趣的部分,我尤为享受整个过程
文章转载自
Thepoly