【译文】2D完美像素
翻译:随梦
原文:http://www.taidous.com/thread-24473-1-1.html
很多人问我们:怎样让一个像素美术风格的游戏看起来很棒?倘若使用Unity默认设置来开发像素类游戏,游戏画面将会惨不忍睹。不过,当前版本的Unity能够渲染出不错的像素游戏画面。下文将为你介绍一些注意事项。
对比展示
左边的图像是由校准不正确的相机显示的,而右边的图像是校准正确的相机显示的。
秘密武器
要让你制作的游戏画面好看,关键在于渲染出非常清晰的像素分界线。也就是说,要确保每个像素在屏幕上都能精准显示出你想要的精灵图片。实现这一效果的技巧是调整正交相机的大小(size),从而达到生动的显示效果。
最基本的概念:什么是正交大小?
在正交摄像机中,世界空间的正交大小决定了屏幕高度所包含的单位数量。例如,在高度为1080的屏幕上,若正交大小为5,那么每个世界空间的单元就对应108(1080 / (5 * 2))像素。这里乘以2是因为正交大小指定的是屏幕顶部到中心的区域。
因此,如果你的精灵图片的像素单位(PPU)是108,那么它就能实现最佳显示效果。
实际实现完美像素的方法
将上述理论应用到实际项目中,需要更多的考量和规划。由于你无法调整目标设备的物理分辨率,并且PPU(作为资源包转化)的取值范围有限,所以你只能通过调整正交大小来实现目标。
改变正交大小会影响可见的世界空间,这将直接影响你的游戏代码和需求。以下是一个不同垂直分辨率、PPU、PPU缩放比例和正交大小的对应表格: | 垂直分辨率 | PPU | PPU Scale | 正交大小 | | --- | --- | --- | --- | | 768 | 32 | 1x | 12 | | 1080 | 32 | 1x | 16.875 | | 1080 | 48 | 1x | 11.25 | | 1080 | 32 | 2x | 8.4375 | | 1440 | 32 | 2x | 11.25 | | 1536 | 32 | 2x | 12 |
正交大小的计算公式为:正交大小 = ((垂直分辨率)/(PPU Scale PPU)) 0.5
处理缩放的三种技术
在处理缩放问题时,你可能会用到以下三种技术:
技术#1:厚的边界
对于一些细微的差别,“厚边界”是一种有效的解决方法。这取决于你的游戏设计,当屏幕尺寸比参考尺寸更大或更小时,通过增加地板或屋顶的厚度,就可以轻松解决问题。
然而,当屏幕尺寸增加超过一定限度时,厚边界的方法就不太适用了。
技术#2:增加资源分辨率
如果你最初参考的屏幕高度为768,PPU为32,那么在1080的屏幕上,由于资源比例不佳,可能会遇到麻烦。上述表格展示了游戏从768到1536的缩放比例在1080屏幕上的三种处理方案。更值得关注的是正交大小,理想情况下,随着屏幕尺寸的增加,正交大小保持不变,这样可以确保你的资源在屏幕空间中的大小与参考像素保持一致。
在上述表格中,使用另一个PPU为48的精灵图片创建的可见世界空间参考尺寸比原来小了不到6.25%,这种情况可以通过厚边界的方法轻松处理。
交换精灵图片的资源可以在运行时使用AssetBundle轻松完成,你可以参考事例工程。
技术#3:平分正交大小
如果屏幕变得足够大,我们可以用图片精灵显示的二倍乘以一个比例因子来计算正交大小。例如,对于1440的屏幕,我们可以继续使用PPU为32的精灵图片,计算正交大小为(1440 / (2 32)) 0.5 = 11.25。
这意味着每个世界空间单位将包含64个屏幕像素,实际上是告诉引擎将32像素的精灵图片渲染为64个像素。将比例因子设置为2可以较好地显示精灵图片,这种方法的参考设置偏差小于6.25%。
该技术无需创建新的资源。PPU为32的精灵现在显示为原来的两倍,看上去仍然比较清晰,但此方法仅适用于整倍数放大。
其他调整
以下这些设置对于让画面尽可能清晰非常重要:
精灵设置
- 确保你的精灵图片使用无损压缩(lossless compression),例如True Color。
- 关闭过滤功能(mipmapping)。
- 使用点取样。
渲染质量设置
- 关闭各向异性过滤。
- 关闭抗锯齿。
- (可选)通过使用默认的shader创建一个自定义的材质来显示我们的精灵图片,并附加到SpriteRenderer上。
实现细节
实现上述系统需要分为两个部分:
计算相机正交大小
创建一个简单的组件,根据屏幕的高度来计算相机的正交大小。
- 允许重写某些分辨率,以便用户可以决定该分辨率的PPU设置。
- 这个计算应该在场景开始时进行。
加载正确的资源包
根据屏幕的高度加载正确的资源包,加载默认的包或者基础的覆盖设置。
已知的问题
即使进行了上述所有调整,仍然可能会出现一些问题:
- 物理和动画系统在移动或旋转对象位置时可能不理想。
- 单像素宽度的资源在任意旋转时可能无法正确呈现,解决办法是避免使用单像素资源,或者始终确保它们轴对齐。
结论
在Unity的当前版本中,制作一个完美像素的2D游戏是可行的。尽管存在一些已知问题,但这些问题并非不可克服。让我们为复古风格的游戏欢呼吧!