目录
Calculating mass and thickness
Working with low res and high res cloth
Stitch and sliding constraints
Triangle and tetrahedral stretch constraints
Cloth
Breaking and tearing
Edge Fracture节点可很容易的切开几何体(可手动绘制断开位置),以便断开或撕裂;使用Vellum Weld Point节点焊接接缝,然后根据特定条件来断开;
Normalize Stress默认开启的,总是归一化应力,以便子步变化时被计算的值更加可预测;这对基于应力阈值,断开约束非常有用,因为可在改变子步时不必调整值;如碰撞体非常快,需要增加子步时,可能只需稍微调整阈值;也适用于基于密度计算的mass,如改变的布料的精度,应力仍然是一致的;这使得在子步和分辨率中,更容易设置值;
以下案例展示相同布料在不同分辨率和子步下的应力阈值,结果是非常相似的:
Paneling and draping
Paneling工作流
- 导入T-pose角色模型;
- 绘制衣服版型轮廓线,应比角色大些以便包裹角色(应绘制多笔曲线);
- 在添加resample,以调整每笔的点数;
- 在使用fuse,将点合并到一起;
- 在使用Planar Patch from Curve节点,构建均匀三角形面片;
- 勾选Resample Curves,确保曲线的边缘间距与内部边缘长度相匹配;
- 降低Interior Edge Length,以提高精度;
- 选择Smoothing->Subdivision Curves;
- 在创建其他位置的布料面板模型;
- 在使用Vellum Configure Cloth节点,配置布料;
- 在使用Vellum Stitch Points节点,缝合接缝,设置约束长度为0;
- 在使用Vellum Weld Points节点,焊接接缝,使接缝完全在一起;
Draping工作流
- 创建布料面板模型,与Paneling工作流一样;
- 在添加Vellum Drape节点,可自动缝合和焊接接缝;
- 如布料难以包裹角色,应增大面板,也可在增加一个Vellum Drape节点(勾选Inflate Collisions);
- 满意布料结果后,使用Vellum I/O缓存,在使用Vellum Rest Blend设置当前约束为起始状态;
Cloth simulation
将已drape布料转为起始几何体
- 一旦布料drape后,即可后续解算保持约束,也可将其转换为起始几何体;
- 转化为起始几何体,将会丢弃任何已设置的stiffness,以重新开始,也确保系统中没有更多的能量;
- 使用Vellum Post-Process,是快速焊接点的好方法;
- 为确保法线一致,可使用Polydoctor节点(勾选Correct Winding of Polygons to Majority of their Manifold Patch);
- 然后在使用Vellum Constraint节点;
注:确保没有冲突的ID属性;新约束厚度会被设置为0.01(默认),应确保厚度合适;
解算布料时应考虑的事项
- Substeps、Iterations,决定布料的拉伸性,子步为5对布料是一个好的开始;
- Tailoring,一些小的改变可能会很大改善最终效果,如根据角色的步伐,增加裙子的宽度可防止衣服底部的拉扯;
- Static,通常衣服会在身上不切实际的移动,增加静态摩擦系数以更加贴合角色;
- Bend Strength,值为0将有大量的褶皱,值越高越硬;
- Compression Stiffness,压缩刚性,可使三角形折叠而不展开;
- Tangent Stiffness,对附着在腰上的裤子或裙子解算非常有用,避免因重力掉落或滑动,比降低Rest Length Scale效果更好;仅在attach约束起作用,是vellum对外部几何体;
- Stiffness Dropoff,降低或增加约束刚性,在远离起始状态时;
- Air resistance,气流对布料非常重要,没有气流布料会变平,太大的气流则会被drag,默认值为0.1,通常会产生很好的效果;
- Gravity,改变重力可使时间好像变快或变慢,也会影响比例,增加重力会有更大的拉伸;
Calculating mass and thickness
默认会自动计算mass和thickness,即改变vellum精度时解算效果不会改变太多;特别是对弯曲,较重或较轻的布料其褶皱大不相同;该方法是使用polyline的长度,三角形的面积,四面体的体积及密度density来计算mass,使用边长度来计算thickness;
质量Mass,Calculate Uniform均匀的在所有点间分配质量,但对精度或布线不均的会产生问题;Calculate Varying(默认设置)分配的质量会与周围面积相匹配,点密集的区域质量相对较小;默认的Density参数0.1是针对布料的,其他预设类型约束Density参数会针对其类型有所不同;
厚度Thickness,Calculate Uniform(默认设置)是基于每个面中边的平均长度,可避免过多的自碰撞并保持均匀的厚度,均匀统一的厚度是默认的设置,可像布料一样平整;Calculate Varying将自动根据布线的密集程度调整pscale大小,对角色来说是有用的;
Working with low res and high res cloth
布料的stretch/bend的方式非常重要,起皱的程度和快慢可看出布料的材质;在处理mass/scale/topology时确保pscale属性正确,以使不同精度的材质看起来一致;调整精度时,Vellum Constraint节点会自动调整mass(总质量不变)、pscale(相对距离不变);
Quick moving cloth
快速移动的对象,将使与之一起移动的布料聚集能量,如整个角色或角色的一部分快速移动;Velocity Blend参数和Refrence Frame节点,可用来生成更加理想的结果;Velocity Blend是通常用于快速移动的身体部分,如摆动的手臂;Refrence Frame节点通常用于快速移动的整个角色,如超级英雄和他的斗篷;
Velocity Blend
- Attach to Geometry约束的Velocity Blend参数,可避免突然运动引起的问题,对跟随快速移动手臂末端的袖子也很有用;要求目标对象有速度属性v;
Reference Frame
- 参照参考对象的几何体,类似Velocity Blend,但适用于整体而不是局部;对快速移动的角色或作为其他环绕对象的父对象有用;
- 可与Velocity Blend一起使用,如角色移动的很快,同时手臂向上猛拉;
- Wind Force对角色快速移动很重要,Drag Compensation参数可调整任何风速;
- 确保Refrence Frame节点上的子步和解算器上的子步相同;
Softbody
Vellum softbodies
PBD柔体的主要优点是其可控性、稳定性、及可快速产生可信结果;尽管FEM是创建柔体的有利方法,真实世界的准确性和行为,但vellum是非常快,可多种约束,结果也可信真实;依据场景和要制作柔体的类型选择这两种方法;
Vellum Struct Softbody工具,使用在内部点间随机形成的支柱,来创建粗略保持体积,仍然是对原始几何体进行模拟;
Vellum Tetrahedral Softbody工具,会polyreduce、remesh以创建一个低精度的代理模型,并四面体化;创建四面体后,沿边将距离约束以保持对象的整体形状,在创建体积约束以保持每个四面体的体积;解算完后,使用point deform变形原始几何体;
尽管vellum balloon、vellum struct softbody、vellum tetrahedral softbody看起来都像可延展黏糊的物体,但其主要区别是保持体积的方式;
- vellum balloon保持全局体积,是使用压力约束均匀向外,挤压一个区域会膨胀另一个区域,类似气球;
- vellum tetrahedral softbody更多的保持局部体积,因为每个四面体都保留体积,对有机材料很有用;
- vellum struct softbody根本无法保持体积,使用的是内部支柱,类似里面有一组弹簧来保持形状;
Vellum Fiber 是柔体约束的一种类型,会沿着纤维方向压缩,如有保持体积会在另一个方向扩展;
Plasticity with softbodies
塑性可使用物体在受到特定力或外部碰撞时,适应新的rest形态;通常对布料应避免塑性,然而柔体约束(如Tetrahedral Stretch)能很好的适应塑性;使用vellum tetrahedral softbody与vellum constraint结合使用,可获得逼真的结果;
有三个重要的参数控制柔体的塑性:
- Plasticity Threshold,变形超过此阈值,将适应新的rest;
- Plasticity Rate,适应新rest的速度;
- Plasticity Hardening,适应新rest的更硬还是更软;
上例制作文件:An Introduction to Vellum Soft Bodies | SideFX
Constraints
Stitch and sliding constraints
stitch约束可点到面,不仅仅是点到点,对缝合布料非常有用,缝合到最近位置对polyline也起作用,可创建平滑和真实的滑动;
Sliding Constraints
滑动约束是stitch或attach约束可在目标表面滑动,启用Use Closest Location on Primitive(仅在polyline、triangle、quad有效),及Target Group Type为Primitives;Sliding Rate控制滑动快慢,1表示匹配约束速度;
Tangent Stiffness会减缓滑动,此时可增加sliding rate;
Plasticity
在vellum里,但对象被弯曲或拉伸时,会恢复到原始状态;当启用Plasticity时,一旦超过阈值就会保持新的状态,常用于Hair;在Shape Match约束,塑性也是有效的;可通过Stretch Plastic Flow、Bend Plastic Flow查看;
注,vellum很难创建非常坚硬的材质,如金属片,可使用Bullet Soft Constraints;
Triangle and tetrahedral stretch constraints
ARAP是H18引入的一种约束,可忽略旋转,同时最大限度的减少stretch或shear;会产生类似弹性的效果,以恢复原始形态;此约束作用于三角形或四面体的整个形状,而不仅仅是边;这对有机材质或需要自然拉伸或压缩特别有用,会更平滑;Cloth约束也有Triangle Stretch选项;
启用Preserve Volumes会应用额外约束,强制保持体积(类似tetrahedral volume约束);
Tetrahedral stretch约束也可很好的塑性,塑性改变的是形状不是体积;
Animated pressure constraints
气球对应两种约束,外部表面可拉伸的cloth约束,及避免塌陷的pressure约束;pressure保持全局的体积,挤压一边,另一边会膨胀;
- 点属性pressurescale属性可缩放pressure效果;
- 同时应设置restlength属性;
Dynamic constraints
通常在解算前设置约束,但也可在解算过程中设置约束(即在DOP内的force_output处,创建vellum constraint),如glue;
Shape matching
使用shape mathing方法,在vellum中刚体模拟;是用球填充对象的体积,尽可能的接近对象外形;将球约束在一起,创建类似刚体的结构;球与其他对象碰撞计算是非常快的,此方法适用于大量对象;
shape matching基于vellum grain,使用Sphere Packing模式来填充对象;球的大小可以统一或可变,以捕获较小的结构,球还可重叠以更好表示对象,但无论如何都是近似的;
Vellum Configure Grain Pieces会创建vellum grain和vellum shape match,解算完后在使用Vellum Transform Pieces节点来驱动原模型;
不支持老的芯片架构,如有问题将GPU改为CPU;
Constraint browser pane
此面板可组织、创建、编辑约束(RBD或Vellum);依据tag,来确定自定义的主层次hierarchy(列出所有约束),同一个tag多个约束类型被添加为约束layer;
- RBD,layers由constraint_name属性定义,tag由constraint_tag属性定义;
- Vellum,layers由type属性定义,tag由constraint_tag属性定义;
Collisions
- collisionignore(vellum点属性),碰撞对象的名字,用于指定特定对象忽略碰撞,可使用POP Collison Ignore节点,如PackedGeo对象有面属性objname,则此属性表示对象名称;
- collisiongroup(vellum或碰撞体点属性),可针对对象的一部分设置碰撞,如角色的拇指;这对于清理布料和角色间的交互非常有用,如想手指和袖子交互而不和口袋交互;
- 受detangle节点影响;
修正碰撞穿插
当碰撞体自身穿插时,可将整个碰撞体作为cloth对象,对穿插位置使用pin软约束(其他部分使用pin硬约束),还可使用peak节点稍微增加一点厚度(为布料创建更多空间),以在解算时变形修复穿插;
摩擦力
解算器Static Threshold参数,由属性friction控制(如无此属性默认为1),解算器Dynamic Scale参数,由属性dynamicfriction控制;如两布料碰撞,其中一布料摩擦力乘以另一布料摩擦力,再乘以全局摩擦力,就为碰撞的静摩擦力;
Advanced
Setting up a 64-bit solve
解算布料或毛发离原点超过10000个单位,可能会引起布料褶皱或头发缠绕的问题;将对象移动高离原点更近的位置即可解决问题,还可使用64位以获得更高精度(通常不建议,速度明显变慢);
解算器没有选项在64位操作,为将几何体设置为64位:
- 在vellum configure cloth前,使用attribute cast节点,确保几何体和约束都是64位精度;
vellum attributes
设置属性
Type Name Description vector materialuv Geo点属性,可由Planar Patch/Planar Patch Curve设置,用于确定各向异性; float bendname, stretchname Geo点属性,默认缩放约束属性;
解算Geo属性,所有POP属性均可应用:
Dynamics: parameters
Type Name Description float dragnormal, dragtangent point,阻尼影响最终速度; float inertia point,hair约束旋转阻力; integer weld, branchweld, collisionweld point,默认为-1;
weld是用户访问,branchweld是hair约束构建,collisionweld按需生成为detangle节点;
float friction, dynamicfriction point/detail,缩放静摩擦力和dongle摩擦力; float pressurescale point,缩放pressure约束效果,可用于充气效果;
Dynamics: state
Type Name Description vector P, pprevious, plast, v, vprevious, vlast point,二阶算法,先前一帧位置和速度,及先先前一帧位置和速度; point, vector orient, orientprevious, orientlast, w, wprevious, wlast point,对于hair的点方向和角速度; integer stopped point,可被自动休眠及唤醒使用(标准的POP属性),还可释放pin的点(而不是对mass为0操作);此属性可控制方向和位置,0都不控制,1控制位置,2仅控制旋转,3都控制;
integer dead point,标准的POP属性,值为1点及对应的约束均会被移除,可使用POP Kill节点设置;
collision
Type Name Description float pscale point,每点半径; integer layer point,软度优先级,越大越轻; integer disableself, disableexternal point,值为0表示可自碰撞和外部碰撞,值为1表示禁用碰撞;只要边或三角形任意一个点的值为0,则整个边或三角形都禁用;
- disableexternal=2,忽略碰撞直到解开恢复为0;
- disableexternal=1,忽略碰撞;
- disableexternal=0,与碰撞体穿插会卡住;
float overlap_self, overlap_external point,默认值为10000,储存原始pscale的重叠度,0表示已完全使用pscale; string collisionignore,
collisiongrouppoint,vellum点与collisiongroup指定的对象禁用碰撞;受detangle节点影响;
Targeting
Type Name Description string, integer target_path, target_pt point,attach目标路径及点号; pintoanimation, gluetoanimation point,pintoanimation更新位置,gluetoanimation更新位置及方向; float targetweight point,影响pin点的强度?
Breaking Type Name Description float, string breakthreshold, breaktype point,weld/branch weld类型,断开;阈值小于0将不断开;
Pressure Type Name Description vector, integer pressuregradient, volumepts, volume point,pressuregradient体积增大的方向类似法线,volumepts计算点体积的点数组;
内部变量 Type Name Description float dP, dPw point,约束置换及权重; string patchname point,标识每个vellum对象的名字;
解算Con约束属性,由许多类型的约束,其意义取决于约束类型,通常是面属性:
Dynamics: parameters Type Name Description float dampingratio prim,值在0~1,高于0.1可能会阻止约束收敛; float restlength, restlengthorig prim,初始约束状态(距离或角度等),实际仅使用restlength,restlengthorig仅为方便; point restvector prim,存储方向约束,及pin约束的目标位置; vector rest point,被shapematch约束使用的起始点位置; float stiffness prim,约束强度,较高的值可能需要较高迭代; float compressionsstiffness prim,压缩约束强度,较高的值可能需要较高迭代; float stiffnessdropoff, stiffnessdropoffmin, stiffnessscaled(解算时) prim,超过指定的阈值,刚度从stiffness~0或0~stiffness;解算时有效的刚性值存储在stiffnessscaled; string type prim,约束类型
distance、stitch、branchstitch 约束点长度,distance约束距离(如三角形或毛发的边),stitch距离约束的别称,branchstitch用于hair的自动焊接; ptprim stitch点到面的约束,restvector存储prim uv; bend 四点弯曲约束,表示共享边的两个三角形,约束共享边的角度; trianglebend 三点约束,保持线的弯曲;? angle 三点约束,保持二面角,被string约束使用; tetvolume 四点约束,保持四面体体积; pressure 多点约束,表示mesh表面的所有点,保持体积; attach、pin 约束点到特定位置,attach依据target属性,pin根据matchanimation属性; attachnormal attach to geometry的额外约束,约束目标对象切线方向(由restdir指定); pinorient 约束点方向; bendtwist 两点约束,将边点方向一致,可沿hair方向创建扭曲效果; stretchshear 两点约束,距离约束和弯曲约束的组合,被hair使用; tetfiber 四面体约束,可沿materialW方向压缩; triarap 三角形ARAP拉伸约束,可最大限度地减少与起始形状(restvector)偏差; tetarap* 四面体ARAP拉伸约束,可最大限度地减少与起始形状(restmatrix)偏差; shapematch 保持原始形状(rest)的约束;
Dynamics: state Type Name Description float stress 约束施加的应力大小;
Sliding Type Name Description float slidingrate prim,滑动速率; string target_group, targetpath prim,目标位置; string slidingattrib, attribpromote prim,缩放滑动速率;
Breaking Type Name Description float, string breakthreshold, breaktype prim,断开约束的阈值及类型,阈值小于0将不会断开;
Plasticity Type Name Description float plasticthreshold 塑性阈值,修改restlength;如值为负,将视为拉伸比率; plasticrate, 塑性速率,设置为0是禁用塑性的最简单方法; plastichardening 塑性后的刚性 plasticflow(解算时) 塑性流的大小量;
Targeting Type Name Description integer matchanimation prim,如对pin约束设置为1,将查找target_path和target_pt,更新restvector到指定位置,以便跟随目标动画;
内部变量 Type Name Description vector L prim,约束量,可能是不同刚性或压缩刚性轴;通常应使用stress属性来确定约束量; integer pts prim,被该约束影响的点;
Tips and troubleshooting
Sources
- vellum使用连续的碰撞检测,可很好的避免快速运动穿过布料,如几何体点数是变化的则就不起作用了;
- 尝试和下一帧模型blend,查看是否融合,如否,检查是否有id属性(会覆盖点号),也可使用match topology节点是点号在帧间一致;
- vellum只关心前一帧的点,不介意在每帧中对prim数随机;
Pscale
- 默认pscale很小,但输入的任何pscale属性都会超过它;
- vellum与不太小的pscale效果最好,会在碰撞体顶部,而没有剧烈碰撞;通常,pscale不要超过边长,否则可能会相交;
- vellum会预处理(类似bullet),即使点在彼此之上,也不会爆开;会记录原始距离在属性上,用于降低pscale对于碰撞;当布料分离时,这些属性会松开以使布料返回不会太靠近;设置过大的pscale可能也不会爆开,但会用大的pscale碰撞测试,导致布料缓慢停止;
Speed vs Quality 四个主要的区域,可使解算又快又好:
- substeps,对快速运动的布料很重要,如在单个子步内有太多的碰撞和变化,可能会减慢速度,使用较小的子步会提供更好的碰撞边界;
- Constraint Iterations,使拉伸和弯曲起作用,需要更高的迭代以获得刚性、无拉伸、无弯曲;如增加子步,力的量会有效的减少,因此可减少迭代;
- Collision Passes,外部和内部碰撞都可处理,会在约束迭代中穿插着执行;如50迭代5碰撞,则每10迭代1碰撞;增加此值有助于失败的碰撞,但也可考虑增加子步;2子步10碰撞与1子步20碰撞,成本大致相同,但前者可能会更好;
- Post Collison Passes,在所有约束迭代完成后,在执行此额外的操作;由于此过程不与约束交互,布料会以碰撞外形推出,是避免碰撞失败的最后一次尝试;
Resolving problems
-
Stretchiness,XPBD在不过度刚性方面很好,如没有足够的迭代会无法收敛;如拉伸开了,增加约束迭代;增加子步也可解决,但迭代会更加便宜;
-
Protrusion problem,突出问题,如高精度布料与尖锐几何体碰撞,可能局部会变形(因为碰撞解算完全是局部的,仅移动碰撞点);
-
可增加Collision Passes,Substeps;
-
- Failed collisions
- Thickness,默认布料非常薄,使布料更厚可提供更多空间以对剧烈的碰撞,但不要大于边长;
- Substeps,可减少错误,高精度布料需要高子步;
- Post Collision Passes
- Layer Shock,层数越高点会越轻;
- Asymmetric solves
- vellum使用的是Gauss Seidel而不是Jacobi,可快速收敛,但此过程不会平滑的更新;如没有完全收敛,会得到奇怪的不对称结果;因为误差会集中在一部分区域,不是均匀分布;使用Smooth Iterations参数解决上述问题;
- Unruly objects
- 有时物体无视能量守恒,开始加速或旋转;
- 一种原因可能是自穿插,特别是pscale过大;可使用塑性,来移除所有内部的能量;
- 另一种原因可能是没有收敛,能量不对称的留着系统中,甚至会引起没有自穿插的旋转,特别是在pressure和strut约束中;增加Smooth Iterations和Damping可避免;有时可随机排序约束,或随机排序点(在构建约束前);
- Unstable pins
- hard pin与强bend约束,可能会引起不稳定;使用软约束,Smooth Iterations可解决;
Restarting sims 当使用drap的输出或先前解算的作为起点,必须注意属性:
- IDs
- 合并多个,检查id属性是否冲突;
- 如删除prim,检查约束是否一致;
- 检查weld点位置是否正确;
- 考虑后处理的fuse焊接点;
- overlap
- 仅当没有overlap_self或overlap_external属性时,初始帧overlap才会被计算;删除这些属性通常是安全的选择;
- Collisions not working vellum 与大多数几何体类型碰撞,但不是所有:
- Sphere, Tube, Circle, Metaball 在prim模式时,只与中心点碰撞;
- Bezier/NURBS Curves 与多边形hull碰撞;
- Bezier/NURBS Mesh Surfaces 仅与hull点碰撞;
- VDB, Volume, HeightField 在SOP仅与点碰撞,在DOP使用地形高度场或静态对象的体积碰撞;
- Polygon Soups 与polygon一样;
- Tetrahedra 与四面体外部的triangle碰撞;
- Packed Geometry 与polygon一样;
- Other Packed Types 取决于是否支持Fast Extraction选项,repack节点可转化为支持此选项;
- 要与RBD packed geometry碰撞,需在Assemble节点后添加repack;
- 要与RBD packed geometry碰撞,需在Assemble节点后添加repack;
Crinkled cloth or tangled hair
- 离原点超过10000个单位,可能会引起布料褶皱或头发缠绕的问题;将对象移动高离原点更近的位置即可解决问题,还可使用64位以获得更高精度(通常不建议,速度明显变慢);