Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)

这篇具有很好参考价值的文章主要介绍了Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


目的

备忘,便于日后自己索引


问题

为了学习了解大厂项目的效果:
上周为了将 王者荣耀的 杨玉环 的某个皮肤的头发效果还原
所以我想直接抓模型,再还原 shader
我使用的还是以前的老方法: GPA + 夜神模拟器,具体可以查看以前的另一篇教程,具体参考:教你如何使用GPA导出模型,另送一个 GPA CSV2MESH Tool in unity
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

抓出来的数据,导出 FBX 后,我看不出什么异常

直到,我逐行的 shader 还原效果的时候
发现 vertex input 数据有 float4 uv1 : TEXCOORD1; float4 uv2 : TEXCOORD2;

但是发现 shader 调试发现,uv1, uv2 使用颜色输出都发现了数据不对的 BUG

然后我还想在 unity Game 视图下,使用 RenderDoc 抓帧分析一下
结果 Load RenderDoc 之后,直接导致 unity 闪退
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

瞄了一下 CSharp 代码,发现我使用的是 Mesh.uv API,getter and setter 都是 Vector2[] 的,所以 zw 是不可能设置上的
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后瞄了一下 Mesh 是有 void SetUVs(int channel, Vector4[] uvs) 的 API 的
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
但是经过测试,还是发现 UV的 zw 无法保存下来
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

最终我问了一下unity 技术官方,结果他们测试是OK的 (因为他们是对 Mesh 内存数据的实时修改)
然后我也试了一下,确实OK,但是经过自己跟进一步测试,发现使用 FBX Exporter 导出之后,UV 还是会丢失的
我将测试总结一下: unity Mesh 中会保存 uv vector4 的数据,到时经过 FBX Exporter 插件导出之后,uv 就不可能保存 Vector4 了
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后我分析了一下 FBX Exporter 插件的代码
发现一丢丢问题:

  1. 我将 FBX Exporter Local 化后,再按照我下面截图的内容,修改后,还是无法导出 (如何 local 化,可以参考我之前的文章:Unity - 如何修改一个 Package 或是如何将 Package Local化 )
    Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

  2. 发现 Unity 中 AutoDesk 的 package 里面封装的 API FbxLayerElemetnUV.Create 进入是继承 UV2
    也要先 local,但是这个 package 比较特殊,在 PackageManager 中不显示的,方法可以是先从 Library/PackageCache/com.autodesk.fbx@4.2.0 剪贴到 [项目目录]/Packages/下面,然后使用 Package add from disk 的方式
    然后再开始修改代码
    public class FbxLayerElementUV : FbxLayerElementTemplateFbxVector2 修改为
    public class FbxLayerElementUV : FbxLayerElementTemplateFbxVector4
    结果发现还是不行

Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

因为之前说的,unity editor 下,无论 game view, 还是 scene view
直接 Load RenderDoc 都会导致unity 闪退
然后我再使用 RenderDoc + 真机 抓帧分析,果然是没有 vertex input TEXCOORD0 zw 分量数据的
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs


解决方案

于是我就有点怀疑 FBX 是不能保存 uv 超过4 分量数据的
然后百度: ‘fbx 文本 file header’ 找到这篇:

  • FBX文件结构解读【文本格式】
    • 译文原始地址在这:FBX文件结构解读
    • 翻译之前的原文在这:A quick tutorial about the FBX ASCII format

google ‘fbx ascii file header’ 找到:

  • FBX binary file format specification - blender 的
    再 ‘How to save uv data more than 4 components in fbx file’ 找到:
  • FBX export/import only supports Vector2 in UV (but the uvs can contain upto Vector4 in Unity) - 这个人遇到的问题,和我一模一样,里面的解决方式就是使用 AssetData.CreateAsset(mesh, path) 的方式来解决的

经过前面 (还有很多篇)

看完 ascii 格式的 FBX 头文件后,我就知道,uv 存不了 vector4 了,那我就在猜

王者荣耀 也是使用 unity 开发的,难不成他们 TEXCOORD[N] 保存超过 2 个以上的分量数据都是使用 unity Mesh 的方式来保存的吗?


