Lean Mean UE4 Mobile VR Settings

I spoke with Nick Whiting at Steam Dev Days about getting some settings for an Unreal Project that is the bare bones minimum to run with the best possible performance in Android VR. He mentioned I should put a post here on the Unreal Forums and that Sam Dieter had some settings he could share with us.

No physics, no post processing, no fancy lighting, no fancy particle effects, etc. All off if possible without modifying engine code.

We have followed best practices and set things up turning all additional effects off etc ( except hardware Mobile MSAA ), but as there are many different systems, we want to make sure we’ve caught everything.

Thanks!

Hey Elecorn,

I do have a few settings you can use to make your project run as fast as possible on Android. Please keep in mind that these settings will take you to a lot of different areas of the engine, but I will try and group as many of them together as I can.
**
Existing Doc’s**
Make sure you check out the following doc’s as they have a lot of great information related to performance on mobile devices.

https://docs.unrealengine.com/latest/INT/Platforms/Mobile/Performance/TipsAndTricks/index.html

New Project Settings
When you create a new project make sure to use the Mobile and Scaleable 2D / 3D settings to make sure that all advanced graphics options have been disabled.
**
Disable Post Process Settings**
To make sure that no Post Processes options are accidently enabled you should add a Post Process volume to your level and then in each of the sections, that makes sense to disable, enable the first parameter in the section and set it’s value to 0 which will disable it. I have copyed the PP Volume from one of my example levels which you can copy and then paste into your UE4 scene to get the same results.


