FPS Sample开源库测评

FPS Sample开源库测评

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

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


导读

FPS Sample是Unity技术团队做的第一人称联机射击游戏工程,由6人团队完成。它包含了完整的代码和资源,是对Unity新特性的非常好的应用示例,这些新特性主要包括高清晰渲染管线(HDRP)、新的网络传输层和实体组件系统(ECS)。本文将简单介绍FPS Sample项目、项目对HDRP的运用以及项目的性能检测。

项目链接:
FPS Sample
https://lab.uwa4d.com/lab/5bd2040c72745c25a84a83e0

SRP
https://lab.uwa4d.com/lab/5b55ec38d7f10a201fd75690

Multiplayer
https://lab.uwa4d.com/lab/5bd355a772745c25a85c2775

ECS
https://lab.uwa4d.com/lab/5bc5510c04617c5805d4e9cb

项目介绍

FPS Sample的完整工程目前可以在Github上下载,项目工程约36GB,注意要使用Git LFS才能下载到完整资源。项目中包含了1个主要场景、2个角色、4件武器的完整资源,可以进行最多16个玩家的多人射击游戏,可选死亡竞赛模式和突围模式。

目前项目工程使用的Unity版本是2018.3 beta 12,支持的构建平台为Windows (客户端&服务端) 和Linux (服务端)。

画面效果:
FPS Sample一经发布,其高质量的画面效果就惊艳了游戏圈,以下为游戏的部分画面截图:
请输入图片描述
请输入图片描述
请输入图片描述
请输入图片描述

FPS Sample使用了Unity 2018推出的可编程渲染管线(SRP)中专注于高端图形渲染的高清晰渲染管线(HDRP),与之对应的是专注于性能的轻量级渲染管线(LWRP)。HDRP是一个基于物理的渲染管线,在FPS Sample中运用到了许多HDRP中的新功能,以实现更好的画面效果。

1.次表面散射(SSS)
次表面散射可以模拟光穿透半透明物体的效果。它也常用于渲染皮肤。在FPS Sample中,会看到如下图中水果质感的植物,在高折射率的表面,可以看到很多镜面反射的效果,而在低折射率的面上几乎看不到这样的效果。

请输入图片描述
场景中运用了次表面反射的植物渲染效果

请输入图片描述
次表面反射开启和未开启的渲染效果对比

2.体积设置(Volume Settings)
体积设置允许可视化修改环境设置并调整如天空、阴影、雾等效果,创建自定义的体积设置并在场景中进行切换,以实现HDRP场景中的不同视觉外观。比如在进入一个较暗的洞穴时,可能需要调整HD阴影设置以降低太阳级联距离,并增加全局体积雾密度。

请输入图片描述
示例Volumetrics设置开启和未开启的渲染效果对比

请输入图片描述
示例Volumetrics设置截图

3.贴花(Decal)
Enable Decal是HDRP的材质新开启的一个参数,在项目中,可以用于制作材质表面的细节,比如墙上的铁锈痕迹。

请输入图片描述
用贴花表现墙面上的锈迹

请输入图片描述
用贴花表现墙面的斑驳

4.物理光单位系统(PLU)
物理光单位系统-Physical Light Units(PLU)意味着光照单位是基于真实的可测量数值,它可以达到较高的保真度。通常来说将LUX用作定向光(Directional Light)的单位,因为在真实世界中,LUX用于测量太阳光的强度。其它真实世界光源使用Lumen来测量光强度,它可用作场景里小型光发射器的参考单位。
在FPS Sample中,Directional light的强度被设定为2000 lux。

请输入图片描述

5.HDRP的新灯光类型的运用
在HDRP中,光照系统进行了很多改进,其中包括新增的矩形区域光源、允许光线以直线发射的线性光功能等。

请输入图片描述
矩形区域光的应用

请输入图片描述
线性光的应用


性能测试

我们使用UWA线上性能测评服务UWA GOT Online对该项目进行了性能测试,得到了具体的运行数据,以供开发者参考。使用的测试环境如下:

测试设备A:
系统: Win10
内存: 16G
CPU: Intel(R) Core(TM) i7-6700HQ CPU @2.6GHz
GPU: NVIDIA GeForce GTX 1070

测试设备B:
系统: Win10
内存: 16G
CPU: Intel(R) Core(TM) i7-4720HQ CPU @2.6GHz
GPU: NVIDIA GeForce GTX 960M

测试场景:Level_01
分辨率:1920x1080
画质效果:Ultra & TAA

一、性能总览
1. 总体性能趋势
在特效全开的情况下,项目在设备A上可以跑到FPS均值36帧,而设备B上只能跑到均值19帧,且在运行过程中会有明显卡顿感,两次测试的FPS数据对比如下:
请输入图片描述
请输入图片描述
请输入图片描述

2. 渲染模块分析
上面已经提到FPS Sample使用了HDRP,因此我们在性能报告中,会特别关注渲染模块的耗时。究竟新的渲染管线在性能表现上,和传统的Built-in渲染管线有什么区别呢?
请输入图片描述
在CPU时间占用中,可以发现我们熟悉的Camera.Render不见了,取而代之的是RenderPipelineManager.DoRenderLoop_Internal这个方法,这里可以看到具体的裁剪、后处理、灯光效果、阴影等各个渲染模块的耗时情况。

同样,我们对比了在两个测试平台上的渲染耗时,可以看到在测试B中,由于渲染线程和GPU压力过大,WaitForPresent这一项非常高,比测试A的均值高了将近18ms,RenderPipelineManager的耗时也高了1.68ms。
请输入图片描述

3.逻辑代码分析
在FPS Sample中,主要的逻辑代码是Game.Update和Game.LateUpdate。两个方法在两次测试中的CPU耗时均值如下:
请输入图片描述
两次测试中,逻辑代码的耗时差距不大。查看Game.Update的耗时曲线和堆栈信息,可以看到有许多尖刺状的峰值,具体查看之后发现是由GC.Collect导致的。
请输入图片描述
其他如动画、物理等模块的CPU耗时比较常规,这里就不再多做分析了。之后我们会把这个项目的性能测试报告放到UWA官网上作为示例项目展示,感兴趣的朋友可以多关注一下。

快用UWA Lab合辑Mark好项目!
请输入图片描述
今天的推荐就到这儿啦,或者它可直接使用,或者它需要您的润色,或者它启发了您的思路......

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