前言

开个新坑,旨在深入学习Houdini,顺便摸一下UE5

教程来源官方教学视频,官方也提供了Houdini工程可以下载,链接如下:

Project Titan Cable Tool | SideFXz

这一章作者讲的很详细,一步一步跟着做应该都能做出来,但是有些节点只是粗略提了一下,这里会补充说明,因为自己用unity更多,后续也会补充houdini联动到unity的部分

关于版本问题,教程作者使用的是houdini19.0.455和 UE5.0,我使用的是houdini19.5.403和UE5.0.3,暂时没有任何问题,要注意的是19.0和19.5的Houdini Engine还不支持UE5.3,具体要看官方说明。安装Houdini的时候会有安装插件的选项,勾选for unreal就会自动下载Houdini Engine for unreal,如果当时没有下载,就到下方的链接找到对应的版本下载Releases · sideeffects/HoudiniEngineForUnreal (github.com)

构建主电缆

左边输入一条线段,右边输入一个形状,通过Sweep创建出沿着形状的一组线段

这里的形状从Circle开始,通过Mountain增加随机性,这里选择只作用在XY轴方向上

Connect Adjacent Pieces:将临近块的点连接在一起,用于创建约束网络

Convert line:转换成线,可以获取每条线的长度信息,可以看到Primitives层级上多了restlength属性

存在Primitives层级上的信息通过AttributePromote来转移到Point上,选择Minimum得到每个点最短的连线距离,这里存在pscale属性上,有了这个数值后面围绕线段创建圆柱就不会有相交的情况(妙!)

因为上述操作会创建多余的线段,所以通过AttributeTransfer只传递Points层级的pscale信息即可,其他的还是使用原始的形状

MatchSize让输入几何体的中心归位到世界中心

AttributeWrangle里的表达式提取一个scale属性用来控制主电缆的粗细

添加小电缆

LabsRandomSelection在主电缆中随机选择几根添加小电缆

For-EachNumber :循环遍历,有一个begin节点和end节点,中间自定义添加需要循环的操作,这里输入的是主电缆,对每根主电缆都会执行多次Sweep的操作,还会额外生成一个foreach_count,会提供一些属性,即Detail Attributes,方便后续使用

迭代方式选择ByCount就是人为设置循环参数,即Iterations参数,这里就是指循环4次Sweep操作

Sweep添加Spare Input,并将foreach_count拖到其中,是为了获取上述提到的一些属性(Detail Attributes),后续会利用这些属性做一些随机的处理,增加生成小电缆的丰富性

让小电缆可以随机的缠绕在主电缆上

Roll:围绕轴线的旋转度数

Full Twists:完全扭曲度数,该参数会再乘上一个360°,最后和Partial Twist的值加到一起计算最终的扭曲度数

Partial Twist:扭曲度数

rand()会随机输出0-1的值,所以最后要乘上一个90°

detail(-1,"iteration",0)引入迭代属性的数值,让每次迭代随机出来的数不一样,里面的三个参数,打下左括号之后会给提示,分别是节点名字,属性名字,属性索引,这里-1代表的是Spare Input

FullTwists那里最后+1是避免会出现一根直线,因为detail输出的值默认从0开始

通过AttributeCreate添加pscale属性控制小电缆的粗细

最后用Group将大小电缆分了个组,再Merge合并到一起

解算模拟

解算之前先通过GroupbyRange获取大小电缆的两头,GroupType选择Points,Start和End都填1代表从第二个顶点开始到倒数第二个顶点结束,再勾选InvertRange就是头和尾了。这里要勾选Affect Disconnected Geometry Separately,要不然会把大小电缆算作一个整体只会有一个头和尾,而不是每根都有头和尾,将获取的头和尾存到pins这个分组

Fuse:将一定距离的点融合到一起(加不加应该都行,对最后的解算结果有微妙的影响)

AttributeRandomize:会生成随机值存在创建的属性上,这里是在Primitives层级上创建random属性

在通过AttributePromote将random属性从Primitive传递到Point上,这样在同一条线上的点random值是一致的

解算配置选择VellumConfigureHair,会按照配置对后续的解算做一些约束,这里Type选择String模拟绳子,Thickness选择Calculate Varying=》Scale by Attribute,Attribute填pscale,就是通过Points的pscale属性控制电缆的粗细

勾选Visualize Thickness就可以看到结果

Pin Points就是需要固定的地方,选择上面获取的pins组

Rest Lenth Scale是电缆静止时的长度,数值越大,通过解算后电缆的长度越长

Damping Attribute是阻尼属性,填写上面增加的random属性,会让每根电缆解算时刚性约束流失的能量略有不同,增加一些随机性。

VellumSolver:解算器,这里可以适当调节阻力的大小

TimeShift:控制解算模拟的发生时间,解算的中间态效果好就可以选择解算到中间就停止

优化面数

Clean将除了pscale的其他属性清理掉,^是非的意思

Resample这里选择Subdivision Curves,会让结果更加平滑一些

Facet:会根据法线整理几何体上的点,将线段上不必要的点移除,Distance控制移除点的最大距离,在这个距离范围内的点都可以移除

下图是优化前后的对比,少了很多顶点,但不影响大致的效果

通过Split按组分离,分别Sweep,可以让小电缆的面数更少一点,达到优化面数的目的

创建HDA

将所有的节点选中,按Shift+C打包成一个节点,再把这个节点创建成HDA

这里输入值最少有一个即表示电缆整体趋势的一个曲线,另一个是输入碰撞体,参与解算,也就是VellumConfigureHair 的第三个传入参数

将想要暴露出来的属性提取到面板上,后续可以在UE里面调试

进UE5调试

将对应版本的houdiniEngine文件夹复制到下载UE的Engine\Plugins文件夹,再打开工程就能看到Houdini插件了

选择Creat Session之后将HDA丢进来

将第一个输入改为Curve Input,第二个输入改为World Outliner Input,选中的物体就作为碰撞体进行解算

选中点,右键可以添加更多的控制点,也可以Alt+鼠标左键添加点

原教程里会在拐点处出现膨胀的错误现象,作者以此讲解了如何Debug

首先选择Open Houdini Session Sync,就可以重新打开一个调试的Houdini工程,并能够和UE实时联动

UE里面需要点击Rebuild,UE里面的东西就会在新打开的Houdini工程里面重建

在Houdini里面找到这个CableTool这个节点右键选择Allow Editing of Contents就可以编辑了,查看每一步的结果去排查错误原因,在Houdini里面修好之后在UE里面也会同步被修好

顺便说一下教程里面出现的拐点处膨胀错误是因为,输入进去的曲线在Sweep之后没有重新resample,细分不够,导致拐点处的pscale很大,Debug的时候可以观察到

Debug的工程关掉就没了,可以通过SaveAsset保存HDA,但是原来工程还是要自己手动改一下

​​​​​​​

上材质

Sweep里面勾选Compute UVs就会自动生成UV

快捷键5,可以将视图切换到UV视图

UVTransform 将UV旋转90°,这里对小电缆进行循环遍历,让UV的sacle输出的值不同

循环遍历选择For-EachConnectPiece,并Create Meta Import Node,后面的操作就和之前创建小电缆一样

LabsAutomaticTrimTexture可以通过输入的Trim贴图自动排布UV,Trim贴图类似于IDMap

Trim贴图可以直接从外部导入,也可以在Houdini里面制作

参照上面现成的Trim贴图,在Houdini里面通过下面的节点也可以制作出来,不详细讲了

因为小电缆的UVScale是随机的,所以就会自动排布在不同的Trim上,结果就是可以对应不同的颜色,这里后续也可以上不同的材质。

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