使用ProceduralMeshComponent實(shí)現(xiàn)模型實(shí)時(shí)切割
來(lái)源:
52vr |
責(zé)任編輯:傳說(shuō)的落葉 |
發(fā)布時(shí)間: 2019-06-13 08:19 | 瀏覽量:
這篇文章介紹了如何使用UE4.13的ProceduralMeshComponent來(lái)實(shí)現(xiàn)針對(duì)一個(gè)模型的實(shí)時(shí)切割。
背景說(shuō)明
在游戲潛龍諜影崛起:復(fù)仇 中,主角可以針對(duì)場(chǎng)景中的大部分物體進(jìn)行實(shí)時(shí)切割。在游戲中,玩家需要指定一個(gè)切割平面,在主角揮刀后,對(duì)應(yīng)的物體便可以根據(jù)這個(gè)平面進(jìn)行切割。
在UE4中可以使用Apex Destruction來(lái)實(shí)現(xiàn)物體的破碎效果,但由于該破碎效果是離線(xiàn)生成的,換句話(huà)說(shuō)一個(gè)DM只能夠有一種破碎效果,因此無(wú)法達(dá)成實(shí)時(shí)切割的效果。
在UE4.13中,Epic加入了ProceduralMeshComopnent插件,使用這個(gè)插件可以進(jìn)行針對(duì)于模型的實(shí)時(shí)切割操作。
前置準(zhǔn)備工作
首先準(zhǔn)備好需要進(jìn)行切割的模型,我這里使用的是UE4示例中的人頭模型。值得一提的是,由于要達(dá)成實(shí)時(shí)切割的目的,因此需要啟用StaticMesh中的AllowCPUAccess屬性。
新建ActorBP,添加Procedural Mesh Component,調(diào)用CopyProceduralMeshfromStaticMeshComopnent方法來(lái)生成一個(gè)Procedural Mesh Component.
模型切割
ProceduralMeshComponent有Slice Procedural Mesh函數(shù),這個(gè)函數(shù)可以將Procedural Mesh進(jìn)行切割,并且生成另外的一半模型塊。
參數(shù)介紹:
Plane Position: 世界坐標(biāo)系下該平面的中心位置
Plane Normal: 世界坐標(biāo)系下該平面的發(fā)現(xiàn)
Create Other Half: 是否將切下來(lái)的那一塊模型獨(dú)立出來(lái)
Cap Option: 切面狀態(tài)
No Cap: 切面不縫合,模型中空
Create New Section for Cap: 切面縫合,使用自定義的材質(zhì)
Use Last Section for Cap: 切面縫合,使用與模型一樣的材質(zhì)
Cap Material: 如果Cap Option是Create New Section for Cap時(shí)自定義的材質(zhì)
效果如下:
原理分析
在UKismetProceduralMeshLibrary::SliceProceduralMesh()函數(shù)中,可以看到它實(shí)現(xiàn)的方法如下:
[代碼]:
01 |
SliceProceduralMesh(plane) |
02 |
1. create two maps of base vert index to vert index m1,m2 |
03 |
2. for each vertice∈{v} |
04 |
3. if (vertice on the positive side of the plane) |
05 |
4. m1←vertice |
06 |
5. else |
07 |
6. m2←vertice |
08 |
7. create two sections s1,s2 |
09 |
8. for each face∈{(v1,v2,v3)} |
10 |
9. if (v1,v2,v3on the positive side of the plane ) |
11 |
10. s1←v1,v2,v3 |
12 |
11. if (v1,v2,v3on the negative side of the plane ) |
13 |
12. s2←v1,v2,v3 |
14 |
13. else |
15 |
14. s1← positive vertices |
16 |
15. s2← negative vertices |
17 |
16. find clipped verticesvclip1,vclip2,vclip3,vclip4 |
18 |
17. triangulate the clipped polygon |
19 |
18. create cap geometry for s1,s2 |
20 |
19. create collision convex shape for s1,s2 |
簡(jiǎn)單來(lái)說(shuō),就是遍歷所有的面和點(diǎn),找到切割平面正向和負(fù)向的點(diǎn),并且補(bǔ)好三角面即可。
運(yùn)用以及注意事項(xiàng)
被切割的模型面數(shù)不宜太高,一方面是效率考慮,另一方面是切面的表現(xiàn)會(huì)有些奇怪。
被切割的模型的拓?fù)浣Y(jié)構(gòu)不宜太復(fù)雜,否則碰撞體的構(gòu)建容易表現(xiàn)的很怪異。
實(shí)際運(yùn)用的時(shí)候,可以考慮在切面處生成一個(gè)力場(chǎng)將兩個(gè)section分開(kāi)一些,否則有可能因?yàn)橄嗷サ哪Σ炼绊懕憩F(xiàn)。
-
分享到:
相關(guān)文章
網(wǎng)友評(píng)論
您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)
關(guān)閉
- 用戶(hù)名:
- 密 碼:
- 驗(yàn)證碼: 看不清? 點(diǎn)擊更換
- 忘記密碼?
全部評(píng)論:0條
推薦
熱門(mén)