]> git.tdb.fi Git - libs/gl.git/commitdiff
Add an option to automatically detect if tangents need to be exported
authorMikko Rasa <tdb@tdb.fi>
Tue, 13 Apr 2021 11:06:36 +0000 (14:06 +0300)
committerMikko Rasa <tdb@tdb.fi>
Tue, 13 Apr 2021 11:06:36 +0000 (14:06 +0300)
It's enabled by default, which should reduce hassle when authoring
models.

blender/io_mspgl/mesh.py
blender/io_mspgl/properties.py

index 9741b8dd916f28495d3e25cde8fd64e767a7d118..6b0e6805a7dfe3d88ab1cf44bcce08d391a28dc8 100644 (file)
@@ -158,7 +158,6 @@ class Mesh:
                self.winding_test = mesh.winding_test
                self.smoothing = mesh.smoothing
                self.use_uv = mesh.use_uv
-               self.tangent_vecs = mesh.tangent_vecs
                self.tangent_uvtex = mesh.tangent_uvtex
                self.vertex_groups = mesh.vertex_groups
 
@@ -229,6 +228,21 @@ class Mesh:
                else:
                        self.lines = []
 
+               # Check if tangent vectors are needed
+               if mesh.tangent_vecs=='NO':
+                       self.tangent_vecs = False
+               elif mesh.tangent_vecs=='YES':
+                       self.tangent_vecs = True
+               elif mesh.tangent_vecs=='AUTO':
+                       from .material import Material
+                       self.tangent_vecs = False
+                       for m in self.materials:
+                               mat = Material(m)
+                               if mat.type=="pbr":
+                                       normal_prop = next((p for p in mat.properties if p.tex_keyword=="normal_map"), None)
+                                       if normal_prop and normal_prop.texture:
+                                               self.tangent_vecs = True
+
                self.vertex_sequence = []
 
        def transform(self, matrix):
index 0d5a6d46e044f4374c231761997753b3ea24e908..1272c60e07559f5733f9b41c4b798a0f19be9d93 100644 (file)
@@ -147,7 +147,10 @@ def register_properties():
                items=(("NONE", "None", "Ignore all UV coordinates"),
                        ("UNIT0", "Unit 0", "Use UV coordinates for unit 0"),
                        ("ALL", "All", "Use all UV coordinates")))
-       bpy.types.Mesh.tangent_vecs = bpy.props.BoolProperty(name="Tangent vectors", description="Compute tangent vectors for vertices", default=False)
+       bpy.types.Mesh.tangent_vecs = bpy.props.EnumProperty(name="Tangent vectors", description="Compute tangent vectors for vertices", default="AUTO",
+               items=(("NO", "No", "Do not export tangent vectors"),
+                       ("AUTO", "Auto", "Automatically determine the need for tangent vectors"),
+                       ("YES", "Yes", "Always export tangent vectors")))
        bpy.types.Mesh.tangent_uvtex = bpy.props.StringProperty(name="Tangent UV layer", description="UV layer to use as basis for tangent vectors", default="")
 
        bpy.types.Object.compound = bpy.props.BoolProperty(name="Compound with parent", description="Join this object to its parent when exporting")