【Houdini】Project Titan学习笔记
因为还在学,所以更新中……
前期准备
要想装Houdini For UE5,Houdini版本必须是19.0.5以后的;
然后在houdini安装目录下,找到engine/unreal/5.0,把里面的HoudiniEngine文件夹拷贝到UE5安装路径的Engine/Plugins/Runtime文件夹里;
直接进引擎启用就好乐!
Cable工具
简介
根据一个样条线生成一定数量的,有粗有细的线,并进行物理模拟对场景物体产生碰撞。
先生成数个线条用作主线缆,最忌选择一部分在其周围生成缠绕的细线缆,然后进行模拟。最后使用ID图上材质。
实现笔记
Convert Line:可以将面转化为线,并且可以计算线的长度。这里使用这个节点计算每个点距离周围点的最小距离;
Sweep:一个线绕着另一个线放样。通过Surface Type调整结果类型,调成Columns就可以生成很多条线;在UVs and Attributes下开启Conpute UVs可以生成UV;
Labs Random Selection:随机选择;
Group By Range:可以只选择最前最后的一个点,勾选Affect Disconnected Geometry Separately可以选择每个不连续线的第一个和最后一个点,这里用这个节点获取用于固定绳子两端的点;
Vellum Constrains:Constraint Type 调为String可以进行绳子模拟,可以设置Pin点和拉伸(Stretch)以及扭曲(Bend)属性;
Vellum Solver:解算器;
Facet:勾选Remove Inline Points可以删除直线内的点,减少点的数量;
Trim Texture Utility:可以根据ID贴图生成Trim,也可以根据输入的模型生成;
Automatic Trim Texture:自动根据输入的Trim信息排布UV;
Stacking工具
简介
- 在UE中创建数据表,包含模型引用、大小等;
- 在Houdini中用相对应大小的盒体进行排布,巧用UV Layout节点排布模型;
- 进行物理模拟;
- 使用unreal_instance属性在UE中实例化;
实现笔记
直接用Object Merge就可以引入UE的数据表;
Attribute Rename:重命名属性;
Connectivity:可以根据面的连贯性生成属性;
Scatter and Align:与Scatter类似,但是可以设置点的旋转值(orient),这里用于分散生成点;
UV Layput:顾名思义应该是排布UV的,但是把UV Attribute改成P就能排布位置了(向ZX平面投射);在Variable Scaling中可以开启根据iscale缩放;在Target中可以让其根据第二个输入排布,这里就要用这个;
RBD Bullet Solver:RBD解算器;
VEX函数:
1 | string[] split(string s, string separators); // 使用风格拆分字符串 |
教程勘误
物理模拟后旋转值错误
原因:
在物理模拟前每个物体已经有了自己的orient值;
物理模拟后,应该将物理模拟中的旋转值与初始值叠加才是最终的旋转值。
但实际上,解算器直接用物理模拟中的旋转值覆盖了原来的orient(实际上就是变量重名的问题),导致了最终orient值不正确;
解决方法:
很简单,只要手动叠加一下就好了。
- 关闭解算器中的orient输出防止覆盖:在解算器的Advanced - Output下;
- 从第四个输出端(Simulation Points)拉出,可以获取到模拟阶段的orient旋转值;
- 使用VEX的qmultiply函数将两个旋转值叠加,orient是四元数,其他方法叠加没有意义;
最后unreal_instance的生成点错误
原因:
教程中最后addpoint使用的方法是最后再获取包围盒的最低点,但是如果在物理模拟中东西倒了,原本的物品的底面就不是模拟后的底面了。所以生成后会穿模。
解决方法:
在物理模拟前,先计算出物体中心指向底部中心的向量,并储存为v@combo;
物理模拟后,物理模拟导致的旋转量也要储存,我储存为q@o;
在最后addpoint之前,先使用o去旋转combo获取旋转后的相对向量,然后再将其叠加到中心位置上,就获取了物体底部中心点的位置;
1
2
3
4
5vector min, max;
getbbox(min, max);
vector center = (min+max)/2;
vector finalPos = qrotate(p@o, v@combo) + center;
addpoint(-1, finalPos);
Cloth工具
简介
根据面片生成布料并进行模拟,并使用Vollum Solver解算。
实现笔记
Vellum Post-process:Vellum的后处理节点,可以平滑、细分等;
PolyReduce:在保持UV等属性的情况下减面;
要让节点的某个输入为空同时不报错,就添加个Null节点;