/// <summary>
        /// Prepares the shader stripper processors and report generation structures
        /// This should be called manually before generating asset bundles.
        /// </summary>
        public static void PrepareShaderStripper(bool isAssetBundleBuild)
        {
            s_IsAssetBundleBuild = isAssetBundleBuild;
            var graphicsSettingsObj = AssetDatabase.LoadAssetAtPath <GraphicsSettings>("ProjectSettings/GraphicsSettings.asset");
            var serializedObject    = new SerializedObject(graphicsSettingsObj);

            s_AlwaysIncludedShaders = serializedObject.FindProperty("m_AlwaysIncludedShaders");

            s_ShaderProcessors             = null;
            s_ProcessAlwaysIncludedShaders = ShaderStripperSettings.GetOrCreateSettings().processAlwaysIncludedShaders;
            s_IsEnabled = ShaderProcessors.Any(x => x.enabled);
            if (s_IsEnabled)
            {
                foreach (var processor in ShaderProcessors)
                {
                    processor.Initialize();
                }

                Logger.Clear();
                s_ShaderLogEntries.Clear();
                s_StripTimer.Reset();
                s_BuildTimer.Restart();
            }
            else
            {
                Debug.Log("[Shader Stripper] No shaders will be stripped due to no processors are enabled.");
            }
        }
예제 #2
0
        public static SettingsProvider CreateProjectSettingsProvider()
        {
            if (!IsSettingsAvailable())
            {
                ShaderStripperSettings.GetOrCreateSettings();
            }

            return(new ShaderStripperSettingsProvider("Project/Daihenka/Shader Stripping", SettingsScope.Project)
            {
                // TODO Setup keywords
                keywords = new string[0]
            });
        }
        /// <summary>
        /// Generates the post build stripped shaders report.
        /// This should be called manually after generating asset bundles
        /// </summary>
        public static void GenerateReport()
        {
            if (!s_IsEnabled)
            {
                return;
            }
            s_BuildTimer.Stop();
            var buildStats = $@"Build Duration: {s_BuildTimer.ElapsedMilliseconds}ms
Shader Stripping Duration: {s_StripTimer.ElapsedMilliseconds}ms
Total shaders included: {s_TotalShadersIncluded}
Total shaders stripped: {s_TotalShadersStripped}";

            Debug.Log(buildStats);

            var settings = ShaderStripperSettings.GetOrCreateSettings();

            Logger.Log(buildStats);
            Logger.Log();
            Logger.Log(new string('-', 100));
            Logger.Log();
            Logger.Log("INCLUDED SHADER VARIANTS");
            Logger.Log();
            Logger.Log(new string('-', 100));
            Logger.Log();
            foreach (var entry in s_ShaderLogEntries)
            {
                if (entry.Value.includeCount <= 0)
                {
                    continue;
                }
                Logger.LogFormat(kShaderVariantCountLogFormat, entry.Key, entry.Value.includeCount, entry.Value.includeVariants.Count);
                if (settings.logIncludedVariants)
                {
                    foreach (var keywords in entry.Value.includeVariants)
                    {
                        Logger.Log($"\t {(keywords.IsNullOrWhiteSpace() ? "<no keywords>" : keywords)}");
                    }

                    Logger.Log();
                }
            }

            Logger.Log();
            Logger.Log(new string('-', 100));
            Logger.Log();
            Logger.Log("STRIPPED SHADER VARIANTS");
            Logger.Log();
            Logger.Log(new string('-', 100));
            Logger.Log();
            foreach (var entry in s_ShaderLogEntries)
            {
                if (entry.Value.stripCount <= 0)
                {
                    continue;
                }
                Logger.LogFormat(kShaderVariantCountLogFormat, entry.Key, entry.Value.stripCount, entry.Value.stripVariants.Count);
                if (settings.logStrippedVariants)
                {
                    foreach (var keywords in entry.Value.stripVariants)
                    {
                        Logger.Log($"\t {(keywords.IsNullOrWhiteSpace() ? "<no keywords>" : keywords)}");
                    }

                    Logger.Log();
                }
            }

            Logger.Save(s_IsAssetBundleBuild ? "_AssetBundles" : "_Build");
            s_StripTimer.Reset();
            s_BuildTimer.Restart();
            s_TotalShadersIncluded = 0;
            s_TotalShadersStripped = 0;
        }