Houdini 地形生成:
01
Heightfields
,指在 Houdini 中用来代表地形的 2D volumes
,其中每个 voxel
包含了在特定 grid point
的地形高度信息;在 Houdini 的 viewport 中,只是使用 3D 的方式展现 2D 的 heightfields
信息;同样也可以 mask 出需要修改的部分进行编辑;
02
可以在 Terrain Tools
中建立 HeightField
,在 HeightField
的基础上添加各种节点来修改地形:
03
添加 heightfield noise
节点给地形以起伏,可以修改 Noise 的类型:
还可以添加 heightfield blur
(模糊)、heightfield distort
(扭曲)等节点来调整效果:
04
使用 heightfield mask by feature
来按照坡度、高度等条件来 mask 出相关区域,这些条件可以并存;比如用坡度条件 mask 出区域:
05
在以上基础上,使用 heightfield slump
节点让所选区域产生塌落效果,这样可以产生出标注冲刷区域的 flow mask
(按住鼠标中键点击节点可显示节点详细信息,可见 heightfield slump
节点影响了 Mask layer
,并输出了 Flow
和 Flow Direction layers
):
06
使用 Heightfield Remap
节点让输出的 Flow
值归一化,Layer to Remap
参数选择 Flow
> 点击 Compute Range 按钮
> 设置 Output Max 值为 1
;使用 Heightfield Mask Clear
清理掉刚才生成的 Mask Layer
中的信息,方便以下做新的 Mask:
07
同理,继续做新的 Mask:添加 heightfield mask by feature
来 mask 所需的区域,这次使用 heightfield copy layer
节点把 mask 结果保存到一个新的名为 GT
的layer 中去,鼠标中键点击 heightfield copy layer
节点可见其生成了新的 layer :
然后仍然使用 Heightfield Mask Clear
清理掉 Mask Layer
中的信息,方便以下的制作;
08
再利用 Mask Layer
制作新的 Layer,使用 heightfield mask by feature
节点 Mask by Slope
+ Mask by Curvature
参数 mask 出地形的 “高光边”,这样一张地形 peaks 的 mask 可以作为细节 mask 使用在很多地方,同样把 Mask Layer
的信息通过 heightfield copy layer
节点复制到一个名为 Peaks
的新建 Layer 中去,再 Heightfield Mask Clear
清理掉 Mask Layer
中的信息:
09
做好了以上三个 Layer 之后(Flow
、GT
、Peaks
),使用 heightfield visualize
节点利用颜色让各个 Layer 可视化,首先在节点的参数面板重新 Compute Range
,使之匹配现有的 heightfield
;然后在不同颜色中选择各自的Layer:
可以调整各个 Layer 的颜色,还可以通过 Height Ramp
调整其它区域的由高度改变的渐变色:
10
可以在之前的 Shape the Terrain 部分之后添加Heightfield Remap
节点来重新调整地形高度,当然首先还是在节点的参数面板重新 Compute Range
,通过 Output Min
和 Output Max
的值来修改高度输出;然后可以通过Remap 来设置高度变化曲线(下图的参数是让地形中段有一个平直的区域):
10
在以上的 Heightfield Remap
节点后再添加 heightfield erode
节点来演算地形的侵蚀效果,演算方式是激活节点后,在参数栏的 Visualization
中重新 Compute Range
:
然后直接播放即可自动生成侵蚀过程的动画帧:
可以使用任何一帧作为运算结果;heightfield erode
节点会生成多个 Layer,包括 water layer
,把 water layer
与 heightfield visualize
节点中的 Layer3
关联起来,以显示出侵蚀所形成的湖泊地形颜色:
在 heightfield erode
节点的 Advanced
面板,有降水量等参数可供调整:
11
然后开始在地形的特定区域生成 Scatter points
,方便生成树木等类似物件; 特定的区域还是使用 heightfield mask by feature
节点把 Slope Angle
在 0~50 范围且 Height
在一定范围的区域选择出来;选择出来的是在第十个步骤中利用 Remap
节点制作出的平直区域;之后添加 heightfield scatter
节点来生成 Points
,注意输入的时候需要同时输入 heightfield
和 Mask
信息(节点中有点熟悉相关信息,取消掉 Match Normals with Terrain
来让 Points 的法线不贴合地形,模拟树的垂直形态):
这样就在特定区域生成了 Points:
12
使用 copy to points
把不同的 Mesh 放置到 Points 上,这里使用一个上色的 tube 来模拟简单的树木:
然后使用 Merge
节点把 copy to points
的结果和地形的 heightfield visualize
结合起来,才能同时观察地形和所添加的 tube;在 heightfield scatter
节点之后还可以使用 point 节点来修改所生成的 Points 的各项属性:
13
这样就完成了一个基本地形的制作;下面把地形导入到 UE4 引擎;这里需要借助 Houdini Digital Asset(HDA)来完成;选中所有节点,点击 Create Subnet from Selected 按钮生成 subnet :
然后对生成的 subnet 右键,选择 生成 Digital Asset :
接下来会出现更改文件名等配置选项,保存为 HDA 文件即可;
导入 UE4:
14
安装了 Houdini 插件之后,UE4 可以直接 Import 进来 HDA 文件:
直接把导入的文件拖入到场景中,即可自动生成相关对象:
15
UE4 场景中,可以自由修改相关对象,以上,即为完整的地形相关的 Houdini - UE4 流程:
16
假如需要修改 HDA 文件中的节点,直接打开相关文件进行编辑,如果被锁定,可以右键让其可编辑:
编辑完成后,右键重新保存,覆盖原 HDA 文件:
UE4 中 Reimport 这个 HDA 文件后,在场景中重新 Rebuild 一下即可完成更新: