]> git.tdb.fi Git - libs/gl.git/commitdiff
Improve texture unit assignment when exporting meshes
authorMikko Rasa <tdb@tdb.fi>
Sat, 18 May 2019 14:55:16 +0000 (17:55 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sun, 19 May 2019 23:15:29 +0000 (02:15 +0300)
blender/io_mspgl/mesh.py

index 609f89a1566ae3848efa9404cb0358e537528e09..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))
@@ -188,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