开发经验 | 选择2D美术资源的分辨率
Unity 2D开发挑战赛正在火热举行中,为了帮助开发者更好的参赛,Unity 2D技术经理Ciro Continisio将分享一系列心得体会,本文的主要内容是:在使用Unity开发2D项目时,如何选择2D美术资源的分辨率?
很多开发者经常向我询问:“在使用Unity为PC和移动设备开发2D游戏时,应该如何决定资源的分辨率?”该问题无法用简单的回答涵盖所有情况。
近年来,Unity加入了大量功能以便开发2D游戏:精灵图集、2D物理、用于制作矩形、六边形或等距世界的Tilemap功能、基于样条曲线的Sprite Shape、2D动画工具等。
Unity不以像素为单位表示对象大小,这可能会困扰创作2D游戏资源的艺术家:“游戏资源需要多大才合适?” 和游戏开发的常见问题一样,这个问题的答案是“根据实际情况而定”,本文将介绍方法以便开发者更好地作出决策。
如果你是一位像素艺术家,请注意:本文的多数技巧不完全适用于你。像素美术图形的分辨率通常很低,可能需要增大到原始分辨率的2倍、4倍、8倍或更高倍数才能使用。这意味着原始美术素材的一个像素在屏幕上会显示为2×2、4×4或8×8的实际像素方块。
所以通常对于像素美术,不必太过注重屏幕分辨率,你可以根据素材本身和传达的感觉,例如复古风、NES风格、高分辨率“现代”像素艺术等来调整大小。
Unity现在以资源包的形式提供Pixel Perfect解决方案。它具有简单的组件,可附加到摄像机上,用于处理复杂工作,从而使美术保持清晰效果,并对齐任何屏幕上的实际像素网格。
若想了解关于Pixel Perfect资源包的更多信息,可以查看GitHub上Pixel Perfect资源包的文档。阅读地址:
https://github.com/Unity-Technologies/2d-pixel-perfect/blob/master/Documentation/2D%20Pixel%20Perfect%20Camera.md
缩小而不是增大
在考虑选择分辨率之前,在制作资源时,最好制作较高分辨率的资源,即使游戏不需要高分辨率的美术资源。因为缩小美术资源不会产生任何问题,但放大资源却会降低质量。
你或许需要为游戏展示美术素材,或者打算提高某个元素在屏幕的大小,或是需要针对4K屏幕开发游戏的“高清版”。
出于这些原因,在创作美术时,请考虑使用像素是所需大小2倍以上的素材文件,然后在导入Unity前缩小素材,或使用导入设置来降低导入引擎时的大小。
图像资源的导入设置允许最大分辨率为2的幂
导入设置还允许你为每个平台定义Max Size(最大大小)和压缩设置,例如:你可以让部分资源在PC显示为特定分辨率,而在磁盘空间较少的移动设备显示为该分辨率的一半。
小技巧:Unity可以通过Sprite Atlases精灵图集将多个精灵合并为一个。精灵图集不仅能节约纹理空间,还提供了统一的方法来控制精灵的Max Size,不必为项目中每个精灵独立设置该属性。
定义平台所用的分辨率
在定义资源大小时,要考虑游戏将发布的平台或设备。通常用户拥有非常多样化的设备和屏幕,因此会以不同分辨率和宽高比运行游戏。
通常情况下,如果要向PC发布游戏,主要面向二种分辨率的用户:大多数人使用“全高清”分辨率,即1920×1080像素,也称为1080p;也有不少人使用1280×720分辨率,也称为720p;少数用户使用4K显示器,分辨率为3840×2160;或是Mac的Retina显示器,17寸MacBook Pro拥有的最大分辨率为3360 × 2100,因此我们需要考虑很多种分辨率情况。
对于手机来说,分辨率范围也很大。老旧设备可能低至720像素,新设备可能高达4K分辨率。
小技巧:Unity会在开发者Unity ID的Operate Dashboard中提供分辨率统计信息。选择启用了Analytics的项目,你可以在Analytics > Market Insights选项下查看汇总统计数据,Steam也提供了类似服务。
对于Retina等新型高DPI屏幕,由于实际硬件分辨率非常高,它们会在模拟的较低分辨率下运行,通常是分辨率的一半,例如显示为全高清而不是4K。并且使用原来的二倍像素量来渲染图像和文字,因此看起来画面非常清晰。
DPI每英寸点数或PPI每英寸点数或像素数是由不同开发商互换使用的名称,但实际上它们的含义是相同的,即屏幕中每英寸有多少个像素。传统上屏幕拥有72 DPI,现今高DPI屏幕通常有144 DPI,有的手机拥有400以上DPI,因为它们在相对较小的屏幕中填充了大量像素。
对于这些屏幕,我们有二个选择。
我们提供可以完全使用4K分辨率的体验。该方法的缺点是制作4K资源需要很多额外的工作。这种情况下,可以在宣传材料中强调4K画质。PS4 Pro和Xbox One X等主机兼容4K画面,这类主机的用户非常喜欢能将硬件性能发挥到极致的游戏。
我们也可以让游戏只覆盖全高清。这种情况下,高DPI用户无法体会到更高分辨率屏幕的优势,而是会以全高清的分辨率运行游戏。这不是理想的,但是这样做可以更好地控制构建大小。
所以关键点在于:你需要根据当前市场份额,选择目标平台的最大分辨率,并将其设为整个项目的目标分辨率,从而使团队所有成员根据该条件决定资源的分辨率。
Unity场景中的测量
Unity以单位测量距离和大小,而不是像素。通常最好将1 Unity单位对应1米长度。例如:在这种情况下,平均人形模型的长度在1.7~1.8个单位之间。
这不是强制性的,但能确保带有物理效果的游戏可以正常运行,因为Unity的物理将1米设为1个单位。3D光照效果也一样,光线的参数和现实保持一致。
在2D环境中,该比例没那么重要,但是如果项目使用物理效果,最好遵循这种用法。如果使用Tilemap,为了简单起见,最好将比例保持为1 瓦片 = 1个单位。
了解了单位设置后,现在介绍摄像机。Unity的2D(正交)摄像机拥有名为Size的参数,它表示该摄像机在垂直轴上会呈现多少个单位。
正交摄像机检视窗口的Size参数
尺寸为5时,我们有一个视口可以测量垂直方向上的10个Unity单位,水平轴的大小会根据用户屏幕的宽高比,由该参数自动设定单位值。
计算方法很简单:常见PC或Android手机的宽高比为16:9,所以可以使用公式计算:10 (Vertical Size) x 16 / 9 = 17.7 (Horizontal Size)
通过这些设置,我们构成了约17.7 * 10单位的区域。Mac的宽高比通常为16:10上,该区域大小为16 * 10,所以水平方向的可见度较低。在垂直放置的16:9手机上,屏幕宽高比变为9:16,相同的摄像机此时只显示5.6 * 10单位区域。
本文暂时不会介绍如何处理宽高比,因为如果你的目标是针对不同宽高比开发游戏,不仅需要考虑图形,还需要调整大量游戏内容,以确保游戏在不同比例的设备上拥有相同的体验。
每单位像素量PPU
在将图形导入为精灵时,Unity会显示名为Pixels per Unit (PPU)每单位像素量的参数。当游戏对象的大小为(1, 1, 1)时,该参数表示精灵上多少个像素对应Unity场景中的一个单位。
例如:有一个岩石精灵,大小为218 * 175像素,将PPU设为100,将精灵拖入场景时,游戏对象默认为2.18 * 1.75单位大小,由于摄像机垂直高度为5个单位,所以游戏对象约占摄像机高度的三分之一。
通过这些设置,我们可以在垂直方向上放置5个以上的岩石
因此,我们将全高清屏幕作为测试的分辨率。垂直高度为1080个像素,石块占屏幕的1/5,这表示我们要将图形的175个像素分配到200多个像素的区域。因此我们将会得到一个略有些模糊的石块。
为了解决这个问题,我们有多个解决方案:我们可以将岩石缩小至大约一半大小;增大摄像机的画面范围,增加到10.8个单位;或是我们可以将精灵的PPU值改为108。
如何调整摄像机大小和PPU值呢?很简单。对于摄像机大小,如果我们以100 PPU导入像素,那么就需要摄像机大小为10.8,因为10.8 * 100等于1080。从而允许我们覆盖整个屏幕高度。
相反,如果在摄像机大小为5时计算正确的PPU值,如果打算覆盖垂直高度为5 Unity单位的全高清屏幕,那么会得到1080/10= 108的PPU值。如果不修改摄像机大小的话,我们应该在一个单位填充108个像素。
制定规则,打破规则
要记住,在开发游戏时,同时修改摄像机大小和PPU值是很危险的:你可能会在错误场景使用分辨率过低的图形。所以最好制定规则:对项目中的多数资源使用相同的PPU值和标准摄像机大小。
然后在必要时打破规则。也许有一个过场动画需要摄像机放大和缩小,暂时地修改摄像机大小。或者背景元素太大,无法保持原有PPU值,因为那样会出现巨大的纹理。这类情况下,可以为特定元素降低PPU值,并导入较小的精灵,同时仍用精灵覆盖屏幕的大部分区域。
预览游戏
在Unity进行开发时,你或许想知道从游戏视图看到的分辨率是多少,该画面是否是美术资源在目标平台上的准确预览效果。
游戏视图的顶部下拉列表提供了许多选项可供使用,还有滑块可以调整大小。
宽高比仅强制水平和垂直方向的特定比例,但是会使用游戏视图视口的当前分辨率,效果取决于当前的屏幕。因此宽高比适用于设置屏幕中的UI和对象,而不适合测试美术效果。
在使用宽高比时,如果使用高DPI屏幕,Low Resolution Aspect Ratios 会被勾选。勾选后,它会模拟标准DPI屏幕的分辨率。
固定分辨率会强制以特定分辨率大小渲染窗口。此时,你可能需要扩大游戏视图或最大化视图窗口来可视化整个预览效果。这种情况下,Scale滑块可以让高分辨率适应游戏视图窗口,但如果大小低于1倍,那么看到的不是该分辨率,而是对该分辨率的重新采样。
你还可以向下拉列表添加自定义固定分辨率和宽高比。
小技巧:最好不要仅根据编辑器的效果做判断。在开发时,你可以构建游戏版本,版本可以只加入美术资源,然后在目标设备或屏幕进行预览。
其它经验建议
美术资源的分辨率、摄像机大小和屏幕是互相紧密相连的因素,无法使用固定的像素大小或PPU来处理所有情况。所以要针对目标平台进行研究,确定分辨率,制定规则并告知团队。然后创作高分辨率美术素材。最后,调整素材大小为特定分辨率,并导入Unity中。
最后一个建议:虽然之前我使用过“略有些模糊”的表述,让人感觉这是必须解决的问题,但其实并不是这样。有时候,游戏中有些对象的分辨率可能不够大。特别是在屏幕上具有很多精密细节的时候,例如:透明度重叠、雨雾效果或后期处理效果。
此时你可以按正常速度运行游戏。观察是否能注意到像素经过了重新采样。如果你真的无法区分,那么渲染更高分辨率精灵所需的额外工作,磁盘空间和处理可能是不值得的。好的游戏会有进行各种妥协。
结语
如何选择2D美术资源的分辨率为大家分享到这里,热爱使用Unity创作游戏的开发者一定不要错过参加12月18日截止的Unity 2D开发挑战赛。后续我们将分享更多Unity的2D新功能或开发经验,尽请期待。
更多Unity 2D技术文章分享尽在Unity官方中文论坛(UnityChina.cn)!
推荐阅读
官方活动
参加Unity 2D开发挑战赛,向全世界展示你在Unity 2D方面的创意实践。[了解详情...]
活动地址:
https://connect.unity.com/challenges/2dchallenge
Unity面向全球的学生推出-Unity全球学生开发挑战赛,寻找全世界最具创意,展现自我的学生开发者团队。[了解详情...]
活动地址:
https://connect.unity.com/challenges/gsc2018
Unity的新订阅用户在获得优惠礼包的同时,我们将邀请活动期间所有的订阅用户参与Unity的圣诞派对,共庆年终圣诞季![了解详情...]
点击“阅读原文”访问Unity官方中文论坛