APP下载

同一场景中异质布料的动态绘制

2019-01-24安阳阳刘宇涵任小霞贾江凯

小型微型计算机系统 2018年12期
关键词:质点布料异质

唐 勇,安阳阳,张 豆,刘宇涵,任小霞,贾江凯

1(燕山大学 信息科学与工程学院,河北 秦皇岛 066004)2(河北省计算机虚拟技术与系统集成重点实验室,河北 秦皇岛 066004)

1 引 言

随着人们生活水平的不断提高,衣着品味越来越不同,搭配也就变得越来越重要.搭配不仅需要颜色上的混合,还要配合不同的材质才能表现出的丰富形态.由于异质布料的属性不同,运动过程中会表现出不同的姿态,使得在同一场景中动态绘制异质布料变得非常困难.

布料的材质模拟一直是计算机图形学研究的重要内容.1997年法国国家信息与自动化研究所Provot等人,用剪切弹簧、弯曲弹簧和结构弹簧模拟布料质点的受力[1],通过调节弹簧系数来模拟不同材质的布料,但弹簧力的变化是非线性的,会发生超弹现象;2012年NVIDIA的PhysX研究小组的Tae-Yong Kim等人,提出了一种LRAs(Long Range Attachments)模型[2],通过将布料所有质点直接与固定点相连的方法,有效解决了布料的超弹现象,但缺乏对自由质点的控制.2007年Müller等人,提出一种基于位置的运动学模拟方法(PBD-Position Based Dynamics)[3],将布料的属性抽象为约束模型,通过约束投影的方法直接修改布料质点的位置.德国亚琛大学的Jan Bender教授和NVIDIA 的Müller等人,对PBD做过综述性的介绍[4],由于其通用性、简便性和鲁棒性,现已经应用到Maya、PhysX引擎、Havok引擎、Bullet引擎,还普及到了电影和医疗仿真等领域,包括有柔体、可变性物体、流体和毛发等模拟.2015年,王华民提出了切比雪夫多项式加快PBD约束投影计算的方法[5],是目前为止最快的基于CPU运算的方法.Macklin等人在2016年提出XPBD[6],将能量的概念引入PBD中,通过立即修改约束方程的拉格朗日乘子,而不是将其抛出待到所有约束迭代结束后再计算的方法,有效的解决了PBD长期存在的约束刚度依赖迭代次数问题.2016年NVIDIA的Chentanez等人在PBD的基础上,采用Shape Matching方法[7]实时模拟了弹塑性材料物体的形变.2017年宾夕法尼亚大学的刘天天等人,将投影运动学方法(Projective Dynamics)推导为准牛顿问题,使用L-BFGS来近似Hessian矩阵[8],实时模拟超弹性材质.同样来自宾夕法尼亚大学的蒋陈凡夫等人,也模拟了非常丰富的各向异性的弹塑性布料[9].但是,上述方法仅适用于同一场景中的同质布料的模拟,而异质布料的绘制不仅需要保证同一布料不同约束间的独立性,还要确保不同布料间的独立性.同时,统一设定约束迭代次数又会造成计算资源的不合理分配.

针对上述问题,提出一种动态绘制异质布料的方法.首先,引入自由质点约束因子改进PBD中的LRAs模型,通过属性约束构建异质布料模型;在XPBD的基础上,根据场景中约束重要性的不同设置不同的迭代次数,以独立迭代的方式计算各约束,保证不同布料的迭代独立,合理分配计算资源;并用Jacobi方法替代Gauss-Seidel方法,以并行的方式计算影响质点的约束,提高解算器计算速度.

2 构建异质布料

布料材质不同是由属性不同引起的,可以通过调节属性来绘制异质布料.本文根据布料属性建立不同的属性约束模型,通过属性约束构建异质布料模型.

图1 LRAs模型Fig.1 LRAs model

LRAs[4]通过限制附着点与自由质点的距离来解决超弹问题.如图1,深色点为固定点,空心点为自由质点.在布料运动过程中,初始状态为path0,以固定点为中心,以与自由质点的距离为半径,在半径范围内自由移动,如果超出范围则修改质点的位置,如path1灰色点为修正的位置.

但是在满足LRAs条件下,自由质点间也会产生过度拉伸,如左下方path2所指线段,距离远大于初始距离,效果如图2(b).为此添加自由质点约束因子,避免自由质点间的距离过长.

Cfixed(pj,pfixed)=|pj-pfixed|-lj-fixed·l

(1)

Cadj(pj,pj-adj)=|pj-pj-adj|-lj-adj·l

(2)

方程(1)为LRAs的约束方程,Pj为自由质点,Pfixed为固定点,lj-fixed为自由质点与固定点的初始距离.方程(2)是自由质点与相邻质点的约束因子方程,Pj-adj(≠Pfixed)是自由质点相邻的节点,lj-adj为自由质点间的初始距离.其中l为拉伸系数.在计算过程中不断修改质点的位置,使其同时满足上述两个约束方程.

图2所示,(a)为文献[2]中采用LRAs方法绘制的布料,(b)为未解决的超弹问题,(c)改进后绘制的布料.通过拉伸系数l的调节可以绘制出不同弹性的布料,如(d)、(e)、(f).

图2 改进的LRAs解决布料超弹Fig.2 Improved LRAs model to solve the super bombs

除此之外,还要创建弯曲、碰撞、重力、摩擦等约束.最终,通过布料属性构建的约束模型构建异质布料模型.

3 异质布料求解

在对异质布料求解过程中,除了解决约束刚度与迭代次数的依赖关系,即在求解过程中保证同一布料约束间互不干扰,还要保证不同布料间属性调节的独立性,比如需要对不同布料的拉伸系数或弯曲系数等进行不同参数设定.

