private string[] GetExistingShaderKeywords(Shader shader, IList <ShaderCompilerData> data) { return(data.SelectMany(d => d.shaderKeywordSet.GetShaderKeywords()) .Where(k => ShaderKeyword.IsKeywordLocal(k)) .Select(k => ShaderKeyword.GetKeywordName(shader, k)) .Where(kwd => WFCommonUtility.IsEnableKeyword(kwd)).Distinct().ToArray()); }
public static void DeleteShaderKeyword(SerializedObject so) { var prop = so.FindProperty("m_ShaderKeywords"); if (prop == null || string.IsNullOrEmpty(prop.stringValue)) { return; } var keywords = prop.stringValue; keywords = string.Join(" ", keywords.Split(' ').Where(kwd => !WFCommonUtility.IsEnableKeyword(kwd)).OrderBy(kwd => kwd)); if (!string.IsNullOrWhiteSpace(keywords)) { UnityEngine.Debug.Log("[WF][Tool] Deleted Shaderkeyword: " + keywords); } prop.stringValue = ""; so.ApplyModifiedProperties(); }
private void AppendUsedShaderVariant(Material mat, Shader shader) { // マテリアルから _XX_ENABLE となっているキーワードを回収 IEnumerable <string> keywords = mat.shaderKeywords.Where(kwd => WFCommonUtility.IsEnableKeyword(kwd)); UsedShaderVariant usv = new UsedShaderVariant(shader.name, keywords); if (!usedShaderVariantList.Contains(usv)) { usedShaderVariantList.Add(usv); // 直接のシェーダではなく、そのフォールバックを利用できるならばそれも追加する if (settings == null || !settings.stripFallback) { var name = WFCommonUtility.GetShaderFallBackTarget(shader); var fallback = name == null ? null : Shader.Find(name); if (IsStripTargetShader(fallback)) { AppendUsedShaderVariant(mat, fallback); } } } }