(2020/05/09 在坐标轴的地方稍作了修改)

前言
大佬们都知道使用Landscape等可以在特定朝向的区域种草,因为入了Houdini Indie所以就来写一下如何使用Houdini Engine在场景内的普通的物体上面种草。最后可以导出为蓝图内的Instance或者Foliage。因为自身也还在探索学习阶段,所以不保证所写的完全正确,也不保证可以供商业流程使用,如果有不对的地方欢迎指出一起学习交流。
(啊,请赐给我一顶UE4的帽子吧——!)
适用情景:
在静态的物体或含有模型的蓝图 的上面自动生成
(Play中移动物体的话不能一起移动所以适用于地形编辑)
烘培成蓝图后或许可以进行其他操作,请各位看官自行尝试
所需软件
Houdini(请确认Houdini Engine可以使用。免费的Houdini Apprentice并不支持Houdini Engine)、UE4
友情提示:如果因为Houdini Engine而想入Houdini Indie的话,请去官网购买!!
一定不要入Steam版
!!!因为证书等问题使得使用变得非常繁杂,经常需要重启UE4编辑器,不知道普通版本是否也这样。价格也没有优惠,想入的最好试用(没记错的话Apprentice有一个月的免费)后去官网购买(泪)
所需知识
・有Houdini的UI操作基础知识,如果没有手把手跟着做应该也可以实现。本篇只使用了几个基础的节点,所以适合新手,但是如果遇到一些Houdini的界面基础操作问题,建议自行搜索学习…
・UE4懂得基础操作
参考文献
Houdini Engine for UE4官方文档(英文)
https://www.sidefx.com/docs/unreal/index.html
最全面的其实都在这里面了。
所使用方式
根据模型的面的朝向(也就是法线方向)来进行判断需要种草的位置,然后自动生成草,并且对于草的密度等进行一定的控制
——————————————————————————————————————
那么让我们开始吧。
第一部分为
在Houdini内创建需要的结构(对于houdini的操作很熟悉的大佬们可以跳过这一部分)
第二部分为
将此节点创建为供UE4使用的Digital Asset
第三部分为
在UE4内的设置与在houdini内进行继续修正
首先,我们需要在Houdini中制作一个Digital Asset,并且在UE4中读取
*Digital Asset的扩展名为hda或者hdalc等根据购买版本的不同而稍有不同
第一步,在Houdini内创建需要的结构
(对于houdini的操作很熟悉的大佬们可以跳过这一部分)
打开houdini,
在右侧obj栏下面的空白(hui)区域里,右键或按Tab键,输入Geo搜索,选择Geometry,创建一个Geometry节点。命名为Grass(不重要,自己喜欢的英文字母就可)


然后,
双击
或者按I键,进入这个节点。
右键空白区域,搜索并创建Torus和Group节点,并如下图,右键点击点和点来连接他们
(虽然之后要对UE4内的模型进行选择上面的操作,但是因为需要验证一下我们自制的工具是否能够正常工作,所以首先在houdini内对于简单的模型进行一些测试。)

单击Group节点最右侧来使它变蓝(也就是正在观测的节点),可以看到全部的面被选中了。

单击group节点,并进行如下图的设置。
(Group Name: Top
Group Type : Primitives
Base Group : 取消打勾
Keey by Normals: Enable打勾,Direction方向填(0,1,0)) 勾上后可以按照法线防线选择
Group节点会保存符合你要求点或面
Spread Angle
调到一个喜欢的数值,
后面想要在UE里调整,所以这里先随便填75
(180时则反向的面也会全部被选中,0时则只会选择法线方向朝上的面)

可以看到只有一部分朝上的面被选中了

继续右键空白处,创建scatter节点并连接到group下

scatter节点会在物体的表面随机生成一些点,
可以看到点覆盖了整个甜甜圈
这里我们把scatter节点最上面的group的地方改成刚才我们所规定的部分,top

点就只生成在刚才选择的部分了。为了方便观察,可以将force total count(总的点的数量)进行适当降低。
Scatter内的参数可以进行许多调整来调整分散的状况,密度等,但是我们希望在ue4内进行控制,所以这里先不进行调整。
为防止两点太过于接近,创建一个fuse节点。把距离小于Snap Distance的点给合成一个点。

然后依次创建box,copy to point,将box的uniform scale大小缩小,并如下连接
copy to point可以把左侧节点连接模型复制到点的位置。

(这里group和scatter间插入了一个normal是因为在houdini中创建的模型是不带normal这一项属性的,UE4内导入的模型自带方向所以使用时不加也可以)

可以得到上图所示的结果,如果有重叠等可以适当的调节Scatter内数量或者box的大小,这些都不重要。
只要观察到按照法线方向有一些我们所需的模型被安排在需要的地方了,我们的这个工具就算初步有一个初始形态了。剩下的只要去UE4里边调节添加边使用就好。
————————————————–
下面进行,
第二步:将此节点创建为供UE4使用的Digital Asset
首先为了将模型进行替换,创建两个Object merge的节点,分别替换我们的torus1和box1

然后到copytopoints节点,因为我们不要生成新的模型而是要生成instance,所以对Pack and Instance打勾

在右边节点的地方左键单击空白处,按
U键一次
回到上级我们的Grass节点处。(如果看不到可以按F对焦,或按中键平移)
单击Grass节点选中。然后
点击
右上红圈内像一个
小盒子
的图标。Grass节点会变成一个
Subnet

单击subnet1的文字部分,改名为喜欢的英文,这里我们管它叫AddGrass
然后右键AddGrass,并选择
Greate Digital Asset