3.1 独立迭代

文献[3,6]对各个不同的属性约束设定统一的迭代次数,但不同的场景约束属性的迭代要求是有区别的.比如碰撞时,为避免穿透需要对碰撞约束设置更高的迭代次数,以实现精确碰撞,而对拉伸和弯曲约束要求就低一些;再如为了绘制悬垂布料,需要对拉伸和弯曲约束迭代多次,碰撞约束基本不用考虑.

为此,对场景中不同布料的各种约束进行独立迭代计算,设计了算法1,其中第4-12行完成每种属性约束迭代计算,通过调节第5行中的属性约束迭代次数,实现异质布料在同一场景中的快速绘制.

(3)

其中ni为质点i的约束数量,ω[1,2]为外部可设置的全局变量,用于控制过度松弛速率.通过Jacobi方式并行迭代计算各个属性约束,加快异质布料的绘制速度.

3.2 调节因子

为了绘制异质布料,为每个约束模型添加一个调节因子.设拉伸因子为l[1,2],抗弯曲因子为k[0,0.1],摩擦因子为μ[0,1],异质布料的绘制就通过控制各类调节因子实现,最终约束模型扩展为C(x,e).质点的位置变化公式为:

(4)

其中e为不同属性的调节因子l,k,μ.

算法1.simulation loop

3:initialize multipliersλ0⟸0

4:for all constraints do

5: whilei< solverIterations do

6: computeΔλ

7: computeΔX

8: updateλi+1⟸λi+Δλ

9: updateXi+1⟸Xi+ΔX

10:i⟸i+1

11: end while

12:end for

14:update positionsXn+1⟸Xi

4 实验结果与分析

为了验证异质布料绘制方法的有效性,以C++为主,配合使用C#和JavaScript,结合Unity物理引擎开发平台建立了异质布料仿真实验系统,并在不同操作系统和硬件条件下进行了多项对比实验.

图3为通过调整拉伸系数l、弯曲系数k和摩擦系数μ,在同一场景中绘制出粗麻、丝绸、织锦、条绒和粗布等5种异质布料,并且将这5种材质布料与小球进行碰撞.从图中可以看出,通过添加的属性约束调节因子,有效地绘制出同一场景中的异质布料.

图3 本文方法构建的异质布料Fig.3 This paper constructs heterogeneous fabrics

图3中每种布料包含6.1k个顶点、10.7k个三角形,5种布料碰撞过程中每一帧绘制所花费的时长如图4,其中x轴是帧数,y轴是时间(ms),z轴为5中不同材质布料.图4所示异质布料因属性约束不同所耗费的时间是有差异的.

图4 异质布料碰撞曲线Fig.4 Heterogeneous fabric collision curve

图5为文献[3]和文献[6]的GS+统一迭代、本文的GS+独立迭代、文献[4]的Jacobi+统一迭代和本文的Jacobi+独立迭代四种方法在绘制时间上的对比结果.统一迭代中将所有约束迭代次数设置为8,在碰撞处理占主要计算负荷的场景中,独立迭代中只将碰撞约束次数设置成8,而其它约束次数设置为2.从图6中可以看出在视觉效果相似的情况下,无论是对GS还是Jacobi,独立迭代方式的计算都明显快于统一迭代方式,而且本文方法(Jacobi+独立迭代)速度最快.

图5 本文方法与文献[3,4,6]方法时间对比Fig.5 Compared with the results of[3,4,6]

如图6所示,采用本文方法(Jacobi+独立迭代)对异质布料间的碰撞进行绘制,并与文献[10]对比,从图中可以看出相比于同质布料的碰撞,异质布料的碰撞能表现出更丰富的姿态.并对图6(b)中异质布料的碰撞进行了不同平台的测试,见表1,硬件和操作系统的不同会对绘制的速度造成影响.

图6 本文方法与文献[3][4][6]方法效果对比Fig.6 Compared with the results of[3][4][6]

由以上对比实验可以看出,本文方法能够建立异质布料的独立约束模型,通过并行方式配合独立迭代方法加快求解速度,快速地绘制出同一场景运动过程中的异质布料.

5 结 论

本文提出了一种快速绘制运动过程中异质布料的方法.其中,引入自由质点约束因子改进LRAs模型,通过属性约束构建异质布料模型;在XPBD解决刚度依赖迭代次数的基础上, 设计独立迭代计算方法, 在保证同一布料不同属性间互不干扰的同时, 根据场景需求不同, 设置不同的迭代次数, 优化计算资源分配; 采用Jacobi方法, 对异质布料以并行方式进行计算, 加快了方程求解速度. 今后我们将对异质布料在GPU上的并行绘制进行研究, 来进一步提高异质布料的绘制速度.

表1 不同平台下三种异质布料碰撞
Table 1 Different heterogeneous fabric collisions on different platforms

系统CPUGPU网格分辨率帧速率(ms/帧)win10i7-4790 3.6GHz 8GGT 630 2G 700MHz129.6k393.9win10FX9590 4.72GHz 16GR9 290X 8G 1000MHz三角形582.5OS Xi5-6600 3.2GHz 8GR9 M390 2G 1000MHz66.9k270win8i7-5820k 3.3GHz 16GGTX1070 8G 1632MHz顶点326.2

图7 异质布料碰撞Fig.7 Heterogeneous fabric collision

猜你喜欢

质点布料异质
用布料拼图形
巧用“搬运法”解决连续质点模型的做功问题
烧结机布料器的改进优化
质点的直线运动
质点的直线运动
随机与异质网络共存的SIS传染病模型的定性分析
按约定付账
Ag2CO3/Ag2O异质p-n结光催化剂的制备及其可见光光催化性能
MoS2/ZnO异质结的光电特性
高炉重量布料准确度的提高