qidi 发表于 2024-8-2 09:09

Unity技术开放日 | 绝对干货 - 基于Unity开发跨平台的主机级体育游戏GALA Sports

在Unity技术开放日-深圳站中,黄翔老师从基于 SRP 针对体育场景专门写的衬着管线;神经网络肌肉,cloth;基于 Unity 主机、移动端跨平台三个方面,分享了开发跨平台主机级游戏的经验。



望尘科技CTO黄翔

大师下午好,很开心在这里跟大师分享我们公司在体育游戏上的开发经验。首先自我介绍一下,我是Gala Sports的创始人黄翔。我自身是一个Unity的老用户,一直在用Unity开发游戏。


接下来介绍一下我们公司,GALA Sports,公司在深圳,到此刻差不多成立了有9年的时间,差不多300人。我们应该是国内做体育游戏最专注的公司,到目前为止,我们已经拿了NBA、国际足联和十多少俱乐部的版权,因为体育是个世界性全球化的题材,所以我们的游戏在海外的的增长还不错。


这是我们正在开发的产物,预计会在明年第一季度上线。


这个视频是在iPhone11的设备上录制的,使用了新的URP管线再结合定制的衬着算法模块,实现了非常接近于PS5的画质,接下来我就具体介绍一下是怎么做到这个效果的。
首先说一下场景衬着。
场景衬着有一些常规操作,比如做非常细致的Lightmap烘焙,把LightProbe在场上分布好,线性空间shading,级联RT测光(每一帧要按照上一帧衬着的成果来调屏幕的光照强度),最后做Tone mapping。夜晚场景有一个柱状灯光的雾气效果,是用积分Cone Light体积光公式计算的解析解,有一篇知乎文章讲解道理可以搜到。


在这介绍一个创新点,一个大型的球场能容纳10万名不雅观众,我们是如何做到同时衬着这么多不雅观众的呢?
这里我们采用了一种叫做聚类代办代理衬着的方式。先把场上的不雅观众分成分歧的组,分歧的组可以做分歧的行为,面向摄像机的角度也分歧,实时地按照球场不雅观众的动作以几十帧为单元进行分组。分完组之后每一个不雅观众或者每一组不雅观众实际上是衬着成一个不雅观众到缓存里,然后再在屏幕空间Shading分歧的衣服颜色和斑纹、肤色,实现不雅观众的多样化。


这样就可以做到非常高的场景衬着质量。我们的竞品场景在PS5上,用了2000万个三角面,我们只用了40万的三角面,就达到了非常接近的画质。



高画质衬着与高性能兼顾

这是3D的近景,可以看到每一个不雅观众都是真实的3D角色,不是面片人或者纸片人。


第二步讲一下角色的身体衬着。
身体的衬着的目的是让身体尽可能真实,我们的方针是需要实现一个函数式映射,通过输入AI或者玩家控制球员的姿态,就能够输出非常高质量的身体肌肉的平面和衣服穿在身上的布料概况。但是这样的物理计算长短常复杂的,有很多电影软件可以实现这样的功能,但那是做离线的物理衬着,一帧就要几分钟。我们怎么在手机端做到60FPS,而且同时做到多人的计算呢?


我们借用了电影行业里面的经验,首先离线生成物理计算数据。下图是此中的一个片段,这样的动作片段我们可能做了几千个,有十几万帧的数据。它的解算是一个序列的过程,从解算关节点,到解算肌肉、筋膜、脂肪、皮肤,再把衣服穿上去解算衣服,这是好莱坞做电影角色的尺度化过程。




我们拿到衣服和肌肉的数据后,就进行频率分手,把它拆成高频和低频两部门。因为每个物理模型解算出来之后,顶点的数量长短常多的,光上衣有5万个顶点,有10多万的三角面。我们把它进行频率分手,分成低频Mesh模型和高频衣服的褶皱,褶皱用法线贴图来实现。


这是我们所生成的大量训练数据,是用一个衬着集群来算出来的。


我们想把所有数据用于游戏里面是不成能的,这些数据加起来有十几T的数据,我们首先测验考试的方式是做PCA分化,也就是主成分分析,通过PCA分化就能找到一组基向量,让所有的数据表达都能够成为一组基向量线性相加的一个成果。它的代码实际上长短常简单的,这是Python的计算代码,计算过程非常简单,几十万的法线图只需通过50张法线图的基来描述,顶点也用同样的方式来实现。


这是重构的效果,可以看到原图和重构的效果非常相似。颠末测试以后,如果有50个基数据,它的效果还不错,可以达到效果和性能的平衡。


