国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)

這篇具有很好參考價(jià)值的文章主要介紹了Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


目的

備忘,便于日后自己索引


問題

為了學(xué)習(xí)了解大廠項(xiàng)目的效果:
上周為了將 王者榮耀的 楊玉環(huán) 的某個(gè)皮膚的頭發(fā)效果還原
所以我想直接抓模型,再還原 shader
我使用的還是以前的老方法: GPA + 夜神模擬器,具體可以查看以前的另一篇教程,具體參考:教你如何使用GPA導(dǎo)出模型,另送一個(gè) GPA CSV2MESH Tool in unity
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

抓出來的數(shù)據(jù),導(dǎo)出 FBX 后,我看不出什么異常

直到,我逐行的 shader 還原效果的時(shí)候
發(fā)現(xiàn) vertex input 數(shù)據(jù)有 float4 uv1 : TEXCOORD1; float4 uv2 : TEXCOORD2;

但是發(fā)現(xiàn) shader 調(diào)試發(fā)現(xiàn),uv1, uv2 使用顏色輸出都發(fā)現(xiàn)了數(shù)據(jù)不對(duì)的 BUG

然后我還想在 unity Game 視圖下,使用 RenderDoc 抓幀分析一下
結(jié)果 Load RenderDoc 之后,直接導(dǎo)致 unity 閃退
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

瞄了一下 CSharp 代碼,發(fā)現(xiàn)我使用的是 Mesh.uv API,getter and setter 都是 Vector2[] 的,所以 zw 是不可能設(shè)置上的
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后瞄了一下 Mesh 是有 void SetUVs(int channel, Vector4[] uvs) 的 API 的
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
但是經(jīng)過測(cè)試,還是發(fā)現(xiàn) UV的 zw 無法保存下來
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

最終我問了一下unity 技術(shù)官方,結(jié)果他們測(cè)試是OK的 (因?yàn)樗麄兪菍?duì) Mesh 內(nèi)存數(shù)據(jù)的實(shí)時(shí)修改)
然后我也試了一下,確實(shí)OK,但是經(jīng)過自己跟進(jìn)一步測(cè)試,發(fā)現(xiàn)使用 FBX Exporter 導(dǎo)出之后,UV 還是會(huì)丟失的
我將測(cè)試總結(jié)一下: unity Mesh 中會(huì)保存 uv vector4 的數(shù)據(jù),到時(shí)經(jīng)過 FBX Exporter 插件導(dǎo)出之后,uv 就不可能保存 Vector4 了
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后我分析了一下 FBX Exporter 插件的代碼
發(fā)現(xiàn)一丟丟問題:

  1. 我將 FBX Exporter Local 化后,再按照我下面截圖的內(nèi)容,修改后,還是無法導(dǎo)出 (如何 local 化,可以參考我之前的文章:Unity - 如何修改一個(gè) Package 或是如何將 Package Local化 )
    Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

  2. 發(fā)現(xiàn) Unity 中 AutoDesk 的 package 里面封裝的 API FbxLayerElemetnUV.Create 進(jìn)入是繼承 UV2
    也要先 local,但是這個(gè) package 比較特殊,在 PackageManager 中不顯示的,方法可以是先從 Library/PackageCache/com.autodesk.fbx@4.2.0 剪貼到 [項(xiàng)目目錄]/Packages/下面,然后使用 Package add from disk 的方式
    然后再開始修改代碼
    public class FbxLayerElementUV : FbxLayerElementTemplateFbxVector2 修改為
    public class FbxLayerElementUV : FbxLayerElementTemplateFbxVector4
    結(jié)果發(fā)現(xiàn)還是不行

Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

因?yàn)橹罢f的,unity editor 下,無論 game view, 還是 scene view
直接 Load RenderDoc 都會(huì)導(dǎo)致unity 閃退
然后我再使用 RenderDoc + 真機(jī) 抓幀分析,果然是沒有 vertex input TEXCOORD0 zw 分量數(shù)據(jù)的
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs


解決方案

