Skip to content
Damnae edited this page Mar 18, 2024 · 8 revisions

Warnings appear when storybrew detects a potential performance problem, or a mistake that could break your storyboard. These warnings don't necessarily mean there is a problem, but are there to notify you of things you may want to be aware of.

The numbers used below are the thresholds at which these warnings start appearing.

Performance

1500 Sprites

A lot of sprites are being rendered. Usually not a problem until it gets very high; as each sprite would have some commands and they are a much larger source of performance issues.

500 Batches

How many times a different texture is used to draw a batch of sprites. When you have a lot of sprites with different textures, try to order them so that sprites with the same texture are drawn together in row.

15000 Commands

A lot of commands are being processed. Commands are the most expensive part of a storyboard and the best way to improve performance is usually to reduce how many commands are processed every frame.

Sprites are active from the time of the start of their first command to the time of the end of their last command. While a sprite is active, ALL of its commands are processed. A way to reduce this number is to split sprites with many commands into multiple sprites with less commands.

5000 (50%) Commands on Hidden Sprites

A lot of commands are being processed, but these commands are on sprites that aren't visible.

Sprites are active from the time of the start of their first command to the time of the end of their last command. While a sprite is active, ALL of its commands are processed. This is true even for sprites that aren't visible. A way to reduce this number is to stop using the sprite while it isn't visible, and then create a new sprite when it becomes visible again.

5x Screen Fill

How many times the screen has been filled with pixels. This is what osu! calls "sb load", but this is measured much more accurately.

A way to reduce this is to remove unnecessary transparency from sprites, and make sure to fade out sprites that are masked by other sprites on top of them.

32MB Texture Mem. (Frame)

All the texture memory necessary to draw the current frame. Integrated GPUs need to read textures from RAM to draw a frame, which is slower than the VRAM a discrete GPU would have.

256MB Texture Mem. (Total)

All the texture memory necessary to draw the whole storyboard. osu! loads all the textures for the whole storyboard, and if a discrete GPU doesn't have enough memory available for it, they will be stored in RAM, and need to be swapped to VRAM when drawn, which is slow.

Note that due to how Storybrew lazy-loads textures, you have to let it play through the whole song to get an accurate measure. You can use 800% speed by right clicking the audio speed button.

Mistakes

Overlapped Commands

A command of a certain type starts before the previous command has ended.

For example:

S,0,1000,3000,0,1.0
S,0,2000,4000,1.0,0

The size of the sprites between 2000ms and 3000ms is undefined because both commands are active during this period.

Incompatible Commands

A sprite contains commands that may not be used together. The sprite may not behave in the same way in osu!, and sometimes may not behave the same way depending on framerate.

Commands that can't be used on the same sprite:

  • Move with MoveX or MoveY.
  • Scale with ScaleVec.