Skip to main content

Houdini Debug Vellum

Case设置

image.png

其中两个aw分别为


int p0 = addpoint(0, {0,0,0});
int p1 = addpoint(0, {1,0,0});
int p2 = addpoint(0, {0,1,0});
int p3 = addpoint(0, {0,0,1});

// 注意:交换 1 和 2
addprim(0, "tet", p0, p2, p1, p3);
v@materialW={0,1,0};

第一个vellum constraint只是设置密度为1000

第二个vellum constraint设置tet fiber,stiffness为1000

在节点上右键然后点击Allow Editing of Content后进入节点

image.png

Constraint的创建(Vex)

进入vellum constraint节点并找到add_tetfiber_constraints这个wrangle。发现引用了pbd_constraints.h的createTetFiberConstraint函数。

image.png

这个函数位于C:\Program Files\Side Effects Software\Houdini 21.0.440\houdini\vex\include\pbd_constraints.h

image.png

Constraint Update(OpenCL Debug)

依次进入vellumsolver(SOP)→dopnet1→vellumsolver1(DOP) 最终找到constraint_update_cl20节点

image.png

copy一份constraint_update_cl20节点,并将kernel file参数改为pbd_constraints2.cl

image.png

找到C:\Program Files\Side Effects Software\Houdini 21.0.440\houdini\ocl\sim\pbd_constraints.cl, 并copy一份,改名为pbd_constraints2.cl

在其中进行一些修改,例如增加语句L[idx*3+1]=100;

勾选recompile kernel然后运行一帧。就会发现L的第二个分量确实修改了。

image.png

OpenCL 增加debug变量

1)利用create_debugmat创建了一个mat3来存储debug变量。 2)在Bindings中增加debugmat参数。注意要Binding到ConstraintGeometry

3)在pbd_constraints2.cl的constraintUpdate核函数当中增加debugmat参数。 4)每次修改.cl文件后,勾选Recompile Kernel来重新编译kernel。

image.png

image.png

image.png

image.png

OpenCL的教程

Houdini官方有一套OpenCL for Vex Users教程,从他的tutorials可以搜到。配有案例文件。

Opencl SOP for VEX users | SideFX