唐 勇,安陽陽,張 豆,劉宇涵,任小霞,賈江凱
1(燕山大學 信息科學與工程學院,河北 秦皇島 066004)2(河北省計算機虛擬技術與系統集成重點實驗室,河北 秦皇島 066004)
隨著人們生活水平的不斷提高,衣著品味越來越不同,搭配也就變得越來越重要.搭配不僅需要顏色上的混合,還要配合不同的材質才能表現出的豐富形態.由于異質布料的屬性不同,運動過程中會表現出不同的姿態,使得在同一場景中動態繪制異質布料變得非常困難.
布料的材質模擬一直是計算機圖形學研究的重要內容.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方法,以并行的方式計算影響質點的約束,提高解算器計算速度.
布料材質不同是由屬性不同引起的,可以通過調節屬性來繪制異質布料.本文根據布料屬性建立不同的屬性約束模型,通過屬性約束構建異質布料模型.

圖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,6]對各個不同的屬性約束設定統一的迭代次數,但不同的場景約束屬性的迭代要求是有區別的.比如碰撞時,為避免穿透需要對碰撞約束設置更高的迭代次數,以實現精確碰撞,而對拉伸和彎曲約束要求就低一些;再如為了繪制懸垂布料,需要對拉伸和彎曲約束迭代多次,碰撞約束基本不用考慮.
為此,對場景中不同布料的各種約束進行獨立迭代計算,設計了算法1,其中第4-12行完成每種屬性約束迭代計算,通過調節第5行中的屬性約束迭代次數,實現異質布料在同一場景中的快速繪制.

(3)
其中ni為質點i的約束數量,ω[1,2]為外部可設置的全局變量,用于控制過度松弛速率.通過Jacobi方式并行迭代計算各個屬性約束,加快異質布料的繪制速度.
為了繪制異質布料,為每個約束模型添加一個調節因子.設拉伸因子為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

為了驗證異質布料繪制方法的有效性,以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]
由以上對比實驗可以看出,本文方法能夠建立異質布料的獨立約束模型,通過并行方式配合獨立迭代方法加快求解速度,快速地繪制出同一場景運動過程中的異質布料.
本文提出了一種快速繪制運動過程中異質布料的方法.其中,引入自由質點約束因子改進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