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.
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:
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.