wiki

故事板负载

故事板负载(SB load)是制作故事板时会见到的一个参数,它指示加载故事板时,图形程序的负荷大小。这个参数用来估量一帧内,需要重新绘制整个 640x480 像素的区域数量。

不使用故事板时,负荷为 1x (640x480 的空间只需要绘制一次)。如果故事板中有单个占用半屏的图像,负荷就是 1.5x;两个完全重合、占用半屏的图像负荷是 2x。

谱面的 SB 负载最好不要超过 5x,这样可以确保大多数玩家在游玩谱面时,显卡压力不会过大。

论坛原帖

显示位置

降低负载的建议

节选自 Reducing SB Load

下面是一些重要的,关于减少故事板为玩家电脑带来负担的建议。表面上,这一部分看似有些冗长、太具体,实际上,这一部分的要点并不复杂。要点将会加粗标出。

禁用背景图片

默认情况下,谱面的背景图片会在整首歌播放期间正常显示,即使谱面含有故事板,也会如此。如果你要做非常简单的故事板,或者谱面的背景图片也作为故事板中的一部分元素显示时,这个特性就很合适。

然而,如果在编写故事板时需要用到别的背景图片,这就成了个问题。看看,尽管谱面背景图片的前面有别的东西,osu! 也会一直绘制它。故事板的图层越多,osu! 要处理的就越多,因此无视这个图层的存在,就是在浪费系统资源。

所以应该怎么办呢?

osu! 有一个消除冗余的功能:当你在故事板中使用这张谱面的背景图片时,游玩时就会自动卸载谱面背景。因此,如果故事板中只有一个“场景”使用了谱面的背景图片,或者谱面背景图片是故事板元素的一部分,只需要像调用其他图像一样,调用这张背景图片即可,其他一切会正常显示。

但如果,你想要在谱面内使用不同的故事板元素,并且只想将一张图片作为选歌界面的背景,以及谱面在网页上的预览图,你就需要将这张照片正常设置为谱面背景,然后在 .osb 文件(如果难度之间的故事板不同,则需要在 .osu 文件下修改)的 “//Storyboard Layer 0 (Background)” 标题下加一行故事板代码。这行代码仅仅调用背景图像,不会做别的事情。

只要将下面一行中 "background.jpg" 用这个谱面背景图片文件名替代即可:

Sprite,Background,TopLeft,"background.jpg",0,0

这就成了!你的背景图片会被纯黑色替代,游戏绘制时几乎不需要处理。相比于直接在背景图片上添加一张全屏的黑色 png 相比,性能有了大幅度的改善!

避免使用含有大量透明像素的图片

osu! 会完全绘制故事板内所有图像中的每一个像素,透明像素也不例外。因此,含有大量透明像素的图片会给电脑带来很多不必要的压力。这个问题很容易解决,一般可以这么做:

  • **尽可能将图片裁剪得小。**实际上,Photoshop 有一个可以帮你裁剪的工具。只要点击图像 -> 裁剪,程序就会给出几个选项,用于裁去图像边角的空白区域。
  • **利用故事板提供的不同“原点”设置。**假设你有一个头部上下摆动的人物。在大多数帧中,精灵图顶部会有大量透明像素,因为你想要所有帧看起来连贯,对吧?但如果你将原点设为底部中央,不管精灵图高度多少,它总会沿底部对齐。这样你就能减去精灵图顶部的透明像素了。
  • **多张小尺寸图片可能比一张大尺寸图片好。**这一点大多与具体情况有关。现在假设你有一张大尺寸的精灵图,上面只有五颗小星星。即使剪裁这张图片周围的透明像素后,中间还会留下一些可以优化掉的透明像素。看起来,把这样的精灵图分成很多张小精灵图效率很低,但由于 osu! 的渲染负荷主要取决于像素数而非文件数,实际上这能将情况改善很多。
    • 类似地,如果你有一张全屏的“框架”图像,透过其中的大窗户或屏幕可以看到故事板的其余部分,就可以考虑将其裁成 4 个图像,左右上下四边各一个。由于现在,游戏只会绘制图像内实际有效的元素边框,而不会绘制几乎占满全屏的空像素,空白区域实际上什么都没有。如果可以的话,图像边角最好留一点重叠,这样可以避免在某些分辨率下游玩谱面时,图片间出现间隙,但注意要让重叠部分尽量小。

别忘了可以用故事板脚本给图片着色

这种效果在故事板中用的并不是很多,因此提到这一点:看看用脚本编写故事板一文的 "colour" 事件代码。你可以在故事板中,通过在灰阶或亮色精灵图上叠加不同颜色,来做出很酷的效果。如果你想要让背景单独逐渐显示时,就可以通过这种方式改变天空和其他素材的颜色。这一点也可以考虑一下。

希望这些小提示能对一些人有用。很多人不了解禁用背景这一功能,因此请把这个小技巧告诉别人,尤其是看到他人用纯黑色图片掩盖住谱面背景图片时,更应如此。

附加的小提示

  • 确保图片在应该完全不可见时,没有接近不可见的图层。
  • 如果图片含有大量透明像素,可以将其分割为多个图像,然后在故事板引擎内拼接起来。
  • 如果场景很复杂(有大量的重复元素),可以试试在 GIMP/Photoshop 中把它截取成单张小图片,然后重复显示这张图片(注意,如果过度使用,会导致故事板文件变得很大)。