验证

  • 试一下 unity mesh 能否成功 - OK
  • 测试一下 *.obj 格式能否将 uv 保存超过 2 个分量以上的数据 - OK,但是AB打包可能不会打进去(目录中注意的部分会有讲到)

保存为 Unity Mesh 结果 - OK

先构建uv数据
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
然后设置数据
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
然后 shader 打印
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

之前的z是全黑色,w全白色,现在都有对应的强度了,OK,说明 unity mesh 还是OK的
想要了解 unity mesh 如何保存数据,我们可以将 AssetDatabase.CreateAsset 之后的 Mesh.asset 文件用文本编辑器打开,瞄一下就好啦
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs


保存为 *.obj 文件结果 - not OK,但是可以 DIY importer

首先我们用 blender 简单整一个 cube,将 uv 展好,如下
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后导出 *.obj 放到 unity 里面瞄一下,如下图
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
然后我们直接给 obj 里面的 vt 增加 字段数据的分量,看看 unity 有否变化,然后发现是没有变化的
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后我们发现修改不了 原始的 .obj 里面在 library 下的 mesh cache 信息 (.fbx) 同样如此

比如下面的代码,我将问题写在注释了

        var assetObj = AssetDatabase.LoadAssetAtPath<Object>(assetPath); // assetObj == null
        var modelPrefab = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath); // modelPrefab == null
        var mesh_filter = modelPrefab.GetComponentInChildren<MeshFilter>(); // 所有导致 modelPrefab 出现空引用的 BUG

完整如下


public class AssetsImporterExt : AssetPostprocessor
{
    private void OnPreprocessModel()
    {
        var mi = assetImporter as ModelImporter;
        if (mi == null) return;

        // assetPath == "Assets/Test/Test_uv.obj"
        var assetPath = assetImporter.assetPath;
        var assetObj = AssetDatabase.LoadAssetAtPath<Object>(assetPath); // assetObj == null
        var modelPrefab = AssetDatabase.LoadAssetAtPath<GameObject>(assetPath); // modelPrefab == null
        var mesh_filter = modelPrefab.GetComponentInChildren<MeshFilter>(); // 所有导致 modelPrefab 出现空引用的 BUG
        if (mesh_filter == null) return;
        var mesh = mesh_filter.sharedMesh;
        var uvs = new List<Vector4>();
        mesh.GetUVs(0, uvs);
        var ext = System.IO.Path.GetExtension(assetPath).ToLower();
        if (ext == ".obj")
        {
            var spliter = new string[] { " " };
            var sb = new StringBuilder();
            var dirty = false;
            using(var reader = new StreamReader(assetPath))
            {
                var idx = 0;
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (line.StartsWith("vt"))
                    {
                        sb.Clear();
                        var args = line.Split(spliter, System.StringSplitOptions.RemoveEmptyEntries);
                        if (args.Length > 3) sb.Append(args[3]);
                        if (args.Length > 4) sb.Append(" " + args[4]);
                        Debug.Log($"extension uv data zw : {sb}");

                        var uv_data = uvs[idx]; // get from array

                        if (args.Length > 3)
                        {
                            if (!float.TryParse(args[3], out float val)
                                || float.IsNaN(val)
                                || float.IsInfinity(val)
                                )
                            {
                                val = 0f;
                            }

                            uv_data.z = val; // update z component
                        }

                        if (args.Length > 4)
                        {
                            if (!float.TryParse(args[4], out float val)
                                || float.IsNaN(val)
                                || float.IsInfinity(val)
                                )
                            {
                                val = 0f;
                            }

                            uv_data.w = val; // update w component
                        }

                        uvs[idx] = uv_data; // update to array

                        ++idx;
                        dirty = true;
                    } // end of if (line.StartsWith("vt"))
                } // end of while (!reader.EndOfStream)
            } // end of using(var reader = new StreamReader(assetPath))
            if (dirty)
            {
                EditorUtility.SetDirty(mesh);
                EditorUtility.SetDirty(modelPrefab);
                AssetDatabase.SaveAssetIfDirty(modelPrefab);
            }
        } // end of if (ext == ".obj")
    }

