刀光拖尾功能的改良

年終終於有空,刀光拖尾是我很早就想回顧的一個課題,項目中多采用插件實現,很少有機會去研究。

之前也寫過一版拖尾,但效果並不好。

 

在遊戲中刀光拖尾有2種做法,一種是直接做死,用Shader做遮罩去控制滑動效果,這種做法

通常用於非寫實類項目,unity自己的3d game kit demo對這一塊已經做的比較全,可以直接參考。

第二種是程序化生成,也就是目前的拖尾實現方法。

 

對於程序化生成的拖尾,通常重新實現一遍TrailRenderer,自行傳入UV信息、擴展插值邏輯等。

如果是直接模仿TrailRenderer去做,折線感會比較明顯,會有一種早期3D遊戲的感覺

我最早的刀光拖尾腳本也是這個基於思路去實現。

資源商店有一個很老的插件X-WeaponTrail,拖尾非常順滑,研究了下發現作者首先記錄每幀刀光點的位置

存爲採樣點,然後根據顆粒度(Granularity)參數進行0-1的插值,插值點再通過距離拿到新的點最終再走一遍CatmulRom輸出,

還是比較細緻的。後來的改良版本基於這個插件的思路去實現。

 

來對比下改良前後的效果(上圖-舊的刀光拖尾,下圖-新的刀光拖尾):

(上圖的重面問題縮短刀光範圍可以解決)

 

X-WeaponTrail的做法是每幀記錄最新的刀光點位置,拿到刀光點List通過CatmulRom插值,

並通過距離信息,等距的生成Mesh。每個拖尾面片的頂點位置等信息並沒有進行記錄,而是

實時計算的,這就導致刀光點發生變化之後,插值就會發生變化,就會有奇怪的滾動效果。

 

當把拖尾拉長後,刀光滾動的問題就比較明顯:

 

原版插件也有這個問題,不過一般刀光速度很快,這一點來說也還好。

 

原版插件的頂點處理也比較特殊,經過平滑處理最終寫入網格頂點的數據,是基於縱向3個頂點進行處理的,

也就是每次連接8個三角形(粗看是這樣),這點上沒參考原插件,直接按常規方式繪製頂點和索引順序了,也沒有出現問題。

對於插件的頂點池等功能設計,考慮到unity近年新出的優化方式較多(https://www.cnblogs.com/hont/p/15110254.html),

偷懶先用傳統方式寫入了。

 

最終參考該插件完成了刀光拖尾功能的改良,代碼Gitee地址:https://gitee.com/Hont/weapon-trail-fx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章