forked from bartvdbraak/blender
* added a bindpose (3ds max was complaining)
* export materials emit value
This commit is contained in:
parent
1b22a628f2
commit
1d43cae37b
@ -495,6 +495,8 @@ def write(filename, batch_objects = None, \
|
|||||||
file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime)
|
file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime)
|
||||||
file.write('\nCreator: "Blender3D version %.2f"' % Blender.Get('version'))
|
file.write('\nCreator: "Blender3D version %.2f"' % Blender.Get('version'))
|
||||||
|
|
||||||
|
pose_items = [] # list of (fbxName, matrix) to write pose data for, easier to collect allong the way
|
||||||
|
|
||||||
# --------------- funcs for exporting
|
# --------------- funcs for exporting
|
||||||
def object_tx(ob, loc, matrix, matrix_mod = None):
|
def object_tx(ob, loc, matrix, matrix_mod = None):
|
||||||
'''
|
'''
|
||||||
@ -656,7 +658,9 @@ def write(filename, batch_objects = None, \
|
|||||||
file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName)
|
file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName)
|
||||||
file.write('\n\t\tVersion: 232')
|
file.write('\n\t\tVersion: 232')
|
||||||
|
|
||||||
write_object_props(my_bone.blenBone, None, None, my_bone.fbxArm.matrixWorld)
|
poseMatrix = write_object_props(my_bone.blenBone, None, None, my_bone.fbxArm.matrixWorld)[3]
|
||||||
|
pose_items.append( (my_bone.fbxName, poseMatrix) )
|
||||||
|
|
||||||
|
|
||||||
# file.write('\n\t\t\tProperty: "Size", "double", "",%.6f' % ((my_bone.blenData.head['ARMATURESPACE'] - my_bone.blenData.tail['ARMATURESPACE']) * my_bone.fbxArm.matrixWorld).length)
|
# file.write('\n\t\t\tProperty: "Size", "double", "",%.6f' % ((my_bone.blenData.head['ARMATURESPACE'] - my_bone.blenData.tail['ARMATURESPACE']) * my_bone.fbxArm.matrixWorld).length)
|
||||||
file.write('\n\t\t\tProperty: "Size", "double", "",1')
|
file.write('\n\t\t\tProperty: "Size", "double", "",1')
|
||||||
@ -994,11 +998,13 @@ def write(filename, batch_objects = None, \
|
|||||||
|
|
||||||
# only use this for the root matrix at the moment
|
# only use this for the root matrix at the moment
|
||||||
if matrixOnly:
|
if matrixOnly:
|
||||||
write_object_props(None, None, matrixOnly)
|
poseMatrix = write_object_props(None, None, matrixOnly)[3]
|
||||||
|
|
||||||
else: # all other Null's
|
else: # all other Null's
|
||||||
if my_null: write_object_props(my_null.blenObject)
|
if my_null: poseMatrix = write_object_props(my_null.blenObject)[3]
|
||||||
else: write_object_props()
|
else: poseMatrix = write_object_props()[3]
|
||||||
|
|
||||||
|
pose_items.append((fbxName, poseMatrix))
|
||||||
|
|
||||||
file.write('''
|
file.write('''
|
||||||
}
|
}
|
||||||
@ -1028,6 +1034,7 @@ def write(filename, batch_objects = None, \
|
|||||||
mat_hard = (float(mat.hard)-1)/5.10
|
mat_hard = (float(mat.hard)-1)/5.10
|
||||||
mat_spec = mat.spec/2.0
|
mat_spec = mat.spec/2.0
|
||||||
mat_alpha = mat.alpha
|
mat_alpha = mat.alpha
|
||||||
|
mat_emit = mat.emit
|
||||||
mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS
|
mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS
|
||||||
if mat_shadeless:
|
if mat_shadeless:
|
||||||
mat_shader = 'Lambert'
|
mat_shader = 'Lambert'
|
||||||
@ -1045,6 +1052,7 @@ def write(filename, batch_objects = None, \
|
|||||||
mat_hard = 20.0
|
mat_hard = 20.0
|
||||||
mat_spec = 0.2
|
mat_spec = 0.2
|
||||||
mat_alpha = 1.0
|
mat_alpha = 1.0
|
||||||
|
mat_emit = 0.0
|
||||||
mat_shadeless = False
|
mat_shadeless = False
|
||||||
mat_shader = 'Phong'
|
mat_shader = 'Phong'
|
||||||
|
|
||||||
@ -1055,19 +1063,19 @@ def write(filename, batch_objects = None, \
|
|||||||
file.write('\n\t\tProperties60: {')
|
file.write('\n\t\tProperties60: {')
|
||||||
file.write('\n\t\t\tProperty: "ShadingModel", "KString", "", "%s"' % mat_shader)
|
file.write('\n\t\t\tProperty: "ShadingModel", "KString", "", "%s"' % mat_shader)
|
||||||
file.write('\n\t\t\tProperty: "MultiLayer", "bool", "",0')
|
file.write('\n\t\t\tProperty: "MultiLayer", "bool", "",0')
|
||||||
file.write('\n\t\t\tProperty: "EmissiveColor", "ColorRGB", "",0,0,0')
|
file.write('\n\t\t\tProperty: "EmissiveColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold) # emit and diffuse color are he same in blender
|
||||||
file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",1')
|
file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",%.4f' % mat_dif)
|
||||||
|
|
||||||
file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_colamb)
|
file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_colamb)
|
||||||
file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.1f' % mat_amb)
|
file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.4f' % mat_amb)
|
||||||
file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cold)
|
file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold)
|
||||||
file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.1f' % mat_dif)
|
file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.4f' % mat_emit)
|
||||||
file.write('\n\t\t\tProperty: "Bump", "Vector3D", "",0,0,0')
|
file.write('\n\t\t\tProperty: "Bump", "Vector3D", "",0,0,0')
|
||||||
file.write('\n\t\t\tProperty: "TransparentColor", "ColorRGB", "",1,1,1')
|
file.write('\n\t\t\tProperty: "TransparentColor", "ColorRGB", "",1,1,1')
|
||||||
file.write('\n\t\t\tProperty: "TransparencyFactor", "double", "",0')
|
file.write('\n\t\t\tProperty: "TransparencyFactor", "double", "",%.4f' % (1.0 - mat_alpha))
|
||||||
if not mat_shadeless:
|
if not mat_shadeless:
|
||||||
file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cols)
|
file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cols)
|
||||||
file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.1f' % mat_spec)
|
file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.4f' % mat_spec)
|
||||||
file.write('\n\t\t\tProperty: "ShininessExponent", "double", "",80.0')
|
file.write('\n\t\t\tProperty: "ShininessExponent", "double", "",80.0')
|
||||||
file.write('\n\t\t\tProperty: "ReflectionColor", "ColorRGB", "",0,0,0')
|
file.write('\n\t\t\tProperty: "ReflectionColor", "ColorRGB", "",0,0,0')
|
||||||
file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1')
|
file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1')
|
||||||
@ -1965,12 +1973,12 @@ Definitions: {
|
|||||||
del tmp
|
del tmp
|
||||||
|
|
||||||
# we could avoid writing this possibly but for now just write it
|
# we could avoid writing this possibly but for now just write it
|
||||||
"""
|
|
||||||
file.write('''
|
file.write('''
|
||||||
ObjectType: "Pose" {
|
ObjectType: "Pose" {
|
||||||
Count: 1
|
Count: 1
|
||||||
}''')
|
}''')
|
||||||
"""
|
|
||||||
|
|
||||||
file.write('''
|
file.write('''
|
||||||
ObjectType: "GlobalSettings" {
|
ObjectType: "GlobalSettings" {
|
||||||
@ -2045,7 +2053,7 @@ Objects: {''')
|
|||||||
|
|
||||||
# Write pose's really weired, only needed when an armature and mesh are used together
|
# Write pose's really weired, only needed when an armature and mesh are used together
|
||||||
# each by themselves dont need pose data. for now only pose meshes and bones
|
# each by themselves dont need pose data. for now only pose meshes and bones
|
||||||
"""
|
|
||||||
file.write('''
|
file.write('''
|
||||||
Pose: "Pose::BIND_POSES", "BindPose" {
|
Pose: "Pose::BIND_POSES", "BindPose" {
|
||||||
Type: "BindPose"
|
Type: "BindPose"
|
||||||
@ -2053,21 +2061,17 @@ Objects: {''')
|
|||||||
Properties60: {
|
Properties60: {
|
||||||
}
|
}
|
||||||
NbPoseNodes: ''')
|
NbPoseNodes: ''')
|
||||||
|
file.write(str(len(pose_items)))
|
||||||
|
|
||||||
file.write(str(\
|
|
||||||
len(ob_meshes)+\
|
|
||||||
len(ob_bones)
|
|
||||||
))
|
|
||||||
|
|
||||||
for tmp in (ob_meshes, ob_bones):
|
for fbxName, matrix in pose_items:
|
||||||
for ob in tmp:
|
|
||||||
file.write('\n\t\tPoseNode: {')
|
file.write('\n\t\tPoseNode: {')
|
||||||
file.write('\n\t\t\tNode: "Model::%s"' % ob[0] ) # the first item is the fbx-name
|
file.write('\n\t\t\tNode: "Model::%s"' % fbxName )
|
||||||
file.write('\n\t\t\tMatrix: %s' % mat4x4str(object_tx(ob[1], None, None)[3])) # second item is the object or bone
|
if matrix: file.write('\n\t\t\tMatrix: %s' % mat4x4str(matrix))
|
||||||
|
else: file.write('\n\t\t\tMatrix: %s' % mat4x4str(Matrix()))
|
||||||
file.write('\n\t\t}')
|
file.write('\n\t\t}')
|
||||||
|
|
||||||
file.write('\n\t}')
|
file.write('\n\t}')
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
# Finish Writing Objects
|
# Finish Writing Objects
|
||||||
|
Loading…
Reference in New Issue
Block a user