Solar VR 是腾讯互娱部门开发的一款多人互动社交应用。2016 年的腾讯全球合作伙伴大会上,腾讯公布了此前在 VR 领域的尝试,据36氪的报道,主要是腾讯智能创新业部和腾讯互娱研发部两个部门在做相关的事情。前者负责硬件开发平台部分,后者则是对游戏及内容方面的探索。
据雷锋网(公众号:雷锋网)了解,腾讯互娱研发部副总经理沈黎曾表示,在 Solar VR 中他们尝试了人和虚拟世界的交互,并且还在探索人在虚拟世界中肢体语言或是面部表情。未来,他们希望用户和开发者以 UGC 的方式在这个社交平台上创造一些轻游戏的玩法。
李君白
而这次在 Unreal Open Day 上,雷锋网见到了腾讯互娱前沿技术中心专家程序员李君白,他表示他们已经开始在做 Solar VR 中虚拟人物的表情捕捉,未来有可能实现四肢动作的捕捉,实现效果或许比 Facebook Spaces 展示的还要好。不过,Solar VR 最后什么时间上线,这个还不好说。现场,他就 Solar VR 的一些开发技术问题做了分享,雷锋网将他的分享内容整理如下。
大家好!
我是来自腾讯前沿技术中心的李君白,今天为大家带来我们腾讯中心UE4引擎从事社交平台的开发经验。做个简单的自我介绍,用Unreal3也是有很多年头,开发过不少的游戏,加入腾讯在《天涯明月刀》做自研引擎的架构开发,现在负责Solar VR社交游戏平台的开发工作。
Solar VR 的开发背景
大概我PPT的提纲会在这这样的几个部分,做轻娱乐平台的背景的介绍,开发过程当中的技术分享经验,最后是去年下半年的Demo的演示过程。
首先是背景介绍,大家知道为什么我们做轻社交的娱乐平台呢?众所周知VR是全新的领域,在VR下很多的开发领域都面临着革新和创新,我们的应用是立足于以社交平台为基础的开发定义。我们需要带给人们的是一种玩家交互之间的沉浸感和交互临场感。
社交比起纯粹的VR来说黏性和用户反复体验性是非常强的。以市面上的VR游戏为例,很多都是以一次性体验和经验的效果,这样让玩家再次进入这样的体验需求。其实市场上对社交VR有很多先行者,包括AltspaceVR、Rec Room,还有Facebook Spaces。
VR的社交是完全崭新的,可以期待有想象空间的区域。根据我们长期数据统计的结果,以Rec Room的周活跃用数超过其他几个VR社交应用的综合,所以我们觉得轻娱乐是关键。
我们有了Solar VR的构想和尝试,大家可以想象在这样的空间里面好友聚在一起可以打牌,可以参加唱歌、开会。到最后会给大家演示这样的Dome。
这也是我们在开发过程当中会对社交玩法中的某些元素进行提取,比如说这是打牌的私人会所的空间,大家可以在一起去玩。
为什么选择 UE4?
再回到UE4的情况,为什么选择UE4作为VR的渲染引擎呢?
其实有很多优点,刚才很多分享嘉宾也写出来了,不一一列举了,对我来说更看重的是可靠的引擎基础和高质量的渲染架构。我知道UE4的语音质量和渲染质量在业内是领先地位了。对完善的工具链要重点提出,工具链是市场上的优势,在长期的UNREAL过程当中累计了很多可靠性非常强的工具链,无论从美术的资源支持还是从程序的生成过程都是非常好的。这样完善的工具链会带来整开发流程上的顺畅性和高效性。
前面做了Solar VR的背景,现在准备了一些开发过程当中的经验分享,希望大家能够有讨论和参与。
首先我们的原型在Unity上实现的,后来我们决定要迁移到Unreal平台上,有很多的切换。比如说代码、数据、开发流程的切换。从Unity切换到Unreal上来用了一个星期的时间。
从代码切换有几个方面一个是把原来的服务器的代码移植到客户端,因为我们还是采用了Unreal的技术。其他的移植过程当中最主要的问题就是第三方插件,大家大可以放心,大多数第三方知名的插件在Unreal中都可以得到相应的切换,大的厂家都可以做的很好。
数据都是可以重用的,场景是需要重新构建的,如果需要的话也是可Unity导出场景列表,再从Unreal中一次性导入。这取决于场景和重新工作。
Unreal需要建立比较完善的CR的持续构建的体系,来保证美术和策划能够及时地得到更新的程序。
我会为大家介绍一下我们的技术选型,我们用了Unreal Delicated server,传统的游戏后台都会使用数据包重复、服务器写套逻辑。我们选用的是Unreal自用的Unreal Delicated server同步的逻辑,为什么这样选择呢?有几个原则。
因为是社交游戏,有大量的物理交互在里面,我们很看重物理在服务器单独写引擎,这个代价很高的,我们想一用DS server直接实现优势。我们可以把服务器的代码移到服务器上来,在一些小的团队服务器人员在紧张的情况下就可以不用参与游戏逻辑的开发,而是由客户端程序员去参加,这是很有利的一点。
包括整个过程当中服务器后台也只布置了一位同学做后台DS server的开发。我们用这套系统的话会有签权的体系。我们用Client端向GameServer申请迁入的深刻,就产生了Generate Token ID,再通过注册从GS上返取回玩家数据以后再往客户端发送通知的过程,再把Room信息送过去。再把切割信息跟DS对上,DS做过签证的验证以后,Clinet和DS server就建立了连接,建立这样的连接以后后面的游戏都可以直接进行通信,就不用依赖于后台的任何逻辑,后台只负责登陆登出和数据库访问。后面我们还会做一些像DS Masager来管理创建和销毁,这样整一套东西可以在这样的服务器架构下完美地运作起来。
说到了DS server有一个坑要跟大家分享一下,我们开发过程当中会遇到很多的Replicate的问题,它的方法是会带来一些问题比如说像左边的这种情况下,当我们Server想写一个代码的时候,哪怕经过了若干桢服务器想做函数代用,本以为Clent已经拿到了,但过程是不确定的。
另外一个例子也是一样的,哪怕是在同一帧里写两个条件,在Clent仍然无法保证A比B先得到,所以是不能依赖于Replicate的。
我觉得不能依赖于replicate让逻辑得到充分的保证,我们把关键的数据copy好以后,在合适的时候通过RPC的方法发出去,这样可以在服务器端拿到RPC,这个顺序就可以得到一定的保证。
VR应用开发的特点
刚才都是技术选型的背景,现在要回到主题,就是说在VR开发下应用有什么特性,在VR下最主要的关键因素有几个。一个就是我们有一些基础交互的操作,在我们社交的前提下更重要因为我们的人面对面地交流,其实每一举每一动包括嘴型、IK表现都是被对方仔细观察的,所以这个东西的要求比一般的游戏都要高很多。
除此之外,VR是沉浸式体验的环境,在这种环境下玩家对声音的敏感度是非常高的,所以要求我们对Spatial Audio3D声音的设计和实现都要提出更多的需求,当然VR下最永恒的话题就是优化,因为投显设备都是要求90帧率的情况下,优化和效率永远是VR绕不开的话题,在关键上要做一些取舍。
今天只能讲一下VR交互,这上面还是有很多的设计,包括手部动作的设计、交互动作延迟、手臂、脚部、角色VR下移动、口形语音同步力反馈、Camera控制、手势识别这些主题都是非常多的。在交互前提下都是非常重要,时间关系随便抽了两点跟大家分享一下。
首先是一个手势的识别,大家知道是可以识别手指按下未按下的状态,通过这种动态的辨别可以在用Animation Layer + Mask合成动画过程,美术手只要提供张开和闭合的动画可以让我们完整地模拟出来。
对于物件交互来说,有很多种,但是每一种都需要我们仔细地去实现的。比如说我们用拳打东西的时候要考虑到伸开手的时候动作是什么样的,闭合的时候是什么样的,打出去以后和力度产生的冲击力有多大,带来了力反馈这种参数的调整,或者说是摇一摇功能,需要去测摇一摇的频率、力度是多少,交互的动作都需要我们去精细地调整,这里给大家也放一个交互的体验。这是一个互相抛接物体,最多人的情况下互相抛接物体是非常近的,这样网络延迟会带来非常大的情况。
这里我们做了结论的分享,关于多人情况下扔东西延续的分享。我们可以把帧同步和状态同步稍微融合了一下,做了这样的优化。
在我们手拿到东西之前,我们手的同步是通过自己的手本身的同步来做的,当我们拿起东西和松开东西当中的第二阶段,我们是通过状态同步的,当我们发出指令来同步状态,我们手在拿东西的过程当中东西是可以跟着手继续运动,这样的情况下本地玩家是感受不到任何延迟的,体验是比较好的。
我们把手扔出去的时候可以同步对象的位置和朝向,可以把他角速度和朝向速度都同步,在模拟最后的时候,速度比较小的时候可以把它的速度慢慢回到服务器应该的位置上,这样玩家在网络情况波动的情况下也能感到比较好的体验。
VR中交互物件和玩法设计
除了VR这一块儿还想说说VR中交互物件开发和玩法设计。我们的游戏是想在游戏中实时创建和销毁以蓝图为单位的交互物件,在我们的游戏当中可以拿出来成直接可以玩的游戏的设计。
这样的情况下面临一个问题,我们的物件在VR中有多种多样性,对于交互来说用户的学习成本非常高,我们的设计师后来想出通过讨论做出一种方法,比如大家看这是一个手柄的控制器把所有的AB、XY都定义成功能键,我们再把手柄反面的键定位为Action键,这样三种基本元素的组合形成了整个交互物件的最基础操作。
有两个好处,玩家的学习成本会非常低,他们拿到物件以后试试A和B就可以知道怎么用,这对我们移植非常好。在这样的基础建立好以后我们开始了敏捷迭代的开发,可以让程序员并行地开发很多种原型,甚至考虑让玩家UGC创建出内容为我们的游戏增加内容,保持内容的持续性。
这里我们团队在比较短的时间内验证了很多的玩法,有一些是刚开始的设想实现了以后就放在那里,大家讨论哪一个东西比较好。比较好的情况下会投入美术资源优化,一这些东西都是建立操作基础上,所以所有东西都是以这样的基础下开发,会很快地出来很多原型让大家来体验。
引擎开发源码,如果团队有一定的能力能够把控源码的质量和方法,应该使用源码去进行开发,为什么?我们用源码以后可以做底层的优化!像刚才的我们就可以集成到游戏当中去,很方便。对于一些升级来说,可以选择性地升级一些新的Unreal殷勤带来的想法。这也是开源的优势。
最后想给大家的分享的是引擎开发当中腾讯社交组件Plugin的继承,有两个,一个是Apollo Voice,它是第三方语音交互的集成,大家可能不是很熟悉,《王者荣耀》的开黑语音大家应该很清楚,平台都是以这样的平台为基础,后面有专门的语音服务器来组织语音的传送和多人对话。VR社交里面声音是非常重要的一点,会提供给很多后处理的声音来处理,包括混响还有空间声音定位,这都是比较有意思的。Apollo Voice也是作为公司的组件。
后面是QQ的远程桌面共享,这个大家年轻的时候都帮妹子远程修电脑都用过,但是我们把它集成到VR中以后可以实现很多很有意思的尝试。比如说直播电竞解说、大屏看电影、多人同屏协作工作、远程开会。我们把图片、模型、文本、声音都直接从电脑里拖到VR世界中就像是从异空间拉入到VR世界中,在VR世界中产生虚拟的世界。
后面就是一些有意思的展示。这是《英雄联盟》的直播体验,这是去年年底Demo的展示,可以调整你的装备,这是自拍杆的能力,拍出来的照片可以摇一摇,这是语音球,可以给你的同伴留语音,可以摇一摇点赞,并且把它传送给你的社交好友,作为语音留音箱。多人连线可以在一起组队,这就是直接从游戏里面拿出来玩的《德州扑克》,这是刚才说的可以从电脑里直接把照片、模型拖拽到虚拟世界当中,这是刚才一开始说的,除了可以打牌还可以在一起唱歌,这是我们做的K歌的星空剧场,你唱歌高兴的时候机器人还可以跟你一起互动。
。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/industrynews/90064.html