OSDN Git Service

pmd. sort material order.
authorousttrue <ousttrue@gmail.com>
Sat, 26 Jun 2010 03:12:19 +0000 (12:12 +0900)
committerousttrue <ousttrue@gmail.com>
Sat, 26 Jun 2010 03:12:19 +0000 (12:12 +0900)
swig/blender/pmd_export.py
swig/blender/pmd_import.py

index 9e4caf5..1a0f416 100644 (file)
@@ -67,6 +67,25 @@ if isBlender24():
 
     # wrapper
     import bl24 as bl
+
+    def setMaterialParams(material, m):
+        # diffuse
+        material.diffuse.r=m.R
+        material.diffuse.g=m.G
+        material.diffuse.b=m.B
+        material.diffuse.a=m.alpha
+        # specular
+        material.sinness=0 if m.spec<1e-5 else m.spec*10
+        material.specular.r=m.specR
+        material.specular.g=m.specG
+        material.specular.b=m.specB
+        # ambient
+        material.ambient.r=m.mirR
+        material.ambient.g=m.mirG
+        material.ambient.b=m.mirB
+        # flag
+        material.flag=1 if m.enableSSS else 0
+
 else:
     # for 2.5
     import bpy
@@ -78,6 +97,23 @@ else:
 
     xrange=range
 
+    def setMaterialParams(material, m):
+        # diffuse
+        material.diffuse.r=m.diffuse_color[0]
+        material.diffuse.g=m.diffuse_color[1]
+        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.specular.r=m.specular_color[0]
+        material.specular.g=m.specular_color[1]
+        material.specular.b=m.specular_color[2]
+        # ambient
+        material.ambient.r=m.mirror_color[0]
+        material.ambient.g=m.mirror_color[1]
+        material.ambient.b=m.mirror_color[2]
+        # flag
+        material.flag=1 if m.subsurface_scattering.enabled else 0
 
 class Node(object):
     __slots__=['o', 'children']
@@ -160,6 +196,12 @@ class VertexArray(object):
                 self.vertices, self.normals, self.uvs,
                 self.b0, self.b1, self.weight)
 
+    def each(self):
+        keys=[key for key in self.indexArrays.keys()]
+        keys.sort()
+        for key in keys:
+            yield(key, self.indexArrays[key])
+
     def __getIndex(self, obj, base_index, pos, normal, uv, b0, b1, weight0):
         """
         頂点属性からその頂点のインデックスを得る
@@ -794,36 +836,11 @@ class PmdExporter(object):
 
         # 面とマテリアル
         vertexCount=self.oneSkinMesh.getVertexCount()
-        for material_name, indices in self.oneSkinMesh.vertexArray.indexArrays.items():
+        for material_name, indices in self.oneSkinMesh.vertexArray.each():
             m=bl.material.get(material_name)
             # マテリアル
             material=io.addMaterial()
-            if isBlender24():
-                material.diffuse.r=m.R
-                material.diffuse.g=m.G
-                material.diffuse.b=m.B
-                material.diffuse.a=m.alpha
-                material.sinness=0 if m.spec<1e-5 else m.spec*10
-                material.specular.r=m.specR
-                material.specular.g=m.specG
-                material.specular.b=m.specB
-                material.ambient.r=m.mirR
-                material.ambient.g=m.mirG
-                material.ambient.b=m.mirB
-                material.flag=1 if m.enableSSS else 0
-            else:
-                material.diffuse.r=m.diffuse_color[0]
-                material.diffuse.g=m.diffuse_color[1]
-                material.diffuse.b=m.diffuse_color[2]
-                material.diffuse.a=m.alpha
-                material.sinness=0 if m.specular_hardness<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]
-                material.ambient.r=m.mirror_color[0]
-                material.ambient.g=m.mirror_color[1]
-                material.ambient.b=m.mirror_color[2]
-                material.flag=1 if m.subsurface_scattering.enabled else 0
+            setMaterialParams(material, m)
 
             material.vertex_count=len(indices)
             material.toon_index=0
index e563ab0..f96d0bf 100755 (executable)
@@ -76,21 +76,28 @@ if isBlender24():
     # wrapper
     import bl24 as bl
 
-    def createPmdMaterial(m):
+    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
         material.setDiffuseShader(Blender.Material.Shaders.DIFFUSE_TOON)
-        material.setRef(1)
-        material.diffuseSize = 3.14/2
-        material.setDiffuseSmooth(0)
         material.setSpecShader(Blender.Material.Shaders.SPEC_TOON)
-        material.setSpecSize(0)
-        material.setSpec(0)
+        # diffuse
         material.setRGBCol([m.diffuse.r, m.diffuse.g, m.diffuse.b])
         material.setAlpha(m.diffuse.a)
+        # specular
         material.setSpec(m.shinness*0.1)
         material.setSpecCol([m.specular.r, m.specular.g, m.specular.b])
+        # ambient
         material.setMirCol([m.ambient.r, m.ambient.g, m.ambient.b])
+        # flag
         material.enableSSS=True if m.flag==1 else False
+        # name
+        material.name="m_%02d" % index
         return material
 
     def poseBoneLimit(n, b):
@@ -116,16 +123,23 @@ else:
 
     xrange=range
 
-    def createPmdMaterial(m):
+    def createPmdMaterial(m, index):
         material = bpy.data.materials.new("Material")
+        # set shader
         material.diffuse_shader='FRESNEL'
         material.specular_shader='TOON'
+        # diffuse
         material.diffuse_color=([m.diffuse.r, m.diffuse.g, m.diffuse.b])
         material.alpha=m.diffuse.a
+        # specular
         material.specular_hardness=int(m.shinness)
         material.specular_color=([m.specular.r, m.specular.g, m.specular.b])
+        # ambient
         material.mirror_color=([m.ambient.r, m.ambient.g, m.ambient.b])
+        # flag
         material.subsurface_scattering.enabled=True if m.flag==1 else False
+        # name
+        material.name="m_%02d" % index
         return material
 
     def poseBoneLimit(n, b):
@@ -374,7 +388,7 @@ def __import16MaerialAndMesh(meshObject, l,
         except KeyError:
             break
 
-        material=createPmdMaterial(m)
+        material=createPmdMaterial(m, material_index)
 
         texture_name=m.getTexture()
         if texture_name!='':