4.6.1 to 4.7 = 12+ fps drop on Android

Our game launches on iOS and Android in a few months. While 4.7 is not necessary, we are planning on adding lots of content updates for quite some time after release. We are head over heels in love with this engine, and really want to be able to stay with current versions for the sake of adding awesome new features later. As of now, we are stuck on 4.6.1 until this is fixed or we are told how to adjust whatever settings need to be adjusted. Our game runs great on 4.6.1, so please avoid feedback such as directly adjusting the game’s visual content.

I’m guessing there are some settings in 4.7 that need to be adjusted that got changed/are different than 4.6.1, so here’s some of the visual features we utilize, which are all pretty simple:

Uses bloom lighting from some emissive materials

Uses a single dynamic light in each level to cast dynamic shadows from only the characters

Has complex (74 bone, right under the mobile limit) skeletal meshes walkin around

Materials are all very simple and utilize efficient texture sizes. Everything has a .1 emissive based on the color map to give the game a more bright and saturated look. Otherwise, there are normal and opacity maps on the characters and nothing else

There’s also several static lights, only affecting a few meshes with light, as the static lights themselves do not cast/bake shadows. The ONLY meshes that ever cast shadows are the characters, for the sake of having a few dynamic shadows to add to the look. It hasn’t been a problem

There’s a good amount of drawcalls, in the range of 70-150 depending on your view, but it hasn’t harmed things. There are some combined meshes that utilize a single material to reduce the drawcalls. None of them have an insane amount of polys, as I discovered that there is a fine balance of drawcalls and polys that goes on with mobile hardware; sometimes reducing drawcalls leads to single meshes having too many vertices for the mobile hardware to handle

With 4.6.1, the game would run a solid ~20fps with several skeletal meshes on screen and 100+ environmental drawcalls. It easily goes to 30+ fps on good devices when the view doesn’t contain skeletal meshes. 20+ on lesser devices. Lesser devices would see 15fps with the skeletal meshes on screen, which still played just fine considering their older hardware.

4.7… you’re looking at 8-10, or LESS, with skeletal meshes on screen, and max ~18 with them out of view.

Any help is hugely appreciated. I will do some more testing with the settings and post anything that helps. If all does not go well, however, we are stuck with 4.6.1 :frowning: (4.7 looks so awesome!!!)

Bump

Bumpity boppity boo

bump

Howdy Devious,

Thank you for reporting this issues that you have been having with the 4.7 build of UE4. I have attempted a quick repro of the fps issue and have not seen any change between the 4,6,1 and 4.7 versions of the engine when deploying a project with a significant amount of static meshes in the level. Would you be able to provide repro steps using a template project so that i may be able to recreate this issue internally?

As for the lighting issues listed, would you be able to provide screen shots or steps so that I may be able to see what you are currently seeing? I have placed some of the static meshes off of the ground and their shadows were appearing on the mobile device i was using to test.

What mobile device would you be using when you are testing this issue and what OS would that device be on?

Any additional information would be greatly appreciated.

Thanks and have a great day!

I should mention first that the lighting thing wasn’t an issue; I was stating that I have chosen to only use shadows for the character meshes.

Here’s what I can think of that you could use to repro our game’s processing setup:

  • About 100 draw calls at any time. Textures for most of them are very tiny, at 64x64. Larger ones are around 256x256~512x512. Characters use a single texture atlas at 1024x1024, with normals and opacity.
  • Including the player, about 5 complex skeletal meshes at any time.
  • ALL materials have color map going in to base color, and also (color map)x(.1) going into emissive. It gives a some pep to the cartoon style.
  • There are 2 large meshes that are batched. One is around 30K polys and the other around 15K polys. There are dozens more that sit around 2K that are also batched. Characters are about 7K each.
  • One mesh has (color map)x(10) for emissive, since it’s the batched mesh that represents the ceiling lights.
  • Bloom is on.
  • Single dynamic light for casting dynamic shadows from characters.
  • Several static lights that have settings to not cast/bake shadows.
  • Shadows are turned off for everything except the characters.
  • HDR is on.
  • Devices tested on are typically: Galaxy Note 3, Nexus 7, iPhone 4S, iPhone 5S, iPhone 6, Galaxy S5, Galaxy S4.
  • Galaxy Note 3 is primary testing device where we’re aiming for min 20~30fps, with iPhone 4S being the furthest back phone that we want the game to work on, but are not too worried about fps on it. It’s an old phone, so if it’s getting ~10fps, we’re fine. Newer iPhones virtually never have performance issues. They consistently run 30+ fps.

Maybe this would be easier if you could test the actual project itself? I’m not sure how that would even work, but it’d probably be a lot easier.

I’m definitely encouraged by you saying you didn’t see an fps change. I’m really hoping I’m just missing some setting somewhere and can move into 4.7 asap.

Really appreciate your time.

It also might help you to know that:

  • I typically use UnrealFrontend for launching the game for testing. It’s mainly so I can control which levels load, starting level, etc.
  • I use ETC1 compression.
  • UnrealFrontend will NOT launch the game in 4.7
  • The only method I have available for quick testing is launching straight from the editor. This is where I am experiencing the dramatic fps loss. With 4.6.1, all of this works as expected and gives good performance.
  • Packaging the game and installing it on the device still results in the fps loss.

Hey Devious,

Thank you for all of the additional information. I think sharing the project may be the easiest way to recreate this issue internally. If you would like, you can send me the project privately via the forums. You would just need to upload a zip file to a sharing site. You can find my forum page to private message me here: https://forums.unrealengine.com/member.php?4890-Sean-Gribbin

Until then i am going to try and repro this issue with the steps that you have provided.

Thanks!

Howdy Devious,

Thank you for sending over your project. When deploying your project to a mobile device, I was able to see a significant drop off in the FPS of the project. I have entered JIRA report 11106 into out bug database so that this issue may be addressed in a future release. I will be sure to keep you updated with any information when I see the bug being worked on.

Thanks and have a great day!

It turns out 4.7.x’s dynamic lighting is not handled well on mobile. Before, I had a single mobile directional light, casting dynamic shadows off of the skeletal meshes in the level. By changing it to a stationary directional light, I was able to keep the same visual quality at the cost of the characters casting dynamic shadows. This is actually fine, since the level in question is a well-lit grocery store. For future levels, I will simply have to make sure that any scene using dynamic lighting has much less draw calls and polys, which is easy enough to work with.

So now we are working with 4.7.6, which is a big relief. It’s interesting I had to cut a feature, but it ended up being a negligible change, as my other team members actually didn’t even notice the change. Lol!