/// <summary> /// 搜集keywords /// </summary> public ShaderVariantCollection CollectionKeywords(string[] matPaths, ShaderVariantCollection excludeCollection) { var shaderCollection = new ShaderVariantCollection(); //遍历所有mat的KeyWords foreach (var path in matPaths) { //Material; var material = AssetDatabase.LoadAssetAtPath <Material>(path); //shader数据 var ret = shaderDataMap.TryGetValue(material.shader, out var shaderData); if (!ret) { shaderData = ShaderUtilImpl.GetShaderVariantEntriesFilteredInternal(material.shader, 256, new string[] { }, excludeCollection); shaderDataMap[material.shader] = shaderData; } //收集shaderVaraint var passTypes = shaderData.passTypes.Distinct(); foreach (var pt in passTypes) { var shaderVaraint = AddVariantOfPassTypeToCollection((PassType)pt, material); shaderCollection.Add(shaderVaraint); } //SRP的搜集 // AddVariantOfPassTypeToCollection(PassType.ScriptableRenderPipeline, material); // //ShadiwCast的keyword // if (material.FindPass("ShadowCaster") != -1) // { // AddVariantOfPassTypeToCollection(PassType.ShadowCaster, material); // } } return(shaderCollection); }
/// <summary> /// 获取所有的GlobalKeyword /// </summary> /// <param name="shader"></param> /// <returns></returns> List <string> GetShaderAllKeyworlds(Shader shader) { List <string> keywords = null; shaderKeyworldsDic.TryGetValue(shader, out keywords); if (keywords == null) { keywords = new List <string>(ShaderUtilImpl.GetShaderGlobalKeywords(shader)); shaderKeyworldsDic.Add(shader, keywords); } return(keywords); }