Unity布料系統

 

 

 

 

布不會對場景中的全部碰撞體作出反應,也不會將力施加到世界。 當它被添加時,布組件將不會反應或影響任何其餘身體。 所以,布和世界不會相互識別或看到對方,直到你手動添加碰撞者從世界到布組件。 即便在那以後,模擬仍然是單向的:布料對這些物體作出反應,但不施加力。html

此外,您只能使用三種類型的碰撞器與布:球體,膠囊和錐形膠囊碰撞,使用兩個球碰撞器構造。 這些限制都有助於提升性能。算法

 

Edit Constraints Toolspring

選擇編輯約束將使編輯器進入編輯應用於佈網格中的每一個頂點的約束的模式。 全部頂點將基於當前可視化模式進行着色,以顯示它們各自值之間的差別。數組

 

有兩種模式可用於更改每一個頂點的值,在選擇模式下,可使用鼠標光標選擇一組頂點,以繪製選擇框,或者經過逐個單獨點擊頂點。一旦選擇了任何數量的布料頂點,它們就能夠啓用最大距離或表面穿透約束並分配值。數據結構

繪製模式容許您經過點擊它直接調整每一個單個頂點,再次使用選項來調整最大距離,表面滲透或二者。與以前同樣,能夠分配值,而且將更新場景視圖中的視覺表示。框架

碰撞編輯器

布料不能簡單地與任意世界幾何碰撞,如今將只與Capsule Colliders或Sphere Colliders數組中指定的碰撞器進行交互。ide

球體碰撞器數組能夠包含單個有效的SphereCollider實例(第二個爲空)或一對。在前一種狀況下,ClothSphereColliderPair只表明一個單一的球體碰撞器,用於布料碰撞。在後一種狀況下,它表示由兩個球體限定的圓錐形膠囊形狀,而且錐體鏈接兩個球體。圓錐形膠囊形狀對於模擬人物的肢體是有用的。工具

=====================================================================性能

0. 前言

項目技術測試結束以後,各類美術效果提高的需求逐漸成爲後續開發的重點,角色效果部分的提高目標之一即是在角色選擇/展現界面爲玩家提供更高的品質感,因而能夠提供動態效果的布料系統就做爲了技術預研的方向。筆者在以前的端遊項目中有較多使用布料系統製做布料效果的經驗,此次也嘗試了在Unity引擎中進行布料效果製做的幾種方法。本文總體框架基於以前整理的一篇關於布料系統基本原理的文章,結合Unity引擎中的製做方法,爲須要在手游上有更好的角色動態表現需求的項目提供一些方向和思路。

1. 什麼是布料系統

隨着時代的發展和移動設備硬件性能的提高,物理引擎被愈來愈多的移動遊戲所使用。物理引擎處理的對象主要能夠分爲剛體(Rigid Bodies)和柔體(Soft Bodies)兩大部分,剛體主要應用在物理碰撞、破碎、布娃娃等系統中,而柔體最爲重要的應用表明就是布料系統。「風吹仙袂飄飄舉,猶似霓裳羽衣舞」,白居易《長恨歌》中描繪的美麗情景就是布料系統所但願實現的遊戲效果之一。筆者就着眼於布料系統,從其相對於傳統制做方法的優點出發,描述其基本的實現原理,以及對常見的幾種帶有布料系統的物理引擎進行簡單的對比,最後以目前在開發的手遊爲例,聊一聊使用Unity引擎製做手游上能夠應用的角色布料效果的基本方法。

在物理引擎中,經過物理計算來模擬布料效果的系統能夠稱之爲布料系統。雖然名爲布料系統,但並不只僅用於表現角色衣服的布料效果,並且能夠應用於毛髮、墜飾,甚至女性的某些柔軟部位……下面的幾張圖就給出了一些遊戲中應用了布料效果的地方。

《九陰真經》布料效果宣傳圖
《九陰真經》布料效果宣傳圖

 

《無盡戰區》遊戲中的角色布料效果
《無盡戰區》遊戲中的角色布料效果
《劍網3》重置版中的布料效果截圖
《劍網3》重置版中的布料效果截圖
《王者榮耀》中妲己尾巴有部分的布料效果
《王者榮耀》中妲己尾巴有部分的布料效果

目前來講,大部分3A級別的主機遊戲中,布料效果已經幾乎是標準配置了,而在國內的端遊中,也已經獲得了大範圍地應用。而在手遊中,只看到爲數很少的幾款在小範圍地使用,好比只有在角色選擇界面,或者只有主角身上會開啓部分佈料效果。

2. 爲何要使用布料系統

若是把爲何要使用布料系統這個問題的答案歸結爲策劃和美術需求的話,就未免太過膚淺了。在角色身上或者場景的組件中表現布料的效果,好比上面圖中角色的裙襬,場景中迎風招展的旗幟,均可以增長遊戲的真實感,提高美術效果。但基於物理引擎的布料效果的具體優點還要從與傳統作法的對比提及。傳統的布料效果實現方式很是簡單——美術手動製做的動畫。

在物理引擎被普遍使用以前,遊戲中的絕大部分動態效果都是經過固定的動畫來表現。這個作法很是容易理解——角色身上的飄帶也好,頭髮也好,在動畫師的眼中,與角色的手腳四肢沒有任何區別,添加骨骼,進行蒙皮,製做動畫,不管一幀一幀本身手K仍是用Max的柔體效果插件生成,均可以製做出逼真的布料運行的效果。(在更早的使用網格動畫的年代,原理也相差很少。)若是你以爲效果不夠好?那簡單,再多加一些控制骨骼,多給美術一些時間,就能夠作出更好的效果。

基於動畫的製做方法雖然能夠知足大部分的需求,但隨着時代的發展,不管玩家仍是遊戲開發者都在追求更好更真實的效果,這種製做方式表現出來的布料效果的缺點慢慢顯現出來:

1. 布料效果不夠真實
預先製做的動畫是一份肯定的數據,不管在什麼狀況下只要播放這段動畫表現出來的效果都是徹底同樣的。這種穩定性在某些狀況下並非一種真實的表現,好比一個很簡單的例子是角色的原地轉身,一般狀況下這種轉身是由程序改變模型朝向來實現了,動做依然是Idel這樣的動做,原本柔軟的布料應該表現出應有的慣性,但動畫系統很難作出相應的表現。 另外,雖然在單個的動畫中,布料的表現效果足夠好,可是在各個動做之間轉換,甚至多個動做融合到一塊兒進行表現的時候,用於表現布料效果的骨骼融合結果就會不那麼天然,真實感也就大打折扣。
除此以外,當你靈巧的躲過一個敵人的箭矢,感覺到敵人箭矢從耳邊呼嘯而過的驚險與刺激的時候,箭矢所產生的風若是能夠吹起你的衣服是否更帶感呢?傳統的動畫效果也幾乎沒法實現這樣的需求。

2. 沒法應對愈來愈多的變化
愈來愈多的遊戲提供給玩家一個沙盒的世界,也就意味着玩家能夠控制角色作出愈來愈多遊戲設計者不可控制不被預期的行爲和動做表現。在這種狀況下,基於骨骼動畫的布料表現就有些力不從心。好比當角色有移動速度的變化時,咱們一般能夠經過改變更畫的播放速度提供對應的表現,可是移動速度很快和移動速度很慢時,裙襬頭髮的飄揚效果都是徹底同樣的,甚至當玩家面對一堵牆按下移動按鈕,角色開始播放跑步動畫,雖然並無移動,但仍然能夠看到角色的裙襬和頭髮在迎風飄揚……

3. 限制時裝的設計和製做
目前大部分遊戲在設計角色的時候因爲要考慮到角色將來可能會出的時裝,可能採用最大化骨骼的製做方案。所謂最大化骨骼,就是在角色製做初期就肯定好角色最多可能有哪些骨骼,在以後製做角色時裝的時候,要徹底在最初定義的最大化骨骼範圍內。若是超出了這個範圍,就須要修改全部時裝的模型以及角色的全部動做,並所有從新導出,這種修改的代價是很是大的。

