需要启用StaticMesh
中的AllowCPUAccess
属性。
新建ActorBP,添加Procedural Mesh Component,调用CopyProceduralMeshfromStaticMeshComopnent
ProceduralMeshComponent
有Slice Procedural Mesh
函数,这个函数可以将Procedural Mesh进行切割,并且生成另外的一半模型块。
参数介绍:
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()
函数中,可以看到它实现的方法如下:
SliceProceduralMesh(plane)
m1,m2
vertice∈{v}
vertice
m1←vertice
m2←vertice
s1,s2
face∈{(v1,v2,v3)}
v1,v2,v3
s1←v1,v2,v3
v1,v2,v3
s2←v1,v2,v3
s1←
s2←
vclip1,vclip2,vclip3,vclip4
s1,s2
s1,s2
简单来说,就是遍历所有的面和点,找到切割平面正向和负向的点,并且补好三角面即可。
- 被切割的模型面数不宜太高,一方面是效率考虑,另一方面是切面的表现会有些奇怪。
- 被切割的模型的拓扑结构不宜太复杂,否则碰撞体的构建容易表现的很怪异。
- 实际运用的时候,可以考虑在切面处生成一个力场将两个section分开一些,否则有可能因为相互的摩擦而影响表现。
文章来源: UE4-Component-实时切割模型