既然 原始模型的 mesh 修改不了,那么我们可以处理 prefab 里面的 mesh,下面进行尝试一下
其实这帖子 FBX export/import only supports Vector2 in UV (but the uvs can contain upto Vector4 in Unity) 里面也有人是这样的思路,如下图
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

先来一段代码,看看能否修改成功

    private void OnPostprocessPrefab(GameObject gameObject)
    {
        var mf = gameObject.GetComponentInChildren<MeshFilter>();
        if (mf == null) return;
        var mesh_path = AssetDatabase.GetAssetPath(mf.sharedMesh);
        Debug.Log($"mehs_path : {mesh_path}");

        var mesh = mf.sharedMesh;
        var uvs = new List<Vector4>();
        mesh.GetUVs(0, uvs);
        var ext = System.IO.Path.GetExtension(mesh_path).ToLower();
        if (ext == ".obj")
        {
            var spliter = new string[] { " " };
            var sb = new StringBuilder();
            var dirty = false;
            using (var reader = new StreamReader(mesh_path))
            {
                var idx = 0;
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (line.StartsWith("vt"))
                    {
                        sb.Clear();
                        var args = line.Split(spliter, System.StringSplitOptions.RemoveEmptyEntries);
                        if (args.Length > 3) sb.Append(args[3]);
                        if (args.Length > 4) sb.Append(" " + args[4]);
                        Debug.Log($"extension uv data zw : {sb}");

                        var uv_data = uvs[idx]; // get from array

                        if (args.Length > 3)
                        {
                            if (!float.TryParse(args[3], out float val)
                                || float.IsNaN(val)
                                || float.IsInfinity(val)
                                )
                            {
                                val = 0f;
                            }

                            uv_data.z = val; // update z component
                        }

                        if (args.Length > 4)
                        {
                            if (!float.TryParse(args[4], out float val)
                                || float.IsNaN(val)
                                || float.IsInfinity(val)
                                )
                            {
                                val = 0f;
                            }

                            uv_data.w = val; // update w component
                        }

                        uvs[idx] = uv_data; // update to array

                        ++idx;
                        dirty = true;
                    } // end of if (line.StartsWith("vt"))
                } // end of while (!reader.EndOfStream)
            } // end of using(var reader = new StreamReader(assetPath))
            if (dirty)
            {
                mesh.SetUVs(0, uvs);
                EditorUtility.SetDirty(mesh);
                EditorUtility.SetDirty(gameObject);
                AssetDatabase.SaveAssetIfDirty(gameObject);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }
        } // end of if (ext == ".obj")
    }

Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

OK,有了上面的 postprocess 代码 + prefab,我们 reimport 测试一下
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs
可以看到 Test_uv.obj 里面的 mesh 的 uv 从 flaot2 变成了 float4 了,如下图
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后我们看一下 测试 shader 的效果,发现是有数据异常的,一部分有设置成功,一部分没有,那么很有可能是 *.obj 的顶点数解析和unity不一样
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

首先,瞄一下,*.obj 里面有 14 条 uv 信息 xy 分量是原来的,后面的 zw (0.25, 0.5) 都是我后续增加的
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后我们断点发现,unity 解析出来,会有 24 个 uv 信息,如下图
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