角色的模型與最大化骨骼的設計
角色的模型與最大化骨骼的設計

 

這些預留的最大化骨骼,有不少是在角色默認設計的時裝中沒有被使用的,可是爲了給將來預留更多的可能,所以須要留好控制裙襬、長髮等部件的各類最大化骨骼,並且注意,這些骨骼上都須要製做對應的動畫效果,或者在將來製做某套須要這一骨骼的時裝的時候,把全部的動畫添加上對應骨骼的動做,從新導出。在美術工做量、美術資源的大小、遊戲的運行效率等方面,這種作法都有必定的負面影響。

固然,大部分引擎都已經支持了子模型的方式,也就是引擎能夠把一些子模型動態地合併到一套骨架上。可是《劍靈》的製做人員提供了另一種思路——主角的動畫只製做身體主要部位的動畫效果,對於全部的裙襬、墜飾這樣的物體,都統一使用布料系統來製做。這一製做方案能夠完美解決設計角色時裝時要考慮是否有骨骼能夠驅動的問題,從而解放美術的想象力,節省美術的冗餘工做,運行時的效率也獲得必定的提高。

 

劍靈中角色的效果
劍靈中角色的效果

4. 沒法支持動畫重定向以後的動做
動畫重定向是一種經常使用的動畫複用技術,可讓一個模型A使用另一個模型B的動畫數據,可是若是模型A帶有裙襬、長髮這樣的額外部分,而模型B的動畫中並無驅動對應網格的骨骼,那麼重定向以後的裙襬就會很是僵硬——大多數狀況下它們以T-pos的姿式跟隨父骨骼進行總體的移動。
不少格鬥遊戲在受擊效果中會大量使用了動畫重定向技術,要麼讓動畫模板包含全部可能的骨骼信息,要麼讓那些不被驅動的面片就呆在那裏不動。前者幾乎沒法實現的,由於對於非CS骨骼來講,不一樣的骨骼名稱在不一樣的模型中對應的部分多是不一樣的,好比Bone001在A角色中對應驅動頭髮部分的動畫效果,而在B影響中驅動了裙襬,即便強制要求美術按照統一的規則進行命名,這個工做量和出錯的機率也是很是大的,那就須要一套包含全部角色最大化骨骼的「最大化最大化骨骼」。然後者多是策劃與美術沒法接受的。

總之,基於物理模型的布料系統提供一套在遊戲運行時根據環境計算布料效果的解決方案,這一系統能夠有效地彌補傳統動畫製做方式的上述這些不足,爲遊戲提供具備更強真實感的布料效果。

3. 布料系統的實現原理

在應用布料系統以前,咱們先淺顯地看一下布料系統的發展過程和基本原理。

在圖形學領域開始布料模擬的研究能夠最先追溯到上世紀八十年代,最先的時候學術界對於布料系統的研究確定不是用於布料的實時計算,而是離線渲染,甚至只是爲了生成一副靜態的圖。好比Terzopoulos在1987年的論文提出一種方法,將布料看成矩形的網格,而後使用半隱式集成的方式來更新它的位置,使用彈性理論來模擬動畫效果。Breen在1994年提出了一個新的視角,即基於粒子(Particle-based)的方案,使用用於模擬纖維織物的Kawabata measuring system來模擬布料的運行效果。Baraff和Witkin在1998年發表的論文中提出了一種在保證布料模擬效果穩定的前提下容許更大時間步長的方案,這一方案也被逐漸地改進爲更快的方法。在這以後,基於AABB樹等數據結構的算法優化,與剛體的碰撞,布料自身的碰撞計算等問題逐漸被研究和提出相應的解決方案,布料模擬也逐漸從一個學術界的研究方向發展成爲能夠應用於影視製做的工業技術,進而應用於須要實時計算的遊戲領域。下面的幾幅圖給出了幾個重要的論文在當年所展現的布料模擬效果。

 

