Exemple #1
0
        private static TextureDetails GetAllTexturesFromAssets()
        {
            var details = new TextureDetails();

            var assetGuidStrings = AssetDatabase.FindAssets("t:texture2D", new[] { "Assets" });

            var assetsLength = assetGuidStrings.Length;

            for (var i = 0; i < assetsLength; i++)
            {
                var path = AssetDatabase.GUIDToAssetPath(assetGuidStrings[i]);

                if (EditorUtility.DisplayCancelableProgressBar("Getting All Textures from Assets", Path.GetFileName(path), (float)i / assetsLength))
                {
                    break;
                }

                var texture         = AssetDatabase.LoadAssetAtPath <Texture>(path);
                var textureImporter = AssetImporter.GetAtPath(path) as TextureImporter;

                details.AddTexture(textureImporter, texture);
            }

            EditorUtility.ClearProgressBar();
            return(details);
        }
Exemple #2
0
        private static TextureDetails GetAllTexturesFromScene()
        {
            var details          = new TextureDetails();
            var checkedMaterials = new List <Material>();

            var allGameObjects       = Resources.FindObjectsOfTypeAll(typeof(GameObject));
            var allGameObjectsLength = allGameObjects.Length;

            for (var i = 0; i < allGameObjectsLength; i++)
            {
                var gameObject = allGameObjects[i] as GameObject;

                if (gameObject.hideFlags != HideFlags.None || EditorUtility.IsPersistent(gameObject.transform.root.gameObject))
                {
                    continue;
                }

                if (EditorUtility.DisplayCancelableProgressBar("Getting All Textures from Scene", gameObject.name, (float)i / allGameObjectsLength))
                {
                    break;
                }

                var renderers = gameObject.GetComponents <Renderer>();
                for (var j = 0; j < renderers.Length; j++)
                {
                    var renderer = renderers[j];
                    for (var k = 0; k < renderer.sharedMaterials.Length; k++)
                    {
                        var material = renderer.sharedMaterials[k];

                        if (material == null || checkedMaterials.Contains(material))
                        {
                            continue;
                        }

                        checkedMaterials.Add(material);

                        var shader = material.shader;

                        for (var l = 0; l < ShaderUtil.GetPropertyCount(shader); l++)
                        {
                            if (ShaderUtil.GetPropertyType(shader, l) == ShaderUtil.ShaderPropertyType.TexEnv)
                            {
                                var texture = material.GetTexture(ShaderUtil.GetPropertyName(shader, l));

                                var textureImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(texture)) as TextureImporter;

                                if (textureImporter != null)
                                {
                                    details.AddTexture(textureImporter, texture);
                                }
                            }
                        }
                    }
                }
            }

            EditorUtility.ClearProgressBar();
            return(details);
        }
Exemple #3
0
        private void OnGUI()
        {
            GUILayout.Label("Selected Textures", Styles.BoldWrap);
            using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox))
            {
                using (new EditorGUILayout.VerticalScope())
                {
                    GUILayout.Label("<b>Texture Count:</b> " + details.TextureCount, Styles.LabelRichText);
                    GUILayout.Label("<b>Uncrunched Count:</b> " + details.UncrunchedCount, Styles.LabelRichText);
                    GUILayout.Label("<b>Storage Size:</b> " + EditorUtility.FormatBytes(details.StorageSize), Styles.LabelRichText);
                }

                using (new EditorGUILayout.VerticalScope())
                {
                    GUILayout.Label("<b>Normal Maps:</b> " + details.NormalMaps, Styles.LabelRichText);
                    GUILayout.Label("<b>Cubemaps:</b> " + details.Cubemaps, Styles.LabelRichText);
                }
            }

            importerSettingsManager.DrawSettings();

            GUILayout.Space(5);

            GUILayout.Label("Get textures from:");

            using (new EditorGUILayout.HorizontalScope())
            {
                if (GUILayout.Button("Scene", GUILayout.Width(70), GUILayout.Height(20)))
                {
                    details = GetAllTexturesFromScene();
                }

                if (GUILayout.Button("Assets", GUILayout.Width(70), GUILayout.Height(20)))
                {
                    details = GetAllTexturesFromAssets();
                }

                GUILayout.FlexibleSpace();

                if (GUILayout.Button("Revert", GUILayout.Width(70), GUILayout.Height(20)))
                {
                    importerSettingsManager = new ImporterSettingsManager();
                }

                if (GUILayout.Button("Apply", GUILayout.Width(70), GUILayout.Height(20)))
                {
                    if (EditorUtility.DisplayDialog("Process Importers?", $"About to process Texture Import settings on {details.TextureCount} textures, this can take a while depending on the amount and size of them.\n\nDo you want to continue?", "Ok", "Cancel"))
                    {
                        importerSettingsManager.ProcessTextures(details);
                    }
                }
            }
        }
