1.一般布料结算我们都用三角面去solver
- Tip: remesh 之后的paint+group组会变化 这里切记要attributetranf。。
这时候会产生布料三角面大小等问题
我们有2种办法去解决。- ploydoctor(自带节点删除小的有问题的三角面)
- 通过代码删除
- float ratio_threshold = ch("ratio_threshold");
- f@marea = primintrinsic(0, "measuredarea", @primnum);
- f@mperimeter = primintrinsic(0, "measuredperimeter", @primnum);
- f@ratio = f@mperimeter/f@marea;
- if (f@ratio > ratio_threshold) {
- removeprim(0,@primnum,1);
- }
2. 纽扣篇:strutch约束
- 纽扣用softbody(strutch) ,约束住防止纽扣塌缩
此处用到strutch约束- 每个点都将寻找一个遥远的点,它是自己的一块,但它有一个直线的视线。它会建立到那个点的距离约束。它构造了大量的牙签式内部支柱,在不需要完全有限元求解的情况下,为对象提供了刚度和体积。
- 每个点都将寻找一个遥远的点,它是自己的一块,但它有一个直线的视线。它会建立到那个点的距离约束。它构造了大量的牙签式内部支柱,在不需要完全有限元求解的情况下,为对象提供了刚度和体积。
-
纽扣需要缝合到衣服上
- 我们用到stitch约束
- 这里目标对象最好是手动选择出来(好处是精准的约束到目标对象上)
3. 皮带制作 --- 高速移动的情况下 皮带用来cloth的方式结算
用四面体的方式跟不上
Houdinivellum学习-02 -CFXer -第3 张图片 4. 还原时出现衣服拉伸
Houdinivellum学习-02 -CFXer -第4 张图片 - 我们用到stitch约束
- 我们通过传递island的方式deform回去
- 颜色混合到其他区域去了——解决办法
选出区域组:- int piecenum = chi(“piecenum”);
- @group_currentpiece = 0;
- if (i@piece == piecenum) {
- @group_currentpiece = 1;
- }
用group expand先缩回去在放大
Houdinivellum学习-02 -CFXer -第6 张图片
Houdinivellum学习-02 -CFXer -第6 张图片
5.PointDeform
自带的节点会有各种问题 ,我们通过vex去编辑
-
pointdeform的及讲解
Houdinivellum学习-02 -CFXer -第8 张图片 -
方法
Houdinivellum学习-02 -CFXer -第9 张图片 - 首先我们让低分辨率的点匹配高的面
- 我们靠邻近点处理,根据低分辨率点的距离对其进行加权到我们高分辨率的点。这个点的权重为1,它正好在低分辨率的网格上
- 这个点应该影响受4个点影响,每个点都有一个较低的weight,因为点是相当远的。
3.高精度模型下
- float maxdist=chf(“max_dis”);
- int maxnum=chi(“max_number_of_point”);
- int npts[]=nearpoints(1,v@P,maxdist,maxnum);//通过1号端口位置,找到和自己的位置最大范围内的点数,记录在数组中,返回的是点序号。
- weights[]//权重 ,距离近的权重大,远的就小
- float weights[];
- foreach(int npt;npts)
- {
- vector npos =point(1,“P”,npt);
- float ndist=distance(v@P,npos);
- ndist=fit(ndist,0.0,maxdist,1.0,0.0);
- push(weight,ndist);
- }
- f[]@weights=weights;
4.静帧和低分辨率模型,我们求出偏移量。
- vector pos=point(1,“P”,@ptnum);
- v@ detal=pos-v@P;
5.deform --- 现在我们要去驱动每个点了
- float weights[]=f[]@weights;
- int npts[]=i@npts;
- float sumweights=0.0;
- vector sumoffsets={0,0,0};
- int n=0;
- foreach(int npt;npts)
- {
- vector delta =point(1,“delta”,npt);
- delta*=weights[n];
- sumweights+=weights[n];
- sumoffsets+=delta;
- n++;
-
- }
- vector offset =sumoffsets/sumweights;
- v@P+=offset;
pointdeform 2-3端口需要timeshift住
5.如何保留初始褶皱
- 主要思路是通过距离约束给他约束住
- 通过找到solve中的约束(粉色的往上找添加约束线)
- plus 如何在绘制的地方无褶皱,加个判断条件, 颜色
节点下载:
「DistanceConstraint.hip」
视频:
转到B站
6. vellum 如果跟着曲线运动
pin + 跟随动画+popcurve
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
说道:大佬,文章中的图片都挂了。。。 盼修正
说道:@多吃核桃:已修复