Breen在1994年製做的布料效果
Breen在1994年製做的布料效果
Baraff和Witkin在1998年使用大時間步長模擬的布料效果
Baraff和Witkin在1998年使用大時間步長模擬的布料效果
Bridson在2005年考慮了與剛體碰撞的布料效果
Bridson在2005年考慮了與剛體碰撞的布料效果

布料模擬技術大體由布料建模、數值計算、碰撞處理和渲染顯示四大部分組成。從前文能夠看出,在30多年的研究發展中,各國的研究人員針對這些技術提出了多種不一樣的方法,在這其中,布料建模是最爲重要的部分,由於它影響甚至決定了後面的數值計算和碰撞處理的實現機制。被提出以及在應用的建模方法有不少種,好比較早的懸鏈線性模型、純集合變換的布料變形模擬方法,基於物理的彈性變形模型,粒子系統模型等等,甚至也有基於紋理生成幾何褶皺的方法。而現代遊戲引擎中實現和集成的模型一般是基於物理方法的質點-彈簧模型(Mass-Spring Model),這一方案具備模型簡單且運算效率較高的特色,咱們着重講述一下這一模型的基本原理。

在質點-彈簧模型中,布料被當作網格上的粒子來進行模擬,這些粒子之間由彈簧減震器進行鏈接。每個彈簧鏈接兩個粒子,而且基於粒子的位置和速度來產生做用力。粒子能夠受重力影響,彈簧能夠設置爲不一樣的類型,好比拉伸彈簧(stretch springs)、剪切彈簧(Shear Springs)和彎曲彈簧(bend springs)等。

質點彈簧模型結構示意圖
質點彈簧模型結構示意圖

做用力的計算過程主要包括兩部分,一個是質點所受的重力:

公式
公式

另一個彈簧對於質點的做用力,咱們使用Ks來表示彈簧自己的約束力,Kd表示阻尼因子,l0表示彈簧的靜息長度,那麼根據物理原理獲得做用力的計算方程以下:

公式
公式

當咱們計算出這一模型中的全部做用力以後,就能夠根據牛頓第二定律計算每一個粒子的加速度:

公式
公式

an是粒子n的加速度,fn是做用於粒子n的做用力,mn是粒子n的質量。當咱們計算好加速度以後,咱們能夠用它來模擬一個很小的時間步長內的速度和位置變化:

公式
公式

這就是最簡單的質點彈簧模型的基本原理。其餘更多的改進方案,更多的效果支持,都是基於這一簡單的物理模型來實現的。經過修改質點的質量參數,彈簧的類型以及阻尼因子、靜息長度等參數,就能夠實現絲綢、麻布,甚至竹蓆等不一樣的布料效果。固然,要實現一套真正可用的完整模型和能夠支持運行時計算的高效模擬算法,還須要不少問題和細節要去解決,這些在本文中就再也不進行贅述,有興趣的同窗能夠參考Cloth Simulation相關論文或者閱讀開源引擎相關源碼。

4. 遊戲中成熟的布料系統引擎

在瞭解了布料系統實現的基本原理以後,咱們來看一下經常使用的幾款提供了布料系統實現的引擎。其實對於布料系統,甚至物理系統來講,不少引擎都不會本身去實現,而是集成已經提供了相應功能的中間件。世界三大物理引擎有AMD公司的Bullet、Nvidia家的PhysX,還有如今被Microsoft從Intel手中收購了的Havok,他們都提供了整套的布料模擬解決方案供其餘引擎集成和使用。

Bullet做爲一個跨平臺的開源物理引擎,固然支持布料模型的建立和模擬,但彷佛沒太聽聞哪些遊戲大做使用了這一引擎製做布料效果真後大肆宣傳,所以在遊戲行業內的應用不如另外兩款多。因爲筆者對這一引擎瞭解很少,在此不進行詳細的介紹。這款引擎的一大好處在於開源,想了解布料系統實現細節的同窗能夠直接翻看源碼來進行閱讀和學習。

 

