转自:http://gad.qq.com/article/detail/33199

《合金装备:复仇》里面,有一个很有趣的设定,游戏里大部分的场景和物件都可以用主角的刀动态切割。 UE4中的ProceduralMeshComponent这个组件可以很容易的就实现这种功能,下面就给大家介绍下UE4中动态切割模型实现的方法。

准备模型

首先我们准备一个模型。

我做了一个简单的圆柱体,用来测试。注意需要切割的地方,为了保证细节,多放点顶点。 
为了能够动态切割,我们要勾选这个模型的Allow CPUAccess选项。

新建蓝图

新建一个Actor蓝图,为它添加两个组件,一个是StaticMeshComponent,一个是ProceduralMeshComponent,在Construct Script中,将StaticMesh的模型数据拷贝到ProceduralMesh中去。

调整ProceduralMesh参数

出于优化的目的,ProceduralMeshComponent默认勾选了UseComplexAs SimpleCollision这个属性,为了实现我们切割下来的能正常的进行物理模拟,需要把这个属性给取消勾选。

实现切割

SliceProceduralMesh实现模型的切割。说下几个参数: 
* PlanePosition是切割平面的位置 
* PlaneNormal 是切割平面的法线,也就是朝向 
* Create Other Half 切割下来的部分,是否创建新的ProceduralMesh 
* Cap Option No Cap,切面不缝合,Create New Section For Cap; 缝合,使用自定义的材质来贴补缝合的面; Use Last Section for Cap,使用模型的材质来贴补缝合的面。

使用ProceduralMeshComponent实现模型实时切割

转自:http://www.52vr.com/article-875-1.html

这篇文章介绍了如何使用UE4.13的ProceduralMeshComponent来实现针对一个模型的实时切割。

背景说明

在游戏潜龙谍影崛起:复仇 中,主角可以针对场景中的大部分物体进行实时切割。在游戏中,玩家需要指定一个切割平面,在主角挥刀后,对应的物体便可以根据这个平面进行切割。

在UE4中可以使用Apex Destruction来实现物体的破碎效果,但由于该破碎效果是离线生成的,换句话说一个DM只能够有一种破碎效果,因此无法达成实时切割的效果。

在UE4.13中,Epic加入了ProceduralMeshComopnent插件,使用这个插件可以进行针对于模型的实时切割操作。

前置准备工作

首先准备好需要进行切割的模型,我这里使用的是UE4示例中的人头模型。值得一提的是,由于要达成实时切割的目的,因此需要启用StaticMesh中的AllowCPUAccess属性。

新建ActorBP,添加Procedural Mesh Component,调用CopyProceduralMeshfromStaticMeshComopnent方法来生成一个Procedural Mesh Component.
 
模型切割
 
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)
create two maps of base vert index to vert index m1,m2
for each vertice∈{v}
if (vertice on the positive side of the plane)
m1←vertice
else
m2←vertice
create two sections s1,s2
for each face∈{(v1,v2,v3)}
if (v1,v2,v3on the positive side of the plane )
s1←v1,v2,v3
if (v1,v2,v3on the negative side of the plane )
s2←v1,v2,v3
else
s1← positive vertices
s2← negative vertices
find clipped verticesvclip1,vclip2,vclip3,vclip4
triangulate the clipped polygon
create cap geometry for s1,s2
create collision convex shape for s1,s2
简单来说,就是遍历所有的面和点,找到切割平面正向和负向的点,并且补好三角面即可。
 
运用以及注意事项
 
被切割的模型面数不宜太高,一方面是效率考虑,另一方面是切面的表现会有些奇怪。
被切割的模型的拓扑结构不宜太复杂,否则碰撞体的构建容易表现的很怪异。
实际运用的时候,可以考虑在切面处生成一个力场将两个section分开一些,否则有可能因为相互的摩擦而影响表现。

