Forums » Themes » Any SM5 Themes For Low Spec/Resolutions?

I run SM5 (5.0.7 RC currently) on an old computer with Linux and a Radeon 200M on a pretty old CRT monitor. My framerate is basically only good at 640x480 or 800x600.

The default SM5 theme and Ultralight work well. Other themes seem to work fine for the most part, but have some minor quirks:

Consensual
- Works, but is relatively laggy, even in-game (gameplay is below 60 FPS; other themes seem fine though)

Simply Love
- Some text is off or is really tiny (numbers on difficulty selection, the Loading bar when switching from mode to song list, probably etc)

Obelisk
- Difficulty selection is overlapped by song list

Last edited: 15 March 2015 6:21am

Reply
Consensual
- Works, but is relatively laggy, even in-game (gameplay is below 60 FPS; other themes seem fine though)

Go into the Theme Conf section and turn the confetti count down to 0, see how that affects your frame rate. The confetti particles are invisible until triggered, but they still take a bit of time because of the way the rendering engine works.
If turning off the confetti isn't enough, I'll make an optimization path through the stuff that occurs during gameplay, see what can be turned off or done more efficiently.

Simply Love
- Some text is off or is really tiny (numbers on difficulty selection, the Loading bar when switching from mode to song list, probably etc)

The RC has a bug that breaks font loading in some cases.

Last edited: 15 March 2015 7:19am

< cybik> til Kyzentun fixes bugs for breakfast
--
< maxvg1> shakesoda: then why do i still play lol
<@shakesoda> because you're an ITG player. And thus, a masochist
--
<@shakesoda> Kyzentun: I think you might need to put down the meshes for a bit
Reply
Turning Confetti down to 0 I think helped a tiny bit, but in-game FPS is still a bit lower than the Default theme and Ultralight.
Reply

The confetti particles are invisible until triggered, but they still take a bit of time because of the way the rendering engine works.
You might consider using "hibernate(0/math.huge)" instead of "visible(true/false)", as hibernate aborts Update as well as Draw.
Reply
Simply Love
- Some text is off or is really tiny (numbers on difficulty selection, the Loading bar when switching from mode to song list, probably etc)

I should note that 5.0.7rc broke fonts in Simply Love, resulting in any fonts that should have been _wendy being rendered instead as (extremely tiny) _miso. This issue was recently fixed.

Last edited: 16 March 2015 2:18pm

Reply
Well, I spent some time finding things in Consensual to optionally disable and making a flag for it, but the improvement I got from that is tiny compared to the impact from other things.

Here's a list arranged roughly in order of effect size, with the biggest effect at the top. I skipped over resolution because it's already a well-known thing to try.

BG Brightness
This is probably the biggest frame rate hit. With bg brightness 0%, the bg actor pretty much doesn't exist, giving a huge frame rate boost. With bg brightness 100%, the bg is there, but not dimmed. Any percentage between 0% and 100% is worse than 100% brightness because the background is dimmed by drawing a black transparent quad over it.

Fast Note Rendering
By default, Stepmania clears the z buffer after drawing every note, so that later notes show up on top of earlier notes, instead of sticking into them. If you turn on Fast Note Rendering, the z buffer is not cleared, saving a lot of time during rendering, but 3D notes will stick into each other if they're close enough.

Holds
Not really something users can do anything about (unless you're okay with playing with holds off), but hold rendering is complicated, so the frame rate is somewhat lower whenever there are holds on screen.

Speed mod
Unsurprisingly, the number of notes on the screen has a pretty big impact. Dense streams mean a lower frame rate. 5.0.5 and later have better note rendering code that makes this less of a problem, but using a higher speed mod can still give you a higher frame rate.

Hide Judgment
This made a pretty tiny difference, but it was measurable. Using Dark to hide the targets did not make any difference though.



Now for things that other themers can do:

Reduce number of actors
Every actor that exists means more time to render. If you want to hide actors that are created by the engine, use hibernate as suggested by Mad Matt above.
Part of this means cutting the number of pills used by the StreamDisplay in the normal lifebar, since every pill is a separate actor. Hiding the standard life bar entirely is even more effective, just create a simple quad that picks up LifeChangedMessageCommand and use that instead.

It's kinda bad that hiding a few actors has a bigger effect than disabling a bunch of lua code, but that's the way it is, so I'm not going to bother suggesting ways of optimizing lua code to be more efficient. Most themers probably aren't even using complicated lua code anyway.
< cybik> til Kyzentun fixes bugs for breakfast
--
< maxvg1> shakesoda: then why do i still play lol
<@shakesoda> because you're an ITG player. And thus, a masochist
--
<@shakesoda> Kyzentun: I think you might need to put down the meshes for a bit
Reply
Mine was intended to be simple/to the point. (I was/still am experimenting with stuff though.) The thing is, it's meant for a high resolution. If that is a problem, you may want to pass on mine. If not, you can give it a try... (Graphics are terrible though.)

https://github.com/SpoOkyMagician/spooky_default

~ SpoOKyMagician
"You don't have to understand me; I'm just there!" ~ SpoOkyMagician
Reply
It's kinda bad that hiding a few actors has a bigger effect than disabling a bunch of lua code, but that's the way it is, so I'm not going to bother suggesting ways of optimizing lua code to be more efficient. Most themers probably aren't even using complicated lua code anyway.
I thought I'd chime in on this point since I've had issues with 'too much stuff causing lag' before ( at Bearpocalypse 4 ) and I've devoted a lot of time to bypassing these problems. I suspect much of this is not very applicable to most themers, but here it is anyway

The biggest sources of lag are things that occur every time Stepmania updates or draws. Anything that happens one time and one time only isn't really a problem which is why most highly inefficient lua code in Stepmania themes isn't a problem; it is only processed when the screen loads. The place where lua code efficiency becomes an issue is if you use UpdateFunctions or DrawFunctions, which run every cycle. Even very simple update or draw functions can impact frame rates. They are very powerful tools but, particularly on ScreenGameplay, they should be avoided if at all possible in favor of message triggered commands. Rapidly self-looping queuecommands are just as bad, as they are basically the same thing, repeatedly running lua code.

Aside from rapidly self-looping queuecommands, giving an actor the most complicated set of tweens you can imagine has the same impact on efficiency( very very little ) as telling an actor to sleep because Stepmania checks every part of an Actor's tween state regardless of what is actually changing.

After that, the next best way to improve efficiency is, as Kyzentun mentioned, to hibernate everything that is not being used. A hibernating ActorFrame does not update or draw it's children so if all children of an ActorFrame are not being used, hibernating the ActorFrame instead of the individual children is the simplest and most efficient way to handle it.

One trick you can play if you have a large number of actors that need to draw but are static and never tween, is to draw them all to an ActorFrameTexture one time and then hibernate them all and draw a single sprite with the AFT's texture instead. Drawing a single, screen-sized texture is going to be more efficient than drawing many smaller textures because switching from one texture to the next is one of the slowest parts of drawing.

If you're still having problems after that, the next thing to do is to use smaller textures.

If you're still having problems after that, you're probably ignoring something above.
Reply