如何用Unity实现更高品质的美术效果?|课堂笔记

来自 游戏葡萄 2016-07-22
深度

[ 游戏葡萄原创专稿,未经允许请勿转载 ]

如何用Unity实现更高品质的美术效果?|课堂笔记

据统计,全球前1000款最卖座的手机游戏中,约三分之一的游戏都是使用Unity软件制作而成,其中就包括最近十分火爆的《Pokémon Go》游戏。

而它和Epic Games公司旗下的虚幻引擎(Unreal Engine)也构成了业界两大领先的引擎。虽然目前国内大厂开始在自研引擎领域试水,但对于大部分团队而言,这两种引擎对于项目开发将是必不可少的工具。那么,游戏开发者该如何选择引擎打造高品质游戏画面?

7月21日,第五期葡萄学院「如何选择引擎打造高品质游戏画面?」圆满完成。前《永恒之塔》技术总监鲁栋振虽然是一名韩国开发者,去年刚刚来到中国,但是他作为本期学院的导师,依然进行了详尽的中文分享,并回答了同学们的疑问。

以下内容是第五期葡萄学院的精华内容,经葡萄君整理发布。

PS:本次公开的内容并非我们课堂内容的全部,如果您对葡萄课堂的内容感兴趣,不妨关注我们的下一期内容。当然如果您想成为老师,分享您的内容,我们也非常欢迎~╰(*°▽°*)╯不管您想成为学员还是老师,请添加游戏葡萄君(微信号:gamegrapes)为好友,快来加入吧~

大家好,我叫Eugene Rho,中文名鲁栋振。今天准备分享下我在移动游戏开发中的经验。

最先分享的是为什么我选择了Unity引擎,而不使用虚幻引擎?

1.0.png

1.1.png

我想在移动设备上开发高品质的游戏,但是在移动设备上会遇到这样的问题:

1.2.png

但是移动设备会有很多硬件的限制,虚幻引擎虽然画面很好,但是只能在opengl 3.0以上比较好的展示,无法兼容中国更多的安卓手机,而Unity引擎在移动设备上相差不多。

1.3.png

虚幻引擎在很多安卓手机会是这样的画面:

1.4.png

但是我希望Unity也能开发出更好看的画面。所以,我在Unity基础上,采用虚幻引擎的渲染方式,二次开发:

1.5.png

这是虚幻引擎在高配置手机上出来的HDR效果:

1.6.png

它的实现原理是这样的:

1.7.png

这是虚幻引擎用来实现更好看画面的、像素保存的方式。我框起来的深度值,会决定平时游戏制作中,景深还有影子,雾等方面的表现。

1.8.png

一般的颜色是0-255,但是如果想保存高光效果,就必须使用32bit float color render target。使用它需要消耗很多内存,这个时候就容易导致游戏闪退,还会memory bandwidth开销提高,所以很多高品质的手机单机游戏,只能在iOS苹果手机上运行。如果硬件配置不够,则无法显示HDR效果。

1.9.png

但是,我又想在低配置手机上,实现HDR效果,所以我采用了这样的办法:

1.10.png

我们不使用float color render target 的方式,高光的颜色信息收集到alpha channel。

1.11.png

高光部分的信息消失,但是高光Luminance会保存到alpha channel。我们可以不使用float RT,还是用byte RT,可保存高光lumimance信息。使用这个信息,通过bloom技术能实现HDR效果。

1.12.png

左边是没有HDR,右边是使用这个技法实现的HDR。这个技法比正式的HDR性能很高。因为不使用float RT. 不需要多内存和多memory bandwidth。

1.13.png

左边是在alpha channel保存的Luminance信息。这个问题的缺点是不能保存有颜色的高光。因为只能保存高光的Luminance,不保存高光颜色。不过可以实现很亮的白色,不能实现很亮的红色。

但还有一个优点是,除了计算灯光出来的HDR,它还能表现跟灯光没有关系的特效bloom。还有其他优点,如下图:

1.14.png

然后我没有采用Unity的bloom效果,而是自己改造了渲染引擎的bloom效果,按着已经收到的luminance信息,使用该找的bloom shader,实现了最后的结果。

1.15.png

除了HDR,使用LUMINANCE,还可以别的效果,正在开发按着每个配置上出现的效果不同的系统,然后,我们在最好的手机上可以实现这个效果。

1.16.png

1.17.png

1.18.png

最后一个是场景。但是考虑到中国环境,有些高品质的材质贴图还是得换成512。

问答环节

1.提个问题,alpha通道才8位,怎么放HDR也就是大于255的亮度值?

我本来也考虑使用正式的HDR。在电脑上使用过,在手机上也实现过。这其中我发现了一个点,高光的像素一般不超512,float值的话就是不超2。当然有超的很高亮的部分,我发现了这样的部分很小,决定忽略这点。

所以在alpha channel上保存的luminance是超1到2的值。超2的像素是保存为2,这也算是一个缺点。不能表现超量的效果,这个可以调整。如果一个场景上不要1~2的luminance可以使用1~3的范围,这个不用固定的范围。

2.游戏开发中美术对游戏性能把控的一个度怎么去衡量?往往游戏中会遇到性能问题,而不得不妥协然后降低美术效果。

韩国很重视画面效果,所以开始不考虑性能,先做出好看的画面,再考虑如何优化。我对中国公司还了解的不多,但是我知道网易开发的质量也非常高。所以,我想我在中国大概要理解中国的需求和韩国的需求。我现在的方式是,按照目前团队的需求,在这个范围内做出更好看的画面。

Unity比虚幻引擎更需要图形渲染优化技术,因为Unity引擎的渲染目前不如虚幻引擎,一个好的角色,是由模型面数,贴图质量,材质系统和渲染系统,还有特效共同打造。模型面数和贴图质量主要是看美术从业者素质,材质系统和渲染主要是看程序员。

特效的话其实韩国也很缺高质量的从业者。每个引擎都一样,哪怕是自己研发的引擎,也还是需要自己开发渲染工艺。我也经常参考虚幻4他们是如何做出好的画面,比如会看Shader一些源代码。

3.市面上的Unity引擎做出来的游戏的画面,感觉很粗糙,相比于九阴真经这种用自己引擎的游戏,如果是2d游戏的话选择COCOS2d是不是更好呢,能具体说下优劣吗?

很抱歉,我的游戏开发生涯没有接触过2D游戏引擎,无法回答,我一直是3D游戏开发。

4.次世代手游的贴图能做哪些优化来降低贴图容量大小同时保证视觉效果?

这其实是很困难的,一个游戏包体大部分是贴图大小,不完全是美术从业者,程序也很重要。我也在尝试有没有好办法,目前还没完全开发完,所以尝试中的技术,不方便公开。

Unity引擎一个缺点是,不支持PNG或JPG发布。虽然提供Texture2D.LoadImage().. 可以使用这个函数,使用 jpg 文件,但是这个方式也有限制。这个函数只能生成uncompressed 贴图,它占很大的内存。我们正在考虑开发发布jpg文件,开发native library,自己 encode to ETC.. 使用NEON architecture. 然后使用生成compressed贴图。

目前基本的功能已经开发完测试了,但是还是缺少足够的开发人员,在深圳招人很不容易,大家都去腾讯了。我也特别希望能有人和我一起做这方面开发的尝试。

我觉得这个办法可以保证视觉效果不降低,然后又可以优化贴图,但是自己一个人开发过来,所以暂时说的这个办法,没有完全验证。

5.在unreal引擎下怎么根据设计的要求?比如同屏要求多少主角、敌人、场景等计算同屏的模型数上限?

这个问题没有标准答案,模型面数其实不是最重要的问题,还得根据游戏类型决定。我们自己的游戏就是一万多面的回合制。我们只有一个Boss,所以可以设置一万多面,一百多骨骼,但是我觉得没有参考意义。比面数更重要的是Drawcall,这个要控制在200以下,面数8万和10万的时候,差不了太多。但是Drawcall很重要,最好控制同屏200以下。

