diff --git a/tools/export/blender25/io_scene_dae/__init__.py b/tools/export/blender25/io_scene_dae/__init__.py index 8d6f6b4976..d0d286211e 100644 --- a/tools/export/blender25/io_scene_dae/__init__.py +++ b/tools/export/blender25/io_scene_dae/__init__.py @@ -131,11 +131,7 @@ class ExportDAE(bpy.types.Operator, ExportHelper): default=True, options={'HIDDEN'}, ) - export_shapekeys = BoolProperty( - name="Export Shape Keys", - default=False, - ) - + @property def check_extension(self): return True#return self.batch_mode == 'OFF' diff --git a/tools/export/blender25/io_scene_dae/export_dae.py b/tools/export/blender25/io_scene_dae/export_dae.py index 9c104901f5..cc5865080b 100644 --- a/tools/export/blender25/io_scene_dae/export_dae.py +++ b/tools/export/blender25/io_scene_dae/export_dae.py @@ -51,12 +51,14 @@ S_IMGS=1 S_FX=2 S_MATS=3 S_GEOM=4 -S_CONT=5 -S_CAMS=6 -S_LAMPS=7 -S_ANIM_CLIPS=8 -S_NODES=9 -S_ANIM=10 +S_MORPH=5 +S_SKIN=6 +S_CONT=7 +S_CAMS=8 +S_LAMPS=9 +S_ANIM_CLIPS=10 +S_NODES=11 +S_ANIM=12 CMP_EPSILON=0.0001 @@ -286,9 +288,9 @@ class DaeExporter: self.writel(S_FX,5,'') - self.writel(S_FX,5,''+str(material.specular_ior)+'') self.writel(S_FX,4,'') + self.writel(S_FX,4,''+str(material.specular_ior)+'') self.writel(S_FX,4,'') self.writel(S_FX,5,'') @@ -373,14 +375,14 @@ class DaeExporter: node.active_shape_key_index = 0 - self.writel(S_CONT,1,'') + self.writel(S_MORPH,1,'') #if ("skin_id" in morph_targets[0]): - # self.writel(S_CONT,2,'') + # self.writel(S_MORPH,2,'') #else: - self.writel(S_CONT,2,'') + self.writel(S_MORPH,2,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,4,'') + self.writel(S_MORPH,3,'') + self.writel(S_MORPH,4,'') marr="" warr="" for i in range(len(morph_targets)): @@ -396,32 +398,32 @@ class DaeExporter: warr+=" 0" - self.writel(S_CONT,5,marr) - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,6,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') + self.writel(S_MORPH,5,marr) + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,5,'') + self.writel(S_MORPH,6,'') + self.writel(S_MORPH,5,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,3,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,5,warr) - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,6,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') + self.writel(S_MORPH,3,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,5,warr) + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,5,'') + self.writel(S_MORPH,6,'') + self.writel(S_MORPH,5,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,3,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,2,'') - self.writel(S_CONT,1,'') + self.writel(S_MORPH,3,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,4,'') + self.writel(S_MORPH,3,'') + self.writel(S_MORPH,2,'') + self.writel(S_MORPH,1,'') if (armature!=None): self.armature_for_morph[node]=armature @@ -655,41 +657,41 @@ class DaeExporter: contid = self.new_id("controller") - self.writel(S_CONT,1,'') + self.writel(S_SKIN,1,'') if (skel_source!=None): - self.writel(S_CONT,2,'') + self.writel(S_SKIN,2,'') else: - self.writel(S_CONT,2,'') + self.writel(S_SKIN,2,'') - self.writel(S_CONT,3,''+strmtx(node.matrix_world)+'') + self.writel(S_SKIN,3,''+strmtx(node.matrix_world)+'') #Joint Names - self.writel(S_CONT,3,'') + self.writel(S_SKIN,3,'') name_values="" for v in si["bone_names"]: name_values+=" "+v - self.writel(S_CONT,4,''+name_values+'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') + self.writel(S_SKIN,4,''+name_values+'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,5,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,3,'') #Pose Matrices! - self.writel(S_CONT,3,'') + self.writel(S_SKIN,3,'') pose_values="" for v in si["bone_bind_poses"]: pose_values+=" "+strmtx(v) - self.writel(S_CONT,4,''+pose_values+'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') + self.writel(S_SKIN,4,''+pose_values+'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,5,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,3,'') #Skin Weights! - self.writel(S_CONT,3,'') + self.writel(S_SKIN,3,'') skin_weights="" skin_weights_total=0 for v in vertices: @@ -697,22 +699,22 @@ class DaeExporter: for w in v.weights: skin_weights+=" "+str(w) - self.writel(S_CONT,4,''+skin_weights+'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,5,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') + self.writel(S_SKIN,4,''+skin_weights+'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,5,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,3,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,3,'') - self.writel(S_CONT,4,'') - self.writel(S_CONT,4,'') + self.writel(S_SKIN,3,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,3,'') + self.writel(S_SKIN,3,'') + self.writel(S_SKIN,4,'') + self.writel(S_SKIN,4,'') vcounts="" vs="" vcount=0 @@ -722,13 +724,13 @@ class DaeExporter: vs+=" "+str(b) vs+=" "+str(vcount) vcount+=1 - self.writel(S_CONT,4,''+vcounts+'') - self.writel(S_CONT,4,''+vs+'') - self.writel(S_CONT,3,'') + self.writel(S_SKIN,4,''+vcounts+'') + self.writel(S_SKIN,4,''+vs+'') + self.writel(S_SKIN,3,'') - self.writel(S_CONT,2,'') - self.writel(S_CONT,1,'') + self.writel(S_SKIN,2,'') + self.writel(S_SKIN,1,'') meshdata["skin_id"]=contid @@ -865,7 +867,7 @@ class DaeExporter: light=node.data lightid=self.new_id("light") self.writel(S_LAMPS,1,'') - self.writel(S_LAMPS,2,'') + #self.writel(S_LAMPS,2,'') self.writel(S_LAMPS,3,'') if (light.type=="POINT"): @@ -893,7 +895,7 @@ class DaeExporter: self.writel(S_LAMPS,3,'') - self.writel(S_LAMPS,2,'') + #self.writel(S_LAMPS,2,'') self.writel(S_LAMPS,1,'') @@ -1136,7 +1138,7 @@ class DaeExporter: self.writel(S_ANIM,2,'') self.writel(S_ANIM,3,''+source_frames+'') self.writel(S_ANIM,3,'') - self.writel(S_ANIM,4,'') + self.writel(S_ANIM,4,'') self.writel(S_ANIM,5,'') self.writel(S_ANIM,4,'') self.writel(S_ANIM,3,'') @@ -1147,7 +1149,7 @@ class DaeExporter: self.writel(S_ANIM,2,'') self.writel(S_ANIM,3,''+source_transforms+'') self.writel(S_ANIM,3,'') - self.writel(S_ANIM,4,'') + self.writel(S_ANIM,4,'') self.writel(S_ANIM,5,'') self.writel(S_ANIM,4,'') self.writel(S_ANIM,3,'') @@ -1157,7 +1159,7 @@ class DaeExporter: self.writel(S_ANIM,2,'') self.writel(S_ANIM,3,''+source_transforms+'') self.writel(S_ANIM,3,'') - self.writel(S_ANIM,4,'') + self.writel(S_ANIM,4,'') self.writel(S_ANIM,5,'') self.writel(S_ANIM,4,'') self.writel(S_ANIM,3,'') @@ -1167,7 +1169,7 @@ class DaeExporter: self.writel(S_ANIM,2,'') self.writel(S_ANIM,3,''+source_interps+'') self.writel(S_ANIM,3,'') - self.writel(S_ANIM,4,'') + self.writel(S_ANIM,4,'') self.writel(S_ANIM,5,'') self.writel(S_ANIM,4,'') self.writel(S_ANIM,3,'') @@ -1379,6 +1381,19 @@ class DaeExporter: self.export_scene() self.writel(S_GEOM,0,'') + + #morphs always go before skin controllers + if S_MORPH in self.sections: + for l in self.sections[S_MORPH]: + self.writel(S_CONT,0,l) + del self.sections[S_MORPH] + + #morphs always go before skin controllers + if S_SKIN in self.sections: + for l in self.sections[S_SKIN]: + self.writel(S_CONT,0,l) + del self.sections[S_SKIN] + self.writel(S_CONT,0,'') self.writel(S_CAMS,0,'') self.writel(S_LAMPS,0,'')