Browse Source

Merge pull request #8076 from s9k/exporter-uv2-fix

Blender exporter: Added second UV layer support
Mr.doob 9 years ago
parent
commit
2f8ea128f1

+ 1 - 0
utils/exporters/blender/addons/io_three/constants.py

@@ -220,6 +220,7 @@ ROTATION = 'rotation'
 SCALE = 'scale'
 
 UV = 'uv'
+UV2 = 'uv2'
 ATTRIBUTES = 'attributes'
 NORMAL = 'normal'
 ITEM_SIZE = 'itemSize'

+ 4 - 7
utils/exporters/blender/addons/io_three/exporter/api/mesh.py

@@ -155,22 +155,19 @@ def buffer_position(mesh):
 
 
 @_mesh
-def buffer_uv(mesh):
+def buffer_uv(mesh, layer=0):
     """
 
     :param mesh:
+    :param layer: (Default value = 0)
     :rtype: []
 
     """
     uvs_ = []
-    if len(mesh.uv_layers) is 0:
+    if len(mesh.uv_layers) <= layer:
         return uvs_
-    elif len(mesh.uv_layers) > 1:
-        # if memory serves me correctly buffer geometry
-        # only uses one UV layer
-        logger.warning("%s has more than 1 UV layer", mesh.name)
 
-    for uv_data in mesh.uv_layers[0].data:
+    for uv_data in mesh.uv_layers[layer].data:
         uv_tuple = (uv_data.uv[0], uv_data.uv[1])
         uvs_.extend(uv_tuple)
 

+ 3 - 1
utils/exporters/blender/addons/io_three/exporter/geometry.py

@@ -389,9 +389,11 @@ class Geometry(base_classes.BaseNode):
                      api.mesh.buffer_position, 3)
         uvs_tuple = (constants.UV, option_uvs,
                      api.mesh.buffer_uv, 2)
+        uvs2_tuple = (constants.UV2, option_uvs,
+                     lambda m: api.mesh.buffer_uv(m, layer=1), 2)
         normals_tuple = (constants.NORMAL, option_normals,
                          api.mesh.buffer_normal, 3)
-        dispatch = (pos_tuple, uvs_tuple, normals_tuple)
+        dispatch = (pos_tuple, uvs_tuple, uvs2_tuple, normals_tuple)
 
         for key, option, func, size in dispatch: