# 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
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']
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):
"""
頂点属性からその頂点のインデックスを得る
# 面とマテリアル
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
# 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):
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):
except KeyError:
break
- material=createPmdMaterial(m)
+ material=createPmdMaterial(m, material_index)
texture_name=m.getTexture()
if texture_name!='':