From 06e2807a52623261ac31d83f3de6c75bc0e3f3e5 Mon Sep 17 00:00:00 2001 From: ousttrue Date: Sat, 26 Jun 2010 12:12:19 +0900 Subject: [PATCH] pmd. sort material order. --- swig/blender/pmd_export.py | 71 ++++++++++++++++++++++++++++------------------ swig/blender/pmd_import.py | 30 ++++++++++++++------ 2 files changed, 66 insertions(+), 35 deletions(-) diff --git a/swig/blender/pmd_export.py b/swig/blender/pmd_export.py index 9e4caf5..1a0f416 100644 --- a/swig/blender/pmd_export.py +++ b/swig/blender/pmd_export.py @@ -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 diff --git a/swig/blender/pmd_import.py b/swig/blender/pmd_import.py index e563ab0..f96d0bf 100755 --- a/swig/blender/pmd_import.py +++ b/swig/blender/pmd_import.py @@ -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!='': -- 2.11.0