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

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

这篇文章介绍了类似守望先锋中的帧转移模糊(Smear Frame)效果。

该效果由Jan Kaluza实现,本博客的介绍已获得原作者同意。

Github地址:传送门

效果

效果图如下,两个模型实际上都是球:

Tessellation

在本质上,这个效果是使用PN Tessellation来对模型进行曲面细分,然后使用world displacement通道来进行顶点的偏移操作。Tessellation能够给模型带来更多的细节,例如盔甲上的凹痕、地形的小起伏等。

但是需要注意的是:Tessellation非常耗费资源,并且Unreal Engine 4在目前为止(4.12.4)也只支持Windows平台的Tessellation。所以如果需要使用Tessellation的话,需要注意性能以及多平台的处理。

逻辑实现

需要实现这个功能,首先需要获得当前物体在前一段时间的偏移量,因此这里创建了一个Component,在每次Tick的时候更新Previous Position。在使用Previous Position进行计算最后,将最后的偏移量传入Dynamic Material Instance进行计算即可。

完整BP如下:

材质实现

前提条件

该材质需要启用Tessellation,选中D3D11Tessellation,设定为PN Triangles,记得启用Adaptive Tessellation。

此外,由于在Vertex Shader中,无法转换到Local Transform进行计算,所以这里需要两个额外的UV通道用来传递Position信息,因此需要进行设定。

材质函数封装

CustomUV通道

在这个材质函数中,将Position的X、Y信息储存在Custom UV1中,将Z储存在Custom UV2中。

偏移量的计算

Smear效果的特征之一就是这个模型的后面那一块(运动反方向)会产生转移模糊的效果,因此需要将Smear的方向与VertexNormal进行点乘,大于0的顶点才进行处理。

整个材质函数便封装完毕,使用方法如下:

注意事项

在Component的逻辑中可以看到Smear的表现效果与帧率有比较大的相关性。在帧率很低的情况下会导致Smear过大,在帧率很高的情况下则会导致Smear过小。

一种可行的方法是针对于Component进行锁帧处理,让其固定在一个帧率下运行即可。

我进行了这一块的处理,并且已经Pull Request。

时间: 2024-08-25 14:31:08

Unreal Engine 4 Smear Frame效果的实现与分析的相关文章

Unreal Engine 4 C++ PlatformerGame自定义角色控制器源代码分析

Unreal Engine 4 C++ PlatformerGame自定义角色控制器源代码分析 官方商店里有个PlatformerGame整个免费的游戏,是一个卷轴类的跑酷游戏.整个项目的角色控制器很有意思,可以跑.跳.滑行,很酷.这里来分析下它具体是如何实现的. UCharacterMovementComponent这个类实现了角色控制器的大部分功能,PlatformerGame实现了一个自定义的MovmentComponent,叫UPlatformerPlayerMovementComp,它

Unreal Engine 4 RenderTarget制作Live Camera效果

Unreal Engine 4 RenderTarget制作Live Camera效果 先上效果: Live Camera我不知道怎么翻译.反正意思就是将一个摄影机的Image渲染到一个2D平面上. 以下介绍下详细的实现方法: 1.创建一个Scene Capture 2D对象 将这个对象拖动到合适的地方. 2.创建RendterTarget对象 材质&贴图->渲染目标 3.设置SceneCapture2D的对象的属性 将SceneCapture:Texture Target设置成上面创建的渲

UNREAL ENGINE 4.12 正式发布!下载地址

UNREAL ENGINE 4.12 正式发布! 下载地址:https://www.unrealengine.com/ Alexander Paschall 在 June 1, 2016 |功能新闻社区 Share on Facebook Share on Twitter Share on Google+ Share on LinkedIn 此版本内含虚幻引擎 4 的数百个更新,以及 GitHub 虚幻引擎开发者社区提交的 106 项改良!特此对虚幻引擎 4.12 版本的贡献者们表达诚挚谢意:

Unreal Engine 4 动态切割模型实现

Unreal Engine 4 动态切割模型实现 <合金装备:复仇>里面,有一个很有趣的设定,游戏里大部分的场景和物件都可以用主角的刀动态切割. UE4中的ProceduralMeshComponent这个组件可以很容易的就实现这种功能,下面介绍下实现的方法. 准备模型 首先我们准备一个模型. 我做了一个简单的圆柱体,用来测试.注意需要切割的地方,为了保证细节,多放点顶点. 为了能够动态切割,我们要勾选这个模型的Allow CPUAccess选项. 新建蓝图 新建一个Actor蓝图,为它添加两

从Unreal Engine 3到Unreal Engine 4

Unreal Engine 4发布好长好长时间了,直到最近才有时间仔细去看一下. TimSweeney老大一句话"IF YOU LOVE SOMETHING, SET IT FREE",原来需要几十万授权金才能拿到的东西,就从$19,变成免费了,而且开源.作为一个国际顶尖的引擎,能走出这一步,对我等普通开发者真是福音啊.如此的牛X,再加上开源,相信Unreal Engine 4会火起来的,你看看最近E3上的产品展示也能感觉到.不过,Unreal的定位毕竟是"国际顶尖"

Unreal Engine 4 —— 异步加载关卡的实现方法及思考

这篇文章介绍了在ue4中实现异步加载关卡的方法,以及我对应的思考. 背景 在很多游戏中都有用到关卡的异步加载,关卡的异步加载指的是在游戏的某个阶段,使用多线程的方法进行新关卡对应的内容加载.从而能够免去直接的Loading阶段,提升游戏体验的效果. 目前这种方法被广泛运用于各种游戏,例如在游戏战神Ⅲ中,主角有时会走过一段长长的山道,在此时实际上游戏就已经在开始加载下一个关卡了(当主角走出山道时如果还没有加载完,则会显示Loading界面):又例如在游戏暗黑血统Ⅱ中,主角解开谜题从一个房间进入下一

【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/unreal-engine-game/2164.html 首先Himi在这里解释下,为什么还是开篇- 原因主要有两点: 考虑到要写也要写点干货不是么?!但是由于官方文档写的真的够详细了,对于提到的基础知识我真的不想再赘述,因此希望各位新童鞋一定要先跟着文档动手过一遍!!!很重要!!!!!!!!!!! 另一方面,本想拿着UE4写点小项目练手,然后

【UNREAL ENGINE 游戏开发】开篇之为什么现在就要抱紧UE的大腿!(另附学习资料/交流群)

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/unreal-engine-game/2129.html 自从开始自学Unreal Engine后,身边的朋友.群里的童鞋们都在问:Himi,为什么要转UE了?UE到底好在哪里?与U3D比优势到底在哪里?等各种问题.而且解释过的问题,等会还要再解释给没看到的童鞋们 - 所以Himi特意来写篇博文,统一解释UE对于我为什么会有这么大的诱惑力! 这

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

Unreal Engine 4的物理引擎用的是PhysX.支持网格破坏.布料,物理粒子等,很强大.以前需要编码才能完成的工作,在Unreal Engine 4 中只需要拖拖拽拽就完成了,很方便. 这次演示做一个可破坏的网格.先上效果: 我做了个圆锥,让它从天落下,然后破碎掉. 下面说下具体制作的步骤: 新建一个项目,向场景添加一个Cone Brush(圆锥). 调整Cone Brush的属性,设置Sides(边数)为20,这样看起来平滑一些.在属性栏Brush Settings的最下面点击按钮C