Unite2018

去年的Unite大会在上海,同时有3个会场在进行分享,分别是国内技术专场、国外技术专场、同行分享专场。而今年的Unite大会在北京进行,今年技术专场同时有4个会场在进行,而且没有再按照分类划分。同样是两天的分享会,第一天主要是国外的技术人员分享,第二天主要是国内的技术人员和国内的开发团队分享。今年公司加上我有3个人参加,基本跟手游相关的都有涉及到,而我主要挑渲染与手游相关的分享参加,回来后大家也各自整理了相关的资料做了公司内部的分享。在此整理一下Unite2018我接触到的技术分享。

《从AAA游戏到实时渲染的动画电影》

以前的影视动画制作主要使用PathTracing技术来做渲染,画面比较真实,但耗时非常长,平均三十个小时渲染一帧。现在随着实时渲染技术的提升,越来越多的动画制作团队采用实时渲染技术来做影视动画。现阶段技术难点主要在于:材质、光源、灯光及抗锯齿。分享者是Unity全球技术艺术总监江毅冰,她分享了她自己在制作动画《WindUp》时采用的一些方案,讲解了如何处理上述4个难点,用实时渲染做出高质量的CG动画。

《Unity中的机器学习》

Unity2018自带了一套机器学习框架——MLAgent,它实际上是对GoogleTensorFlow的一个封装。运用MLAgent可以直接在Unity平台下开发机器学习相关的内容,包括训练,测试等等。MLAgent主要分为代理(Agent)、大脑(Brain)、学院(Academy)三部分。训练的方式有两种:Reinforcement Learning通过奖励学习,在不停的迭代中趋向“最优”;Imitation Learning通过模仿学习,与人实时交互,最终趋向于“拟人”。

《高端实时渲染技术》

与第一场类似,通过分享制作影视动画《Adam》的经验,介绍Unity关于实时渲染动画上的新技术与新特性。其中HD Render Pipeline模式、PolyBrush和CinemaMachine工具都值得关注。CinemaMachine配合TimeLine使用可以得到很多2017版本没有的功能,例如Camera跟随、Aim,预设轨道、VirtualCamera硬切镜头,TimeLine嵌套控制TimeLine,TimeLine控制UI、实时预览音效等等。

《Addressables and Resource Manager》

相对于之前的Assertbundle打包方案,新推的Addressables有以下新特性:提供可配置的下载,可以异步加载(注册回调函数处理),可以通过给资源打标签来一次加载一批资源,可以通过替换Addressable包来实现批量替换资源。最重要的是,提供了一个RMProfiler实时查看资源使用情况,这样对于分析资源打包是否合理有很大的帮助。

《在因特尔核显上运行MR游戏》

这个分享其实跟MR游戏关系不大,主题是基于Intel的优化,使得MR游戏也能运行在Intel的核显机器上。分享了一款国外游戏针对Intel核显优化的方案,其中提到的优化方法值得参考。例如优化Bloom的方法、作假的Bloom模拟效果、关闭HDR提高性能、使用TSCMAA抗锯齿、手动组织渲染队列,先渲染靠近屏幕的再渲染远离屏幕的(利用ZBuff剪裁),还有SKyBox精度对渲染效率影响也不容忽视。

《用Unity全新光影算法塑造AAA品质》

今年分享会都有一个特点就是标题都不是很不直观。这场分享内容实际是《基因雨》这款国内PS游戏的技术分享。主要讲到的是他们在游戏中大量运用了各种Unity引擎新特性达到比较好的表现效果,然后再基于PS平台做优化。其中用到了这些渲染技术:太阳光子、色溢的模拟、使用反光板与灯光链构建更真实的环境光、使用SSAO功能实现漫反射阴影、使用GlobalFog实现大气雾效果以及使用Unity自带的屏幕后处理增强表现。优化方面也分享了不少关于PS平台上值得注意的问题,例如Unity的粒子系统在PS平台上运行效率很低、Terrain系统在PS平台上的坑、面片数在PS平台上不太会影响效率,反而更加应该注意光源数量,尽量使用烘焙。

ScriptTable Object

这场分享是由Unity的技术工程师为大家讲解Unity2018新加入的功能ScriptTable Object。它最简单的用法就是把一些程序变量变为像贴图、模型一样的资源存在于客户端目录下,这样策划可以方便直接配置。第二种用法是替代传统的单例模式来管理一些全局的变量,使得一些全局的信息可以在游戏运行时方便访问以及在编辑器里实时查看及修改。第三种用法是利用他的响应函数来实现消息响应机制,这样做可以避免传统的观察者模式中观察者的每帧轮询,降低性能开销。

线性和Gamma颜色空间

这场分享会同样也是由Unity的技术工程师带来的Unity2018新特性讲解。首先讲解了什么是Gamma颜色空间,为什么会有Gamma颜色空间以及使用Gamma颜色空间的一些问题。最主要的点就是如果资源用Gamma反向处理颜色之后,再进行光照计算的话,得到的结果往往不是我们想要的结果,因为光照计算中的颜色插值是线性的,而在Gamma颜色空间下颜色并不是线性过度的。为了解决这个问题,Unity2018在贴图的导入选项中提供了是否是Gamma空间下的选项标记这份资源是否经过反向Gamma处理。利用这个选项可以让Unity把资源统一变为线性空间下进行光照计算,然后Unity会在最终的FrameBuff中统一对输出信息做Gamma反向处理,从而得到最好的效果。

