public static GStylizedTerrain CreateStylizedTerrain(GTerrainData srcData = null)
        {
            GameObject g = new GameObject("Low Poly Terrain");

            g.transform.localPosition = Vector3.zero;
            g.transform.localRotation = Quaternion.identity;
            g.transform.localScale    = Vector3.one;

            GTerrainData terrainData = GTerrainData.CreateInstance <GTerrainData>();

            terrainData.Reset();
            string assetName = "TerrainData_" + terrainData.Id;

            //AssetDatabase.CreateAsset(terrainData, string.Format("Assets/{0}.asset", assetName));
            GUtilities.EnsureDirectoryExists(GGriffinSettings.Instance.DefaultTerrainDataDirectory);
            AssetDatabase.CreateAsset(terrainData, Path.Combine(GGriffinSettings.Instance.DefaultTerrainDataDirectory, assetName + ".asset"));
            if (srcData != null)
            {
                srcData.CopyTo(terrainData);
            }

            Material mat = GGriffinSettings.Instance.WizardSettings.GetClonedMaterial();

            if (mat == null && GGriffinSettings.Instance.TerrainDataDefault.Shading.CustomMaterial != null)
            {
                mat = Object.Instantiate(GGriffinSettings.Instance.TerrainDataDefault.Shading.CustomMaterial);
            }
            if (mat != null)
            {
                string matName = "TerrainMaterial_" + terrainData.Id;
                mat.name = matName;
                //AssetDatabase.CreateAsset(mat, string.Format("Assets/{0}.mat", matName));
                GUtilities.EnsureDirectoryExists(GGriffinSettings.Instance.DefaultTerrainDataDirectory);
                AssetDatabase.CreateAsset(mat, Path.Combine(GGriffinSettings.Instance.DefaultTerrainDataDirectory, matName + ".mat"));
                terrainData.Shading.CustomMaterial = mat;
            }

            GStylizedTerrain terrain = g.AddComponent <GStylizedTerrain>();

            terrain.GroupId     = 0;
            terrain.TerrainData = terrainData;

            Undo.RegisterCreatedObjectUndo(g, "Creating Low Poly Terrain");

            GameObject colliderGO = new GameObject("Tree Collider");

            GameObjectUtility.SetParentAndAlign(colliderGO, terrain.gameObject);
            colliderGO.transform.localPosition = Vector3.zero;
            colliderGO.transform.localRotation = Quaternion.identity;
            colliderGO.transform.localScale    = Vector3.one;

            GTreeCollider collider = colliderGO.AddComponent <GTreeCollider>();

            collider.Terrain = terrain;

            GTerrainTools tools = Object.FindObjectOfType <GTerrainTools>();

            if (tools == null)
            {
                CreateTerrainTools(null);
            }

            Selection.activeGameObject = g;
            return(terrain);
        }