Exemple #1
0
    private IEnumerator DoBigProcess()
    {
        levelXLength++;
        levelZLength++;

        yield return(StartCoroutine(CalculateTerrainPartSize()));

        _levelMap = StreetGenerator.GenerateStreetMap(levelZLength, levelXLength, streetsAlongX, streetsAlongZ);
        yield return(null);

        yield return(StartCoroutine(GenerateMesh()));

        CreateTerrainParts(_numberTerrainMeshPartsX * _numberTerrainMeshPartsZ);
        yield return(null);

        yield return(StartCoroutine(GetComponent <BuildingGenerator>().MarkUpLevelArea(_levelMap)));

        yield return(null);

        yield return(StartCoroutine(AssembleTerrainParts()));

        SpawnLevelBorders();
        StaticOcclusionCulling.GenerateInBackground();
        while (StaticOcclusionCulling.isRunning)
        {
            yield return(null);
        }
        yield return(null);

        isDone = true;
        yield return(null);
    }
Exemple #2
0
 public static void BuildLevels()
 {
     bs.setting = settings;
     EditorApplication.delayCall += delegate
     {
         DisableRes(true);
         var         cur = EditorApplication.currentScene;
         BuildTarget bt  = activeBuildTarget;
         Debug.Log(bt);
         string txt  = "";
         var    rand = Random.Range(0, 100);
         foreach (var scene in Selection.objects)
         {
             string assetPath = AssetDatabase.GetAssetPath(scene);
             EditorApplication.OpenScene(assetPath);
             FixMaterials();
             if (oclude)
             {
                 Debug.Log("ocluding");
                 StaticOcclusionCulling.Compute();
             }
             if (scene.name != Levels.game)
             {
                 clear(typeof(Game));
                 clear(typeof(Loader));
                 clear(typeof(Player));
             }
             foreach (Renderer renderer in FindObjectsOfType(typeof(Renderer)))
             {
                 int layer = renderer.transform.root.gameObject.layer;
                 if (layer == Layer.def || layer == Layer.level)
                 {
                     PrefabUtility.DisconnectPrefabInstance(renderer.transform.root);
                 }
             }
             var name = scene.name.ToLower();
             var path = "Assets/!scenes/tmp/" + name + ".unity";
             EditorApplication.SaveScene(path, true);
             var f = name + ".unity3d" + bs.platformPrefix2;
             File.Delete(f);
             txt += f + ":" + rand + "\n";
             if (bt != BuildTarget.iPhone && !dontBuild)
             {
                 Debug.Log(BuildPipeline.BuildStreamedSceneAssetBundle(new[] { path }, outputFolder + f, bt));
             }
         }
         EditorApplication.OpenScene(cur);
         Debug.Log(txt);
         DisableRes(false);
     };
 }
    /// <summary>
    /// Occlusions the bake.
    /// </summary>
    /// <returns><c>true</c>, if bake was occlusioned, <c>false</c> otherwise.</returns>
    /// <param name="scene">Scene.</param>
    /// <param name="smallestHole">Smallest hole.</param>
    /// <param name="smallestOccluder">Smallest occluder.</param>
    /// <param name="backfaceThreshold">Backface threshold.</param>
    public static bool OcclusionBake(string scene, float smallestHole = 0.25f, float smallestOccluder = 5f, float backfaceThreshold = 100f)
    {
        Scene s = EditorSceneManager.OpenScene(scene);

        StaticOcclusionCulling.smallestHole      = smallestHole;
        StaticOcclusionCulling.smallestOccluder  = smallestOccluder;
        StaticOcclusionCulling.backfaceThreshold = backfaceThreshold;

        bool success = StaticOcclusionCulling.Compute();

        EditorSceneManager.SaveScene(s);

        return(success);
    }
    public static void BakeOcclusion()
    {
        var area = CreateGameObject <OcclusionArea>("Occlusion Area");

        var renderers         = GameObject.Find("models").GetComponentsInChildren <Renderer>();
        var bounds            = new Bounds();
        var occludeeOnlyCount = 0;

        foreach (var renderer in renderers)
        {
            var boundSize      = renderer.bounds.size;
            var isOnlyOccludee = false;
            isOnlyOccludee = isOnlyOccludee || boundSize.x < 5f && boundSize.y < 5f && boundSize.z < 5f;
            isOnlyOccludee = isOnlyOccludee || boundSize.x < 1 || boundSize.z < 1;

            if (isOnlyOccludee)
            {
                var flag = GameObjectUtility.GetStaticEditorFlags(renderer.gameObject);
                flag &= ~StaticEditorFlags.OccluderStatic;
                GameObjectUtility.SetStaticEditorFlags(renderer.gameObject, flag);
                occludeeOnlyCount++;
            }
            else
            {
            }
            bounds.Encapsulate(renderer.bounds);
        }

        var size = bounds.size;

        Debug.Log("Occludee only count=" + occludeeOnlyCount.ToString());

        size.Scale(new Vector3(1.2f, 1, 1.2f));
        area.size = size;
        area.transform.position = bounds.center;
        area.center             = Vector3.zero;
        StaticOcclusionCulling.smallestOccluder  = 8f;
        StaticOcclusionCulling.smallestHole      = 0.25f;
        StaticOcclusionCulling.backfaceThreshold = 80f;
        StaticOcclusionCulling.Compute();
    }
