+ def compute_uv(self):
+ for v in self.verts:
+ if v.faces:
+ v.uv=v.faces[0].uv[v.faces[0].verts.index(v)]
+
+ def compute_tbn(self):
+ for v in self.verts:
+ v.tan=Blender.Mathutils.Vector()
+ v.bino=Blender.Mathutils.Vector()
+ for f in v.faces:
+ fverts=f.pivot_vertices(False, v)
+ v1=fverts[1]
+ v2=fverts[-1]
+ du1=v1.uv[0]-v.uv[0]
+ du2=v2.uv[0]-v.uv[0]
+ dv1=v1.uv[1]-v.uv[1]
+ dv2=v2.uv[1]-v.uv[1]
+ div=du1*dv2-du2*dv1
+ edge1=fverts[1].co-fverts[0].co
+ edge2=fverts[-1].co-fverts[0].co
+ v.tan+=(edge1*dv2-edge2*dv1)/div
+ v.bino+=(edge2*du1-edge1*du2)/div
+ v.tan.normalize()
+ v.bino.normalize()
+