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'
# 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
+
+ def toCP932(s):
+ return s
+
+
else:
# for 2.5
import bpy
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_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]
+ # 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
+
+ def toCP932(s):
+ return s.encode('cp932')
+
class Node(object):
__slots__=['o', 'children']
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):
"""
頂点属性からその頂点のインデックスを得る
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:
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))
# 面とマテリアル
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
- # 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)
# 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)
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)
return index
index+=1
print(bone)
- return -1
+ return 0
def __execute(filename, scene):