gllxb 发表于 2020-11-26 12:37

houdini engine for unreal初探

4个月之前试验过houdini engine for unity,见:
由于工作需要,最近开始搞unreal,周末试了试houdini engine for unreal,由于时间所限还不够全面深入,先记几点。


一,地形
跟unity一样,地形hda放进unreal自动就转成引擎地形,所有heightfieldlayer自动转为landscape layer,只要heightfieldlayer的名称与unreal材质中的layer名称对上即可。
详见这个教程:
https://www.youtube.com/watch?v=iUGRAbTHynE


二,foliage
在houdini的copytopoints节点上勾选instance,则unreal里会出现houdini instanced inputs面板,可以选mesh。然后可以通过bake to foliage转化为unreal的植被系统。
详见这个教程:
https://www.youtube.com/watch?v=0PjZ9awgdFY


三,碰撞体 和 LOD
这个教程里有讲:
https://www.youtube.com/watch?v=gNRZFjDJ4YM


四,暴露houdini curve到unreal
跟unity里一样,把curve节点拖到type properties面板的editable nodes中即可(可以拖多个)。
另外注意不要勾选Game View,否则curve的gizmos显示不出来:


五,输入 (node inputs 和 object path inputs)
(1)node inputs
就是转为hda的那个subnet的输入端,在unreal中会自动变成input。
(2)object path inputs
就是hda暴露一个operator path控件:
这个可以手动添加,也可以直接暴露object merge节点上现成的(更省事儿一点)。
houdini engine for unreal文档(Houdini Engine for Unreal: Inputs)里讲的是直接把Object1暴露出去:
不过,这样做是有局限性的,只能实现固定数量的inputs,而无法实现任意可变数量的inputs。
比如按上面方法暴露一个object path input到ue,得到这样的面板:
第一个下拉列表里有如下可选项:
每个选项用于输入不同类型的数据,例如geometry input用于输入staticMesh,asset input用于输入hda,等等。
对于Geometry input,通过面板上那个'+'号可以增加输入槽的个数,实现输入任意多个static mesh。
但是如果切换为asset input,则面板变为:
可见,面板上没有'+'号了,只能输入一个hda。
如何实现在一个hda上输入任意多个hda呢?下面说。


六,可变数量的输入
实现在一个hda上输入任意多个hda。
unity中的情况:
实际上,在houdini里,是可以一个object path框中填写多个path的,如图:
对于houdini engine for unity,这个object path框暴露到unity里以后,就会生成带‘+’号的面板,可以输入任意数量个hda:
unreal中的情况:
但我们已经看到,在unreal里这样做是行不通的(只能生成一个hda输入框)。此问题困扰许久,一度陷入绝望。
直到经过艰难google,找到这个帖子:
https://www.sidefx.com/forum/topic/55024/
就是说有两个方法:
方法一:
原来可以把object merge节点的‘+’号也一起暴露出来:
这样到unreal里就也得到带'+'号的面板了:
注:
这里有一点感觉不方便的是,比如我选的是ASUSroad(Label),而Current Selection显示的却是ASUS_road_14(ID_Name),导致我不知道到底选的是哪个:
克服办法是把Type改成ID Name,这样就能看到Label和ID_Name的对应关系了:
方法二:
就是在houdini中手动添加multi param operator path,见这个教程:
https://www.andynicholas.com/?p=639
在hda中可通过objectMerge+for循环读取输入数据:


两种方法效果一样。


七,自动cook
拖一个hda到unreal场景里它会自动cook,如果对这个hda的参数或者暴露出来的curve进行调节也会自动cook。
如果外部更新了hda,需要在unreal中点rebuild asset和recook asset。
以上这些都没有问题。
但我发现当我在一个hda上输入多个hda的情况下,比如我在raodSystem hda上输入了多个road hda,如果我调整其中一个road hda的curve,这个road hda本身会自动更新,没问题,可是roadSystem hda并不会跟着自动更新。貌似houdini engine for unreal没有处理hda cook之间的依赖关系?
之前试验houdini engine for unity的时候,这种情况是会正确处理自动更新的。
不知道是houdini engine for unreal没这个功能还是需要开启但我没看到。


八,系统解耦:
前面那个foliage教程中,它是这样设计scatter系统的:建了一个scatter hda,然后将地形和散布物体作为输入。
感觉这个设计思路不错,可以实现系统间的解耦,一个系统一个hda,而此系统所用到的所有数据均从外部输入进来。
比如说道路系统,按此思路就是:建一个roadSystem hda,然后添加一个node input用于输入landscape hda,再添加一个带'+'号的asset input用于输入任意数量个road hda。则在roadSystem hda内部,根据所有road hda的数据计算交叉口并生成交叉口mesh和道路mesh,并根据landscape数据将mesh投射到正确的高度。
当然各系统间的cook顺序还是要遵守的,比如先cook道路再cook植被(因为道路系统输出的mask要作为植被系统的输入),这个在farcry5的视频里有说过。
页: [1]
查看完整版本: houdini engine for unreal初探