public static void Upgrade(Material material, MaterialUpgrader upgrader, UpgradeFlags flags) { var upgraders = new List <MaterialUpgrader>(); upgraders.Add(upgrader); Upgrade(material, upgraders, flags); }
public void Upgrade(Material material, UpgradeFlags flags) { Material newMaterial; if ((flags & UpgradeFlags.CleanupNonUpgradedProperties) != 0) { newMaterial = new Material(Shader.Find(m_NewShader)); } else { newMaterial = UnityEngine.Object.Instantiate(material) as Material; newMaterial.shader = Shader.Find(m_NewShader); } Convert(material, newMaterial); material.shader = Shader.Find(m_NewShader); material.CopyPropertiesFromMaterial(newMaterial); UnityEngine.Object.DestroyImmediate(newMaterial); if (m_Finalizer != null) { m_Finalizer(material); } }
public static void UpgradeSelection(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None) { var selection = Selection.objects; if (selection == null) { EditorUtility.DisplayDialog(DialogText.title, DialogText.noSelectionMessage, DialogText.ok); return; } List <Material> selectedMaterials = new List <Material>(selection.Length); for (int i = 0; i < selection.Length; ++i) { Material mat = selection[i] as Material; if (mat != null) { selectedMaterials.Add(mat); } } int selectedMaterialsCount = selectedMaterials.Count; if (selectedMaterialsCount == 0) { EditorUtility.DisplayDialog(DialogText.title, DialogText.noSelectionMessage, DialogText.ok); return; } if (!EditorUtility.DisplayDialog(DialogText.title, string.Format("The upgrade will overwrite {0} selected material{1}. ", selectedMaterialsCount, selectedMaterialsCount > 1 ? "s" : "") + DialogText.projectBackMessage, DialogText.proceed, DialogText.cancel)) { return; } string lastMaterialName = ""; for (int i = 0; i < selectedMaterialsCount; i++) { if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", i, selectedMaterialsCount, lastMaterialName), (float)i / (float)selectedMaterialsCount)) { break; } var material = selectedMaterials[i]; Upgrade(material, upgraders, flags); if (material != null) { lastMaterialName = material.name; } } UnityEditor.EditorUtility.ClearProgressBar(); }
public static void Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags) { if (material == null) { return; } var upgrader = GetUpgrader(upgraders, material); if (upgrader != null) { upgrader.Upgrade(material, flags); } else if ((flags & UpgradeFlags.LogMessageWhenNoUpgraderFound) == UpgradeFlags.LogMessageWhenNoUpgraderFound) { Debug.Log(string.Format("{0} material was not upgraded. There's no upgrader to convert {1} shader to selected pipeline", material.name, material.shader.name)); } }
/// <summary> /// Upgrade the selection. /// </summary> /// <param name="upgraders">List of upgraders.</param> /// <param name="progressBarName">Name of the progress bar.</param> /// <param name="flags">Material Upgrader flags.</param> public static void UpgradeSelection(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None) { HashSet <string> shaderNamesToIgnore = new HashSet <string>(); UpgradeSelection(upgraders, shaderNamesToIgnore, progressBarName, flags); }
public static void UpgradeProjectFolder(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None) { if (!EditorUtility.DisplayDialog(DialogText.title, "The upgrade will overwrite materials in your project. " + DialogText.projectBackMessage, DialogText.proceed, DialogText.cancel)) { return; } int totalMaterialCount = 0; foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) { if (IsMaterialPath(s)) { totalMaterialCount++; } } int materialIndex = 0; foreach (string path in UnityEditor.AssetDatabase.GetAllAssetPaths()) { if (IsMaterialPath(path)) { materialIndex++; if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", materialIndex, totalMaterialCount, path), (float)materialIndex / (float)totalMaterialCount)) { break; } Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(path) as Material; Upgrade(m, upgraders, flags); //SaveAssetsAndFreeMemory(); } } UnityEditor.EditorUtility.ClearProgressBar(); }
/// <summary> /// Upgrade a material. /// </summary> /// <param name="material">Material to upgrade.</param> /// <param name="upgraders">List of Material upgraders.</param> /// <param name="flags">Material upgrader flags.</param> /// <param name="message">Error message to be outputted when no material upgraders are suitable for given material if the flags <see cref="UpgradeFlags.LogMessageWhenNoUpgraderFound"/> is used.</param> /// <return>Returns true if the upgrader was found for the passed in material.</return> public static bool Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags, ref string message) { if (material == null) { return(false); } var upgrader = GetUpgrader(upgraders, material); if (upgrader != null) { upgrader.Upgrade(material, flags); return(true); } if ((flags & UpgradeFlags.LogMessageWhenNoUpgraderFound) == UpgradeFlags.LogMessageWhenNoUpgraderFound) { message = $"{material.name} material was not upgraded. There's no upgrader to convert {material.shader.name} shader to selected pipeline"; return(false); } return(true); }
/// <summary> /// Upgrade a material. /// </summary> /// <param name="material">Material to upgrade.</param> /// <param name="upgraders">List of Material upgraders.</param> /// <param name="flags">Material Upgrader flags.</param> public static void Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags) { string message = String.Empty; if (Upgrade(material, upgraders, flags, ref message)) { return; } if (!string.IsNullOrEmpty(message)) { Debug.Log(message); } }
/// <summary> /// Upgrade the project folder. /// </summary> /// <param name="upgraders">List of upgraders.</param> /// <param name="shaderNamesToIgnore">Set of shader names to ignore.</param> /// <param name="progressBarName">Name of the progress bar.</param> /// <param name="flags">Material Upgrader flags.</param> public static void UpgradeProjectFolder(List <MaterialUpgrader> upgraders, HashSet <string> shaderNamesToIgnore, string progressBarName, UpgradeFlags flags = UpgradeFlags.None) { if ((!Application.isBatchMode) && (!EditorUtility.DisplayDialog(DialogText.title, "The upgrade will overwrite materials in your project. " + DialogText.projectBackMessage, DialogText.proceed, DialogText.cancel))) { return; } int totalMaterialCount = 0; foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths()) { if (IsMaterialPath(s)) { totalMaterialCount++; } } int materialIndex = 0; foreach (string path in UnityEditor.AssetDatabase.GetAllAssetPaths()) { if (IsMaterialPath(path)) { materialIndex++; if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", materialIndex, totalMaterialCount, path), (float)materialIndex / (float)totalMaterialCount)) { break; } Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(path) as Material; if (!ShouldUpgradeShader(m, shaderNamesToIgnore)) { continue; } Upgrade(m, upgraders, flags); //SaveAssetsAndFreeMemory(); } } // Upgrade terrain specifically since it is a builtin material if (Terrain.activeTerrains.Length > 0) { Material terrainMat = Terrain.activeTerrain.materialTemplate; Upgrade(terrainMat, upgraders, flags); } UnityEditor.EditorUtility.ClearProgressBar(); }
public static void Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags) { var upgrader = GetUpgrader(upgraders, material); if (upgrader != null) { upgrader.Upgrade(material, flags); } }
public static void UpgradeSelection(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None) { var selection = Selection.objects; if (!EditorUtility.DisplayDialog("Material Upgrader", string.Format("The upgrade will overwrite {0} selected material{1}. ", selection.Length, (selection.Length > 1) ? "s" : "") + projectBackMessage, "Proceed", "Cancel")) { return; } string lastMaterialName = ""; for (int i = 0; i < selection.Length; i++) { if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", i, selection.Length, lastMaterialName), (float)i / (float)selection.Length)) { break; } var material = selection[i] as Material; Upgrade(material, upgraders, flags); if (material != null) { lastMaterialName = material.name; } } UnityEditor.EditorUtility.ClearProgressBar(); }