예제 #1
0
    bool ValidateMesh(Mesh m, ftGlobalStorage.Unwrapper unwrapper)
    {
#if UNITY_2017_3_OR_NEWER
        if (m.indexFormat == UnityEngine.Rendering.IndexFormat.UInt32 && unwrapper == ftGlobalStorage.Unwrapper.Default)
        {
            Debug.LogError("Can't adjust UV padding for " + m.name + " due to Unity bug. Please set Index Format to 16-bit on the asset or use xatlas.");
            return(false);
        }
#endif
        return(true);
    }
예제 #2
0
 void Unwrap(Mesh m, UnwrapParam uparams, ftGlobalStorage.Unwrapper unwrapper)
 {
     if (unwrapper == ftGlobalStorage.Unwrapper.xatlas)
     {
         UnwrapXatlas(m, uparams);
     }
     else
     {
         var tt = GetTime();
         Unwrapping.GenerateSecondaryUVSet(m, uparams);
         Debug.Log("Unity unwrap time: " + (GetTime() - tt));
     }
 }
    void AdjustUV(Transform t, ftSavedPadding2 saved = null)
    {
        var mf = t.GetComponent <MeshFilter>();

        if (mf != null && mf.sharedMesh != null)
        {
            var m  = mf.sharedMesh;
            var nm = m.name;
            int modifiedMeshID;

            if (saved != null)
            {
                // Get padding from asset
                int mindex = saved.data.meshName.IndexOf(nm);
                if (mindex < 0)
                {
                    //Debug.LogError("Unable to find padding value for mesh " + nm);
                    // This is fine. Apparently caused by parts of models being lightmapped,
                    // while other parts are not baked, yet still a part of the model.
                }
                else
                {
                    var padding = saved.data.padding[mindex];

                    ftGlobalStorage.Unwrapper unwrapper = ftGlobalStorage.Unwrapper.Default;
                    if (saved.data.unwrapper != null && saved.data.unwrapper.Count > mindex)
                    {
                        unwrapper = (ftGlobalStorage.Unwrapper)saved.data.unwrapper[mindex];
                    }

                    if (!ValidateMesh(m, unwrapper))
                    {
                        return;
                    }

                    uparams.packMargin = padding / 1024.0f;
                    Unwrap(m, uparams, unwrapper);
                }
            }
#if UNITY_2017_1_OR_NEWER
            else if (deserializedSuccess && deserialized.meshName != null && deserialized.padding != null)
            {
                // Get padding from extraUserProperties (new)
                int mindex = deserialized.meshName.IndexOf(nm);
                if (mindex < 0)
                {
                    //Debug.LogError("Unable to find padding value for mesh " + nm);
                    // This is fine. Apparently caused by parts of models being lightmapped,
                    // while other parts are not baked, yet still a part of the model.
                }
                else
                {
                    var padding = deserialized.padding[mindex];

                    ftGlobalStorage.Unwrapper unwrapper = ftGlobalStorage.Unwrapper.Default;
                    if (deserialized.unwrapper != null && deserialized.unwrapper.Count > mindex)
                    {
                        unwrapper = (ftGlobalStorage.Unwrapper)deserialized.unwrapper[mindex];
                    }

                    if (!ValidateMesh(m, unwrapper))
                    {
                        return;
                    }

                    uparams.packMargin = padding / 1024.0f;
                    Unwrap(m, uparams, unwrapper);
                }
            }
            else
            {
                // Get padding from GlobalStorage (old)
                if (storage != null && storage.modifiedMeshMap.TryGetValue(nm, out modifiedMeshID))
                {
                    var padding = storage.modifiedMeshPaddingArray[modifiedMeshID];

                    ftGlobalStorage.Unwrapper unwrapper = ftGlobalStorage.Unwrapper.Default;
                    if (storage.modifiedMeshUnwrapperArray != null && storage.modifiedMeshUnwrapperArray.Count > modifiedMeshID)
                    {
                        unwrapper = (ftGlobalStorage.Unwrapper)storage.modifiedMeshUnwrapperArray[modifiedMeshID];
                    }

                    if (!ValidateMesh(m, unwrapper))
                    {
                        return;
                    }

                    uparams.packMargin = padding / 1024.0f;
                    Unwrap(m, uparams, unwrapper);
                }
            }
#else
            else if (storage != null && storage.modifiedMeshMap.TryGetValue(nm, out modifiedMeshID))
            {
                var padding = storage.modifiedMeshPaddingArray[modifiedMeshID];

                ftGlobalStorage.Unwrapper unwrapper = ftGlobalStorage.Unwrapper.Default;
                if (storage.modifiedMeshUnwrapperArray != null && storage.modifiedMeshUnwrapperArray.Count > modifiedMeshID)
                {
                    unwrapper = (ftGlobalStorage.Unwrapper)storage.modifiedMeshUnwrapperArray[modifiedMeshID];
                }

                if (!ValidateMesh(m, unwrapper))
                {
                    return;
                }

                uparams.packMargin = padding / 1024.0f;
                Unwrap(m, uparams, unwrapper);
            }
#endif
        }