Bullet引擎展現的布料效果
Bullet引擎展現的布料效果

PhysX提供了功能強大的布料系統,Unity中的物理引擎部分就是基於PhysX搭建的,Unreal引擎一樣默認集成了PhysX,筆者猜測這是受英偉達自由許可政策的影響——「PhysX 二進制軟件開發包可免費用於非商業和商業遊戲與應用程序(這意味着,沒有許可費或特許使用費)」。除了一些使用Unreal引擎的主機大做基於PhysX製做布料效果,國內騰訊公司的《天涯明月刀》中武俠風的布料效果也是基於PhysX來製做的,他們也以此做爲一個賣點進行推廣。

 

《天涯明月刀》中使用PhysX製做的布料效果截圖
《天涯明月刀》中使用PhysX製做的布料效果截圖

在PhysX引擎中,除了布料的模擬和碰撞以外,已經支持了布料的破碎(Cloth Tearing)效果。這種效果要求當模型中的彈簧被拉伸得長度超出必定限度以後,能夠破壞掉原來的模型結構。

 

PhysX中布料的破碎效果
PhysX中布料的破碎效果

Havok也是一款被普遍應用的物理中間件,不少3A大做的各類物理效果都是基於它進行的製做。Havok提供了Max和Maya等多種建模工具的插件來製做並導出布料信息,運行時經過物理計算實現質點彈簧模型的更新過程。下圖是Havok 2015版本的Demo視頻中的效果圖,雖然還不支持破碎等效果,可是在碰撞檢測的精度、運行效率等方面有了不小的改進。

Havok Demo中的布料效果演示
Havok Demo中的布料效果演示

 

5. Unity中的布料製做和應用

筆者以前所經歷的端遊項目中使用的是Havok做爲物理引擎來製做的布料效果。Havok引擎提供了一套很是豐富而又複雜的工具鏈來支持布料製做功能,當時爲美術翻譯(是的,即便是大廠的美術對於英文文檔也是抗拒的)、編寫的使用方法就有幾十頁,美術甚至須要經過組織沙龍來分享布料效果的製做方法和經驗。下圖列出了Havok中布料製做的幾個核心概念和它們之間的關係。

 

Havok中布料建模的核心概念
Havok中布料建模的核心概念

這裏面Simulation Cloth,以及Buffer均可以被看作承載粒子和彈簧數據的容器,Collidable是用於碰撞的膠囊體,布料屬性經過一系列Operator來進行設定,多個Operator組成一個State,多個State又能夠重複執行以屢次模擬計算的方式獲取更好的布料效果。爲了不布料穿插或者提高碰撞檢測的效率,Havok又提供了Local Range Constraints、Bone Global Plane Constraints等多種約束來在正常的模擬以外限定布料粒子能夠運動的範圍,好比Local Range Constraints就以半徑、最小距離和最大距離這三個參數指定了粒子能夠運動的空間範圍。

可見Havok中對於布料系統的設計和實現是如此的複雜。所以,在查閱Unity中布料製做方法的時候我覺得會有大量的資料和內容須要學習,結果官方文檔中的Cloth部分只有幾屏幕內容,而其除了用於處理碰撞以外的核心組件只有Cloth Component一個,而且整個製做過程是在Unity Editor內部的,着實讓我有點意外。在學習具體制做方法以前,仍是老思路,先對Unity豐富的插件進行一下調研。

5.1 插件調研

須要提早說明的是,前文所描述的布料系統及其原理,主要是針對在主機和端游上使用的物理模型的布料效果,它們基於網格頂點,能夠作到很是精細的效果。其實還有一種製做布料效果的方法——基於骨骼進行物理模擬。這種方法的原理更加簡單,把骨骼當作一個個經過關節鏈接在一塊兒的鉸鏈,給予必定的物理參數,來模擬動畫以外的動態效果,而最終效果是經過蒙皮反應到模型網格上的。因爲骨骼數量一般都比頂點數量少不少,所以這種方法具備更高的運行效率,在手遊中使用得也比較多,前面對於《王者榮耀》中妲己的辮子截圖,筆者猜測就是使用的相似的方法。