于是我就有點(diǎn)懷疑 FBX 是不能保存 uv 超過4 分量數(shù)據(jù)的
然后百度: ‘fbx 文本 file header’ 找到這篇:

  • FBX文件結(jié)構(gòu)解讀【文本格式】
    • 譯文原始地址在這:FBX文件結(jié)構(gòu)解讀
    • 翻譯之前的原文在這: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) - 這個(gè)人遇到的問題,和我一模一樣,里面的解決方式就是使用 AssetData.CreateAsset(mesh, path) 的方式來解決的

經(jīng)過前面 (還有很多篇)

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

王者榮耀 也是使用 unity 開發(fā)的,難不成他們 TEXCOORD[N] 保存超過 2 個(gè)以上的分量數(shù)據(jù)都是使用 unity Mesh 的方式來保存的嗎?


驗(yàn)證

  • 試一下 unity mesh 能否成功 - OK
  • 測(cè)試一下 *.obj 格式能否將 uv 保存超過 2 個(gè)分量以上的數(shù)據(jù) - OK,但是AB打包可能不會(huì)打進(jìn)去(目錄中注意的部分會(huì)有講到)

保存為 Unity Mesh 結(jié)果 - OK

先構(gòu)建uv數(shù)據(jù)
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
然后設(shè)置數(shù)據(jù)
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
然后 shader 打印
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

之前的z是全黑色,w全白色,現(xiàn)在都有對(duì)應(yīng)的強(qiáng)度了,OK,說明 unity mesh 還是OK的
想要了解 unity mesh 如何保存數(shù)據(jù),我們可以將 AssetDatabase.CreateAsset 之后的 Mesh.asset 文件用文本編輯器打開,瞄一下就好啦
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs


保存為 *.obj 文件結(jié)果 - not OK,但是可以 DIY importer

首先我們用 blender 簡(jiǎn)單整一個(gè) cube,將 uv 展好,如下
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后導(dǎo)出 *.obj 放到 unity 里面瞄一下,如下圖
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
然后我們直接給 obj 里面的 vt 增加 字段數(shù)據(jù)的分量,看看 unity 有否變化,然后發(fā)現(xiàn)是沒有變化的
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后我們發(fā)現(xiàn)修改不了 原始的 .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>(); // 所有導(dǎo)致 modelPrefab 出現(xiàn)空引用的 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>(); // 所有導(dǎo)致 modelPrefab 出現(xiàn)空引用的 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,下面進(jìn)行嘗試一下
其實(shí)這帖子 FBX export/import only supports Vector2 in UV (but the uvs can contain upto Vector4 in Unity) 里面也有人是這樣的思路,如下圖
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,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 - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

OK,有了上面的 postprocess 代碼 + prefab,我們 reimport 測(cè)試一下
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs
可以看到 Test_uv.obj 里面的 mesh 的 uv 從 flaot2 變成了 float4 了,如下圖
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后我們看一下 測(cè)試 shader 的效果,發(fā)現(xiàn)是有數(shù)據(jù)異常的,一部分有設(shè)置成功,一部分沒有,那么很有可能是 *.obj 的頂點(diǎn)數(shù)解析和unity不一樣
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

首先,瞄一下,*.obj 里面有 14 條 uv 信息 xy 分量是原來的,后面的 zw (0.25, 0.5) 都是我后續(xù)增加的
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后我們斷點(diǎn)發(fā)現(xiàn),unity 解析出來,會(huì)有 24 個(gè) uv 信息,如下圖
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

觀察了一下規(guī)律,可以發(fā)現(xiàn),他將一些多面共點(diǎn),拆分為分別的三角面的對(duì)應(yīng)的獨(dú)立點(diǎn)
因此我們可以根據(jù) uv.xy 如果坐標(biāo)相同,那么我們就將 uv.zw 記錄一份,共享這些 uv.xy 的數(shù)據(jù)的 zw 數(shù)據(jù)即可
繼續(xù)修改一下代碼

    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 數(shù)據(jù)
                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")
    }

查看渲染結(jié)果,正常了
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

