Guest User

Untitled

a guest
Mar 29th, 2022
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.30 KB | None | 0 0
  1. public static void SplitVertices (Mesh mesh)
  2.     {
  3.         var vertices = mesh.vertices.ToList();
  4.         var vCnt = vertices.Count;
  5.         if(vCnt == 0)
  6.             return;
  7.  
  8.         var uvs = mesh.uv.ToList();
  9.         var colors = mesh.colors.ToList();
  10.         var tangents = mesh.tangents.ToList();
  11.  
  12.         var hasUvs      = vCnt == uvs.Count;
  13.         var hasColors   = vCnt == colors.Count;
  14.         var hasTangents = vCnt == tangents.Count;
  15.  
  16.         var unique = new HashSet<int>();
  17.         var allTriangles = new List<int[]>();
  18.  
  19.         var submeshes = mesh.subMeshCount;
  20.  
  21.         for(int s = 0; s < submeshes; s++)
  22.         {  
  23.             var triangles = mesh.GetTriangles(s);
  24.             int tCnt = triangles.Length;
  25.             int index;
  26.             for(int t = 0; t < tCnt; t++)
  27.             {
  28.                 index = triangles[t];
  29.                 if(unique.Contains(index))
  30.                 {
  31.                     vertices.Add(vertices[index]);
  32.                     if(hasUvs)
  33.                         uvs.Add(uvs[index]);
  34.                     if(hasColors)
  35.                         colors.Add(colors[index]);
  36.                     if(hasTangents)
  37.                         tangents.Add(tangents[index]);
  38.  
  39.                     triangles[t] = vertices.Count - 1;
  40.                 }
  41.                 else
  42.                     unique.Add(index);
  43.             }
  44.  
  45.             allTriangles.Add(triangles);
  46.         }
  47.        
  48.         mesh.SetVertices(vertices);
  49.         for(int s = 0; s < submeshes; s++)
  50.             mesh.SetTriangles(allTriangles[s], s);
  51.  
  52.         if(hasUvs)
  53.             mesh.SetUVs(0, uvs);
  54.         if(hasColors)
  55.             mesh.SetColors(colors);
  56.         if(hasTangents)
  57.             mesh.SetTangents(tangents);
  58.     }
Advertisement
Add Comment
Please, Sign In to add comment