? 久久精品人人槡,欧美日韩亚洲精品国产色,久久精品国产字幕
聯(lián)系我們

給我們留言

聯(lián)系我們

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

郵箱:info@narkii.com

電話:0595-82682267

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

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

UnrealEngine4HairStrandPlugin開發(fā)日志

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

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

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

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

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

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

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

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

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

關(guān)閉

全部評(píng)論:0條

推薦
熱門