使用视频高效制作3A手游场景

这个分享会很有意思,提供了一个做游戏场景的全新思路。利用Unity的新摄像机特性录制360度的场景视频(或拍摄360度场景照片)作为素材,然后在游戏运行时利用这些素材做一个Cube来模拟场景。这种做法的优势在于前期预处理的场景资源可以效果全开,而运行时运用这些素材模拟场景开销非常小,低端机器也可以看到最好的效果。这个方案适合运用在一些镜头与游戏过程无关的游戏中,例如横屏射击、过山车、跑酷等。如果要实现前后遮挡关系的话,可以分别录制前景与背景两份资源,然后在运行时使用两个Cube来播放,利用支持Alpha视频的组件或自己实现颜色剪裁来达到前后遮挡。对于特定的游戏类型能用非常小的渲染开销达到非常好的表现效果。

少女前线的画面、声音效果

《少女前线》是国内团队开发的2D卡牌游戏,开发团队带来的分享主要集中在两个点,一是他们采用的声音管理方案Adx2,二是灵活利用Sofdec2播放Alpha视频实现游戏效果。Adx2与Sofdec2这两个中间件都是CRIWARE的产品。声音中间件Adx2的功能主要有声音的分类标签管理,实时规避策略处理多种声音同时播放的情况,音效根据参数做随机变化,提供编辑器批量管理声音资源,还集成一个可以实时查看当前有哪些声音在播的工具。而Sofdec2是一个支持多种格式的视频播放中间件,利用Sofdec2可以在游戏中播放支持Aplha的视频,实现例如过场动画、UI特效、场景特效等。分享者还提出了一种做新手引导的方案:把新手引导录制成视频通过播放、暂停引导玩家完成新手引导,避免繁琐的处理。

移动游戏的大世界实现

针对今年很火的吃鸡类手游,分享如何在Unity中实现手游的大世界场景。使用了Forest Terrain、Dynamic Fog&Mist、MeshBakerLOD、MFPSC、Terrain Slicing等等插件实现一个8000*8000的大世界。主要分享的就是上述插件的使用以及Terrain的底层细节。

移动端优化后期效果

基于国外一个比较知名的游戏《Spellsouls》的移动端移植优化做的分享。主要的点集中在怎么优化灯光与优化Bloom中。灯光方面采用了一种叫Forward+的处理流程,首先把整个空间按格子划分,然后先做一个z pass用格子与灯光求碰撞,相交的加入list中着色,模拟延迟着色来支持多个小灯光。然后在优化Bloom方面,提供了好几个思路:1是在静态的场景图上预处理Bloom效果;2是做一张Bloom效果的Texture使用billboard附在角色上模拟动态物体的Bloom;3是利用MRT特性,只对单一R8通道做运算后重新映射回RGB24,减少计算量优化Bloom;4是利用dual filtering apporoach来优化blur,该算法会比使用高斯模糊快10+倍,从而提升Bloom效率;最后提到了使用LightMap来模拟灯光处理比使用真实的光照效率提升非常大。

Custom Render Texture

在2017版的Unity上已经有一种特殊的贴图Render Texture,它是由摄像机实时录制出来的,可以赋给其他物体使用。而2018在此基础上再做加强,推出的Custom Render Texture是一种完全自定义的贴图。它是动态生成的,但它不必是由摄像机产生的,它可以是由传统贴图+Shader实时运算产生。这样相当于在贴图层面又拓展了一个维度可以自由编写Shader控制,可以实现很多新的效果。例如现在很多屏幕后处理的算法可以单独应用到某一个模型的贴图上,而不再是整个屏幕。在《Adam》动画中的催眠之眼就是基于这种技术实现的。这项技术在未来应该会有很大的应用空间。

崩坏3分享

崩坏学院的制作团队米哈游继Unite2017之后今年继续为大家带来卡通渲染的技术分享。今年首先介绍了崩坏3手游里运用到的4种特殊表现效果,分别是动态粒子、Bloom、扭曲和反射。这4种效果在手游上的运用有一些相应的优化手段。接着还是跟去年一样把主要时间花在介绍他们制作CG时运用到的高端卡通渲染技术,例如多层次的渐变贴图,多层次的高光,脸部阴影特殊处理,头发高光特殊处理,PCSS实现的软阴影、高质量的勾线算法等等。崩坏3的分享历年都备受关注,相关的资料网上非常多,就不在此详细介绍了。

优化UnityMMORPG游戏

这场分享会其实适用于所有Unity游戏项目,详细讲解了Unity中关于手游优化的各项细节。例如C#代码编写、Shader代码编写、资源设置、引擎设置、UI制作、物理引擎的使用、Terrian的使用、粒子特效、动画设置等等。这些点还是很有价值的,不过非常细在此没法一一列举。

回想起去年参加Unite2017后,收货了很多,主要是优化、资源管理以及TimeLine的引入。这些在后面的项目开发中都带来了很好的效果。今年的Unite大会同样干货满满,所以在接下来的项目开发中要把这些知识转化为生产力,做出更优秀的游戏。

 

Tagged . Bookmark the permalink.

Comments are closed.