]> git.tdb.fi Git - libs/gl.git/commitdiff
Fix texunit processing order to avoid artifacts in tbn vectors
authorMikko Rasa <tdb@tdb.fi>
Sun, 6 Mar 2011 01:02:52 +0000 (01:02 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sun, 6 Mar 2011 01:02:52 +0000 (01:02 +0000)
blender/io_mesh_mspgl/export_mspgl.py
blender/io_mesh_mspgl/mesh.py

index e2082cb8d04770b1b4c510eaca90c4797114afcc..d54d1e38478a860c5b4619deb9d8505813f3c53f 100644 (file)
@@ -256,13 +256,22 @@ class Exporter:
                        else:
                                texunits = list(range(len(mesh.uv_textures)))
 
+                       tbn_unit = 0
+                       if self.tbn_vecs:
+                               uvtex_names = [u.name for u in mesh.uv_textures]
+                               if self.tbn_uvtex in uvtex_names:
+                                       tbn_unit = uvtex_names.index(uvtex)
+                                       del texunits[tbn_unit]
+                                       texunits.insert(0, tbn_unit)
+
                        for i in texunits:
                                progress.set_task("Splitting UVs", 0.35+0.3*i/len(texunits), 0.35+0.3*(i+1)/len(texunits))
                                mesh.split_uv(i, progress)
+                               if self.tbn_vecs and i==tbn_unit:
+                                       mesh.compute_uv()
+                                       mesh.compute_tbn(i)
 
                        mesh.compute_uv()
-                       if self.tbn_vecs:
-                               mesh.compute_tbn(self.tbn_uvtex)
 
                strips = []
                loose = mesh.faces
index e3405f9f8e055490b71bf7a4323abcfc1475c752..165c276fd1533c8b8adb89e85c13adddd4cc158d 100644 (file)
@@ -41,13 +41,15 @@ class Vertex:
                        self._mvert = mv._mvert
                        self.normal = mv.normal
                        self.uvs = mv.uvs[:]
+                       self.tan = mv.tan
+                       self.bino = mv.bino
                else:
                        self._mvert = mv
                        self.uvs = []
+                       self.tan = None
+                       self.bino = None
                self.flag = False
                self.faces = []
-               self.tan = None
-               self.bino = None
 
        def __getattr__(self, attr):
                return getattr(self._mvert, attr)
@@ -295,24 +297,18 @@ class Mesh:
                                i = f.vertices.index(v)
                                v.uvs = [u[i] for u in f.uvs]
 
-       def compute_tbn(self, uvtex):
+       def compute_tbn(self, index):
                if not self.uv_textures:
                        return
 
-               uvtex_names = [u.name for u in self.uv_textures]
-               if uvtex in uvtex_names:
-                       uvtex_index = uvtex_names.index(uvtex)
-               else:
-                       uvtex_index = 0
-
                for v in self.vertices:
                        v.tan = mathutils.Vector()
                        v.bino = mathutils.Vector()
                        for f in v.faces:
                                fv = f.pivot_vertices(v)
-                               uv0 = fv[0].uvs[uvtex_index]
-                               uv1 = fv[1].uvs[uvtex_index]
-                               uv2 = fv[-1].uvs[uvtex_index]
+                               uv0 = fv[0].uvs[index]
+                               uv1 = fv[1].uvs[index]
+                               uv2 = fv[-1].uvs[index]
                                du1 = uv1[0]-uv0[0]
                                du2 = uv2[0]-uv0[0]
                                dv1 = uv1[1]-uv0[1]