Why is running with Oculus so much slower on GPU than running with -emulatestereo?

I’m running the same game on a machine with Oculus. Once with -emulatestereo on the command line and once without. All the full screen passes like StandardDeferredLighting or TemporalAA that are pixel bound are about 3 times slower on HMD than -emulatestereo.

Do you really need to render that much more pixels for Oculus?

If that is so (doubtful), could you please make -emulatestereo emulate it correctly?

I’ll attach two captures of roughly the same view. profilegpu 0.txt is with -emulatestereo and is faster. profilegpu 1.txt is without -emulatestereo, running on real hmd, and is slower. Captures were taken on a geforce 560.

NOTE: I’m aware of an LOD bug in HMD (separate post) which wasn’t quite equalized for these captures, but the vertex counts are close. It’s still clear that the passes with the biggest differences are pixel bound.

Thanks!

Steve

To answer my own question: because supersampling is cranked up by default on HMD. If you run the command “hmd sp 100”, that will set supersampling to 100%, and the performance will roughly match -emulatestereo. See Getting Good FPS and Quality in UE4 Demos on Oculus Rift DK1 - YouTube for more on this.

To set it from c++, do this at initialization time:

GEngine->DeferredCommands.Add(TEXT(“hmd sp 100”));

This will make everything look pretty blurry and flickery, though, so you generally need some amount of supersampling.

My request still stands, that -emulatestereo should act exactly like oculus (maybe morpheus in the future, with a switch), ie: just fool the engine into thinking an hmd was detected, so that performance can be accurately measured and optimized without an HMD.

Also, the supersampling and warp settings should be mentioned on the oculus wiki page.

on my PC (i7, GTX970), “-emulatestereo” can run at 110 FPS, but “hmd sp 100” only runs at 60 FPS, why?