OSDN Git Service

export toon textures.
[meshio/meshio.git] / swig / blender / pmd_import.py
index 51309d0..f2d32e0 100755 (executable)
@@ -55,6 +55,7 @@ CONSTRAINT_ROT_MIN='const_rot_min'
 CONSTRAINT_ROT_MAX='const_rot_max'
 CONSTRAINT_SPRING_POS='const_spring_pos'
 CONSTRAINT_SPRING_ROT='const_spring_rot'
+TOON_TEXTURE_OBJECT='ToonTextures'
 
 
 ###############################################################################
@@ -81,13 +82,7 @@ if isBlender24():
 
     def createPmdMaterial(m, index):
         material=Blender.Material.New()
-        #material.setRef(1)
-        #material.diffuseSize = 3.14/2
-        #material.setDiffuseSmooth(0)
-        #material.setSpecSize(0)
-        #material.setSpec(0)
-        # shader
-        # diffuse
+        # fresnelが無いw
         material.setDiffuseShader(Blender.Material.Shaders.DIFFUSE_TOON)
         material.setRGBCol([m.diffuse.r, m.diffuse.g, m.diffuse.b])
         material.setAlpha(m.diffuse.a)
@@ -115,8 +110,14 @@ if isBlender24():
         elif n.startswith("ankle_"):
             b.lockYRot=True
 
-    def setSphereMap(material, index, blende_type=None):
-        pass
+    def setSphereMap(material, index, blend_type='MULTIPLY'):
+        slot=material.textures[index]
+        slot.mapto=Blender.Texture.MapTo.NOR
+        slot.mapping=Blender.Texture.Mappings.SPHERE
+        if blend_type=='MULTIPLY':
+            slot.blendmode=Blender.Texture.BlendModes.MULTIPLY
+        elif blend_type=='ADD':
+            slot.blendmode=Blender.Texture.BlendModes.ADD
 
 else:
     # for 2.5
@@ -163,12 +164,11 @@ else:
             #b.ik_dof_y=False
             pass
 
-    def setSphereMap(material, index, blend_type=None):
+    def setSphereMap(material, index, blend_type='MULTIPLY'):
         slot=material.texture_slots[index]
-        slot.texture_coordinates='REFLECTION'
+        slot.texture_coordinates='NORMAL'
         slot.mapping='SPHERE'
-        if blend_type:
-            slot.blend_type=blend_type
+        slot.blend_type=blend_type
 
 
 ###############################################################################
@@ -200,9 +200,16 @@ def get_bone_name(l, index):
     return l.bones[0].getName()
 
 
+def get_group_name(g):
+    group_name=englishmap.getEnglishBoneGroupName(g.getName().strip())
+    if not group_name:
+        group_name=g.getName().strip()
+    return group_name
+
+
 def __importToonTextures(io, tex_dir):
-    mesh, meshObject=bl.mesh.create('ToonTextures')
-    material=bl.material.create('ToonTextures')
+    mesh, meshObject=bl.mesh.create(TOON_TEXTURE_OBJECT)
+    material=bl.material.create(TOON_TEXTURE_OBJECT)
     bl.mesh.addMaterial(mesh, material)
     for i in range(10):
         t=io.getToonTexture(i)
@@ -396,9 +403,7 @@ def __importArmature(l):
     else:
         # create bone group
         for i, g in enumerate(l.bone_group_list):
-            name=englishmap.getEnglishBoneGroupName(g.getName().strip())
-            if not name:
-                name=g.getName()
+            name=get_group_name(g)
             bl.object.createBoneGroup(armature_object, name, "THEME%02d" % (i+1))
 
         # assign bone to group
@@ -410,9 +415,7 @@ def __importArmature(l):
                 bone_name=b.getName()
             # group
             g=l.bone_group_list[g_index-1]
-            group_name=englishmap.getEnglishBoneGroupName(g.getName().strip())
-            if not group_name:
-                group_name=g.getName()
+            group_name=get_group_name(g)
 
             # assign
             pose.bones[bone_name].bone_group=pose.bone_groups[group_name]
@@ -445,7 +448,10 @@ def __import16MaerialAndMesh(meshObject, l,
         material=createPmdMaterial(m, material_index)
         toon_index=bl.material.addTexture(
                 material, 
-                bl.material.getTexture(toon_material, m.toon_index).texture,
+                bl.material.getTexture(
+                    toon_material, 
+                    0 if m.toon_index==0xFF else m.toon_index
+                    ),
                 False)
 
         texture_name=m.getTexture()
@@ -458,13 +464,13 @@ def __import16MaerialAndMesh(meshObject, l,
                     texture, image=bl.texture.create(path)
                     textureMap[texture_name]=texture
                     imageMap[material_index]=image
-                bl.material.addTexture(material, texture)
+                texture_index=bl.material.addTexture(material, texture)
                 if t.endswith('sph'):
                     # sphere map
-                    setSphereMap(material, i)
+                    setSphereMap(material, texture_index)
                 elif t.endswith('spa'):
                     # sphere map
-                    setSphereMap(material, i, 'ADD')
+                    setSphereMap(material, texture_index, 'ADD')
 
         bl.mesh.addMaterial(mesh, material)
         index+=1