NVIDIA可破坏开源库测评

NVIDIA可破坏开源库测评

【博物纳新】是UWA重磅推出的全新栏目,旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。

更多精彩内容请关注:lab.uwa4d.com


导读

NVIDIA GameWorks是NVIDIA公司为游戏开发推出的图形技术解决方案。该解决方案包含了针对游戏开发中物理、渲染、粒子模拟等方面的工具,实现了非常逼真的效果。今天给大家介绍的开源库项目是NVIDIA GameWorks的Unreal引擎插件。通过该插件,开发者可以在Unreal引擎中方便地使用NVIDIA GameWorks中的各种游戏开发组件和功能。该插件中包含了7大系统,分别是:

  1. Blast破坏系统,该系统支持物理模拟的可破坏效果。
  2. Flex粒子模拟系统,该系统可用于模拟逼真的粒子效果,例如:水流、烟雾、布料等。
  3. Flow稀疏体素流体模拟系统,该系统采用稀疏网格模拟了逼真的流体效果。
  4. HairWorks毛发模拟和渲染系统,该系统提供了非常逼真的毛发渲染效果。
  5. WaveWorks水波模拟系统,该系统使用频域的频谱散射模型进行模拟,并采用逆FFT转换成空间域进行渲染,可模拟逼真的大面积海洋效果。
  6. VXGI实时全局光照系统,该系统提供了实时的全局光照效果。
  7. HBAO+环境光遮蔽系统,该系统提供了快速、稳定的屏幕空间环境光遮蔽效果。

本文主要介绍Blast系统在Unreal引擎中的使用方式以及性能测评。开源库链接:
https://lab.uwa4d.com/lab/5b85680302004fb65975d352

Blast使用

在Unreal引擎中使用GameWorks插件中的Blast系统需要重新编译Unreal引擎。因此,开发者在下载好该开源库项目后,还需根据使用说明下载Unreal 4.18引擎源代码,然后编译引擎以及编辑器即可开始使用。

该项目中已经为我们提供了一个Blast系统的例子工程(BlastPluginSample)。打开该工程即可在场景中看到几个已经创建好的可破坏物体以及第一人称射击角色,如下图所示:

请输入图片描述

运行该工程,并用第一人称视角向物体进行射击即可看到物体被击碎、破坏的效果,如下图所示:

请输入图片描述

请输入图片描述

请输入图片描述

请输入图片描述

Blast Mesh Actor

集成好GameWorks插件后,Unreal引擎中会新增一种可破坏物体类型,Blast Mesh Actor。上述场景中所有可破坏的物体都属于该类型。Blast Mesh Actor物体具有一种新的组件,Blast Mesh Component。该组件会引用Blast Asset资源,该资源包含了可破坏物体的网格以及被预先切割好的碎片信息,如下图所示:

请输入图片描述

上图中的玻璃板的Blast Asset是例子工程中已创建好的。如果要利用已有Mesh生成Blast Asset也非常容易。我们以一个Cube Mesh为例。首先,在内容目录下的该Mesh资源上点击右键,选择菜单中的“create blast mesh”,即可创建相应的Blast Asset:

请输入图片描述

然后,双击该Blast Asset,即可打开Blast Mesh Editor。点击工具上的“Fracture”,引擎会自动随机生成该Mesh的碎片信息:

请输入图片描述

随着点击次数增加,碎片块数量会增多,碎片大小减小。引擎提供了不同的方法生成碎片,最终生成的碎片形状和方向不同。该生成算法可在“Fracture Settings”窗口中进行设置,默认情况下是采用“Voronoi Uniform”:

请输入图片描述

下图显示了不同类型算法生成的碎片形状:

(本图取自开源库项目文档)
(本图取自开源库项目文档)

开发者可根据自己需求进行设置。

拖动工具栏上的“Explode Amount”滑动条,可方便地观察生成的碎片:

请输入图片描述

将保存好的Blast Asset拖进场景,引擎会自动创建相应的Blast Mesh Actor。在Blast Mesh Actor的Details面板中的Blast标签下,可以设置物体的硬度、造成破坏的半径等参数进行设置:

请输入图片描述

更加详细的参数设置信息,可参考开源项目的文档。

Blast 性能测试

目前,Unreal引擎默认集成了NVIDIA的APEX中的破坏系统。Blast则是比APEX效率更高、更加灵活的解决方案。两者的性能对比在NVIDIA官方网站有详细介绍,本文不再赘述。本文主要介绍在PC平台上的性能数据,Mobile端由于打包编译问题暂时无法测试。测试场景为开源项目中的Blast例子场景,使用UWA Unreal线上性能检测工具进行测试。

测试平台信息如下:
CPU:Intel(R) Core(TM) i7-6700HQ 2.6GHz
GPU:NVIDIA Geforce GTX 1070
OS:Windows 10

下图显示了测试过程中,游戏线程和渲染线程的耗时走势:

由上图可知,游戏线程的耗时远高于渲染线程。因此,该项目的耗时瓶颈在于CPU端的运算。该场景渲染也比较简单,所以GPU端的渲染计算量并不大。

经过对各模块耗时的分析,我们发现物理模块是耗时最大的模块,如下图所示:

上图紫色线条表示Worker线程计算PhysX Task的时间,黄色线条表示游戏线程中物理模拟时间,蓝色线条表示游戏线程中分配PhysX Task计算任务给Worker线程以及驱动PhysX更新的时间。由上图可知物理模拟和PhysX的计算耗时较高,甚至在某些击碎物体的瞬间,其计算耗时会出现峰值(红色方框对应红色竖线处屏幕截图)。

同时,通过对主线程的函数调用栈分析发现,在击中某一可破坏物体时,其BlastMeshComponent的Update耗时比较高,在总耗时中占比较高的比例:

STAT_PostTickComponentUpdate表示的是主线程更新所有跟渲染相关的信息,并传送到渲染线程。由于击碎物体时会瞬间造成大量碎片,因此造成该更新函数的耗时突然升高:

总结

本文介绍了NVIDIA GameWorks开源库项目中Blast破坏系统在Unreal引擎的插件使用方法以及性能测评。该系统支持预先生成好碎片的方式,在运行时模拟出逼真的击碎效果。其使用方法简单容易操作。其耗时较高部分主要有两块:其一是物理模拟耗时,其二是击碎瞬间生成碎片大量渲染信息的耗时。


快用UWA Lab合辑Mark好项目!
请输入图片描述

今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路......

请不要吝啬您的点赞和转发,让我们知道我们在做对的事。当然如果您可以留言给出宝贵的意见,我们会越做越好。