观察了一下规律,可以发现,他将一些多面共点,拆分为分别的三角面的对应的独立点
因此我们可以根据 uv.xy 如果坐标相同,那么我们就将 uv.zw 记录一份,共享这些 uv.xy 的数据的 zw 数据即可
继续修改一下代码

    private void OnPostprocessPrefab(GameObject gameObject)
    {
        var mf = gameObject.GetComponentInChildren<MeshFilter>();
        if (mf == null) return;
        var mesh_path = AssetDatabase.GetAssetPath(mf.sharedMesh);
        Debug.Log($"mehs_path : {mesh_path}");

        var mesh = mf.sharedMesh;
        var uvs = new List<Vector4>();
        mesh.GetUVs(0, uvs);
        var ext = System.IO.Path.GetExtension(mesh_path).ToLower();
        if (ext == ".obj")
        {
            var dict = new Dictionary<string, Vector2>();
            var spliter = new string[] { " " };
            var sb = new StringBuilder();
            var dirty = false;
            using (var reader = new StreamReader(mesh_path))
            {
                var idx = 0;
                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    if (line.StartsWith("vt"))
                    {
                        sb.Clear();
                        var args = line.Split(spliter, System.StringSplitOptions.RemoveEmptyEntries);
                        if (args.Length > 3) sb.Append(args[3]);
                        if (args.Length > 4) sb.Append(" " + args[4]);
                        Debug.Log($"extension uv data zw : {sb}");

                        var uv_data = uvs[idx]; // get from array
                        var key1 = float.Parse(args[1]).ToString("0.000000");
                        var key2 = float.Parse(args[2]).ToString("0.000000");
                        var key = $"{key1},{key2}";
                        if (!dict.TryGetValue(key, out var zwVec))
                        {
                            if (args.Length > 3)
                            {
                                if (!float.TryParse(args[3], out float val)
                                    || float.IsNaN(val)
                                    || float.IsInfinity(val)
                                    )
                                {
                                    val = 0f;
                                }

                                uv_data.z = val; // update z component
                            }

                            if (args.Length > 4)
                            {
                                if (!float.TryParse(args[4], out float val)
                                    || float.IsNaN(val)
                                    || float.IsInfinity(val)
                                    )
                                {
                                    val = 0f;
                                }

                                uv_data.w = val; // update w component
                            }

                            zwVec.x = uv_data.z;
                            zwVec.y = uv_data.w;

                            dict[key] = new Vector2(zwVec.x, zwVec.y); // update to dict
                        }

                        uvs[idx] = uv_data; // update to array

                        ++idx;
                        dirty = true;
                    } // end of if (line.StartsWith("vt"))
                } // end of while (!reader.EndOfStream)
            } // end of using(var reader = new StreamReader(assetPath))
            if (dirty)
            {
                // 将 xy 相同的都共用 uv.zw 数据
                for (int i = 0; i < uvs.Count; i++)
                {
                    var uv = uvs[i];
                    var key = $"{uv.x.ToString("0.000000")},{uv.y.ToString("0.000000")}";
                    if (dict.TryGetValue(key, out var zwVec))
                    {
                        uv.z = zwVec.x;
                        uv.w = zwVec.y;
                        uvs[i] = uv;
                    }
                }
                mesh.SetUVs(0, uvs);
                EditorUtility.SetDirty(mesh);
                EditorUtility.SetDirty(gameObject);
                AssetDatabase.SaveAssetIfDirty(gameObject);
                AssetDatabase.SaveAssets();
                AssetDatabase.Refresh();
            }
        } // end of if (ext == ".obj")
    }

查看渲染结果,正常了
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

然后我们试试修改 *.obj 里面的uv 扩展数据瞄一下效果如何
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs

最后的渲染效果如下
Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件无法保存超过2个分量,uv vector4,Mesh.SetUVs


注意

  • *.obj 这种方式暂时没去验证能否将打包出来的 ab 里面的 mesh 修改(因为里头的文件信息是再 library 里面的临时生成的问题,打包不会打包进去)

  • 但是使用 *.asset 来保存 unity mesh 的方式肯定可以,因为变成了文件信息文章来源地址https://www.toymoban.com/news/detail-743240.html


References

  • FBX export/import only supports Vector2 in UV (but the uvs can contain upto Vector4 in Unity)