接下来我们做了一个采样优化,把它压缩成为3D Texture,因为压缩成为3D Texture可以只采样一半,每一次采样只采中间的位置就能同时采样两张贴图,把采样的数量降到25次。


但是这样有一个问题,就是在衬着的过程中,一个场上有22个球员,当有好几个球员的镜头非常近的时候,屏幕上衣服区域要进行25次采样。这个采样对于手机来说,高性能的手机是没有问题的,低端的手机还是会有开销的问题。
这个做完之后要找进一步提升性能的方式,在与苹果沟通的过程中我们发现,苹果和其他所有安卓的主流手机中都有一个神经网络的专用芯片,这个专用芯片绝大多时间是闲置的。而且这个专用芯片的计算性能非常快,快到什么程度呢?基本上相当于完整GPU的80%。


我们就想是不是可以用这个芯片来干一些事情。虽然只看CPU和GPU的话,手机芯片的性能要远远低于主机芯片,但是在加上了神经网络芯片之后,它的性能就可以大大提高了,甚至足以媲美主机的性能。
所以我们把PCA计算流水线改成了一个这样的过程:低频的部门用全连接的神经网络实现顶点的计算,高频的部门用卷积神经网络来实现法向贴图的计算。这个视频是实时在Unity里实时计算的效果,通过神经网络,实时改变Pose人关节点的旋转能够输出对应的肌肉与衣物的物理计算。


跟苹果的DR团队进一步优化之后,我们能够在新iPhone上跑到400-800帧/秒,远远超过我们的预期。
但这还不够,因为我们只是解决了物理形变的问题,还没有解决光线照射的问题。因为场上的球员一直是运动中的,实际上我们将此中的某一个Pose拿下来进行计算,光照的数据显示下来是这样的效果。
角色身上的光照非常丰硕,现实中光照是复杂的光线追踪的成果,既受环境光的影响,也有光在概况褶皱间的弹射,也有身体和衣服之间AO的影响,也有身体受衣服光照的影响,也有草地对于整个人身体的影响,那这个计算同样也是不成能实时来计算的,烘焙这张图差不多要一分钟多的时间。


我们的解决方案同样采用神经网络,把网络里面的顶点法线、AO贴图(环境光遮挡)、概况光场(每个顶点在离线时生成半球面球谐数据)encode到神经网络,让神经网络把这些都pose到概况光照的映射都记住。可以看到当手抬起来的时候,手对于身体有非常真实的物理光照遮挡,这个视频左边是原始数据(Ground Truth),右边是神经网络数据,肉眼几乎分辩不出差异,这个计算可以跑到200FPS,因为是在专用的神经网络芯片上计算,所以不占用GPU开销,也不占用CPU的开销。


最后我们在开发过程中把所有的东西都合到一起的衬着。
左边是用传统方式skeleton skinning的效果,右边是所有东西加到一起之后的一个效果。可以看右图到有非常明显的肌肉、光照暗影、AO等细节,这个质量远远超过了本年最新版在PS5上发布的主机版的游戏。


我们做了一个ML插件,在iPhone上用CoreML把几个网络Stack到一起放入插件,安卓也是以同样的方式来实现的。


第三点分享一下角色的面部衬着。
我们的工作流程是用iPhone ARKit录制的面部表情的运动,对于手机端的体育游戏来说,因为球员离得斗劲远,所以iPhone ARKit基本上是够用的。ARKit把角色面部表情拆成了51个Blend Shape,我们用这51个BlendShape来实现这套流程,有很多开源的第三方软件都可以直接录。


人面部表情顶点在运动的时候,它的光照也发生了非常丰硕的变化。出格是眼睛和口腔,眼睛开闭之间对于眼组的变化和口腔的光照变化。这两处的光照变化长短常重要的,要否则就会发生我们在游戏中所经常看到的游戏主角的牙齿过曝,像是满口大金牙。这个问题我们是怎么解决的呢?


我们用了相似的方式,把光照的参数作为基向量全部encode到51个BlendShape中,按照面部表情的变化带动面部光照发生同样的变化。这是手机上测试的开发效果,可以看到口腔里面的光照是基本上是正确的。


体育游戏在海外的整个游戏行业里面差不多占据了20%的市场份额,但是在中国只有5%不到,所以国内国外都有巨大的增长空间的。Gala Sports 只做体育游戏,方针就是做出生避世界最高质量的体育游戏,同时基于游戏的写实数字人、球场姿态捕捉等技术,能够给体育行业带来一些技术上的改造。Gala Sports 常年招募游戏、衬着、AI相关的工程师,欢迎大师扫码添加HR的微信。
页: [1]
查看完整版本: Unity技术开放日 | 绝对干货 - 基于Unity开发跨平台的主机级体育游戏GALA Sports