Is Unity too powerful, can we put limits on Unity?

Unity now has a multi-threaded rendering and task system that takes advantage of multiple core CPU’s and modern GPU’s.

Which is amazing and great as long as we are building on and for that level of hardware.

What if our target clients don’t have this level of hardware. We are going to be making games and apps that they just cannot run.

So can we put limits on Unity?

Is there a way that Unity could mimic/emulate/limit it’s power so that we can see what our games look like on a DX10 1GB VRAM GPU with a 1 or 2 core Celeron level CPU and 3GB RAM?

OK Imagine if Unity had performance profiles you could select so that in the IDE or even when you build and run Unity will emulate the performance characteristics of that profile.

This way we would not need to buy and maintain second hand hardware to test our games on.

If you check out the Steam Hardware Stats:

  • About 50% of users have a 1-2 core CPU
  • About 25% of users have a DX11 or lower GPU
  • About 25% of users have 4GB or lower RAM
  • About 40% of users have 1GB or less of VRAM
1 Like

Emulating other hardware via software never works reliably. It might be okay to give you a rough idea. But it’s never going to replace on device testing.

Serious?

3 Likes

Use case:

  • You build a game using Unity and test it on new hardware.
  • You put the game out only for people with lower level hardware to review it with a very poor rating.
  • Your game tanks based on early reviews from low end hardware users.

Lets face it Unity and game development encourages people to have high end hardware, if only to bake the lighting in a reasonable time frame.

Why is unity the most popular mobile engine on the planet? all those people must be horribly wrong!

You must be kidding. You have to test your game on minimum specs, it’s part of the development process. You’re making a product, and if your customers can’t use it, it’s nobody’s fault but your own. If you as a developer can’t take responsibility for that, frankly you shouldn’t be selling stuff to people.
Blaming Unity for ‘encouraging’ you to use a high-end computer because it enables you to build your game faster, thereby making you unable to be bothered to test on target hardware, is one of the most incredible things I’ve ever heard.

3 Likes

That’s not how it works. If you have a brain and use it while developing the next arcanoid clone it will not have horrible performance on lower grade platforms to the point where it gets horrible reviews. The worst you could get is higher battery usage if you forgot to limit framerate, and that’s it.

Your fears are completely unfounded. If anything, unity is not powerful enough.

And, yeah, as @Billy4184 said multithreaded rendering or not, testing on lower-grade devices is your job, and if you forgot to do it, it is your fault.

4 Likes

We already tried something like this with graphics emulation. I think what we’ve seen is that while it’s fine for emulating functional limitations (i.e. seeing what it is like to run on hardware that does not support a feature at all), it’s no good for emulating performance - we can slow down the engine, yes, but we can’t do it in a way that lets you make meaningful conclusions about different hardware (i.e. no “this is like being on a Core i3 at 2GHz”, just “this is slower than my regular 3GHz i7”).

I’d definitely like to see us take the emulation of functional limitations further someday, though - e.g. being given a warning in the Editor if you’re creating/using threads but intend to target WebGL.

7 Likes

An emulator would definitely be nice.

@Arowx don’t get me wrong, performance testing tools are great, but it’s still the developer’s responsibility and not Unity’s. If you can’t scrape together a couple of hundred bucks for a low-end tower to test with, you’re just going to have to live with the possibility that people won’t be able to play the game. But it’s still a horrible idea, and if you want to go into business, it’s just kind of expected that you have some way of knowing whether what you make is functional or not for its purpose.

There were some hints at Unite that the new performance testing farm might be opened up for us in the future. Performance testing might be a service one day.

@Kiwasi that would be a great idea. I hope I’m being clear, I’m not saying Unity shouldn’t provide tools, but at the end of the day the responsibility lies with the developer to make sure the game runs to spec.

2 Likes

You could add a thread limit, or loop governor similar to the physics loop timestep.

I like to run my game in the editor with deep profiling running just to see how it might perform on a slower system.

Sure, we could, but it won’t actually tell you as much as you think it might. We could make Unity run on only two threads, for example, but it won’t actually give you the same performance as running on a dual-core machine, because on a dual-core machine the whole system is running differently.

Our experience internally - and bear in mind, the issue of ‘how does a Unity project run differently on different hardware’ is one that we deal with every day internally - is that doing things like thread limits can be helpful for finding bugs, but they’re not helpful for performance testing.

4 Likes

Really as everyone has said, get some lower end hardware (or find someone that has it) and test it on the real machines

If you really can’t do that and have no solution, you still have other options
you can disable cores (and underclock if you have an underclockable CPU) to simulate weaker CPUs, again, it wont be the same but its better than nothing. it would show you if it needs two cores or more (granted if you had a good CPU, those two cores will be better than the average dual core)

Unity has a large amount of experience in running test beds on wide ranges of hardware so perhaps putting a feature in the cloud where you can use cloud build to test your game running and it tests it on those and gives you some ms scores back per machine plus crash test, would be quite a good paid feature. Obviously you would specify a specific scene for it to run the test on for 30 seconds or so.

It doesn’t seem outlandish that cloud testing is a companion to cloud build. It’s ideally done with cloud build because no unknown executables and so on.

3 Likes

Actually, that would be a service worth paying for… Good suggestion.

In addition, you would sign the right for Unity to use this data itself to improve stability and performance, or whatever really.

Ideally you should have hardware that you plan to be the minimal target on which to test it to see how it behaves, rather than guessing.

3 Likes

Which is reasonable on low model count platforms, e.g. consoles, Mac, iOS devices. What about the myriad of devices for Android or PC hardware where you have a huge range of OS’s, CPU, GPU, RAM and HD configurations.

The minimum PC spec for playing Unity games is a DX9 GPU with SM3 and a CPU with SSE2.

So all Unity PC developers should have a test PC similar to this:

  • GPU Radeon X1300 - 450 Mhz - 128 Mb - DX9.0c

  • CPU AMD Athlon 64 1.8 Ghz 2800 Mhz

  • DDR400/DDR333/DDR260 512Mb RAM

  • HD

  • Windows XP SP2+

Or Intel / Nvidia equivalent.

For low end platform testing.

There’s no rule that your game has to run on the minimum specs required to run Unity.

I would simply grab one test rig, something like an average gaming PC from about 4 or 5 years ago, and make sure the game runs at 25-30 fps on it. That’ll take care of most of your problems and your reviews shouldn’t suffer considerably from any performance issues.

I develop mostly on a laptop with an i7 and a 540m, this is seems like a reasonable test rig for any pc games I make, unless I’m going for some big open world mmo thing.

4 Likes