Kaynağa Gözat

Added option not to export materials to Blender exporter.

In such case faces will not get material index in JSON data and then no material reference in Face objects, so MeshFaceMaterial is not going to show anything and you have to add your own material for the whole mesh after loading.

Tested on few models and it seems to work, new JSON format allows to omit materials :)
alteredq 14 yıl önce
ebeveyn
işleme
c2a401f2b8

+ 3 - 0
utils/exporters/blender/2.56/scripts/op/io_mesh_threejs/__init__.py

@@ -124,6 +124,7 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper):
     filename_ext = ".js"
 
     option_flip_yz = BoolProperty(name="Flip YZ", description="Flip YZ", default=True)
+    use_materials = BoolProperty(name="Materials", description="Export materials", default=True)
     use_normals = BoolProperty(name="Normals", description="Export normals", default=True)
     use_colors = BoolProperty(name="Colors", description="Export vertex colors", default=True)
     use_uv_coords = BoolProperty(name="UVs", description="Export texture coordinates", default=True)
@@ -167,6 +168,8 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper):
         row.prop(self.properties, "use_colors")
         row = layout.row()
         row.prop(self.properties, "use_uv_coords")
+        row = layout.row()
+        row.prop(self.properties, "use_materials")
 
 
 # ################################################################

+ 15 - 10
utils/exporters/blender/2.56/scripts/op/io_mesh_threejs/export_threejs.py

@@ -415,7 +415,7 @@ def setBit(value, position, on):
         mask = ~(1 << position)
         return (value & mask)    
     
-def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, flipyz):
+def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, use_materials, flipyz):
     isTriangle = ( len(f.vertices) == 3 )
     
     if isTriangle:
@@ -423,7 +423,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col
     else:
         nVertices = 4
         
-    hasMaterial = True # for the moment objects without materials get default material
+    hasMaterial = use_materials
     
     hasFaceUvs = False # not supported in Blender
     hasFaceVertexUvs = use_uv_coords
@@ -459,6 +459,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col
     faceData.append(faceType)    
     
     # must clamp in case on polygons bigger than quads
+
     for i in range(nVertices):
         index = f.vertices[i]
         faceData.append(index)
@@ -736,7 +737,7 @@ def generate_materials_string(mesh, scene, use_colors, draw_type):
 # ASCII model generator
 # #####################################################
 
-def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model, flipyz, draw_type):
+def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, draw_type):
 
     vertices = mesh.vertices[:]    
 
@@ -751,7 +752,11 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
     colors, ncolor = extract_vertex_colors(mesh, use_colors)
     uvs, nuv = extract_uvs(mesh, use_uv_coords)
 
-    mstring, nmaterial = generate_materials_string(mesh, scene, use_colors, draw_type)
+    mstring = ""
+    nmaterial = 0
+    
+    if use_materials:
+        mstring, nmaterial = generate_materials_string(mesh, scene, use_colors, draw_type)
     
     text = TEMPLATE_FILE_ASCII % {
     "nvertex"   : len(mesh.vertices),
@@ -769,7 +774,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
 
     "vertices"      : ",".join(generate_vertex(v) for v in vertices),
 
-    "faces"     : ",".join(generate_face(f, i, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, flipyz) for i, f in enumerate(mesh.faces))
+    "faces"     : ",".join(generate_face(f, i, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, use_materials, flipyz) for i, f in enumerate(mesh.faces))
 
     }
 
@@ -780,7 +785,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
 # Model exporter - export single mesh
 # #####################################################
 
-def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, align_model, flipyz, export_single_model):
+def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, export_single_model):
     """Export single mesh"""
 
 
@@ -823,7 +828,7 @@ def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, al
         if not active_col_layer:
             use_colors = False
 
-    text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model, flipyz, obj.draw_type)    
+    text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, obj.draw_type)    
     write_file(filepath, text)
 
     # remove temp mesh
@@ -1250,7 +1255,7 @@ def export_scene(scene, filepath, flipyz):
 # Main
 # #####################################################
 
-def save(operator, context, filepath = "", option_flip_yz = True, use_normals = True, use_colors = True, use_uv_coords = True, align_model = 0, option_export_scene = True):
+def save(operator, context, filepath = "", option_flip_yz = True, use_normals = True, use_colors = True, use_uv_coords = True, use_materials = True, align_model = 0, option_export_scene = True):
 
     filepath = ensure_extension(filepath, '.js')
 
@@ -1281,7 +1286,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals =
 
                 if name not in geo_set:
                     fname = generate_mesh_filename(name, filepath)
-                    export_mesh(obj, scene, fname, use_normals, use_colors, use_uv_coords, 0, option_flip_yz, False)
+                    export_mesh(obj, scene, fname, use_normals, use_colors, use_uv_coords, use_materials, 0, option_flip_yz, False)
                     
                     geo_set.add(name)
 
@@ -1291,7 +1296,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals =
         if not obj:
             raise Exception("Error, Select 1 active object or select 'export scene'")
 
-        export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, align_model, option_flip_yz, True)
+        export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, use_materials, align_model, option_flip_yz, True)
 
     
     return {'FINISHED'}