OSDN Git Service

fix bl24 encoding.
[meshio/meshio.git] / swig / blender / pmd_export.py
index 1a0f416..8e9b4bd 100644 (file)
@@ -21,6 +21,7 @@ This script exports a pmd model.
 1.2 20100616: implement rigid body.
 1.3 20100619: fix rigid body, bone weight.
 1.4 20100626: refactoring.
+1.5 20100629: sphere map.
 """
 
 MMD_SHAPE_GROUP_NAME='_MMD_SHAPE'
@@ -86,6 +87,10 @@ if isBlender24():
         # flag
         material.flag=1 if m.enableSSS else 0
 
+    def toCP932(s):
+        return s
+
+
 else:
     # for 2.5
     import bpy
@@ -104,7 +109,7 @@ else:
         material.diffuse.b=m.diffuse_color[2]
         material.diffuse.a=m.alpha
         # specular
-        material.sinness=0 if m.specular_hardness<1e-5 else m.specular_hardness*10
+        material.sinness=0 if m.specular_toon_size<1e-5 else m.specular_hardness*10
         material.specular.r=m.specular_color[0]
         material.specular.g=m.specular_color[1]
         material.specular.b=m.specular_color[2]
@@ -115,6 +120,10 @@ else:
         # flag
         material.flag=1 if m.subsurface_scattering.enabled else 0
 
+    def toCP932(s):
+        return s.encode('cp932')
+
+
 class Node(object):
     __slots__=['o', 'children']
     def __init__(self, o):
@@ -534,6 +543,7 @@ class OneSkinMesh(object):
                 if v[0]==morph.name:
                     return i
             print(morph)
+            return len(englishmap.skinMap)
         if isBlender24():
             self.morphList.sort(lambda l, r: getIndex(l)-getIndex(r))
         else:
@@ -687,6 +697,7 @@ class BoneBuilder(object):
                 if k_v[0]==bone.name:
                     return i
             print(bone)
+            return len(boneMap)
 
         if isBlender24():
             self.bones.sort(lambda l, r: getIndex(l)-getIndex(r))
@@ -844,8 +855,10 @@ class PmdExporter(object):
 
             material.vertex_count=len(indices)
             material.toon_index=0
-            # ToDo
-            material.texture=""
+            textures=[os.path.basename(path) 
+                for path in bl.material.eachTexturePath(m)]
+            if len(textures)>0:
+                material.setTexture(toCP932('*'.join(textures)))
             # 面
             for i in indices:
                 assert(i<vertexCount)
@@ -863,6 +876,8 @@ class PmdExporter(object):
             # name
             boneNameMap[b.name]=i
             v=englishmap.getUnicodeBoneName(b.name)
+            if not v:
+                v=[b.name, b.name]
             assert(v)
             cp932=v[1].encode('cp932')
             assert(len(cp932)<20)
@@ -909,6 +924,8 @@ class PmdExporter(object):
             morph=io.addMorph()
 
             v=englishmap.getUnicodeSkinName(m.name)
+            if not v:
+                v=[m.name, m.name, 0]
             assert(v)
             cp932=v[1].encode('cp932')
             morph.setName(cp932)
@@ -1095,7 +1112,7 @@ def getBoneDisplayGroup(bone):
             return index
         index+=1
     print(bone)
-    return -1
+    return 0
 
 
 def __execute(filename, scene):