Easy good-to-use high-quality platform-based optimization tool with dynamic quality adjustment to avoid production branches and expand supported platforms.
As a side effect, can make your game run smoothly on platforms that you aren`t expecting or solve that little chunk.
Real-Time optimizer was conceived with few bullets on mind:
Respect the desirable quality based on target platform
Avoid Production Branches
Run smoothly on desired platforms
Dynamic quality adjustment at run-time.
Improve quality if resource is available.
Easy to use
Easy to setup
RTO is fully documented composed by several components that can be disabled anytime.
*RTO can become a little unstable according platform and Unity version. This can even result in crash. Please, report if this happen informing Unity Version, Platform, Target Device and describing when this happened.
How to Use
You can simple drag and drop Optimizer Prefab into your scene and tweak it`s parameters to fit your requirements.
How to Debug
It’s not rare an inconvenient being caused by RTO. Usually it’s not RTO fault but some Unity/Platform Issue. You can able/disable any component you want, so, if something bad happened after you start to use RTO, the easiest way to avoid the problem is to identify what component has the defective call and disable it.
Usually, Real Time Profiler and Optimizer Manager are required by other components and should be enabled. There’s a “debug” variable into some components. Change this variable value to true and some info will be displayed.
Real Time Profiler
This class is responsible for costless performance measure. Frequency affects the cost of this optimizer but also the efficiency.
This class manages the whole optimization system. You can disable all Optimizer by disabling this component.
Contingency Layer (Obsolete)
This class is a brute way to adapt your application to run with the desired performance. It`s trigged only in critical case scenario. Internally it simple changes the Overall Quality, so, you should do a fine-setup at Quality Settings in order to get the best result from Contingency Layer.
Resolution have a huge impact over overall quality and overall performance being the best option to avoid fillrate bottleneck. We never reduce or increase it too much also. Also, we prefer similar aspect ratio.
Resolution change is even more invasive than change the Overall Quality (Contingency). Several stuff can go wrong when resolution is changed at Real-Time so, please, make sure to extra-test this component before use it on final release. (this problem is far more critical on Unity 5.2 or earlier)
Implements some tricks to reduce memory usage. You should inform if you`re using some external polling or if your project frequently creates or destroy elements (High Memory Allocation).
At scene start, this class set fixedDeltaTime and maximumDeltaTime to some good values reducing CPU cost. I`ve used some good numbers based on my experience but, please, feel free to change this values. In order to avoid noob mistakes, I didn`t exposed this variables hard-coding it`s values, however, Unity has these same variables exposed into Time Settings.
Adjust all terrains variables over time. If you`re creating new terrains in runtime, you should check createNewTerrainsAtRuntime. So far, the only exposed variable is maxPixelError because it has a huge visual impact on the overall perception of the terrain. I`ll expose more stuff as its importance grows with user feedback. You also can manually set a quality by calling SetTerrainQuality(float newQuality).
Camera Optimizer changes camera far clip and can turn in or turn off HDR.
Light optimizer is responsible for lights. Light optimizer acts over Light Components, Reflection Probes and GI. LightOptimizer evaluate your shadow mode before change it, so if you`re not using Soft Shadow or Hard Shadow due art direction, we don`t make a mess.
All Renderers are tweaked on this class with specific implementation for Cloth and SkinnedMeshRenderers. Internally, we added a distance and Max number to SkinnedMeshRenderers and Cloth so we can reduce processor use when these elements are far or in huge number.
You can disable this behavior by setting off optimizeClothRenderer or optimizeSkinnedMeshRenderer. Also, you should set instantiatingSkinnedMeshAtRuntime and instantiatingClothAtRuntimeif if you create new ones at runtime.
Particle Optimizer is based on the fact that usually we can decrease the total number of particles a little bit without losing too much quality. You can control the reduction rate using minQuality.
If you are using a costless particle, particle optimizer will maintain this particle as it is.
Texture Optimizer adapt anisotropic level, mipmap bias and mipmap filter. Anisotropic level is related to how your texture looks on oblique angles, if you really know how to setup anisotropic levels, uncheck canChangeAnisoLevel. Mipmap filter is how mipmaps, again, if you set filter mode manually, uncheck canChangeMipmapFilter.
Shader Optimizer just change your Shader GlobalMaximumLOD.
More to come…
Add issue track system(V 1)
Migrate page to better system(v 1)
Promo update(V 1)
Bug fix(V 0.9)
Real-time tips (V 0.9)
Improve Batch solution(v 0.8)
Improve Shader Optimizer (V 0.8)
Post-Processing Optimizer (V 0.8)
Component tests (V 0.8)
Thanks for buying.
Version 0.7 (To be Released)
VR Support(V 0.7)
VR Optimizer (V 0.7)
Improve Release Version Info
Real Time profiler now also track battery temperature on mobile devices
More coherent optimization calls on all components
Contingency Layer was removed
Several optimizations added in all components (Split of Contingency Component)
IMGUI replaced by UGUI
RTO Page Created (this one)
uGUI Utility embedded
Now you can use n quality settings definitions
Optimizer Manager is now less deterministic
Video Tutorial added
There's a missing code on the last releases with huge impact over RTO benefits.