zoukankan      html  css  js  c++  java
  • 盛大游戏技术总监徐峥: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上的尝试,希望能分享给大家,做一个引导吧。因为时间不早了,如果大家有问题,就台下私下交流吧,谢谢大家。
  • 相关阅读:
    在IE和Firfox获取keycode
    using global variable in android extends application
    using Broadcast Receivers to listen outgoing call in android note
    help me!virtual keyboard issue
    using iscroll.js and iscroll jquery plugin in android webview to scroll div and ajax load data.
    javascript:jquery.history.js使用方法
    【CSS核心概念】弹性盒子布局
    【Canvas学习笔记】基础篇(二)
    【JS核心概念】数据类型以及判断方法
    【问题记录】ElementUI上传组件使用beforeupload钩子校验失败时的问题处理
  • 原文地址:https://www.cnblogs.com/nafio/p/9137009.html
Copyright © 2011-2022 走看看