批量设置FBX文件导入模型切线方式

Table of Contents

请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com

原理

利用AssetDatabase.FindAssets("t:Model")找出所有的FBX模型的GUID。再利用AssetDatabase.GUIDToAssetPath将GUID转为文件路径。然后使用 AssetImporter.GetAtPath函数拿到 模型导入器(ModelImporter) 对象。模型导入期对象里面就有一个importTangents属性项,当此项为None时表示没切线,其他选项都表示带有切线信息。下面是查找所有带有切线信息的模型的函数。

/// <summary>
/// 查找出带有切线信息的模型
/// </summary>
/// List<string> mikkTSpace 使用Morten Mikkelsen切线空间(MikkTSpace)算法计算生成切线的模型文件名
/// List<string> calculateLegacy 使用传统的算法计算生成切线的模型文件名
/// List<string> calculateLegacyWithSplitTangents,使用传统的算法,并对UV图表进行拆分的方式,计算生成切线的模型文件名
/// List<string> imported 从原始文件中导入切线的模型文件名
private void FindAllModelsContainTangent(List<string> mikkTSpace,List<string> calculateLegacy,
List<string> calculateLegacyWithSplitTangents,List<string> imported)
{
    // 使用了库函数,用"t:Model"参数检索所有的模型文件。即FBX文件
    // 返回的是所有fbx的GUID
    string[] allModels = AssetDatabase.FindAssets("t:Model");

    for (int i = 0; i < allModels.Length; i++)
    {
        // 把GUID换成资源文件路径名,然后使用AssetImporter模块获取到模型导入器
        string modelPath = AssetDatabase.GUIDToAssetPath(allModels[i]);
        var modelImporter = AssetImporter.GetAtPath(modelPath) as ModelImporter;

        if (modelImporter == null)
            continue;

        switch (modelImporter.importTangents)
        {
            case ModelImporterTangents.CalculateLegacy: // 使用传统的算法计算生成切线
                calculateLegacy.Add(modelPath);
                break;
            case ModelImporterTangents.CalculateLegacyWithSplitTangents: // 使用传统的算法,并对UV图表进行拆分的方式,计算生成切线
                calculateLegacyWithSplitTangents.Add(modelPath);
                break;
            case ModelImporterTangents.CalculateMikk: // 使用了MikkTSpace方式生成计算切线 http://www.mikktspace.com/
                mikkTSpace.Add(modelPath);
                break;
            case ModelImporterTangents.Import: // 从原始文件中导入切线
                imported.Add(modelPath);
                break;
            case ModelImporterTangents.None:
            default:
                break;
        }
    }
}

参考网页

MikkTSpace方式生成计算切线

kumakoko avatar
kumakoko
pure coder
comments powered by Disqus