找回密码
 立即注册
查看: 681|回复: 0

在Houdini中编辑UE地形

[复制链接]
发表于 2023-1-18 12:57 | 显示全部楼层 |阅读模式
声明:
文章以记录为主,内容基于自己的理解和经验总结,因水平有限不对流程的正确性做承诺。有问题欢迎指点讨论~
Houdini版本:19.5.485 | UE版本:5.1.0
<hr/>连接Houdini

1.先开启houdini
2.启动Houdini Engine SessionSync(方法是转到 Windows > Houdini Engine SessionSync 或者 在添加选项卡中在Misc选项下添加


3.选择Named Pipe,开启服务。(默认情况下是这么操作,如果修改过UE里Houdini插件的相关设置,这里可能会有所不同。)


4.切换到UE界面,在Houdini Engine菜单下选择 Connect Session


如果成功,右下角会出现提示。并且在houdini场景中会自动出现一个名为GlobalNodes的节点。(如果没有成功,可能就要检查一下houdini的插件版本等其他问题



UE右下角提示



Houdini窗口自动新增节点

这个时候就是成功联动了,可以UE的outline中右键一个几何体,点send to houdini发送一下试试。
这里插入一下正确的断开连接步骤,如果顺序错误,将导致Houdini无响应并卡死UE。
1.先在第4步操作的位置停止UE连接
2.再在第3步操作的位置停止Houdini服务  

先断UE连接,再关Houdini服务!
据我简单的测试,可以发送HDA,模型,Landscape,部分actor以及摄像机。灯光不行
发送HDA在解锁Assets后,修改可同步更新,发送其他类型的组件不行。
发送Landscape地形不能获取到地形里绘制的道路,但是会有路径点。

再插入一个UE获取Houdini里节点的方式
1.在Houdini中选取要发送到UE的节点,按Ctrl+C复制
2.打开UE,在在Houdini Engine菜单下选择Houdini Node Sync


3.在弹出的窗口中粘贴刚刚复制好的节点路径,点Fetch。


右下角提示成功的话,会在内容浏览器中出现一个000的文件夹,里面是传输过来的模型(只测试过模型)
这个000的文件夹和传输过来的名字,是在弹出的窗口中设置的。
这个功能在实际使用中没有怎么用过,只是看文档提了这种方式,一般还是会打包成hda。
<hr/>导入Landscape

如果只需要获取地形,可以直接在Landscape上右键点击Send to Houdini。
如果成功的话,Houdini窗口中会出现两个新节点。


一个是heightfield_input_HoudiniAsset开头的geometry节点,里面是地形节点。
另一个是UnrealContent节点,类似一个汇总的节点。
这个时候我们直接编辑地形,是不会与UE中同步变化的。
我个人的方式是通过stash节点,储存当前的地形。在编辑完后再打包成HDA在UE中使用。
谨慎的情况下,我会把同步和编辑分成两个工程。同步太容易出问题了。。。

关于Landscape导入UE,我印象里在文档有看到过说属性没有修改的话,是直接替换原landscape。但是在我的实际使用中,Houdini是会创建新的landscape,相关的属性参数甚至是LandscapeStreamingProxy的数量都会有变化,所以对原地形属性有要求的慎用这个方法。
我测试的是开放世界地形,普通地形或许没有这个问题
Houdini也提供了一些相关属性设置节点,如果设置正确或许会直接修改原地形。

导入Splines

在第一部分提到过,目前只能获取到Landscape和道路的路径点,即使Splines使用了模型,同步过去也只有基于路径点放置的零散模型(没有连接,没有缩放,没有角度)。所以获取Splines方法有些复杂。
在这里如果直接在UE里选中道路发送到Houdini,他会直接生成N多个节点,并且好像都是在同一个位置。


我的方法是
1.在Houdini中,使用object merge节点创建了一个HDA来抓取数据。注意要将Object开放。


2.将hda导入到UE场景中,将参数中的Geometry修改为World Outliner Input。注意,还要勾选Pack Geometry before merging。这样会将道路模型Pack成一个点,不然Houdini中会显示模型的点,需要自己手动pack。


3.这个时候就可以点Start Selection选中场景中绘制好的道路(选中后记得Use Current Selection)。这时,如果你的没有断开工程与Houdini的连接,Houdini的窗口中应该已经开始创建大量的路径节点了。虽然模型没有连成一条路,但是他是沿着路径摆放的。并且与直接使用send to houdini不同的是,他最后会出现一个节点Merge了所有的路径点(直接send需要自己手动汇总)。


4.然后就可以通过Stash节点存下这段路径点了。
5.拿到这段路径点之后,是无法直接生成路径的,因为顶点的排序并不是一个沿路径从小到大的顺序。强行连线线段都是乱的。


6.这时候可以添加Sort节点,将Point Sort修改为Along Vector。观察一下路径的走向,沿哪个方向排序,就将哪个轴的数值设为1。如果路线比较曲折,可能要将点分成多段进行排序。修改完之后检查一下所有点的序号是否沿路径排序。


7.排序问题解决后,使用Line节点和Attribute Copy节点,将路径点连成线段。


这里有两个地方的设置要修改,
一个是Line节点的points数量要设置为路径点的数量,不然设置多少就会连接多少段。如果数值大于定点数,线段就会变成环线。



演示的线段有60个顶点

第二个位置是Attribute Copy的Attribute Name要改为P


如果一切顺利的话,这时候应该能够拿到一个与道路相同的样条线了。


需要注意,我没有测试过这个导入路径点的数量上限是多少,建议在实际使用时先进行测试。
我目前对这条线的使用是利用它生成道路,然后对地形进行蚀刻。生成道路的方法就有很多了,可以用sweep节点或者road generator。这个跟建模思路一样我就不展开了。
还有这条线生成的道路不能直接还原成Landscape里的Splines,只能导入生成后的道路。目前水平有限只能用这种土办法,如果有大佬看到希望能给分享一下更好的办法~

<hr/>以上就是我在Houdini中编辑UE里Landscape和Splines的方式。
向 @芒果Uki 学习。第一次记录可能会有些混乱,原本理好的内容写到一半总是想补充新的东西。
有问题欢迎评论区讨论~

参考连接:
1. Houdini Engine SessionSync (sidefx.com)
2. Houdini Engine for Unreal: SessionSync (sidefx.com)
3. Houdini Engine for Unreal: NodeSync (sidefx.com)
4.Stash (sidefx.com)

本帖子中包含更多资源

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

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 16:26 , Processed in 0.294712 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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