? 欧美中日韩免费观看网站,菠萝蜜裸艺免费高清,爽快片18禁片免费久久
聯(lián)系我們

給我們留言

聯(lián)系我們

地址:福建省晉江市青陽街道洪山路國際工業(yè)設(shè)計園納金網(wǎng)

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當(dāng)前位置:主頁 > 3D教程 > 圖文教程

UnrealEngine4HairStrandPlugin開發(fā)日志

來源: 未知 | 責(zé)任編輯:傳說的落葉 | 發(fā)布時間: 2019-06-13 08:20 | 瀏覽量:
這篇文章介紹了HairStrandPlugin的立項和大體思路。
 
HairStrandPlugin總覽
 
HairStrandPlugin可以用來實現(xiàn)毛發(fā)的設(shè)計、模擬和渲染。
效果查看:傳送門 
 

Unreal Engine 4 —— HairStrandPlugin開發(fā)日志

 
在目前來說,該插件可以使用Maya進(jìn)行發(fā)型的設(shè)計,將發(fā)型導(dǎo)入UE4后便可以直接進(jìn)行發(fā)絲的模擬和渲染了。
 
使用教程:傳送門 
墻內(nèi)用戶請訪問:傳送門
 
目前工具鏈的適配方面還有一些小問題,但是總體上不影響使用。
 
HairStrandPlugin的立項
 
HairStrandPlugin在一個月前立項。在練手插件GhostMeshPlugin完成后,我便開始了HairStrandPlugin的開發(fā),將代碼托管于coding.NET平臺之上。
 
小廠商的情懷
 
針對于發(fā)絲的模擬,各大游戲廠商都已經(jīng)做的不錯,例如愛麗絲瘋狂回歸中愛麗絲的發(fā)絲,古墓麗影中勞拉的發(fā)絲和最終幻想15中的發(fā)絲等均為高質(zhì)量的發(fā)絲表現(xiàn)。
 
但是可惜除古墓麗影的TressFX已經(jīng)開源外,我們這些小廠商也無法窺探到發(fā)絲技術(shù)的奧秘。又因為我當(dāng)前所參與開發(fā)的項目隱龍傳:影蹤里主角陸天源也是長發(fā)造型,因此我便開始了這個項目,希望能夠讓沒有太多背景的游戲開發(fā)者也可以在UE4上實現(xiàn)發(fā)絲的渲染。
 
Nvidia Hairworks
 
實際上,Nvidia也已經(jīng)推出了Hairworks,專門用于毛發(fā)的渲染,而且效果相當(dāng)不錯。但是以來Hairworks采用的是基于DirectX 11 的Tessellation技術(shù),換句話說,無法在移動平臺和Play Station平臺上使用。
 
另一方面,由于Nvidia Hairworks只公開了PC版本的庫,因此針對于其他系統(tǒng),Hairworks無法適配。
 
Apex Cloth
 
Apex Cloth是Nvidia推出的可以用于布料的模擬的工具,并且已經(jīng)集成在UE4里面了。實際上在該插件還未完全實裝的情況下,時至今日隱龍傳:影蹤也是正在使用Apex Cloth進(jìn)行發(fā)絲的模擬??墒茿pex Cloth在模擬發(fā)絲上還是有一些短板:
 
不支持移動平臺,換句話說在Android平臺上無法正常工作。
布料與發(fā)絲還是有差別,例如在Apex Cloth上的布料不會回彈。因此使用Apex Cloth模擬的發(fā)絲在表現(xiàn)發(fā)型上略不適應(yīng)。
Apex Cloth與UE4中的Skeletal Mesh完全綁定,換句話說一個Skeletal Mesh只能綁定一個類型的布料,該布料的信息無法在runtime進(jìn)行調(diào)整。假如角色從陸地進(jìn)入水中,布料阻尼damp無法進(jìn)行調(diào)整,因此在水中的表現(xiàn)將會很怪異。
開發(fā)過程
 
到目前為止的開發(fā)過程大致可以分為兩塊:Particle Simulation和Strand Mesh Build。
 
初期針對于發(fā)束粒子進(jìn)行Physical Simulation、Collision Detection和Constraint Solve。
 
然后利用結(jié)算得來的粒子進(jìn)行樣條插值,從而將發(fā)絲構(gòu)建出來。
 
Particle Simulation
 
針對發(fā)束粒子來說,整體的模擬分成力場模擬、碰撞檢測和約束迭代。
 
重力&風(fēng)力模擬
 
在HairStrandPlugin中,我采用的是帶有阻尼的Verlet Integration來進(jìn)行模擬:
 
 
x(t+Δt)=x(t)+(x(t)−x(t−Δt))∗damp+aΔt2
在上面的公式中,damp為阻尼系數(shù),阻力越大則該值越小。而a則是該粒子在該處的加速度,重力、風(fēng)力或者水流等都可能影響這個值。
 

Unreal Engine 4 —— HairStrandPlugin開發(fā)日志

 
關(guān)于Verlet Integration,我在之前的一篇博客Unreal Engine 4 —— 可交互繩索的構(gòu)建也提到過。
 
碰撞檢測
 
目前的發(fā)束例子只進(jìn)行了球形的檢測,檢測方法很簡單:檢測發(fā)束粒子與球心的距離,若距離小于半徑r,則將改粒子推到球面即可。
 
約束迭代
 
針對于約束,目前來講分為Global Constraint Solve和Local Constraint Solve。Global Constraint Solve用于保持發(fā)型,Local Constraint Solve用于處理兩個過遠(yuǎn)的粒子。
 
總體來講還是不難。
 
Strand Mesh Build
 
Strand Mesh的構(gòu)建經(jīng)歷了一些風(fēng)波。
 
LineMesh
 
最開始的時候我打算使用LineMesh來進(jìn)行發(fā)絲的模擬:
 
Mesh.Type = PT_LineList;
1
1
但是使用這種方法所構(gòu)建的發(fā)絲所需要的圖元數(shù)量太多,消耗不起。
 
TriangleList
 
因此最后還是決定了使用TriangleList。但是如果是使用平常的三角面片則還是無法應(yīng)對多角度的視線,例如當(dāng)相機(jī)與面片相切時,則完全看不到該面片。
 
所以最終決定將該網(wǎng)格朝向攝像機(jī)展開,使面片時刻朝向攝像機(jī):
 

Unreal Engine 4 —— HairStrandPlugin開發(fā)日志

 
這樣達(dá)到的效果我個人還是非常滿意的。
 
后續(xù)開發(fā)
 
后續(xù)的開發(fā)將會著重幾個方面:
 
Interpolation,在發(fā)絲間進(jìn)行插值,減少樣條曲線的運算量。
GPU Simulation,準(zhǔn)備將Verlet Integration和Constraint Solve放到GPU上進(jìn)行運算,應(yīng)該回更快一些。
多線程加速,不同的發(fā)絲應(yīng)該可以放到其他的線程中去達(dá)成線程加速。
后記
 
HairStrandPlugin只由我一個人開發(fā),從最初的什么都沒有到現(xiàn)在能夠或多或少看出海飛絲的效果,這樣的成果我個人其實已經(jīng)很滿意。
 
開發(fā)過程中再次感覺到數(shù)學(xué)對于游戲程序員實在是太重要了,在閱讀論文的過程中幾乎把所有的大學(xué)時代學(xué)到的數(shù)學(xué)都過了一遍。日后看來還是要好好過一遍數(shù)學(xué)了。
 

相關(guān)文章
網(wǎng)友評論

您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

關(guān)閉

全部評論:0條

推薦
熱門