沿着這兩個不一樣的思路,筆者查看了幾個相關的插件。
a. 基於骨骼的方案。基於骨骼的方案在Unity的AssetStore上有多個實現,原理都差很少:Dynamic BoneSwing BonePhysicsBone
b. 基於質子-彈簧模型的方案。主要看了兩個,一個是官方的Cloth Component,一個是Obi Cloth

5.2 製做方法

基於骨骼的布料方案中,筆者購買了Dynamic Bone這個插件進行測試和學習;基於質子-彈簧模型的方案中,筆者選擇了官方原生的Cloth Component來進行測試和對比。

方法比較簡單,新建一個工程,選擇一個項目中使用的角色,分別使用這種方式進行布料效果的製做,而後進行效果和效率對比。

Dynamic Bone提供了一個名爲「Dynamic Bone」的腳本組件來實現骨骼鏈的物理模擬,每一條要模擬的骨骼鏈都須要添加一個動態骨骼的組件,組件中定義了骨骼鏈的根節點和阻尼、彈性、剛度係數、惰性、重力等等參數。組件截圖以下:

Dynamic Bone組件
Dynamic Bone組件

Dynamic Bone插件的使用比較簡單,進行必定的配置以後,角色的飄帶等就能夠在角色移動、播放動畫、旋轉等狀況下有了一些慣性感的動態效果。這裏列舉幾點具體使用時的小Tips:
a. 骨骼鏈不能經過Optimize Game Object進行優化。這個要求很容易理解,若是在C#層沒法取得骨骼對應的GameObject,天然沒法對其進行修改。
b. 整個Dynamic Bone組件必須放置在Animator所在的外層才能正常起做用,也就是須要在Animtor所在的GameObject的父節點上添加Dynamic Bone組件才能夠。因爲咱們以前Animator是在角色模型GameObject的最外層的,所以這個需求須要對以前的角色模型結構進行一點小的修改。
c. 最終效果依賴於骨骼鏈的數量。咱們對於飄帶等使用的骨骼進行了很是強的限制,一般只有1-2根,所以結果也可想而知,飄動時有比較明顯的折角現象。
d. 必須單獨綁定骨骼的面片才能夠作出動態效果。咱們有些飾品和短的飄帶綁定到了角色的脊柱等核心骨骼上面,這些骨骼是不能被用來作動態骨骼的,不然角色真個身體就扭曲掉了……

Unity官方所帶的Cloth組件使用稍微複雜一點,可是也不太難,基本步驟包括:

  1. 在Mesh Renderer所在的GameObject上添加Cloth組件;
  2. 點擊Edit Constraints按鈕在彈出的Cloth Constraints界面中編輯Mesh頂點上的常量,好比最大距離、表面滲透。也能夠經過筆刷來刷出漸變的值。
  3. 在Cloth組件中設置參數和碰撞來提高效果。
Unity Cloth組件
Unity Cloth組件

具體制做的細節流程這裏不詳述了,提供一個Youtube上的教學視頻,有比較詳細的過程——《GAME ASSET TUTORIAL - How to Create a Cloth in Unity 5 (PART 2/2)》

Cloth組件的效果由於是基於網格的,所以不須要綁定骨骼也能夠作出動態的效果,並且飄動的單元是mesh頂點,所以效果也比較細膩。(咱們的角色面數也比較省,固然作不到像端遊那麼精細的效果。)

5.3 方案對比

在前面的製做過程當中已經就這兩種方案的一些方面進行了簡單對比,這裏主要是針對性能進行一些對比工做。首先是在電腦上經過Profiler進行查看,Demo中有10個Unity Cloth和10個Dynamic Bone製做的角色布料效果,因爲遊戲還未正式上線,所以Demo就不截圖了,只給出Profiler的截圖:

性能對比
性能對比

能夠看出,即便是在PC上,基於物理的Unity Cloth組件佔用消耗也是比較大的,有0.28ms的消耗,固然Dynamic Bone也「不甘示弱」,兩個Update加在一塊兒也有0.21ms。在手機上,使用一樣的Demo進行測試,筆者使用了三年前的魅族MX4 PRO進行測試,Unity Cloth會從60幀的滿幀下降到大約30幀左右,而開啓Dynamic Bone只從60幀下降到50+幀,能夠看到在手機上的效能消耗還有較大差異,算下來在這臺設備上基於物理的Unity Cloth比Dynamic Bone要多消耗10ms左右。

須要說明的是,這裏的對比只是一個大概的感性對比,首先咱們只會將布料效果應用在選人界面或者角色瀏覽界面中,並且低配會關閉掉,所以性能上的差別不會做爲一個很是重要的考量點,另外基於物理的Cloth組件爲了方便製做,筆者並無把布料的部分單獨拆出來,所以整個模型都做爲布料粒子來模擬,只是大部分的頂點的Max Distance設置爲0。這應該會對內存的佔用和性能消耗有必定的影響。

針對目前項目中角色的製做方法和規範,筆者整理了一下兩種方案的對比狀況以下表:

 

方案對比表
方案對比表

這裏提一個Tips,Unity的Cloth筆者在電腦上測試發現,若是隻Deactive Cloth組件或者整個GameObject並不能讓PhysX部分的消耗消失,看上去是隻能減小一些,須要把角色的GameObject從場景中刪除掉才能夠。並不肯定這是不是一個Unity的bug,從某種程度上這樣作也能夠理解——畢竟物理效果是須要連續性的,即便模型並不在渲染,也須要進行一些物理模擬來保證模型被激活的時候的正確性。

5.4 方案選擇

最終的方案選擇還要再和美術一塊兒過一下效果再作決定,從目前來看,鑑於計劃只在很是特定的場合下使用,並且咱們角色的骨骼數量實在有限,添加骨骼的成本也比較高,Unity的Cloth可能會是咱們最終的選擇。

6. 總結

本文講述了基於物理模擬的布料系統的實現原理和應用方法,也記錄了最近在Unity中引入布料效果所作的一些工做,但願能夠給可能會用到的讀者一些幫助,也但願有經驗的讀者提供一些建議和分享。

最後想借着布料效果這一主題聊一個不太相關的感覺。對比筆者曾經熟悉的Havok引擎,Unity引擎的Cloth組件提供了很是簡單實用的封裝。筆者在學習和整理Havok中的布料系統的製做方法的時候,須要在3DS Max中進行網格的拆分、Buffer的創建、約束和狀態的配置和通道參數的設置等等步驟,才能夠在最終的遊戲中看到效果,而參數的修改和結果預覽也是相對麻煩的事情。固然與複雜對應的就是豐富的效果,幾乎任何遊戲中須要的柔體效果均可以進行實現,從武器長鞭到羞羞的乳搖,從柔軟的絲綢到彈彈的果凍,只要工具用得足夠熟練,概念理解得足夠清晰,美術能夠製做乃至創造出各類想象不到的效果。而Unity中的Cloth組件,只提供十幾個參數和一個簡單的常量筆刷,相對於Havok可謂簡陋至極,但也能實現六七成的布料效果,對於美術上手來講很是簡便,整個流程大均可以在Editor中進行,而更好更復雜的效果交給插件開發者來實現。這兩種引擎設計理念徹底不一樣,一個大而全,一個小而精,也許前者更強大,但對於入門者來講,後者更好用。我想,這也是Unity引擎能夠有這麼大範圍應用的緣由之一吧。

 

轉自 http://blog.sina.com.cn/s/blog_14d5b8dff0102x96v.html

轉自 https://www.jianshu.com/p/afb913afc85b

相關文章
相關標籤/搜索