使用ProceduralMeshComponent实现模型实时切割 - 纳金网
联系我们

给我们留言

联系我们

地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网

邮箱:info@narkii.com

电话:0595-82682267

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

当前位置:主页 > 3D教程 > 图文教程

使用ProceduralMeshComponent实现模型实时切割

来源: 52vr | 责任编辑:传说的落叶 | 发布时间: 2019-06-13 08:19 | 浏览量:
这篇文章介绍了如何使用UE4.13的ProceduralMeshComponent来实现针对一个模型的实时切割。
 
背景说明
 
在游戏潜龙谍影崛起:复仇 中,主角可以针对场景中的大部分物体进行实时切割。在游戏中,玩家需要指定一个切割平面,在主角挥刀后,对应的物体便可以根据这个平面进行切割。
 
在UE4中可以使用Apex Destruction来实现物体的破碎效果,但由于该破碎效果是离线生成的,换句话说一个DM只能够有一种破碎效果,因此无法达成实时切割的效果。
 
在UE4.13中,Epic加入了ProceduralMeshComopnent插件,使用这个插件可以进行针对于模型的实时切割操作。
 
前置准备工作
 
首先准备好需要进行切割的模型,我这里使用的是UE4示例中的人头模型。值得一提的是,由于要达成实时切割的目的,因此需要启用StaticMesh中的AllowCPUAccess属性。
 

Unreal Engine 4 —— 使用ProceduralMeshComponent实现模型实时切割

 
新建ActorBP,添加Procedural Mesh Component,调用CopyProceduralMeshfromStaticMeshComopnent方法来生成一个Procedural Mesh Component.
 

Unreal Engine 4 —— 使用ProceduralMeshComponent实现模型实时切割

 
模型切割
 
ProceduralMeshComponent有Slice Procedural Mesh函数,这个函数可以将Procedural Mesh进行切割,并且生成另外的一半模型块。
 

Unreal Engine 4 —— 使用ProceduralMeshComponent实现模型实时切割

 
参数介绍:
 
Plane Position: 世界坐标系下该平面的中心位置
Plane Normal: 世界坐标系下该平面的发现
Create Other Half: 是否将切下来的那一块模型独立出来
Cap Option: 切面状态 
No Cap: 切面不缝合,模型中空
Create New Section for Cap: 切面缝合,使用自定义的材质
Use Last Section for Cap: 切面缝合,使用与模型一样的材质
Cap Material: 如果Cap Option是Create New Section for Cap时自定义的材质
效果如下: 
 
 
 
原理分析
 
在UKismetProceduralMeshLibrary::SliceProceduralMesh()函数中,可以看到它实现的方法如下:
 

[代码]:

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
简单来说,就是遍历所有的面和点,找到切割平面正向和负向的点,并且补好三角面即可。
 
运用以及注意事项
 
被切割的模型面数不宜太高,一方面是效率考虑,另一方面是切面的表现会有些奇怪。
被切割的模型的拓扑结构不宜太复杂,否则碰撞体的构建容易表现的很怪异。
实际运用的时候,可以考虑在切面处生成一个力场将两个section分开一些,否则有可能因为相互的摩擦而影响表现。

相关文章
网友评论

您需要登录后才可以发帖 登录 | 立即注册

关闭

全部评论:0条

推荐
热门