到了这里,关于Unity - 导出的FBX模型,无法将 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 场景中添加 FBX 模型 | 3D 物体渲染 | 3D 物体材质设置 )

    Unity 中使用的 3D 模型格式为 FBX , 使用如下建模软件 可制作该类型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 将 3D 模型导出为 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目录 下 , 创建一个模型目录 Models , 将 模型文件直接从文件系统中拖到该目录中

    2023年04月15日
    浏览(82)
  • unity导出FBX

    unity版本:2020.2.1f1c1 1、添加Fbx Exporter的package包 2、选中一个预制体点击菜单Gameobject -- Export To Fbx 3、设置导出参数 选择Binary 而非ASCII,否则无法导入blender 真的是so easy呀~~

    2024年02月12日
    浏览(42)
  • Unity中 Prefab导出FBX

    Unity 已经在Package Manager中集合了很多实用的插件,比如这里用到的FBX Exporter. 在Unity的菜单中Window ---- Package Manager,打开包管理界面 点击设置如图下面的Advanced ... 选择该选项 在Advanced Settings 中勾上Enable Preview Package 选择   关掉窗口 选择包类型 下面的 Unity Registry 然后找到FBX

    2024年02月11日
    浏览(47)
  • 在unity中结合FBX Exporter合并mesh并导出Fbx

    目标是把多个mesh合并成一个或者几个,降低drawcall,但是又不想标记成static的,也不想进3dmax合并的一个尝试。 首先在Window - Package Manager里安装FBX Exporter,我的unity版本是2020,2019应该也可以 安装成功后发现右键GameObject,可以导出fbx了。 接下来就是合并多个mesh 假设我有这么

    2023年04月10日
    浏览(48)
  • 【unity】 untiy中如何导出FBX

    打开unity 菜单中Window -----Package Manager 点击下面的Adv… 勾上Enable 选择 I understand 关掉窗口 选择下面的 Unity Registry 点击安装 安装好以后 GameObject — Export To FBX…就可以了 选中你需要导出的文件 ,就可以直接导出FBX文件了 知道你存放的路径就看到了

    2024年02月15日
    浏览(48)
  • 游戏人物下载—Pmx模型转Fbx并在Unity中使用

    Blender官网 点击LTS版本 选择官方下载地址 选择2.83LTS版本,3.0以后的版本会出现贴图错误的情况 下载完一路安装就是,安装完打开 语言选中文 Cats插件Git地址 下载好的压缩包 打开Blender,点击编辑-偏好设置 点击:插件–安装 选择下载的Zip文件,安装 安装完成后再次打开偏好

    2024年02月04日
    浏览(78)
  • Unity场景素材导出为 FBX文件的方法

    一、Unity场景素材导出为 FBX文件的方法:http://t.csdn.cn/Xyjxe 二、Unity场景素材导出为 OBJ文件的方法:http://t.csdn.cn/08RY3 三、Unity地形导出为 OBJ文件的方法 (大家可以打开我的博客主页进行查看此系列其它文章) 文章目录 系列文章目录 前言 一、Unity导出FBX文件 安装插件 网盘下

    2024年02月05日
    浏览(80)
  • unity小:使用Unity FBX Exporter 将 3DMax场景或者模型无损导入Unity

    本指南旨在帮助您顺利安装和配置Unity FBX Exporter插件,并解决相关的常见问题。 下载并安装FBX Exporter插件。 打开Unity,选择 Edit Project Settings Fbx Export 。 点击 Install Unity Integration 并选择3ds Max的插件安装目录。 如果不确定安装目录,可以在3ds Max中查看: 自定义 配置用户和系

    2024年04月27日
    浏览(41)
  • Unity导出FBX到blender-最后选择Binary

    1.打开文件 -window-package....  2.点右上角的设置符号-选择 advanced..... 3.打勾    4.左键选择Package:in project,选 unity registry 5.下滑找到FBX...   6.install 7.在hierarchy选择自己要导出的模型 8.在gameobject-export.....   9.跳出来这个选项选择-Binary-我也不知道为什么反正ascll导入不了blender 10

    2024年02月07日
    浏览(45)
  • 使用Blender的CATS插件把MMD模型转为FBX,导入Unity

    CATS插件 https://github.com/absolute-quantum/cats-blender-plugin 安装到blender 我使用的是3.0版本 星穹铁道,原神等游戏的官方会把模型放在模之屋供二创下载 模之屋 https://www.aplaybox.com/ 我这次下载的是三月七的模型 解压缩后备用 按N选择CATS 点ImportModel,选择 三月七1.0.pmx 导入以后选sha

    2024年02月08日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包