Unreal Engine 4 —— Ghost Mesh Plugin的开发日志
2016-06-18 19:46
821 查看
这篇博客讲述了我为UE4构建Ghost Mesh Plugin的开发过程。
Ghost Mesh Plugin已经在Github上开源,传送门。
我已经制作了一个视频用于讲解该插件的使用方法,传送门。
(以上截图来源自真三国无双7·猛将传)
残影效果有若干种方法可以实现:
一种方法是在后期处理中加入前一段时间的
另一种方法则是简单粗暴的直接在场景中生成一个与当前的Skeletal Mesh同样姿势的模型。这种方法的优点在于简单粗暴并且真实,缺点则在于对效能有要求,无法大量生成。
Ghost Mesh Plugin使用的是上述第二种方法,在使用插件时,开发者需要提供一个当前的
在构建插件的最初始阶段,原本是为了便宜从事,因此一开始打算的实现方法是在Actor里添加
在生成GhostMeshAcor后,需要调用其
在开发中遇到的另一个问题是残影的材质。残影通常要有自己的材质,并且经常伴随着淡入淡出的表现。
因此考虑到这种的开发情况,以及需要适配所有的
在项目中,可以构建一个继承自GhostMeshActor的BP,选择重写OnSpawn函数,便可以进行Ghost Mesh Actor出生后的逻辑。
下图是GhostMesh淡出的逻辑:
但是如果生成StaticMesh,那么无法照顾到残影的布料细节,所以还在纠结。
各位有兴趣,可以直接下载该Plugin使用。
<全文完>
Ghost Mesh Plugin已经在Github上开源,传送门。
我已经制作了一个视频用于讲解该插件的使用方法,传送门。
开发背景及成果
在许多动作(ACT)游戏或者角色扮演(RPG)游戏中,为了视觉效果,有时会让角色生成残影(Ghost Mesh),例如:(以上截图来源自真三国无双7·猛将传)
残影效果有若干种方法可以实现:
一种方法是在后期处理中加入前一段时间的
RenderTarget,主要通过Shader来实现。这种方法的优点在于可以生成很密集的残影而不用太担心效能,缺点则在于生成的残影不够真实(残影无法与场景中的光进行交互)。
另一种方法则是简单粗暴的直接在场景中生成一个与当前的Skeletal Mesh同样姿势的模型。这种方法的优点在于简单粗暴并且真实,缺点则在于对效能有要求,无法大量生成。
Ghost Mesh Plugin使用的是上述第二种方法,在使用插件时,开发者需要提供一个当前的
Skeletal Mesh Component作为参数传入,然后就会在场景中生成一个同样姿势的Ghost Mesh,效果如下:
GhostMeshActor
在构建插件的最初始阶段,原本是为了便宜从事,因此一开始打算的实现方法是在Actor里添加PoseableMeshComponent来实现残影。但是由于UE4中的
UComponent里面无法添加
TimeLine以及
LifeSpan等属性,因此最后还是选择生成一个Actor。
在生成GhostMeshAcor后,需要调用其
MakePoseBySkeletalMesh()函数(在Blueprint中的FriendlyName为”
Pose Mesh Actor“),传入一个
SkeletalMeshComponent作为参数。在执行这个函数后,生成的
GhostMeshActor就会拥有和该
SkeletalMeshComponent一样的Pose。
OnSpawned
事件
在开发中遇到的另一个问题是残影的材质。残影通常要有自己的材质,并且经常伴随着淡入淡出的表现。因此考虑到这种的开发情况,以及需要适配所有的
Skeletal Mesh在
GhostMeshActor里面设定了一个
OnSpawn()函数,类型是
BlueprintImplementableEvent,可以在BP中进行重写。
在项目中,可以构建一个继承自GhostMeshActor的BP,选择重写OnSpawn函数,便可以进行Ghost Mesh Actor出生后的逻辑。
下图是GhostMesh淡出的逻辑:
后续开发展望
当前的插件已经可以实现针对于残影的大部分功能,但是有不足的地方就在于性能。日后估计有可能添加一个生成一个StaticMesh的功能。但是如果生成StaticMesh,那么无法照顾到残影的布料细节,所以还在纠结。
各位有兴趣,可以直接下载该Plugin使用。
<全文完>
相关文章推荐
- 质数因子
- AOP(面向切面编程,翻译自MSDN)
- 统计一行字符中有多少个单词
- servlet读书笔记
- 动态代理AOP实现方法过滤
- Android 中获取当前的 Activity
- 处理下载文件时中文乱码
- 对于解析xls(excle表格数据 )
- Linux0.11内核--进程调度分析之1.初始化
- acm_最短路
- SwipeRefreshLayout 源码
- easyui tree 默认选中第一个元素
- 用IO流的知识将两个文件写到一个文件中(设置字符编码)
- 为什么UI线程是不安全线程
- 结构体进程描述进程
- Minor【 PHP框架】3.路由、控制器、视图
- 使用Adobe Photoshop CC 2015批量修改图片尺寸
- 【SpringMVC学习02】走进SpringMVC的世界
- 多线程下载,断点续传原理解析和代码实现
- 【前端】JS 实现 unicode 中文互转