UE4-Component-实时切割模型

匿名 (未验证) 提交于 2019-12-03 00:37:01

需要启用StaticMesh中的AllowCPUAccess属性。

新建ActorBP,添加Procedural Mesh Component,调用CopyProceduralMeshfromStaticMeshComopnent

ProceduralMeshComponentSlice 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 OptionCreate New Section for Cap时自定义的材质


UKismetProceduralMeshLibrary::SliceProceduralMesh()函数中,可以看到它实现的方法如下:

SliceProceduralMesh(plane)
m1,m2
vertice{v}
vertice
m1vertice

m2vertice
s1,s2
face{(v1,v2,v3)}
v1,v2,v3
s1v1,v2,v3
v1,v2,v3
s2v1,v2,v3

s1
s2
vclip1,vclip2,vclip3,vclip4

s1,s2
s1,s2

简单来说,就是遍历所有的面和点,找到切割平面正向和负向的点,并且补好三角面即可。

  1. 被切割的模型面数不宜太高,一方面是效率考虑,另一方面是切面的表现会有些奇怪。
  2. 被切割的模型的拓扑结构不宜太复杂,否则碰撞体的构建容易表现的很怪异。
  3. 实际运用的时候,可以考虑在切面处生成一个力场将两个section分开一些,否则有可能因为相互的摩擦而影响表现。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!