X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=blender26-meshio%2Fexport_pmx.py;h=62cb1d7cd9f5a3c7ef2b52be38b853cb82bb72c6;hb=HEAD;hp=6eb9854d8ead2c55f8e1234d0e5b0e12fbe29e36;hpb=d38cb757bb66218cc332a5f29ea1ef394d6028da;p=meshio%2Fpymeshio.git diff --git a/blender26-meshio/export_pmx.py b/blender26-meshio/export_pmx.py index 6eb9854..62cb1d7 100644 --- a/blender26-meshio/export_pmx.py +++ b/blender26-meshio/export_pmx.py @@ -43,6 +43,21 @@ def create_pmx(ex): ) for pos, attribute, b0, b1, weight in ex.oneSkinMesh.vertexArray.zip()] + ''' + # IK + for ik in self.skeleton.ik_list: + solver=pmd.IK() + solver.index=self.skeleton.getIndex(ik.target) + solver.target=self.skeleton.getIndex(ik.effector) + solver.length=ik.length + b=self.skeleton.bones[ik.effector.parent_index] + for i in range(solver.length): + solver.children.append(self.skeleton.getIndex(b)) + b=self.skeleton.bones[b.parent_index] + solver.iterations=ik.iterations + solver.weight=ik.weight + model.ik_list.append(solver) + ''' def create_bone(b): return pmx.Bone( name=b.name, @@ -69,171 +84,105 @@ def create_pmx(ex): model.bones=[create_bone(b) for b in ex.skeleton.bones] - return model - - # IK - for ik in self.skeleton.ik_list: - solver=pmd.IK() - solver.index=self.skeleton.getIndex(ik.target) - solver.target=self.skeleton.getIndex(ik.effector) - solver.length=ik.length - b=self.skeleton.bones[ik.effector.parent_index] - for i in range(solver.length): - solver.children.append(self.skeleton.getIndex(b)) - b=self.skeleton.bones[b.parent_index] - solver.iterations=ik.iterations - solver.weight=ik.weight - model.ik_list.append(solver) + textures=set() + def get_texture_name(texture): + pos=texture.replace("\\", "/").rfind("/") + if pos==-1: + return texture + else: + return texture[pos+1:] + for m in ex.oneSkinMesh.vertexArray.indexArrays.keys(): + for path in bl.material.eachEnalbeTexturePath(bl.material.get(m)): + textures.add(get_texture_name(path)) + model.textures=list(textures) # 面とマテリアル - vertexCount=self.oneSkinMesh.getVertexCount() - for material_name, indices in self.oneSkinMesh.vertexArray.each(): + vertexCount=ex.oneSkinMesh.getVertexCount() + for material_name, indices in ex.oneSkinMesh.vertexArray.each(): #print('material:', material_name) try: m=bl.material.get(material_name) except KeyError as e: m=DefaultMatrial() - def get_texture_name(texture): - pos=texture.replace("\\", "/").rfind("/") - if pos==-1: - return texture - else: - return texture[pos+1:] - textures=[get_texture_name(path) - for path in bl.material.eachEnalbeTexturePath(m)] - print(textures) # マテリアル - model.materials.append(pmd.Material( - # diffuse_color - common.RGB(m.diffuse_color[0], m.diffuse_color[1], m.diffuse_color[2]), - m.alpha, - # specular_factor - 0 if m.specular_toon_size<1e-5 else m.specular_hardness*10, - # specular_color - common.RGB(m.specular_color[0], m.specular_color[1], m.specular_color[2]), - # ambient_color - common.RGB(m.mirror_color[0], m.mirror_color[1], m.mirror_color[2]), - # flag - 1 if m.subsurface_scattering.use else 0, - # toon - 0, - # vertex_count - len(indices), - # texture - ('*'.join(textures) if len(textures)>0 else "").encode('cp932') + model.materials.append(pmx.Material( + name=m.name, + english_name='', + diffuse_color=common.RGB(m.diffuse_color[0], m.diffuse_color[1], m.diffuse_color[2]), + alpha=m.alpha, + specular_factor=0 if m.specular_toon_size<1e-5 else m.specular_hardness*10, + specular_color=common.RGB(m.specular_color[0], m.specular_color[1], m.specular_color[2]), + ambient_color=common.RGB(m.mirror_color[0], m.mirror_color[1], m.mirror_color[2]), + flag=1 if m.subsurface_scattering.use else 0, + edge_color=common.RGBA(0, 0, 0, 1), + edge_size=1.0, + texture_index=0, + sphere_texture_index=0, + sphere_mode=0, + toon_sharing_flag=0, + toon_texture_index=0, + comment='', + vertex_count=len(indices) )) # 面 for i in indices: assert(i