Unreal Engine 4 动态切割模型实现的更多相关文章

  1. Unreal Engine 4 系列教程 Part 1:入门

    原文:Unreal Engine 4 Tutorial for Beginners: Getting Started 作者:Tommy Tran 译者:Shuchang Liu 本篇教程将引导你安装U ...

  2. 游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)

    在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,Audiokine ...

  3. 用Unreal Engine绘制实时CG影像

    转自:http://www.unrealchina.net/portal.php?mod=view&aid=225 近年来,对实时CG的关心热度越来越高,但要想弥补与预渲染方式的差异并不是那么 ...

  4. 剖析Unreal Engine超真实人类的渲染技术Part 2 - 眼球渲染

    目录 三.眼球渲染 3.1 眼球的构造及理论 3.1.1 眼球的构造 3.1.2 眼球的渲染理论 3.2 眼球的渲染技术 3.2.1 角膜的半透和光泽反射 3.2.2 瞳孔的次表面散射 3.2.3 瞳 ...

  5. 剖析Unreal Engine超真实人类的渲染技术Part 3 - 毛发渲染及其它

    目录 四.毛发渲染 4.1 毛发的构造及渲染技术 4.1.1 毛发的构造 4.1.2 Marschner毛发渲染模型 4.1.3 毛发的间接光照 4.2 毛发的底层实现 4.3 毛发的材质解析 4.3 ...

  6. Unreal Engine 4 系列教程 Part 3:材质教程

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  7. Unreal Engine 4 创建Destructible Mesh(可破坏网格)

    Unreal Engine 4的物理引擎用的是PhysX. 支持网格破坏.布料.物理粒子等,非常强大.曾经须要编码才干完毕的工作,在Unreal Engine 4 中仅仅须要拖拖拽拽就完毕了,非常方便 ...

  8. 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二

    AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound  ...

  9. Unreal Engine 4 Smear Frame效果的实现与分析

    转自:http://www.52vr.com/article-868-1.html 这篇文章介绍了类似守望先锋中的帧转移模糊(Smear Frame)效果.   该效果由Jan Kaluza实现,本博 ...

随机推荐

  1. <--------------------------构造方法------------------------------>

    1 构造方法 初始化阶段 给对象的属性进行赋值 构造方法 什么是构造方法 : 字面 方法构建时 就使用的方法 对象创建的时候就使用的方法 作用:对象的属性值初始化2 如何用构造方法 修饰符 构造方法名 ...

  2. datetime学习

    四.datetime类 (一).datetime类的数据构成 datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类,相关的操作方法请参阅,本文上面关于二 ...

  3. day1 python学习

    Python的分类 编译型:一次性,将全部程序编译成二进制文件,然后再运行. 有点:执行效率高 缺点:开发效率低,不能跨平台使用. 解释型:当你程序运行时,一行一行的解释,并运行 优点:开发效率高,可 ...

  4. sqler sql 转rest api 的docker image

    最新sqler 又发布了一个版本,同时官方文档也更新,对于数据库的连接有了详细的说明 Dockerfile 为了方便以及减少大小,使用多阶段构建,同时都通过环境变量运行 FROM alpine:lat ...

  5. drone 1.0 新功能试用以及说明

    drone 1.0 rc 已经发布,新的功能很强大,界面比旧版本更加人性化,和git 的集成也更高了 测试环境准备 试用gogs 做为git 管理工具 docker-compose 文件 versio ...

  6. httpd

    http://httpd.apache.org/docs/2.2/logs.html httpd.conf文件 Configuration and logfile names: If the file ...

  7. asyn proposals

    Objective:

  8. Oracle 增加、修改、删除字段

    分别对T_USER表 进行增加name字段, 修改name字段,删除name字段 /*增加列表*/ ALTER TABLE T_USERS ADD name varchar2(512) ; /*删除列 ...

  9. C# 继承、虚方法、方法重载和多态

    继承:继承属于单继承,只能继承一个父类. 继承的一个结果是派生于基类的子类在方法和属性上有一定的重叠. 继承只能够同时继承与一个基类:可以同时继承一个基类和多个接口,但是基类必须放在第一个.(注:C# ...

  10. 让邮件服务器发出的Email不被认为是垃圾邮件

    配置一个Email服务器很简单,用Postfix等软件稍微配置一下就可以了,几分钟搞定. 但Email服务器发出去的Email很可能经常被人当成垃圾邮件,怎么配置Email服务器才能让Email服务器 ...