*RTO was deprecated. I keep updating for personal use and I'll be glad to share with someone if required.

Introduction

About RTO

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.

  • Be costless

  • Asset Optimization

  • Fast

  • Better ROI

  • More Platforms

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

Components

Real Time Profiler

    This class is responsible for costless performance measure. Frequency affects the cost of this optimizer but also the efficiency.

Optimizer Manager

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

    CAUTION:

    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)

Memory Manager

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

Time Setup

    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.

Terrain Optimizer

    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

    Camera Optimizer changes camera far clip and can turn in or turn off HDR.

Light Optimizer

    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.

Renderers Optimizer

    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

    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

    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

     Shader Optimizer just change your Shader GlobalMaximumLOD.

Next Steps

Roadmap

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)

Version 0.6

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

Version 0.5

Several fixes

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.

Version 0.4

Resolution Optimizer

Code review\tutorial

Version 0.3

Not tracked

Version 0.2

Not tracked

Version 0.1

First Release