public void Config(SubstanceSettings settings = null)
    {
        if (parameters == null) return;
        if (settings != null) _settings = settings;

        ProceduralMaterial substance = _renderer.material as ProceduralMaterial;
        ProceduralMaterial.substanceProcessorUsage = _settings.ProcessorUsage;

        if (substance)
        {
            substance.cacheSize = _settings.CacheSize;

            //Find out the real names of the properties to create configs.
            //var substanceParamterNames = substance
            //    .GetProceduralPropertyDescriptions()
            //    .Select(x => x.name)
            //    .ToList();

            var properties = parameters.GetProperties();

            foreach (var property in properties)
            {
                substance.SetProceduralFloat(property.Name, property.Value);
            }

            substance.RebuildTextures();
        }
    }
	// Use this for initialization
	void Start () {

        var aCube = GameObject.FindGameObjectWithTag("Cube1");

        var grassParams = aCube.GetComponent<GrassSubstanceParameters>();
        grassParams.GrassAmount = 10;

        var config = aCube.GetComponent<SubstanceConfiguration>();
        config.parameters = grassParams;

        var low = new SubstanceSettings
        {
            CacheSize = ProceduralCacheSize.None,
            ProcessorUsage = ProceduralProcessorUsage.Half
        };

        var high = new SubstanceSettings
        {
            CacheSize = ProceduralCacheSize.NoLimit,
            ProcessorUsage = ProceduralProcessorUsage.All
        };

        config.Config(low);

    }
 public SubstanceConfiguration()
 {
     _settings = new SubstanceSettings();
 }