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); }
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 }