因为还在学,所以更新中……

前期准备

要想装Houdini For UE5,Houdini版本必须是19.0.5以后的;

然后在houdini安装目录下,找到engine/unreal/5.0,把里面的HoudiniEngine文件夹拷贝到UE5安装路径的Engine/Plugins/Runtime文件夹里;

直接进引擎启用就好乐!

Cable工具

Cable Tool

简介

根据一个样条线生成一定数量的,有粗有细的线,并进行物理模拟对场景物体产生碰撞。

先生成数个线条用作主线缆,最忌选择一部分在其周围生成缠绕的细线缆,然后进行模拟。最后使用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工具

Stacking Tool

简介

  • 在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
2
3
4
5
6
7
8
string[] split(string s, string separators);	// 使用风格拆分字符串
float atof(string str); // 将字符串转换为浮点数

void getbbox(vector& min, vector& max); // 获取包围盒
int addpoint(int geohandle, vector pos); // 添加点 返回点序号

vector4 qmultiply(vector4 q1, vector4 q2); // 叠加两个四元数旋转 返回叠加后的值
vector qrotate(vector4 quaternion, vector v); // 使用四元数旋转一个向量 返回旋转后的向量

教程勘误

  1. 物理模拟后旋转值错误

    原因:

    在物理模拟前每个物体已经有了自己的orient值;

    物理模拟后,应该将物理模拟中的旋转值与初始值叠加才是最终的旋转值。

    但实际上,解算器直接用物理模拟中的旋转值覆盖了原来的orient(实际上就是变量重名的问题),导致了最终orient值不正确;

    解决方法:

    很简单,只要手动叠加一下就好了。

    • 关闭解算器中的orient输出防止覆盖:在解算器的Advanced - Output下;
    • 从第四个输出端(Simulation Points)拉出,可以获取到模拟阶段的orient旋转值;
    • 使用VEX的qmultiply函数将两个旋转值叠加,orient是四元数,其他方法叠加没有意义;
  2. 最后unreal_instance的生成点错误

    原因:

    教程中最后addpoint使用的方法是最后再获取包围盒的最低点,但是如果在物理模拟中东西倒了,原本的物品的底面就不是模拟后的底面了。所以生成后会穿模。

    解决方法:

    • 在物理模拟前,先计算出物体中心指向底部中心的向量,并储存为v@combo;

    • 物理模拟后,物理模拟导致的旋转量也要储存,我储存为q@o;

    • 在最后addpoint之前,先使用o去旋转combo获取旋转后的相对向量,然后再将其叠加到中心位置上,就获取了物体底部中心点的位置;

      1
      2
      3
      4
      5
      vector min, max;
      getbbox(min, max);
      vector center = (min+max)/2;
      vector finalPos = qrotate(p@o, v@combo) + center;
      addpoint(-1, finalPos);

Cloth工具

image

简介

根据面片生成布料并进行模拟,并使用Vollum Solver解算。

实现笔记

Vellum Post-process:Vellum的后处理节点,可以平滑、细分等;

PolyReduce:在保持UV等属性的情况下减面;

要让节点的某个输入为空同时不报错,就添加个Null节点;

Train Tool

简介

实现笔记