Begin Map
   Begin Level
      Begin Actor Class=PostProcessVolume Name=PostProcessVolume_1 Archetype=PostProcessVolume'/Script/Engine.Default__PostProcessVolume'
         Begin Object Class=BrushComponent Name="BrushComponent0" Archetype=BrushComponent'Default__PostProcessVolume:BrushComponent0'
            Begin Object Class=BodySetup Name="BodySetup_1"
            End Object
         End Object
         Begin Object Class=CubeBuilder Name="CubeBuilder_3"
         End Object
         Begin Brush Name=Model_2
         End Brush
         Begin Object Name="BrushComponent0"
            Begin Object Name="BodySetup_1"
               AggGeom=(ConvexElems=((VertexData=((X=-100.000000,Y=100.000000,Z=-100.000000),(X=-100.000000,Y=100.000000,Z=100.000000),(X=-100.000000,Y=-100.000000,Z=100.000000),(X=-100.000000,Y=-100.000000,Z=-100.000000),(X=100.000000,Y=100.000000,Z=-100.000000),(X=100.000000,Y=100.000000,Z=100.000000),(X=100.000000,Y=-100.000000,Z=-100.000000),(X=100.000000,Y=-100.000000,Z=100.000000)),ElemBox=(Min=(X=-100.000000,Y=-100.000000,Z=-100.000000),Max=(X=100.000000,Y=100.000000,Z=100.000000),IsValid=1))))
               bGenerateMirroredCollision=False
               CollisionTraceFlag=CTF_UseSimpleAsComplex
            End Object
            Brush=Model'Model_2'
            BrushBodySetup=BodySetup'BodySetup_1'
         End Object
         Begin Object Name="CubeBuilder_3"
         End Object
         Settings=(bOverride_AmbientCubemapIntensity=True,bOverride_AutoExposureMinBrightness=True,bOverride_AutoExposureMaxBrightness=True,bOverride_LensFlareIntensity=True,bOverride_AmbientOcclusionIntensity=True,bOverride_MotionBlurAmount=True,bOverride_ScreenSpaceReflectionIntensity=True,bOverride_ScreenSpaceReflectionQuality=True,AmbientCubemapIntensity=0.000000,AutoExposureMinBrightness=1.000000,AutoExposureMaxBrightness=1.000000,LensFlareIntensity=0.000000,AmbientOcclusionIntensity=0.000000,MotionBlurAmount=0.000000,ScreenSpaceReflectionIntensity=0.000000,ScreenSpaceReflectionQuality=0.000000)
         BrushType=Brush_Add
         Begin Brush Name=Model_2
            Begin PolyList
               Begin Polygon
                  Origin   -00100.000000,-00100.000000,-00100.000000
                  Normal   -00001.000000,+00000.000000,+00000.000000
                  TextureU +00000.000000,+00001.000000,+00000.000000
                  TextureV +00000.000000,+00000.000000,-00001.000000
                  Vertex   -00100.000000,-00100.000000,-00100.000000
                  Vertex   -00100.000000,-00100.000000,+00100.000000
                  Vertex   -00100.000000,+00100.000000,+00100.000000
                  Vertex   -00100.000000,+00100.000000,-00100.000000
               End Polygon
               Begin Polygon
                  Origin   -00100.000000,+00100.000000,-00100.000000
                  Normal   +00000.000000,+00001.000000,+00000.000000
                  TextureU +00001.000000,-00000.000000,+00000.000000
                  TextureV +00000.000000,+00000.000000,-00001.000000
                  Vertex   -00100.000000,+00100.000000,-00100.000000
                  Vertex   -00100.000000,+00100.000000,+00100.000000
                  Vertex   +00100.000000,+00100.000000,+00100.000000
                  Vertex   +00100.000000,+00100.000000,-00100.000000
               End Polygon
               Begin Polygon
                  Origin   +00100.000000,+00100.000000,-00100.000000
                  Normal   +00001.000000,+00000.000000,+00000.000000
                  TextureU +00000.000000,-00001.000000,+00000.000000
                  TextureV +00000.000000,+00000.000000,-00001.000000
                  Vertex   +00100.000000,+00100.000000,-00100.000000
                  Vertex   +00100.000000,+00100.000000,+00100.000000
                  Vertex   +00100.000000,-00100.000000,+00100.000000
                  Vertex   +00100.000000,-00100.000000,-00100.000000
               End Polygon
               Begin Polygon
                  Origin   +00100.000000,-00100.000000,-00100.000000
                  Normal   +00000.000000,-00001.000000,+00000.000000
                  TextureU -00001.000000,-00000.000000,-00000.000000
                  TextureV +00000.000000,+00000.000000,-00001.000000
                  Vertex   +00100.000000,-00100.000000,-00100.000000
                  Vertex   +00100.000000,-00100.000000,+00100.000000
                  Vertex   -00100.000000,-00100.000000,+00100.000000
                  Vertex   -00100.000000,-00100.000000,-00100.000000
               End Polygon
               Begin Polygon
                  Origin   -00100.000000,+00100.000000,+00100.000000
                  Normal   +00000.000000,+00000.000000,+00001.000000
                  TextureU +00001.000000,+00000.000000,+00000.000000
                  TextureV +00000.000000,+00001.000000,+00000.000000
                  Vertex   -00100.000000,+00100.000000,+00100.000000
                  Vertex   -00100.000000,-00100.000000,+00100.000000
                  Vertex   +00100.000000,-00100.000000,+00100.000000
                  Vertex   +00100.000000,+00100.000000,+00100.000000
               End Polygon
               Begin Polygon
                  Origin   -00100.000000,-00100.000000,-00100.000000
                  Normal   +00000.000000,+00000.000000,-00001.000000
                  TextureU +00001.000000,+00000.000000,+00000.000000
                  TextureV +00000.000000,-00001.000000,+00000.000000
                  Vertex   -00100.000000,-00100.000000,-00100.000000
                  Vertex   -00100.000000,+00100.000000,-00100.000000
                  Vertex   +00100.000000,+00100.000000,-00100.000000
                  Vertex   +00100.000000,-00100.000000,-00100.000000
               End Polygon
            End PolyList
         End Brush
         Brush=Model'Model_2'
         BrushComponent=BrushComponent0
         BrushBuilder=CubeBuilder'CubeBuilder_3'
         bHidden=False
         RootComponent=BrushComponent0
         ActorLabel="PostProcessVolume"
      End Actor
   End Level
Begin Surface
End Surface
End Map


**
Material Options**
If you select the Main Material node in the Material Editor and then go to the details pannel there are a number of things you can disable to make the Materials faster to render. Keep in mind that some of the settings will disable your Materials ability to use certian input which will effect how your Material looks.

  • Shading Model: Unlit
  • Fully Rough: True
  • Use Lightmap Directionality: False

Lighting / Shadowing
To make sure that your lighting is as cheap as possible make sure all your light’s are set to Static and not Stationary or Dynamic. I would also make sure to disable any dynamic shadow casting on objects to ensure that they will not cast dynamic shadows.

If you try all of the following and are still haveing performance issuses please post back with the kinds of issues you are having and I will see what else I can do to help you get your project running at the proper frame rate and if you have any other questions please let me know.

Cheers-

Sam Deiter

Awesome! Thanks so much Sam! I will let you know what we find.

Should the post process volume you have above be unbound?

Yes it should if you want it to be the post processing for the entire level.