Exemple #5
0
    private static void BakeBuild()
    {
        if (EditorUtility.DisplayDialog("Bake Build Settings Scenes?", "Bake Static Occlusion Culling for Build Settings Scenes?", "Yes", "No"))
        {
            Debug.Log("Starting Batch Bake Occlusion Culling...");
            AssetDatabase.SaveAssets();

            EditorBuildSettingsScene[]   scenes = EditorBuildSettings.scenes;
            System.Diagnostics.Stopwatch watch  = new System.Diagnostics.Stopwatch();

            int id = 1;
            foreach (EditorBuildSettingsScene scn in scenes)
            {
                Debug.Log("Baking: " + id + "/" + scenes.Length + " - " + scn.path);
                EditorSceneManager.OpenScene(scn.path);

                //CLEAR THE LIGHTMAPS AND THE CACHE
                //THIS IS AN ATTEMPT TO PREVENT SYSTEM HANGS SEE
                //http://forum.unity3d.com/threads/bake-runtime-job-failed-with-error-code-11-failed-reading-albedo-texture-file.326474/
                //Lightmapping.Clear();
                //Lightmapping.ClearDiskCache();
                StaticOcclusionCulling.Clear();

                watch.Reset();
                watch.Start();

                //Lightmapping.Bake();
                StaticOcclusionCulling.Compute();

                //Stop the timer
                watch.Stop();

                EditorApplication.SaveScene();

                Debug.Log("Finished Occlusion Culling Bake Time: " + id + "/" + scenes.Length + " - " + watch.Elapsed.TotalMinutes.ToString() + " Scene: " + scn.path);
                id++;
            }

            Debug.Log("Finished Batch Bake Occlusion Culling.");
        }
    }
    public override IEnumerator Execute(UTContext context)
    {
#if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2
        var realCellSize     = viewCellSize.EvaluateIn(context);
        var realNearClipPane = nearClipPane.EvaluateIn(context);
        var realFarClipPane  = farClipPane.EvaluateIn(context);
        var realMemoryLimit  = memoryLimit.EvaluateIn(context);
        var realMode         = mode.EvaluateIn(context);

        Debug.Log("Starting baking of occlusion culling.");

        StaticOcclusionCulling.GenerateInBackground(realCellSize, realNearClipPane, realFarClipPane, realMemoryLimit, realMode);
#else
        var realSmallestOccluder  = smallestOccluder.EvaluateIn(context);
        var realSmallestHole      = smallestHole.EvaluateIn(context);
        var realBackfaceThreshold = backfaceThreshold.EvaluateIn(context);

        Debug.Log("Starting baking of occlusion culling.");

        StaticOcclusionCulling.smallestOccluder  = realSmallestOccluder;
        StaticOcclusionCulling.smallestHole      = realSmallestHole;
        StaticOcclusionCulling.backfaceThreshold = realBackfaceThreshold;

        StaticOcclusionCulling.GenerateInBackground();
#endif
        do
        {
            yield return("");

            if (context.CancelRequested)
            {
                StaticOcclusionCulling.Cancel();
            }
        }while(StaticOcclusionCulling.isRunning);
        Debug.Log("Occlusion culling bake process finished.");
    }
