]> git.tdb.fi Git - libs/gl.git/blobdiff - blender/io_mspgl/mesh.py
Improve texture unit assignment when exporting meshes
[libs/gl.git] / blender / io_mspgl / mesh.py
index 78cae28b22f662d3e0eb2ca9fdbb8073536f7893..95749f46d4eb67aede93b53a87bdb4be1f789487 100644 (file)
@@ -1,6 +1,7 @@
 import bpy
 import math
 import mathutils
+import itertools
 
 def make_edge_key(i1, i2):
        return (min(i1, i2), max(i1, i2))
@@ -167,6 +168,7 @@ class UvLayer:
 class Mesh:
        def __init__(self, mesh):
                self._mesh = mesh
+               self.name = mesh.name
 
                self.winding_test = mesh.winding_test
                self.tbn_vecs = mesh.tbn_vecs
@@ -187,17 +189,21 @@ class Mesh:
                        self.uv_layers = []
                else:
                        self.uv_layers = [UvLayer(u) for u in mesh.uv_layers]
-                       self.uv_layers = sorted([u for u in self.uv_layers if not u.hidden], key=(lambda u: (u.unit or 1000, u.name)))
+
+                       # Assign texture unit numbers to UV layers that lack one
+                       missing_unit = [u for u in self.uv_layers if u.unit is None]
+                       if missing_unit:
+                               missing_unit = sorted(missing_unit, key=(lambda u: u.name))
+                               used_units = [u.unit for u in self.uv_layers if u.unit is not None]
+                               for u, n in zip(missing_unit, (i for i in itertools.count() if i not in used_units)):
+                                       u.unit = n
+
+                       self.uv_layers = sorted(self.uv_layers, key=(lambda u: u.unit))
 
                        if self.use_uv=='UNIT0':
                                self.uv_layers = [self.uv_layers[0]]
-
-                       # Assign texture unit numbers to UV layers that lack one
-                       next_unit = max((u.unit+1 for u in self.uv_layers if u.unit is not None), default=0)
-                       for u in self.uv_layers:
-                               if not u.unit:
-                                       u.unit = next_unit
-                                       next_unit += 1
+                               if self.uv_layers[0].unit!=0:
+                                       self.uv_layers = []
 
                # Rewrite links between elements to point to cloned data, or create links
                # where they don't exist
@@ -773,6 +779,8 @@ def create_mesh_from_object(context, obj, progress):
                else:
                        mesh = me
 
+       mesh.name = obj.data.name
+
        progress.set_task("Triangulating", 0.2, 0.3)
        mesh.prepare_triangles(progress)
        progress.set_task("Smoothing", 0.3, 0.5)