A really hot VFX

I don’t know if it’s me, but it seems like I’m often around when there’s a problem on Xbox.

We had just shipped Journey to the Savage Planet. Everything was relatively smooth - we noticed a few CPU limitations on beefy PC and decided to enable a D3D12 path, we fixed a few bugs, etc. Nothing too crazy. But then, we received a report from a user, saying their Xbox One X was rebooting and complaining about overheating. Hmm okay, maybe this user is in a warm country? Or has their Xbox wrapped in a towel?

A few days later, we received other reports of the same issue, from other users. How many Xbox One X owner wrap their consoles in a towel? Is this common practice?

As we looked through the details, most of them were having this issue in two areas in the game. We had QA try to reproduce the issue. No one could cause the overheating, but they did find something interesting - whenever they shot one of those zombie pufferbirds in those two areas, the framerate would tank. A lot.

Don’t shoot or I’ll melt your GPU

Don’t shoot or I’ll melt your GPU

Interesting. We do have a specific VFX for those pufferbirds. I looked at it with Jessie, our VFX magician, to see what could cause this. It wasn’t a cheap effect - a lot of 3D texture sampling - but nothing worth overheating an Xbox One X… I think? What can overheat an Xbox anyway?

And so I took a quick profile with Pix, just to see if I could find something more. And indeed, that effect was expensive. Especially when it happened close to the camera, because of all those samples it did. And in those two areas, the zombie pufferbirds were pretty close to you, and so the effect was often almost fullscreen. Could too much sampling overheat the XBX? How many samples are we doing anyway? I checked the Dr. Pix tab :

1 500 000 000.

Yes.

1.5 Billion samples.

That’s quite a lot of sample per pixel, I thought. What I found rather strange, is that this wasn’t happening on the base Xbox One, nor the S. The X is more powerful obviously, so maybe that was the cause of the overheat? Too much power?

Taking a Pix capture on the base model reveiled something different. We were still doing a lot of samples, but absolutely not near 1.5B. Actually, almost exactly four time less.

Wait. Are we…

I came back to the XBX capture, and… yep! The whole frame was rendered in full 4K! That was a big suprise, because I thought I had it setup for 1080p upscaled. Clearly, I did not. But somehow, it was running OK? It seems like the XBX was powerful enough to run our game, optimized for 30fps/1080p on the base Xbox, at pretty close to 30fps/4k. Impressive! The GPU was pretty damn busy however.

Still, we couldn’t reproduce the overheating issue in normal conditions. So, in addition to this taxing usage of the GPU, the console would also need to be in a badly ventilated area. I wish I could say we wrapped a devkit in a towel just to be thorough but it wasn’t necessary at this point.

The solution was two fold - some optimization on the VFX itself by Jessie (removing a few samples, using per-vertex lighting and scaling down the effect when close to the camera), and setting up the XBX to render at 1080p upscaled to 4k like I intended. I did a bunch of tests to validate this wasn’t too jarring, and because of our game’s visual style and the high quality of Unreal’s temporal upscaler, the full 4k and upscaled-4k version were almost identical, at least from a normal TV viewing distance. Plus, with all that new GPU power available, I could increased the quality of a few things, like shadows, which is much more visible than the resolution.

Oh and I also enabled 4K output on PS4 Pro… because apparently Unreal as an opt-in switch for that?