Exemple #7
0
        /// <inheritdoc />
        protected override IEnumerator OnExecute(JobContext context)
        {
            // store old settings for later restoration
            var tempSmallestHole      = StaticOcclusionCulling.smallestHole;
            var tempSmallestOccluder  = StaticOcclusionCulling.smallestOccluder;
            var tempBackfaceThreshold = StaticOcclusionCulling.backfaceThreshold;

            // assign new settings
            StaticOcclusionCulling.smallestHole      = SmallestHole;
            StaticOcclusionCulling.smallestOccluder  = SmallestOccluder;
            StaticOcclusionCulling.backfaceThreshold = Mathf.Clamp(BackfaceThreshold, 5, 100);

            IsSuccess = StaticOcclusionCulling.GenerateInBackground();

            while (StaticOcclusionCulling.isRunning)
            {
                yield return(null);
            }

            // restore default values
            StaticOcclusionCulling.smallestHole      = tempSmallestHole;
            StaticOcclusionCulling.smallestOccluder  = tempSmallestOccluder;
            StaticOcclusionCulling.backfaceThreshold = tempBackfaceThreshold;
        }
Exemple #8
0
        void OnGUI()
        {
            SetupHorizontalBoxStyle();
            SetupStatusBoxStyle();
            SetupBoxStyle();


            // Row
            GUILayout.BeginHorizontal("", m_HorizontalStyle);
            //GUILayout.Height(175);
            if (GUI.Button(new Rect(10, 10, 25, 25), ButtonIconBrushMode, GUIStyle.none))
            {
                ToggleBrushMode();
                UpdateBrushMode();
            }

            if (GUI.Button(new Rect(40, 10, 25, 25), ButtonIconNormal, GUIStyle.none))
            {
                UseNormalDirection = !UseNormalDirection;
                UpdateBrushNormal();
            }

            if (GUI.Button(new Rect(70, 10, 25, 25), ButtonIconStroke, GUIStyle.none))
            {
                ToggleStrokeMode();
                UpdateBrushStroke();
            }

            if (GUI.Button(new Rect(100, 10, 25, 25), ButtonIconRandomizePosition, GUIStyle.none))
            {
                RandomizePosition = !RandomizePosition;
                UpdateBrushRandomizePosition();
            }

            if (GUI.Button(new Rect(130, 10, 25, 25), ButtonIconRandomizeRotation, GUIStyle.none))
            {
                RandomizeRotation = !RandomizeRotation;
                UpdateBrushRandomizeRotation();
            }

            if (GUI.Button(new Rect(160, 10, 25, 25), ButtonIconRandomizeScale, GUIStyle.none))
            {
                RandomizeScale = !RandomizeScale;
                UpdateBrushRandomizeScale();
            }

            if (GUI.Button(new Rect(190, 10, 25, 25), ButtonIconGrid, GUIStyle.none))
            {
                CUtility.ShowGrid = !CUtility.ShowGrid;
                UpdateGrid();
            }
            if (GUI.Button(new Rect(220, 10, 25, 25), ButtonIconShadow, GUIStyle.none))
            {
                ToggleShadows = !ToggleShadows;
                UpdateShadow();
            }
            if (GUI.Button(new Rect(245, 10, 25, 25), ButtonIconLight, GUIStyle.none))
            {
                ToggleLighting = !ToggleLighting;


                UpdateLighting();
            }

            /*
             * if (GUI.Button(new Rect(270, 10, 25, 25), ButtonIconLightBake, GUIStyle.none))
             * {
             *  Lightmapping.Bake();
             *  //ToggleLighting = !ToggleLighting;
             *  //UpdateLighting();
             * }
             * if (GUI.Button(new Rect(300, 10, 25, 25), ButtonIconLightClear, GUIStyle.none))
             * {
             *  Lightmapping.Clear();
             *  //ToggleLighting = !ToggleLighting;
             *  //UpdateLighting();
             * }*/


            GUILayout.Space(125);
            GUILayout.Space(125);
            GUILayout.Space(125);
            GUILayout.Space(125);
            if (GUILayout.Button("BakeLight"))
            {
                Lightmapping.Bake();
            }
            if (GUILayout.Button("Stop"))
            {
                Lightmapping.ForceStop();
            }
            if (GUILayout.Button("Clear"))
            {
                Lightmapping.Clear();
            }
            if (GUILayout.Button("BakeOcclusion"))
            {
                StaticOcclusionCulling.Compute();
            }
            if (GUILayout.Button("BakeAstar"))
            {
                //StaticOcclusionCulling.Compute();
            }

            /*
             * if (GUILayout.Button("SNewScene"))
             * {
             *  cSceneManagement.NewScene();
             * }
             *
             * if (GUILayout.Button("SReloadWorkingScene"))
             * {
             *  cSceneManagement.ReloadWorkingScene();
             * }
             *
             *
             *
             * GUILayout.Label("MultiObject:", GUILayout.MaxWidth(50));
             * GameObject = (GameObject) EditorGUILayout.ObjectField("", GameObject, typeof(GameObject), true,
             *  GUILayout.MaxWidth(90));
             * if (GUILayout.Button("Add(N)"))//not yet working
             * {
             *  cBrushThumbnailer.CreateThumbnail(GameObject);
             *  //cThumbnailer.CreateThumbnail()
             *  //AssetDatabase.Refresh();
             *  //SaveSettings();
             * }
             *
             * if (GUILayout.Button("LoadSettings(N)")) //not yet working
             * {
             *  LoadSettings();
             * }
             */
            GUILayout.EndHorizontal();

            //
            //

            /******************************************************************************************
             *  New RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew RowNew Row
             *******************************************************************************************/
            // Row
            GUILayout.BeginHorizontal("", GUIStyle.none);
            GameObject = (GameObject)EditorGUILayout.ObjectField("", GameObject, typeof(GameObject), true,
                                                                 GUILayout.MaxWidth(90));
            GUILayout.Label("Radius:", GUILayout.MaxWidth(50));
            Radius = EditorGUILayout.Slider("", Radius, 1f, 50f, GUILayout.MaxWidth(120));
            GUILayout.Label("Intensity:", GUILayout.MaxWidth(55));
            PaintIntensity = EditorGUILayout.IntSlider("", PaintIntensity, 1, 100, GUILayout.MaxWidth(120));
            GUILayout.Label("Focal Shift:", GUILayout.MaxWidth(70));
            FocalShift            = EditorGUILayout.Slider("", FocalShift, -1, 1, GUILayout.MaxWidth(120));
            CumulativeProbability = EditorGUILayout.CurveField("", CumulativeProbability, GUILayout.MaxWidth(40));

            GUILayout.Label("Paint surface:", GUILayout.MaxWidth(80));
            m_PaintSurface = (PaintSurfaceType)EditorGUILayout.EnumPopup("", m_PaintSurface, GUILayout.MaxWidth(55));
            GUILayout.Label("Record session", GUILayout.MaxWidth(90));
            RecordSession = EditorGUILayout.Toggle("", RecordSession, GUILayout.MaxWidth(40));

            GUILayout.EndHorizontal();

            /// Row
            GUILayout.BeginHorizontal("", GUIStyle.none);
            GUILayout.Label("Size:", GUILayout.MaxWidth(40));
            MinSize = EditorGUILayout.FloatField("", MinSize, GUILayout.MaxWidth(35));
            EditorGUILayout.MinMaxSlider(ref MinSize, ref MaxSize, MinLimit, MaxLimit, GUILayout.MaxWidth(60));
            MaxSize = EditorGUILayout.FloatField("", MaxSize, GUILayout.MaxWidth(35));

            GUILayout.Space(20);
            GUILayout.Space(20);
            GUILayout.Label("rX:", GUILayout.MaxWidth(20));
            MaxRotationX = EditorGUILayout.FloatField("", MaxRotationX, GUILayout.MaxWidth(30));
            GUILayout.Label("rY:", GUILayout.MaxWidth(20));
            MaxRotationY = EditorGUILayout.FloatField("", MaxRotationY, GUILayout.MaxWidth(30));
            GUILayout.Label("rZ:", GUILayout.MaxWidth(20));
            MaxRotationZ = EditorGUILayout.FloatField("", MaxRotationZ, GUILayout.MaxWidth(30));
            GUILayout.EndHorizontal();


            GUILayout.BeginHorizontal("", m_StatusBarStyle);
            GUILayout.Label("Status:");
            GUILayout.Label(MyStatus);
            GUILayout.EndHorizontal();
        }