6.美术对于美术专业工具的使用会更专业,而程序在通过评估引擎和实际情况后,可能不去使用美术之前选择的或者他们擅长的美术工具,这种情况下如何平衡?

这个问题可能得大家一起讨论,比如团队中的程序是否愿意为美术开发专门的工具。我之前和现在的团队,都会为美术尽可能的开发一些工具,为了方便他们高效的工作。我自己特别想做出好看的画面,所以,我建议最好是双方去平衡下开发效率,决定工具使用情况,没有什么对错,只有是不是适合自己团队。我现在来到中国,为美术专门开发的其实也很少,因为程序开发任务很重。

7.1个角色算上各种挂件(披风、护臂、武器等),有近5k面,100多根骨骼,挂件有自己独立的动画,总共6个以上skinmeshrender。这种标准在手机上超了吗?

是BOSS可以,是NPC就超了。偶尔出现1,2个可以,如果都这样就会很卡吧,主角如果只有一个的话应该还可以。我没有这样使用,而是在U3D上,使用自己改造的渲染Paran工具,并不是把U3D和虚幻结合一起用,如果开发VR,我可能会选择虚幻(不过也还没超过Unity);如果是开发手机游戏,短时间不会选择Unity。

8.MMO中每个玩家都可能达到这种标准,请问鲁老师是怎么平衡的呢?

很难,这样的角色只能有1-2个,多了超标。

9.很多游戏中是不使用normal map 而是使用直接模型,但那样有很多面数,如果权衡的话是用高面数实现还是使用贴图实现?

我现在开发的使用的是Normal map。

10.请问美术人员在游戏引擎中制作材质设定的时候,引擎的节点多以程序语言表现出来, 那么美术人员该如何做能更好的理解这些节点所表达的含义以及使用这些节点进行材质编辑?

Shader优化是程序,程序制作局部的部件,并且给美术人员一定的限制,为了保证效率,美术人员负责组合使用这些部件。

Unity有这样的插件,可以自己调整,不用自己写代码,但是不好用。我们不使用Unity4了,Unity5的效果更好。如果需要更好的静态展示,得多和美术沟通,程序和美术要一起合作,但是Unity4的渲染效果更差。

11.请问鲁老师能分享unity4制作次时代静态展示模型的一些心得吗?好多游戏在创建角色场景会使用高模提取法线,再用低模实现高光效果,我尝试下,总是有很强的塑料感。

主要是shader灯光和材质导致,皮肤效果需要分散效果。

12.U5新的烘培很慢不好用,有啥解法呢?

我们也很辛苦,Unity5不支持多台烘培,只能买好机器了,或者期待官方更快的开发完这个功能。

13.U3D自带的pbr效率不高样。老师在用么?

自己改造用,不用官方的,很费效率。

14.如果做成VR项目,与普通次时代项目具体区别需要注意一些什么?

我还没有资源开发VR,你要支持我吗?

15.之前看过你分享的Micro Shader + Node Class Hierarchy材质系统,能给解释一下么?能多介绍点实现细节么?

1.19.png

是说这个吗?

本来一个Shader是一个整体。我现在开发的Shader,美术根据自己想要的效果,在我的shader里去挑选对应效果,然后MIX到一起。虽然Unity的 #pragma shader_feature 或者 multicompile 很方便,但这两个功能有数量限制,所以我自己开发了这样的系统。而且开发过uber shader方式的系统,这个也有限制。所以这次开发了新的方式的系统。

16.这套材质系统是在运行时自动适配的吧?

材质系统不是自动适配,材质系统是editor time时MIX出来,美术从业者在开发游戏时候会使用得到,它也是程序员为了做出更好的画面和效果而开发的系统。

我听说中国很多团队都不太重视这个系统。但是对于做出很好的游戏画面和品质,很有帮助,美术开发人员需要这个,才能做出好品质的模型。

文章评论
游戏葡萄订阅号