UE4-Component-实时切割模型

模型:

需要启用StaticMesh中的AllowCPUAccess属性。

AllowCPUAccess

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

CreateMesh

模型切割

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

Slicing 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时自定义的材质

效果如下: 
Slicing

原理分析

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

SliceProceduralMesh(plane) 
1. create two maps of base vert index to vert index m1,m2 
2. for each vertice{v} 
3.     if (vertice on the positive side of the plane) 
4.         m1vertice 
5.     else  
6.         m2vertice 
7. create two sections s1,s2 
8. for each face{(v1,v2,v3)} 
9.     if (v1,v2,v3on the positive side of the plane )  
10.         s1v1,v2,v3 
11.     if (v1,v2,v3on the negative side of the plane )  
12.         s2v1,v2,v3 
13.     else 
14.         s1 positive vertices 
15.         s2 negative vertices 
16.         find clipped verticesvclip1,vclip2,vclip3,vclip4 
17.         triangulate the clipped polygon 
18. create cap geometry for s1,s2 
19. create collision convex shape for s1,s2

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

运用以及注意事项

  1. 被切割的模型面数不宜太高,一方面是效率考虑,另一方面是切面的表现会有些奇怪。
  2. 被切割的模型的拓扑结构不宜太复杂,否则碰撞体的构建容易表现的很怪异。
  3. 实际运用的时候,可以考虑在切面处生成一个力场将两个section分开一些,否则有可能因为相互的摩擦而影响表现。
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值