盛大游戏技术总监徐峥:Unity引擎使用的三种方式

在5月13日Unite 2017 案例分享专场上,盛大游戏技术总监徐峥分享了使用Unity引擎的三种方式,以下为详细内容:

  大家好,我先简单介绍一下我自己,我是盛大游戏的技术总监徐峥。我今天想分享的主题是经典、现代、未来,盛大游戏使用Unity引擎的三种方式。因为我们也做了很多Unity的项目,做的时候也发掘了不同的方式,希望能跟大家分享一下。

  经典,Unity传统的前向渲染开发经验,这也是当前移动游戏市场最常用的一种渲染的方式。盛大游戏有多款游戏使用了Unity的标准前向渲染,例如已经上市的龙之谷手游。前向渲染模式不会有太多的后处理,主要就是靠美术素材的质量。前向渲染比较容易或支持高分辨率,目前终端设备上跑1080P或者跑2K都没有问题,这个画面可以做的很精致。前向渲染对硬件要求比较低,经过优化,我们一般能够支持市面上95%以上的设备,而且设备的耗电和发热情况都比较可控。综合来说,前向渲染模式还是目前主流的一个游戏渲染方式,能很好地兼顾效果、兼容性、耗电以及发热等各方面。

  下面分享一下场景优化的经验,我们都必须使用批次处理,如果不加控制的话,一个典型的场景,很容易达到500批次以上,而使用Batch,可能只有一百批次上下。我们之前一款作品在使用Unity4的时候,发现使用静态批次会导致场景储存的空间大大增加,所以建议是使用动态的Bacth,Unity5上这个问题得到很大的解决,但是总体来说,动态Bacth的灵活性一些,场景Bacth控制一下范围,这样在剪裁的时候,有更好的效果。

  场景效果,HDR的lightmap,这个在PC端可以正常使用,但是在Unity的时候,在移动版会失效,移动版的lightmap使用的颜色会失真,绿色会偏黄,所以我们修改lightmap在解压版上的函数,使这个正确,对比度也更加明显,使场景效果更加饱和。而真实水面效果,大家可以看到,就主要有三个技术方面,一个是扰动折射,Unity这个realistic比较费,是从内存到显存,再从显存到内存。高光来说就是使用法线贴图的动画,模拟水的移动。岸边深度,如果使用Unity的CameraDepthTexture,需要将每一个场景不透明物件渲染2次,因此我们使用了自己的渲染管线,在渲染不透明物体的颜色buffer的同时得到一个自定义DepthTextuer,用于深度渲染

  同屏大角色处理和角色特效,这是我们经常遇到的问题。移动游戏主要是使用CPO产品,所以带动化的物体,定点数量还是需要控制的,另外角色的骨骼数大家都知道,要控制。此外的话有一些小窍门,比如说角色过多的时候,非主要角色可以以不要逐帧渲染,例如除了逐月周围圈的角色之外,离角色远一点可以两帧转型一次,再远一点可以三帧转型一次,因为远的角色看的并不是很清楚。如果是斜45度,所谓的2.5D的视角游戏不太合适,因为在边缘的时候看到人一卡一卡也很难受。这个要担心一点,如果动画当中和逻辑计算相关联的帧的话,不更新动画可能会导致逻辑异常,会碰到这样的问题。

  特效的Drawcall很高,没有策划之前,这个Drawcall能达到两千以上,这样使高端设备和低端设备跑的速度一模一样。因此我们想了一些办法,就是比如说我们在特效李建两个节点,一个结点下面挂的必须显示的内容,另外一个节点是特效锦上添花的内容。可以关闭第二个节点下的特效,看主要特效就可以了。另外为了低配机考虑开发,根据机器配备的情况不同,开关不同的效果。

  这是使用当中遇到的问题,就是安卓机都知道,必须使用ETC,Unity的ETC编码器虽然速度比较快,但是效果真的很差。我们实际做了对比,和一些比较好的ETC做比较,Unity现在使用的ETC编码器会产生大量的色接,清晰度也很差。我们很多时候发现UI的效果不好,最后发现都是转成ETC的效果不好。特别是我们有的时候,模型在感觉很好,已经做了很多,但是在游戏里面反而看不到这个感觉,最后发现也是转成ETC的时候损失过大。这个后面可以说到,如果有Unity源代码的话还是替换掉当前使用的ETC编码器,Unity使用编码器是最早版本的编码器,我不知道为什么一直没有升级。如果有可能的话,也可以考虑直接使用ETC2,或者ATC会好一些。

  性能优化,就是避免使用Alphatest,这个大家很清楚,尽量用模型来做,特别在低配的环境,这个消耗可能高很多。目前的手机分辨率很高,720P、1080P,因此可以适当考虑增加面数,减少后处理。现在主流手机其实对面数并不是很敏感。削减PS的指令数,部分计算转移到VS,不透明的物体从前往后渲染,总是被遮挡的物体,渲染次序可以尽量排在后面。我们要注意前面提到的,动画中联动逻辑的问题,所以总体来说不是很建议在动画当中打逻辑帧的操作方式。

  内存来说,第一个就是建议适当地削减采样率,如果使用3D用单声道就可以了。纹理之前说了,安卓ETC、IOS(PVRTC),安卓都是用ETC1。如果硬件要求,你这个项目不是要求跑在很低端的设备上的时候,可以考虑用ETC2,内存有很大的节省,这个不用直接PNG,在内存里面会日方。使用对方池内存回收池,这个也是常规内容。模型压缩,这个省不了太多,动作压缩,动作压缩是很有效减少内存的方式。但是参数要反复试一下。有几次动作压缩之后,发现角色在原地抖,这个还是要小心一些。

  下面介绍一下现代次世代延迟渲染管线常识,以及VR的一些尝试。为什么想投入VR研发,因为现在VR游戏市场上即将进入高速发展。VR游戏市场,相对的产业形态初具规模,产业链逐步完善,硬件也在逐渐普及,全球VR的业务也在逐步增加,预计到2020年,会在150亿美元左右。在技术发展、用户需求、媒体报道、资本认同等各种因素的共同作用下,VR可能会成为未来的一个趋势。这是一个市场预估,可能2020年VR游戏市场可能会达到150亿美元的规模。为什么选择VR游戏,目前VR游戏还是网民最期待的VR内容,但老实说,我们并不认为这个调查完全客观或者准确。我们判断可能初期还是VR视频或者VR直播成为一个短期的爆点。恩所以我们做了这个项目传奇世界,然后再现传奇世界的热血屠魔的经验。这是HTC的版本,有3种武器,包括多种作战技巧完整的教学环节,一个完整的藏经洞的关卡,同时支持中文和英文,最早的版本只支持中文,上线被无数卖家骂,评分直接被调整了。

  下面简单分析一下渲染管线的选择,前向渲染就是前面说最简单无深度的模式,不能在真正意义上支持景深、3S之类,这个是指还是有方式支持SSAO,但是这个支持是近似的方式,不能算是完全正确的方式。延迟光照,渲染两遍场景,批次大幅度增加,只支持部分后处理效果,延迟着色,批次与延迟光照是比较接近的,但是能支持所有的处理效果。但是它的问题就是基础开销比较大,因为要算贴图,简单效果下的渲染速度是低于前向渲染的,但是复杂后处理效果下的渲染效果是大大高于前向渲染的,所以大家可以看出来,延迟光照没有特别大的意义,所以我们一般选择就是要不要前向渲染,要不要延迟着色。

  这是一个决策,就是PC平台硬件的瓶颈比较少,我们做HTC的平台,所以当然选择延迟渲染的模式,移动平台不追求极限画质,建议选择前向渲染模式,在大部分中低配设备上快很多,也比较容易控制游戏设备的热量。移动平台如果追求极端的,接近端游的次世代画质,建议选择延迟渲染模式,在后处理较为复杂的情况,延迟渲染的效果要优于前向渲染。要注意移动设备分辨率的影响,渲染分辨率对速度是线性影响,在低配机器跟不上的情况下,我们720P是比较现实的问题,不像前向渲染开2K在目前的主流机器上都能支持的。我们可以考虑使用720P做一些处理,然后UI能够使用,比如1080P的高分辨率,大家最终效果会感觉UI比较精致,画面其实看不出特别明显的区别。另外建议给低配机写一掉前向渲染的管线,否则产品经理迟早要来找你,一旦上线之后,会发现有20%的设备不能支持,总是要找你再做开发。

  移动平台选择延迟渲染是可以开发,我们使用的光明勇士就是用的这种技术,这种自投影的感觉,全阴影的感觉,SSAO的感觉是一眼能看出区别,大家想看的话,可以在5楼的展区看到。我们这个游戏选择的因为是HTC的PC平台,选择也是延迟渲染,是一种次世代的画面表现,动态光源的数量可以体现,然后更好地展现场景氛围,突出VR的场景感特点。

  延迟渲染下是没办法开MXAA,是FXAA,这个效果差不多。PBR,PBR是现在延迟渲染的重要技术,PBR材质可以极大提审渲染对象的真实质感,极大改变早期次世代带来的塑料皮的感觉,这是我们使用的一个实际效果图,可以看第一版用的传统次世代,就是感觉要不身上没有反光,有反光是一个塑料皮,就用了现在的方式,会显得真实很多。

  PBR的一些TIPS,并不是上了PBR会比之前的效果好,用不好,还不如以前的塑料皮,老板会问你花了那么多外包费,做的到那儿去,PBR是光照的方式,但是出好效果,程序和美术要花时间调试,如果之前没有做到这个流程,切到这个流程准备一些时间,让美术和程序熟悉这个流程。PBR需要调整美术的制作流程,需要说服美术师和外包团队做这个盖中,我们美术师很希望使用这个设备,但是我们的外包团队并不会使用这个工具,所以最后实际上我们是美术设计师直接去外包公司做了很多的培训。PBR并不会大幅度增加硬件开销,PC平台上这种开销可以忽略不计,移动平台也是可以接受。Unity标准的PBR还是比较费的。总体来说,PBR是成本不高,不管是制作成本,都没有很高,但是质量提升很多的技术,还是建议大家如果做新一代的,不管是端游也好,手游也好,可以考虑使用这个技术。这是一个自投影的效果,景深,主要是处理远景和天空的一个融合,强调一下近景。

  这个BehaviorTree可以实现复杂怪物逻辑,这个组件我们用下来还是比较方便,是一个Unity的第三方组件,价格很便宜,性价比还是很高的。传统游戏,VR可以用控制器来攻击对象,要用动画表现结合的方式,通过玩家真实反馈,来打击。我们发现在VR当中,其实讲述故事的方式有很大的区别。在VR下要结合情景、语音、文字多维度渗透的讲解故事背景,在VR下的话,玩家的沉浸感的确会更高,有自己故事参与者的感觉。但是也要注意VR里游戏玩家的注意力很容易分散。因此就要求剧情设计者尽量多纬度展开剧情,如果发现玩家不在你看你希望看的东西,你要不断提醒你,哪怕略微强硬的提醒,就是提醒玩家现在在故事中,马上把头转回来。

  VR的引导其实也是,首先VR的引导UI要设置在游戏世界中,VR中尽量不要使用屏幕固定端,引导UI不要随着玩家视角的移动而消失,原因和上面描述是一样,玩家的注意力很可能分散在你没有注意的方向。引导多次冲陷,引导UI加入适当的动态,不断提醒玩家来看我,引导UI和场景分离要分离一些,不要做的很融入场景。

  遇到的问题,手臂,这个可能是VR游戏的经典问题。为了更好地展现人物的代入感、沉浸感,肯定希望我是有手,因为我已经没有身体,如果连手都没有就太假,所以尝试使用模拟关节,但是多次尝试没有得到很好的介入。今年在刚刚举行的美国GDC上,看了有一些公司做了VR当中模拟手臂的运算,他们的Demo实际演示出来效果还是不错,但是实际操作的话,发现还是有很多问题,很多时候你会做出匪夷所思的动作出来。目前来看,这个传感器太少,纯粹只靠手上的两个传感器模拟不出手臂,包括小臂、手腕效果还不好,目前只有考虑只有一个手套,这不是一个完美的解决方式。

  这是一个小窍门,就是发挥VR设备的特点,让玩家多出点汗,VR位置追踪器重新利用起来,让玩家闪避增加游戏的多样性,让玩家体验VR游戏不同的魅力。但是不要太过分,这个游戏本来考虑让玩家跳跃躲避,但是最后发现,普遍感受不太好,女生说跳不起来。同时下蹲之类的操作,你偶尔来一下,让用户有新鲜感就可以了,每次都这样打,就很困难。体验时间比较长的VR游戏,是真正希望能够卖出去体验一个小时两个小时的VR游戏还是控制一下玩家的紧张感,最终玩家还是喜欢坐着玩游戏,这一点PS游戏还是很聪明,大部分PS游戏还是坐着玩,现在主要游戏都是坐着玩的模式。让玩家一直站着二三十分钟其实已经很累了。

  下面提到另一个问题就是真实打击反馈,VR中玩家可以从任何角度攻击怪物,期望能够使怪物正确的根据玩家的打击方向做一个出一个反应。我们初步尝试就是说,使用这种Ragdoll系统,优点就是使用物理引擎跟玩家的挥砍是很真实的反馈,缺点可能很真实,但是不好看,要调到既符合物理,又好看,可能要很多很多的积累。最后我们还是使用了多个角度,多个纬度的预设的手机动作,结合动作碰撞检测实现的。实际的感受还是不错的。

  移动,这个是VR当中的一个经典问题,定点战斗玩家会抱怨太枯燥了,就一直让我定点在那儿,一旦移动战斗就有眩晕感。比如说我基本上不太晕,我可以接受比较快速的移动,但是在很多时候,我觉得移动的比较慢,没有任何眩晕感的时候,给别的玩家玩的时候有很强的呕吐感。现在注意的事项就是稳定在90帧在PC平台,移动平台60帧,尽量动的慢一点。你可以远景不动,可以近景不动,就是相对近一些,大家可以看到现在有很多VR游戏是使用载具模式,要保持近景不动,这样的话眩晕感会少很多。

  这是我们研发传奇世界VR的一些收获,就是VR游戏不同于传统游戏,不要使用传统的UI,UI放到3D世界中。谨记VR中的Camera不可控制的,玩家的眼睛就是相机,不是你想看什么就是什么。VR游戏对性能要求极高,性能分析要贯穿整个项目的开发周期。第四电也是和每个人讨论下面反馈的点,我们经过测试是有道理,如果做不到稳定的90,可以考虑用60、45的。大多数情况下,稳定的低FPS比不稳定的高FPS要好,如果只能做低fps,那就老实一点,如果45度的晕的那真的是不行。

  VR的叙事引导方式和普通游戏有区别,还是多维度引导玩家。最后一点也是在选开发题材的时候发现的问题,还是要选团队擅长的路线与方法,因为现在做VR基本都是从以前从端游,做手游转移过来,如果进入这个领域,觉得原来的是不适合VR,可能做一个新游戏类型,这个时候一定慎重。进入一个不熟悉游戏类型的市场,最终可能发现你花了80%的时间在做这种游戏类型,而不是在做VR。

  下面来提一下未来,就是使用Unity开发移动VR游戏的一个尝试。为什么是移动VR游戏?从PCVR到移动VR,谷歌一直推动VR的标准化,VR视频直播日益成熟。谷歌的Daydream平台不管是软件还是硬件都相对成熟,这也是一个标准。意味着三星HTC都会推出符合这个标准的硬件。然后谷歌这个平台是配置了手柄,以前三星是没有标配手柄,要操作在眼镜旁边按键,这个没有做游戏,当时用眼睛的视点做选择,这种方式只能做解决,没有办法做重度的东西。VR视频预计成为杀手级的应用,大家有兴趣可以在三星的VR平台上看MBV的VR转播,现在机位有一些缺陷,但是效果很震撼,我们觉得VR视频可能是一个杀手级的应用。

  这是VR硬件的一个销量预估,我们可以看到,移动VR这是美国的情况,移动VR是在2016年底在280万台左右,比整个加起来的量还很大,在中国这个差距更大,中国包括小米、华为、暴风影音VR眼镜市场销量很大,大家在淘宝应该可以看到很多的VR眼镜的广告。

  移动VR的一个发展预估,VR产品将在视频应用的拉动下,随用户手机的换代而逐步成为主流。2017年移动VR市场增长比较快,三星宣布了GearVR的量已经有500万台,观看VR视频超过100万小时,HTC、三星、华为、小米等作为合作伙伴将陆续推出符合谷歌标准的VR手机。2018年移动VR市场将有更明显的成长,形成一定规模。随着用户逐渐换手机之后,符合VR标准的手机装机量将进一步提升。使用符合VR标准手机的用户在欣赏VR视频之后,会形成一定的带动效应,进一步加速移动VR游戏的普及。特定类型的VR游戏,我们认为是具备长期商业潜力的,通过HTCPSVR的实验性产品验证,可以总结出VR有一定魅力的。但是只有一些特定类型的游戏才能发挥VR的独特魅力,并不是所有游戏都有发展潜力的。

  移动VR和PCVR的一个对比。移动VR的价格很便宜,可能两三百块钱可以获得,更容易普及,当前的装机量高很多。但是移动VR的性能较弱,对优化要求更高。移动VR设备目前没有这种RoomScale的动作追踪器,游戏模式和Pcvr还是有差别,移动VR输入设备有限,对玩家的限制比较多,这个手柄只有少量按键。大家玩过HTC的手柄,有很多按键,实际开发过程当中,真正能用的按键其实很少,有很多按键你如果设计出来,玩家会觉得是反人类设计,要不根本按不到,要不就是很容易误触。

  移动VR的探索,选产管线选择,这个和之前讨论的其实差不多,就结论来看,目前移动VR市场可能你只能选择前向渲染,延迟渲染在目前的最高端手机只能跑720P左右,做移动VR是不现实的。

  移动VR的开发探索,性能指标和桌面VR相比性能还是有很大的差距。当前移动VR设备,维持以下的规格一般可以达到比较高的帧数,就是同屏面数100K面以下,同屏的DrawCall维持在100以下,使用较为简单的Shader,避免使用负责的后处理效果,避免使用实时摄影。控制总面数,避免使用较为复杂的模型,尽量LOD,如果要绘制一个实时的角色阴影,建议使用一个简化的模型。

  比如Unity自带的性能开销还是很大,建议谨慎使用,用一个简化版比较少,也希望简化掉不需要的计算流程,就是基本上Unity的标准材质,虽然都能实现这个效果,但是毕竟是一个通用的处理流程,需要根据你自己项目的需求去简化。直接使用的话,性能都有一些问题。尽量使用统一的Shader合并贴图。避免使用额外的后处理,后处理过多消耗很大,后处理成本和分辨率成正比,目前如果你使用2K屏,后处理成本很大,所以要尽量减少后处理的复杂度,这是一个权衡,如果要上后处理,只有降分辨率,但是大家知道VR屏幕离玩家的眼睛很近,现在甚至在2K屏幕上都能明显看到,所以对VR来说,高分辨率还是很有必要,在目前来看,只有这样的效果。
