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); }
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(); }
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."); }
/// <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; }
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(); }
private void OnDestroy() { StaticOcclusionCulling.RemoveCacheFolder(); }
public void BakeArea() { StaticOcclusionCulling.Compute(); }
/// <inheritdoc /> protected override void OnInterrupt() { StaticOcclusionCulling.Cancel(); }
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); } }