Exemple #9
0
 private void OnDestroy()
 {
     StaticOcclusionCulling.RemoveCacheFolder();
 }
Exemple #10
0
 public void BakeArea()
 {
     StaticOcclusionCulling.Compute();
 }
Exemple #11
0
 /// <inheritdoc />
 protected override void OnInterrupt()
 {
     StaticOcclusionCulling.Cancel();
 }
Exemple #12
0
        private static void _SeprateScene(string path)
        {
            if (path.EndsWith("_add.unity"))
            {
                return;
            }
            string rootPath = "Assets/XSeperateScene/";
            string name     = path;
            int    index    = path.LastIndexOf("/");

            if (index >= 0)
            {
                name = name.Substring(index + 1);
            }
            index = name.LastIndexOf(".");
            if (index >= 0)
            {
                name = name.Substring(0, index);
            }
            EditorSceneManager.OpenScene(path);
            GameObject go = GameObject.Find("Scene");

            if (go != null)
            {
                //1.save as new scene
                string addpath  = string.Format("{0}{1}_add.unity", rootPath, name);
                Scene  addScene = EditorSceneManager.GetSceneByPath(addpath);
                EditorSceneManager.SaveScene(addScene);

                //2.save as old scene
                GameObject.DestroyImmediate(go);
                LightmapSettings.lightmaps   = null;
                LightmapSettings.lightProbes = null;
                string origpath = string.Format("{0}{1}.unity", rootPath, name);
                Scene  oriScene = EditorSceneManager.GetSceneByPath(origpath);
                EditorSceneManager.SaveScene(oriScene);

                addScene = EditorSceneManager.OpenScene(addpath);
                List <GameObject> gos      = new List <GameObject>();
                HierarchyProperty hp       = new HierarchyProperty(HierarchyType.GameObjects);
                int[]             expanded = new int[0];
                while (hp.Next(expanded))
                {
                    gos.Add(hp.pptrValue as GameObject);
                }
                for (int i = gos.Count - 1; i >= 0; --i)
                {
                    if (gos[i].name != "Scene")
                    {
                        GameObject.DestroyImmediate(gos[i]);
                    }
                }
                StaticOcclusionCulling.Cancel();
                EditorSceneManager.SaveScene(addScene, addpath);
            }
            else
            {
                LightmapSettings.lightmaps   = null;
                LightmapSettings.lightProbes = null;
                string origpath = string.Format("{0}{1}.unity", rootPath, name);
                Scene  oriScene = EditorSceneManager.GetSceneByPath(origpath);
                EditorSceneManager.SaveScene(oriScene);
            }
        }