Exemple #4
0
        public void ProcessTextures(TextureDetails details)
        {
            try
            {
                AssetDatabase.StartAssetEditing();

                var importers = details.GetImporters;
                var count     = details.TextureCount;
                var current   = 1;
                foreach (var importer in importers)
                {
                    EditorUtility.DisplayProgressBar("Applying New Settings", importer.assetPath, (float)current / count);

                    if (IgnoreNormalMaps && importer.textureType == TextureImporterType.NormalMap)
                    {
                        continue;
                    }

                    if (IgnoreCubemaps && importer.textureShape == TextureImporterShape.TextureCube)
                    {
                        var oldMaxTextureSize = importer.maxTextureSize;
                        var newMaxTextureSize = MaxTextureSize;

                        switch (OverrideCubemapSettingsWhen)
                        {
                        case OverrideWhenSize.SmallerThan:
                            if (oldMaxTextureSize > newMaxTextureSize)
                            {
                                continue;
                            }
                            break;

                        case OverrideWhenSize.BiggerThan:
                            if (oldMaxTextureSize < newMaxTextureSize)
                            {
                                continue;
                            }
                            break;
                        }
                    }

                    if (!DontChangeMipMaps)
                    {
                        importer.mipmapEnabled    = GenerateMipMaps;
                        importer.streamingMipmaps = StreamingMipMap;
                    }

                    if (!DontChangeAniso)
                    {
                        var oldAnisoLevel = importer.anisoLevel;
                        var newAnisoLevel = AnisoLevel;

                        switch (OverrideAnisoWhen)
                        {
                        case OverrideWhenSize.Always:
                            importer.anisoLevel = AnisoLevel;
                            break;

                        case OverrideWhenSize.SmallerThan:
                            if (oldAnisoLevel < newAnisoLevel)
                            {
                                importer.anisoLevel = newAnisoLevel;
                            }

                            break;

                        case OverrideWhenSize.BiggerThan:
                            if (oldAnisoLevel > newAnisoLevel)
                            {
                                importer.maxTextureSize = newAnisoLevel;
                            }

                            break;
                        }
                    }

                    var skipCrunchCompression = false;

                    if (DontOverrideCrunchWhen != DontOverrideWhen.Never)
                    {
                        switch (DontOverrideCrunchWhen)
                        {
                        case DontOverrideWhen.AlreadyDisabled:
                            if (!importer.crunchedCompression)
                            {
                                skipCrunchCompression = true;
                            }
                            break;

                        case DontOverrideWhen.AlreadyEnabled:
                            if (importer.crunchedCompression)
                            {
                                skipCrunchCompression = true;
                            }
                            break;
                        }
                    }

                    if (!skipCrunchCompression)
                    {
                        var oldMaxTextureSize = importer.maxTextureSize;
                        var newMaxTextureSize = MaxTextureSize;
                        importer.crunchedCompression = CrunchCompression;

                        if (importer.crunchedCompression)
                        {
                            switch (OverrideMaxTextureSizeWhen)
                            {
                            case OverrideWhenSize.Always:
                                importer.maxTextureSize = newMaxTextureSize;
                                break;

                            case OverrideWhenSize.SmallerThan:
                                if (oldMaxTextureSize < newMaxTextureSize)
                                {
                                    importer.maxTextureSize = newMaxTextureSize;
                                }

                                break;

                            case OverrideWhenSize.BiggerThan:
                                if (oldMaxTextureSize > newMaxTextureSize)
                                {
                                    importer.maxTextureSize = newMaxTextureSize;
                                }

                                break;
                            }
                        }
                    }

                    importer.SaveAndReimport();
                    current++;
                }
            }
            finally
            {
                EditorUtility.ClearProgressBar();
                details.ResetStats();
                AssetDatabase.StopAssetEditing();
            }
        }