要避免使用适适应。PBR,移动平台也使用了这个PBR,Unity的标准还是自己改写一下,不要到处都使用,就是地表之类的大面积物体要谨慎使用。水面就是基于Unity自带的面进行修改。但是我发现,之前给移动游戏写好的水面算法在VR是有问题,要根据VR的模式重新做水面反射的功能。波浪效果,机遇深度的透明度调整,对于近海和远海对天空颜色反射比例不同,要分别控制,比较符合美术的需求。

  移动平台上的一个景深实现,景深效果在移动VR上消化是比较大的,因为毕竟是移动VR用的前向渲染,每一个物体,要写如Depthtexture要增加很大的开销。你要考虑严格控制写入这个物体数量,以最小的性能开销实现效果,效果虽然有些损失,但是开销小很大,这也是看游戏类型的。如果你是一个远景比较确定,不存在太多中景的游戏类型的话,比较适合,如果希望拉开这个距离,效果不一定会很好。

  移动平台的性能挑战,发热一个很重要的问题谷歌的pixel真的好烫,降频无法避免,谷歌会比华为、小米好一点,能支持半个小时左右的全水平或者高水平的运行,但是也半小时,只能做一些动态的效果调整,就是发现降频就主动降效果,或者更彻底就过热了就降效果。要画质还是要流畅度,这个只能做一个动态平衡,团队内部有多次的辩论,其实这方面。最后还是建议在开发初期追求高画质,硬件是不断发展,从高往下减,总比从低往上增容易。不要觉得做当前画质是过度追求画质表面,可能老板说,我们按照市面上的去做就可以了,主流发了哪一款游戏,做到这个水平就行了,但是发现往往不是这样的。我们一款很有希望的主流作品,开发过程当中,画面效果提升了3个世代,事实上老板的要求是不断提高,这个也导致开发周期和成本的不断提升,还是在项目立项的时候就把画面的标准定的高一点。

  移动VR的研发方向,就是目前来看,还是积累适合VR的相关技术,等到硬件逐步发展成熟。目前的移动VR市场还不成熟,但也是一个蓝海市场。先进入其中游游泳,才能在高潮的时候冲在峰顶,目前不建议做大规模的投入,在现在情况下很难赚大钱,不断是移动VR还是PRVR,要靠发行赚回成本其实很困难的。探索适合移动VR的游戏方式,PCVR、PSVR提供很多成功案例,特别PSVR上面有很多Demo有很多借鉴意义,PSVR还是一个成功的商业平台,大家可以考虑玩玩,有很多很不错的小游戏。以传统手游产生互动和共鸣,双端研发是目前比较好的主意,这样比较能处理前期团队的成本问题。如果做双端考虑VR镜头FOV的问题。大家知道是110是很广角的,我们普通是用在35到45的样子。简单转化到非VR环境,不做处理可能有一些问题。这是我今天希望分享给大家的内容,进行近期做了很多游戏,就是VR上的尝试,希望能分享给大家,做一个引导吧。因为时间不早了,如果大家有问题,就台下私下交流吧,谢谢大家。

上一篇:jQuery.extend方法和开发中变量的复用


下一篇:【vim】实时加密文本 ggVGg?