public static GStylizedTerrain CreateTerrainFromSource(GTerrainData srcData)
        {
            GEditorSettings.WizardToolsSettings settings = GEditorSettings.Instance.wizardTools;
            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();

#if UNITY_EDITOR
            string assetName = "TerrainData_" + terrainData.Id;
            GUtilities.EnsureDirectoryExists(settings.dataDirectory);
            AssetDatabase.CreateAsset(terrainData, Path.Combine(settings.dataDirectory, assetName + ".asset"));
#endif
            srcData.CopyTo(terrainData);

            Material mat = null;
            if (srcData != null && srcData.Shading.CustomMaterial != null)
            {
                mat = UnityEngine.Object.Instantiate(srcData.Shading.CustomMaterial);
            }
            if (mat != null)
            {
                string matName = "TerrainMaterial_" + terrainData.Id;
                mat.name = matName;
#if UNITY_EDITOR
                GUtilities.EnsureDirectoryExists(settings.dataDirectory);
                AssetDatabase.CreateAsset(mat, Path.Combine(settings.dataDirectory, matName + ".mat"));
#endif
                terrainData.Shading.CustomMaterial = mat;
            }

            GStylizedTerrain terrain = g.AddComponent <GStylizedTerrain>();
            terrain.GroupId     = 0;
            terrain.TerrainData = terrainData;

#if UNITY_EDITOR
            Undo.RegisterCreatedObjectUndo(g, "Creating Low Poly Terrain");
#endif

            GameObject colliderGO = new GameObject("Tree Collider");
            colliderGO.transform.parent        = terrain.transform;
            colliderGO.transform.localPosition = Vector3.zero;
            colliderGO.transform.localRotation = Quaternion.identity;
            colliderGO.transform.localScale    = Vector3.one;

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

#if UNITY_EDITOR
            Selection.activeGameObject = g;
#endif
            return(terrain);
        }
        private GStylizedTerrain CreateTerrain()
        {
            GameObject g = new GameObject("Stylized Terrain");

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

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

            terrainData.Reset();

#if UNITY_EDITOR
            string assetName = "TerrainData_" + terrainData.Id;
            AssetDatabase.CreateAsset(terrainData, string.Format("{0}.asset", Path.Combine(DataDirectory, assetName)));
#endif

            Material mat = GGriffinSettings.Instance.WizardSettings.GetClonedMaterial(GLightingModel.PBR, GTexturingModel.Splat);
            if (mat == null && GGriffinSettings.Instance.TerrainDataDefault.Shading.CustomMaterial != null)
            {
                mat = Object.Instantiate(GGriffinSettings.Instance.TerrainDataDefault.Shading.CustomMaterial);
            }
            terrainData.Shading.CustomMaterial = mat;

#if UNITY_EDITOR
            if (mat != null)
            {
                string matName = "TerrainMaterial_" + terrainData.Id;
                mat.name = matName;
                AssetDatabase.CreateAsset(mat, string.Format("{0}.mat", Path.Combine(DataDirectory, matName)));
            }
#endif

            GStylizedTerrain terrain = g.AddComponent <GStylizedTerrain>();
            terrain.GroupId     = 0;
            terrain.TerrainData = terrainData;

            GameObject colliderGO = new GameObject("Tree Collider");
            colliderGO.transform.parent        = terrain.transform;
            colliderGO.transform.localPosition = Vector3.zero;
            colliderGO.transform.localRotation = Quaternion.identity;
            colliderGO.transform.localScale    = Vector3.one;

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

            return(terrain);
        }