这里把Operator Name和Label都编辑好,并在选择最下的保存路径,然后选择Accept创建

选择Parameters页面,这里是我们创建自己的想要在ue4内进行调整的项的地方。
目前不需要Transform和Subnet显示在ue4里,所以选中,在invisible前面打勾。可以隐藏。(需要的话点击Show Invisible Parameters就可以再看到了)

如果不小心关掉了它,可以点击左上菜单栏的Assets里的Edit Asset Properties来重新打开它

保持这个界面打开的状态下,然后在双击或者按I进入我们的AddGrass(subset)节点,会发现Grass节点在里面,再次双击,可以回到我们刚刚写操作的地方。(老千层饼了)
选中代替了甜甜圈的object merge,然后左键点击object1,拖拽到root下。可以通过这种方式来简单的添加想要控制的变量等。这里我们添加的是一个路径信息。需要在UE4内进行Input某些东西的时候一般都是使用这个节点。包括曲线,场景内的物体,static mesh等等,详细的可以看官方文档介绍。

在parameter里进行改名,Label是我们在ue4内可以看到的条目名,好懂就好。Name是实际上运算等应用时的名字(不可以加空格但是最好简洁),要记住写完后按Enter键不然改的字还会变回去

点击最下方的Apply,会发现Object1变的有些绿,这说明已经长草这说明已经生效,是通过其他的地方来控制这一个项的

对于代替了box的object merge里的Object1也进行同样操作。拖拽入并修改lable为Grass Object。
然后同样的,把Group节点里的Spread Angle,和Scatter节点里的Force Total Count都拖拽进来。
点击最下方的Accept。这样我们初步想要控制的变量就做好了。

选择菜单栏的Assets>Save Asset>
Addgrass
来保存我们刚刚做的修改到hda文件。
每次进行修改后都要进行保存,不然无法在ue4内读取修改后的文件。

也要注意保证你保存时,显示(最右蓝色)的是最后一个你要的结果的节点

同时也要注意随时Ctrl+S保存你的Houdini文件。
然后进行,
第三步,在UE4内的设置与在houdini内进行继续修正
最小化houdini,打开启动Ue4编辑器,并打开我们之前保存hda文件的文件夹,找到它。
确保你的houdini engine是可以用的
与其他的ue4文件一样,拖拽或者使用import来将hda文件添加到你的项目工程里。
然后拖拽到地图里。会看到一个houdini的图标。

一般看到houdini的图标要么是因为你的Houdini Engine没有正常动作,或者说并没有生成任何东西。
这里是因为我们还没有添加任何东西进去。
如果你的Houdini Engine正常启动了,
选中他,到Details>Houdini Parameter里可以看到刚才所添加的变量。

为了
取得场景里的东西
,将SceneObject的Geometry Input改成
World Outliner Input
然后点击
Start Selection,就可以对场景内的东西进行选择了

选中你全部你想要种草的模型或者蓝图,点击Use Current Selection
(这里用到的是之前某次bp到的石头)

就能看到我们想长草的模型被罗列出来了。如果想重选或者添加,则重新点击Start Selection再次选择。

然后到GrassObject里设置草的模型。也是之前bp到的,赞美UE4
因为想要一些比较消耗低的Instance或者Foliage,所以直接使用Static Mesh填到GrassObject里。


你会发现我们还是没有长出草来,F键看我们种的草,会发现它们跑到了一个奇怪的地方

那是因为我们的AddGrass的Transform坐标并不是0。该归0的归0。

发现虽然我们的草好像长在模型上了,但是方向跟想象的不太一样

应在copytopoint之前加入一个Point wrangle 节点,输入以下代码。可以同时给予草一个随机的旋转值。(感谢宫湦大佬解答我的疑问)
vector axis = @N;
float angle = fit01(rand(@ptnum+chf("seed")),-360,360);
@orient = quaternion(angle,axis);
v@rotation = angle * axis;

确定你显示的是最后一个节点,然后再次Save Asset

回到ue4,右键AddGrass,选择rebuild selected。或者如果有使用复数个的话,可以从Contents里找到AddGrass的asset右键rebuild all instance。


右下显示Rebuilt了。表示更新成功
这下我们种的草终于站起来了

然后可以调整刚才我们所添加的控制数量和角度的变量。
注意不要一下种的数量太多,不然可能会导致Houdini Engine崩溃无法进行下一步反应。(然后steam版的就必须要重启引擎)可以在Houdini那里加一些数量限制或者改为密度等来解决这里就先不讲了。
但是如果操作不当是有可能导致项目文件损坏的(丢了奇怪的hda文件进去)所以请务必常存档!
以及想添加一些大小的随机,方向的随机的话,可以自己进行添加一些随机变量等等,然后再保存,更新,重复刚才的过程。这里也不多再讲了。
这样我们就算需要修改模型,或者改变他们在场景中的位置,也不需要再自己慢慢去刷草了。
——————————————————————————————–
当我们对于我们种的草感到满意,想要导出为foliage时(这里添加了一点大小的随机数)
(建议最后整个场景创建不需要很大的修改的时候再做,不然的话因为变成普通的foliage,修改起来会比较困难。)

选中我们的AddGrass,Baking也就是烘焙里有许多选项,选择需要的一项就可以了

烘焙后会生成相应的Asset
比如这里我选择蓝图,就生成了一个蓝图,然后放入场景里。即使我删除或者修改AddGrass,这个蓝图文件也不会再改变了。

———————————————————————————————-
最后…..
希望能早日拿到一顶UE4帽子。
以及群里的大佬们,

别学了,真的跟不上了