收集Unity变体工具

2023/07 03 21:07

处理步骤

1、查找所有的Material文件,收集所有Material对象的shaderKeywords
2、查找所有的Shader文件,获得 常用的Keyword列表,以及 所有的Keyword列表
3、创建ShaderVariantCollection.ShaderVariant对象svobj
4、判断Materials中的keywords如果在 常用的Keyword列表中,则追加到svobj
5、如果有自定义的EnableKeyword,判断它是否在 所有的Keyword列表中,如果在,追加到svobj
6、将svobj对象写入到 ShaderVariant 变体文件中,完成收集

总结
先把材质中用到的常用组合写入到变体中
再把代码中手动的组合写入到变体中,注意:代码中控制的宏,要用multi_compile

public int AddMultiCompileKeywords(Shader shader, ShaderVariantCollection shaderVariantCollections)
{
    if (mPassTypes.Length == 0)
    {
        return -2;
    }

    foreach(var strKeywords in mAllCombinaKeywords)
    {
        var keywordArray = strKeywords.Split(' ');
        foreach (var passType in mPassTypes)
        {
            var ePassType = (UnityEngine.Rendering.PassType)passType;
            var shaderVariant = new ShaderVariantCollection.ShaderVariant()
            {
                shader = shader,
                passType = ePassType,
                keywords = keywordArray
            };
            if (!shaderVariantCollections.Contains(shaderVariant))
            {
                shaderVariantCollections.Add(shaderVariant);
            }
        }
    }

    return 0;
}