From 2298b92eddff337760561b12311d1f4e82745486 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sun, 6 Mar 2011 01:02:52 +0000 Subject: [PATCH] Fix texunit processing order to avoid artifacts in tbn vectors --- blender/io_mesh_mspgl/export_mspgl.py | 13 +++++++++++-- blender/io_mesh_mspgl/mesh.py | 20 ++++++++------------ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/blender/io_mesh_mspgl/export_mspgl.py b/blender/io_mesh_mspgl/export_mspgl.py index e2082cb8..d54d1e38 100644 --- a/blender/io_mesh_mspgl/export_mspgl.py +++ b/blender/io_mesh_mspgl/export_mspgl.py @@ -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 diff --git a/blender/io_mesh_mspgl/mesh.py b/blender/io_mesh_mspgl/mesh.py index e3405f9f..165c276f 100644 --- a/blender/io_mesh_mspgl/mesh.py +++ b/blender/io_mesh_mspgl/mesh.py @@ -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] -- 2.43.0