ProceduralTree RandomTree(Vector3 pos, int iterations)
    {
        //binary tree
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> {  {"0", "1B[[0R-]0R+]" } });

        //Lopsided binary tree
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> {  { "0", "1B[[10R-]0R+]" } });

        //simple vine
        LSystem lSystem = new LSystem("1R10", new Dictionary <string, string> {
            { "1", "1BR[0-]1" }
        });

        //triple vine
        //LSystem lSystem = new LSystem("10", new Dictionary<string, string> { { "1", "1BR[0R-][0+][0L-]1" } });

        //Trinary tree
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> {  {"0", "1[[0R-][1B0+][0R+]]" } });

        //Trinary tree lopsided
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> { {"0", "1B[110R-][10R][0R+]" } });
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> { {"0", "1RB[110-][10][0+]" } });



        //alternating binary tree
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> { { "+", "-" }, { "-", "+" }, { "0", "1B[[0R+]0L+]" } });

        //alternating trinary tree <3
        //LSystem lSystem = new LSystem("0", new Dictionary<string, string> { { "R", "L" }, { "L", "R" }, { "0", "1[[0L+][10-][0R+]]" } });


        float startRotation = prng.Next(0, 360);

        float branchRotateAngle = SampleBellCurveInRange(0f, 180f);

        float branchBendAngle = SampleBellCurveInRange(0f, 90f);

        float branchLengthDefault = SampleBellCurveInRange(1f, 4f);

        float branchDefaultWidth = SampleBellCurveInRange(0.5f, 2f);

        float taperWidth = SampleBellCurveInRange(0.1f, 0.5f);

        float taperHeight = SampleBellCurveInRange(0f, 0.5f);

        Vector3 bias         = RandomNormalizedVector();
        float   biasStrength = SampleBellCurveInRange(0f, 0.2f);

        GameObject treeBase = new GameObject("TreeBase");

        treeBase.transform.Rotate(treeBase.transform.up, startRotation);

        treeBase.transform.position = pos;
        treeBase.transform.parent   = transform;
        ProceduralTree tree = treeBase.AddComponent <ProceduralTree>();

        tree.ConstructProceduralTree(lSystem, iterations, branchRotateAngle, branchBendAngle, branchLengthDefault, branchDefaultWidth, taperWidth, taperHeight, bias, biasStrength, branchBody, leafBody);
        return(tree);
    }