[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11880] trunk/blender/release/scripts/ export_fbx.py: * added a bindpose (3ds max was complaining)
Campbell Barton
cbarton at metavr.com
Wed Aug 29 07:42:39 CEST 2007
Revision: 11880
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11880
Author: campbellbarton
Date: 2007-08-29 07:42:39 +0200 (Wed, 29 Aug 2007)
Log Message:
-----------
* added a bindpose (3ds max was complaining)
* export materials emit value
Modified Paths:
--------------
trunk/blender/release/scripts/export_fbx.py
Modified: trunk/blender/release/scripts/export_fbx.py
===================================================================
--- trunk/blender/release/scripts/export_fbx.py 2007-08-29 05:01:20 UTC (rev 11879)
+++ trunk/blender/release/scripts/export_fbx.py 2007-08-29 05:42:39 UTC (rev 11880)
@@ -495,6 +495,8 @@
file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime)
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
def object_tx(ob, loc, matrix, matrix_mod = None):
'''
@@ -656,8 +658,10 @@
file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName)
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", "",1')
@@ -994,12 +998,14 @@
# only use this for the root matrix at the moment
if matrixOnly:
- write_object_props(None, None, matrixOnly)
+ poseMatrix = write_object_props(None, None, matrixOnly)[3]
else: # all other Null's
- if my_null: write_object_props(my_null.blenObject)
- else: write_object_props()
-
+ if my_null: poseMatrix = write_object_props(my_null.blenObject)[3]
+ else: poseMatrix = write_object_props()[3]
+
+ pose_items.append((fbxName, poseMatrix))
+
file.write('''
}
MultiLayer: 0
@@ -1028,6 +1034,7 @@
mat_hard = (float(mat.hard)-1)/5.10
mat_spec = mat.spec/2.0
mat_alpha = mat.alpha
+ mat_emit = mat.emit
mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS
if mat_shadeless:
mat_shader = 'Lambert'
@@ -1045,6 +1052,7 @@
mat_hard = 20.0
mat_spec = 0.2
mat_alpha = 1.0
+ mat_emit = 0.0
mat_shadeless = False
mat_shader = 'Phong'
@@ -1055,19 +1063,19 @@
file.write('\n\t\tProperties60: {')
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: "EmissiveColor", "ColorRGB", "",0,0,0')
- file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",1')
+ 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", "",%.4f' % mat_dif)
- file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_colamb)
- file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.1f' % mat_amb)
- file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cold)
- file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.1f' % mat_dif)
+ file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_colamb)
+ file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.4f' % mat_amb)
+ file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold)
+ 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: "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:
- file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cols)
- file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.1f' % mat_spec)
+ file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cols)
+ 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: "ReflectionColor", "ColorRGB", "",0,0,0')
file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1')
@@ -1965,13 +1973,13 @@
del tmp
# we could avoid writing this possibly but for now just write it
- """
+
file.write('''
ObjectType: "Pose" {
Count: 1
}''')
- """
+
file.write('''
ObjectType: "GlobalSettings" {
Count: 1
@@ -2045,7 +2053,7 @@
# 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
- """
+
file.write('''
Pose: "Pose::BIND_POSES", "BindPose" {
Type: "BindPose"
@@ -2053,21 +2061,17 @@
Properties60: {
}
NbPoseNodes: ''')
-
- file.write(str(\
- len(ob_meshes)+\
- len(ob_bones)
- ))
+ file.write(str(len(pose_items)))
- for tmp in (ob_meshes, ob_bones):
- for ob in tmp:
- 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\tMatrix: %s' % mat4x4str(object_tx(ob[1], None, None)[3])) # second item is the object or bone
- file.write('\n\t\t}')
+
+ for fbxName, matrix in pose_items:
+ file.write('\n\t\tPoseNode: {')
+ file.write('\n\t\t\tNode: "Model::%s"' % fbxName )
+ 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}')
- """
# Finish Writing Objects
More information about the Bf-blender-cvs
mailing list