有很多算法可以放大像素画。(我喜欢HQX,个人)。但是否有任何显着的算法,它的规模下来?我的游戏的设计分辨率为1280x720
,但如果以较低的分辨率播放,我仍然希望它看起来不错。
大多数像素艺术讨论都围绕320x200
或640x480
升级到控制台模拟器中使用,但我想知道像Monkey Island Remake这样的现代2D游戏在较低分辨率下会看起来不错吗?
当然,可以忽略拥有多种资产版本的选择(即mipmapping)。
有很多算法可以放大像素画。(我喜欢HQX,个人)。但是否有任何显着的算法,它的规模下来?我的游戏的设计分辨率为1280x720
,但如果以较低的分辨率播放,我仍然希望它看起来不错。
大多数像素艺术讨论都围绕320x200
或640x480
升级到控制台模拟器中使用,但我想知道像Monkey Island Remake这样的现代2D游戏在较低分辨率下会看起来不错吗?
当然,可以忽略拥有多种资产版本的选择(即mipmapping)。
Answers:
我目前正在制作一款必须在各种显示尺寸和纵横比下运行的游戏,但这并不是一个容易的过程。另外,如果您要在像素画中制作东西,并且想要在支持多种分辨率的同时保持像素画的感觉,那么您将步入痛苦的世界,因此请做好准备。
我认为您可以做几件事情(有些是排他性的,有些不是)
定义最小分辨率,并且仅以整数形式与最近邻居进行升级(所有操作)。这样,您可以保持像素艺术感。我认为缩小比例不是一个好主意,因为您会丢失细节,而使用精心制作的像素画的全部目的也会被击败。如果您的最小支持分辨率对于Sprite来说太小,请更改您的最小支持分辨率,或者重新绘制所有资产以支持该最小分辨率。
当遇到分辨率或纵横比不足以覆盖整个屏幕时,请扩展游戏(显示更多图块),同时保持资产完整。您应该制作游戏,以便仍可以以最小的分辨率/纵横比进行游戏。
如果无法扩展游戏,请在屏幕的非游戏部分中填充黑色;否则,请关闭屏幕。顶部和底部,左侧和右侧的条纹或黑框。这就是iPad在放大模式下运行iPhone应用程序时所做的事情。这也广泛用于仿真器中。
放弃坚持像素网格的真实性。但是您必须停止使用具有尖角的像素附庸风雅资产。然后使用双线性(如果您的平台支持,最好是双三次)过滤来放大/缩小。这是最大化屏幕使用率的最佳选择,同时在所有支持的分辨率下保持用户体验相似。
对于我的游戏,我最终选择了第4个选项,令我感到惊讶的是,它在垂直方向上的320像素(旧的Android 2.3)到垂直方向上的1536像素(2012年的iPad) Retina显示屏)。原始资源用于垂直方向上的600像素(最初用于Windows PC上的800x600显示屏)。尽管对于后续游戏,我认为更好的逻辑垂直分辨率为720像素。
游戏使用虚拟的600像素高虚拟分辨率,并通过双线性过滤将其缩放到设备的原始分辨率。这意味着所有代码内的Y坐标都从0(屏幕顶部)到600(屏幕底部)。
对于水平尺寸,我假设最大宽度为1080像素,甚至足以覆盖最宽的16:9宽高比。我的x坐标居中,因此x = 0是屏幕的中心,并且x坐标从左侧的-540变为右侧的540。我确保所有内容都在-400到400之间以支持最窄的显示(4:3)
但是,如果我必须保持像素艺术感,那么我肯定会使用选项1和2。这意味着我只会按整数比例缩放以保持像素艺术的块状感,并设计游戏以使可见的数量瓷砖不是固定的,可以适应任何屏幕分辨率/纵横比。
因此,为了(不)回答您的问题。我认为缩小像素画法是一个非常糟糕的主意,因此您不应该这样做。还有其他支持不同屏幕分辨率的方法,这些方法将比单纯屠宰您精心制作的艺术品提供更好的结果。
考虑在开发时实际生成按比例缩小的版本,并将其作为资源直接包含在游戏中。使用Photoshop或使用您发现的任何工具创建自己喜欢的东西。然后让游戏动态选择适合当前分辨率的合适的美术设置。
您可能会这样做的原因有两个...
节省处理工作
如果您在运行时以编程方式进行了缩放,则您的软件可能仍会创建和缓存图稿。那么,为什么不将缩小版本包含在艺术品资产包中呢?我想如果它使下载量大于您的期望,那么您将节省一些CPU负载,磁盘写入等。
更好的艺术控制
如果您自己调整艺术品的尺寸,则可以更好地控制最终外观。如果您缩小比例,那可能不会有什么不同,但是当您获得较低的分辨率时,您可能希望对最终外观具有更好的艺术控制。例如,如果需要强调特定角色的眼睛,则实际上可能会绘制较低分辨率的版本,而眼睛的缩放比例并没有那么大以保持效果-这是程序化缩放无法做到的。
动态缩放并不完美
您可能会做出与动态缩放不兼容的独特艺术决定。例如,假设您要在图像周围放置边框,轮廓或突出显示。以更高的分辨率查看时,这看起来不错,但是按比例缩小的版本可能会造成混乱或完全失去效果。但是,如果手工完成,您可以将效果专门应用于每种尺寸,并保证保留效果。
其他想法
您还可以采用一种混合方法,即在找到位置使用一组特定于分辨率的资源,并在未找到特定于分辨率的版本时动态调整通用集。这有点像Android平台的工作方式。有关此信息,请访问http://developer.android.com/guide/practices/screens_support.html
缩小尺寸比放大尺寸更容易,因为您要选择丢弃的信息,而不必发明新的(可能是不正确的)信息来填补空白。考虑到这一点,您在这里可能不需要任何特殊的东西,并且图像处理领域中的大多数标准重采样算法对于缩小图像都应该可以很好地工作:双线性,高斯,兰科斯等。
特别是Lanczos可能是一个有趣的选择,因为它可以锐化图像,可以保留细节,否则在将多个像素组合为一个像素时会丢失这些细节。显然,这是以可能引入不需要的人工制品为代价的。
一些视觉比较:https://gis.stackexchange.com/questions/10931/what-is-lanczos-resampling-useful-for-in-a-spatial-context