然后我們?cè)囋囆薷?*.obj 里面的uv 擴(kuò)展數(shù)據(jù)瞄一下效果如何
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs

最后的渲染效果如下
Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可),TA - 加油站,unity,unity,模型文件無法保存超過2個(gè)分量,uv vector4,Mesh.SetUVs


注意

  • *.obj 這種方式暫時(shí)沒去驗(yàn)證能否將打包出來的 ab 里面的 mesh 修改(因?yàn)槔镱^的文件信息是再 library 里面的臨時(shí)生成的問題,打包不會(huì)打包進(jìn)去)

  • 但是使用 *.asset 來保存 unity mesh 的方式肯定可以,因?yàn)樽兂闪宋募畔?span toymoban-style="hidden">文章來源地址http://www.zghlxwxcb.cn/news/detail-743240.html


References

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

到了這里,關(guān)于Unity - 導(dǎo)出的FBX模型,無法將 vector4 保存在 uv 中(使用 Unity Mesh 保存即可)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 場(chǎng)景中添加 FBX 模型 | 3D 物體渲染 | 3D 物體材質(zhì)設(shè)置 )

    【Unity3D】使用 FBX 格式的外部模型 ( 向 Unity 中添加 FBX 模型 | 向 Scene 場(chǎng)景中添加 FBX 模型 | 3D 物體渲染 | 3D 物體材質(zhì)設(shè)置 )

    Unity 中使用的 3D 模型格式為 FBX , 使用如下建模軟件 可制作該類型模型 : 3Dmax Maya ZBrush Cinema4D Blender 建模完成后 , 將 3D 模型導(dǎo)出為 FBX ( .fbx ) 格式 即可在 Unity 中使用 ; 在 Project 文件窗口 中的 Asstes 目錄 下 , 創(chuàng)建一個(gè)模型目錄 Models , 將 模型文件直接從文件系統(tǒng)中拖到該目錄中

    2023年04月15日
    瀏覽(115)
  • unity導(dǎo)出FBX

    unity導(dǎo)出FBX

    unity版本:2020.2.1f1c1 1、添加Fbx Exporter的package包 2、選中一個(gè)預(yù)制體點(diǎn)擊菜單Gameobject -- Export To Fbx 3、設(shè)置導(dǎo)出參數(shù) 選擇Binary 而非ASCII,否則無法導(dǎo)入blender 真的是so easy呀~~

    2024年02月12日
    瀏覽(20)
  • Unity中 Prefab導(dǎo)出FBX

    Unity中 Prefab導(dǎo)出FBX

    Unity 已經(jīng)在Package Manager中集合了很多實(shí)用的插件,比如這里用到的FBX Exporter. 在Unity的菜單中Window ---- Package Manager,打開包管理界面 點(diǎn)擊設(shè)置如圖下面的Advanced ... 選擇該選項(xiàng) 在Advanced Settings 中勾上Enable Preview Package 選擇 ? 關(guān)掉窗口 選擇包類型 下面的 Unity Registry 然后找到FBX

    2024年02月11日
    瀏覽(24)
  • 在unity中結(jié)合FBX Exporter合并mesh并導(dǎo)出Fbx

    在unity中結(jié)合FBX Exporter合并mesh并導(dǎo)出Fbx

    目標(biāo)是把多個(gè)mesh合并成一個(gè)或者幾個(gè),降低drawcall,但是又不想標(biāo)記成static的,也不想進(jìn)3dmax合并的一個(gè)嘗試。 首先在Window - Package Manager里安裝FBX Exporter,我的unity版本是2020,2019應(yīng)該也可以 安裝成功后發(fā)現(xiàn)右鍵GameObject,可以導(dǎo)出fbx了。 接下來就是合并多個(gè)mesh 假設(shè)我有這么

    2023年04月10日
    瀏覽(46)
  • 【unity】 untiy中如何導(dǎo)出FBX

    【unity】 untiy中如何導(dǎo)出FBX

    打開unity 菜單中Window -----Package Manager 點(diǎn)擊下面的Adv… 勾上Enable 選擇 I understand 關(guān)掉窗口 選擇下面的 Unity Registry 點(diǎn)擊安裝 安裝好以后 GameObject — Export To FBX…就可以了 選中你需要導(dǎo)出的文件 ,就可以直接導(dǎo)出FBX文件了 知道你存放的路徑就看到了

    2024年02月15日
    瀏覽(23)
  • 游戲人物下載—Pmx模型轉(zhuǎn)Fbx并在Unity中使用

    游戲人物下載—Pmx模型轉(zhuǎn)Fbx并在Unity中使用

    Blender官網(wǎng) 點(diǎn)擊LTS版本 選擇官方下載地址 選擇2.83LTS版本,3.0以后的版本會(huì)出現(xiàn)貼圖錯(cuò)誤的情況 下載完一路安裝就是,安裝完打開 語言選中文 Cats插件Git地址 下載好的壓縮包 打開Blender,點(diǎn)擊編輯-偏好設(shè)置 點(diǎn)擊:插件–安裝 選擇下載的Zip文件,安裝 安裝完成后再次打開偏好

    2024年02月04日
    瀏覽(22)
  • Unity場(chǎng)景素材導(dǎo)出為 FBX文件的方法

    Unity場(chǎng)景素材導(dǎo)出為 FBX文件的方法

    一、Unity場(chǎng)景素材導(dǎo)出為 FBX文件的方法:http://t.csdn.cn/Xyjxe 二、Unity場(chǎng)景素材導(dǎo)出為 OBJ文件的方法:http://t.csdn.cn/08RY3 三、Unity地形導(dǎo)出為 OBJ文件的方法 (大家可以打開我的博客主頁進(jìn)行查看此系列其它文章) 文章目錄 系列文章目錄 前言 一、Unity導(dǎo)出FBX文件 安裝插件 網(wǎng)盤下

    2024年02月05日
    瀏覽(33)
  • unity?。菏褂肬nity FBX Exporter 將 3DMax場(chǎng)景或者模型無損導(dǎo)入U(xiǎn)nity

    unity?。菏褂肬nity FBX Exporter 將 3DMax場(chǎng)景或者模型無損導(dǎo)入U(xiǎn)nity

    本指南旨在幫助您順利安裝和配置Unity FBX Exporter插件,并解決相關(guān)的常見問題。 下載并安裝FBX Exporter插件。 打開Unity,選擇 Edit Project Settings Fbx Export 。 點(diǎn)擊 Install Unity Integration 并選擇3ds Max的插件安裝目錄。 如果不確定安裝目錄,可以在3ds Max中查看: 自定義 配置用戶和系

    2024年04月27日
    瀏覽(25)
  • Unity導(dǎo)出FBX到blender-最后選擇Binary

    Unity導(dǎo)出FBX到blender-最后選擇Binary

    1.打開文件 -window-package.... ?2.點(diǎn)右上角的設(shè)置符號(hào)-選擇 advanced..... 3.打勾 ? ?4.左鍵選擇Package:in project,選 unity registry 5.下滑找到FBX... ? 6.install 7.在hierarchy選擇自己要導(dǎo)出的模型 8.在gameobject-export..... ? 9.跳出來這個(gè)選項(xiàng)選擇-Binary-我也不知道為什么反正ascll導(dǎo)入不了blender 10

    2024年02月07日
    瀏覽(20)
  • 使用Blender的CATS插件把MMD模型轉(zhuǎn)為FBX,導(dǎo)入U(xiǎn)nity

    使用Blender的CATS插件把MMD模型轉(zhuǎn)為FBX,導(dǎo)入U(xiǎn)nity

    CATS插件 https://github.com/absolute-quantum/cats-blender-plugin 安裝到blender 我使用的是3.0版本 星穹鐵道,原神等游戲的官方會(huì)把模型放在模之屋供二創(chuàng)下載 模之屋 https://www.aplaybox.com/ 我這次下載的是三月七的模型 解壓縮后備用 按N選擇CATS 點(diǎn)ImportModel,選擇 三月七1.0.pmx 導(dǎo)入以后選sha

    2024年02月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包