[Bf-blender-cvs] [7254e92ba2c] collada2.8: material importer - initial version

Gaia Clary noreply at git.blender.org
Tue Nov 13 17:07:20 CET 2018


Commit: 7254e92ba2c36024bcd5f636040148504f8abef6
Author: Gaia Clary
Date:   Mon Nov 12 20:42:11 2018 +0100
Branches: collada2.8
https://developer.blender.org/rB7254e92ba2c36024bcd5f636040148504f8abef6

material importer - initial version

===================================================================

M	source/blender/collada/ArmatureExporter.cpp
M	source/blender/collada/ArmatureExporter.h
M	source/blender/collada/DocumentExporter.cpp
M	source/blender/collada/DocumentExporter.h
M	source/blender/collada/DocumentImporter.cpp
M	source/blender/collada/DocumentImporter.h
M	source/blender/collada/EffectExporter.cpp
M	source/blender/collada/EffectExporter.h
M	source/blender/collada/ImageExporter.cpp
M	source/blender/collada/ImageExporter.h
M	source/blender/collada/MaterialExporter.h
M	source/blender/collada/Materials.cpp
M	source/blender/collada/Materials.h
M	source/blender/collada/SceneExporter.cpp
M	source/blender/collada/SceneExporter.h
M	source/blender/collada/collada.cpp
M	source/blender/collada/collada.h
M	source/blender/collada/collada_internal.cpp
M	source/blender/collada/collada_utils.cpp
M	source/blender/collada/collada_utils.h
M	source/blender/editors/io/io_collada.c

===================================================================

diff --git a/source/blender/collada/ArmatureExporter.cpp b/source/blender/collada/ArmatureExporter.cpp
index 35947abebfd..daee25b66d1 100644
--- a/source/blender/collada/ArmatureExporter.cpp
+++ b/source/blender/collada/ArmatureExporter.cpp
@@ -58,37 +58,38 @@ extern "C" {
 // XXX exporter writes wrong data for shared armatures.  A separate
 // controller should be written for each armature-mesh binding how do
 // we make controller ids then?
-ArmatureExporter::ArmatureExporter(bContext *C, COLLADASW::StreamWriter *sw, const ExportSettings *export_settings) :
+ArmatureExporter::ArmatureExporter(bContext *C, Depsgraph *depsgraph, COLLADASW::StreamWriter *sw, const ExportSettings *export_settings) :
 	mContext(C),
+	depsgraph(depsgraph),
 	COLLADASW::LibraryControllers(sw), export_settings(export_settings)
 {
 }
 
 // write bone nodes
 void ArmatureExporter::add_armature_bones(
-	bContext *C, Depsgraph *depsgraph, Object *ob_arm,
-	Scene *sce, SceneExporter *se,
+	Object *ob_arm,
+	ViewLayer *view_layer,
+	SceneExporter *se,
 	std::vector<Object *>& child_objects)
 
 {
-	Main *bmain = CTX_data_main(mContext);
 	// write bone nodes
 
 	bArmature *armature = (bArmature *)ob_arm->data;
 	bool is_edited = armature->edbo != NULL;
 
-	if (!is_edited)
+	if (!is_edited) {
 		ED_armature_to_edit(armature);
+	}
 
 	for (Bone *bone = (Bone *)armature->bonebase.first; bone; bone = bone->next) {
 		// start from root bones
 		if (!bone->parent) {
-			add_bone_node(C, depsgraph, bone, ob_arm, sce, se, child_objects);
+			add_bone_node(mContext, depsgraph, view_layer, bone, ob_arm, se, child_objects);
 		}
 	}
 
 	if (!is_edited) {
-		ED_armature_from_edit(bmain, armature);
 		ED_armature_edit_free(armature);
 	}
 }
@@ -166,9 +167,14 @@ void ArmatureExporter::find_objects_using_armature(Object *ob_arm, std::vector<O
 #endif
 
 // parent_mat is armature-space
-void ArmatureExporter::add_bone_node(bContext *C, Depsgraph *depsgraph, Bone *bone, Object *ob_arm, Scene *sce,
-                                     SceneExporter *se,
-                                     std::vector<Object *>& child_objects)
+void ArmatureExporter::add_bone_node(
+	bContext *C, 
+	Depsgraph *depsgraph, 
+	ViewLayer *view_layer,
+	Bone *bone,
+	Object *ob_arm,
+    SceneExporter *se,
+    std::vector<Object *>& child_objects)
 {
 	if (!(this->export_settings->deform_bones_only && bone->flag & BONE_NO_DEFORM)) {
 		std::string node_id = translate_id(id_name(ob_arm) + "_" + bone->name);
@@ -240,7 +246,7 @@ void ArmatureExporter::add_bone_node(bContext *C, Depsgraph *depsgraph, Bone *bo
 						mul_m4_m4m4((*i)->parentinv, temp, (*i)->parentinv);
 					}
 
-					se->writeNodes(C, depsgraph, *i, sce);
+					se->writeNodes(C, depsgraph, view_layer, *i);
 					copy_m4_m4((*i)->parentinv, backup_parinv);
 					child_objects.erase(i++);
 				}
@@ -248,13 +254,13 @@ void ArmatureExporter::add_bone_node(bContext *C, Depsgraph *depsgraph, Bone *bo
 			}
 
 			for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
-				add_bone_node(C, depsgraph, child, ob_arm, sce, se, child_objects);
+				add_bone_node(C, depsgraph, view_layer, child, ob_arm, se, child_objects);
 			}
 			node.end();
 		}
 		else {
 			for (Bone *child = (Bone *)bone->childbase.first; child; child = child->next) {
-				add_bone_node(C, depsgraph, child, ob_arm, sce, se, child_objects);
+				add_bone_node(C, depsgraph, view_layer, child, ob_arm, se, child_objects);
 			}
 		}
 }
diff --git a/source/blender/collada/ArmatureExporter.h b/source/blender/collada/ArmatureExporter.h
index 950febd7b70..8654adbc962 100644
--- a/source/blender/collada/ArmatureExporter.h
+++ b/source/blender/collada/ArmatureExporter.h
@@ -57,24 +57,21 @@ class SceneExporter;
 class ArmatureExporter : public COLLADASW::LibraryControllers, protected TransformWriter, protected InstanceWriter
 {
 public:
-	ArmatureExporter(bContext *C, COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
+	ArmatureExporter(bContext *C, struct Depsgraph *depsgraph, COLLADASW::StreamWriter *sw, const ExportSettings *export_settings);
 
-	// write bone nodes
 	void add_armature_bones(
-		bContext *C, struct Depsgraph *depsgraph,
-		Object *ob_arm, Scene *sce, SceneExporter *se,
+		Object *ob_arm,
+		ViewLayer *view_layer,
+		SceneExporter *se,
 		std::vector<Object *>& child_objects);
 
 	bool add_instance_controller(Object *ob);
 
-	//void export_controllers(Scene *sce);*/
-
-	//void operator()(Object *ob);
-
 private:
 	UnitConverter converter;
 	const ExportSettings *export_settings;
 	bContext *mContext;
+	struct Depsgraph *depsgraph;
 
 #if 0
 	std::vector<Object *> written_armatures;
@@ -89,8 +86,12 @@ private:
 	// Scene, SceneExporter and the list of child_objects
 	// are required for writing bone parented objects
 	void add_bone_node(
-		bContext *C, struct Depsgraph *depsgraph,
-		Bone *bone, Object *ob_arm, Scene *sce, SceneExporter *se,
+		bContext *C,
+		struct Depsgraph *depsgraph,
+		ViewLayer *view_layer,
+		Bone *bone,
+		Object *ob_arm,
+		SceneExporter *se,
 		std::vector<Object *>& child_objects);
 
 	void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node& node);
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp
index a87c05fe9bb..0ada2fb7b4b 100644
--- a/source/blender/collada/DocumentExporter.cpp
+++ b/source/blender/collada/DocumentExporter.cpp
@@ -272,14 +272,14 @@ int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
 		le.exportLights(sce);
 	}
 
+	// <library_effects>
+	EffectsExporter ee(writer, this->export_settings, key_image_map);
+	ee.exportEffects(C, sce);
+
 	// <library_images>
-	ImagesExporter ie(writer, this->export_settings);
+	ImagesExporter ie(writer, this->export_settings, key_image_map);
 	ie.exportImages(sce);
 
-	// <library_effects>
-	EffectsExporter ee(writer, this->export_settings);
-	ee.exportEffects(sce);
-
 	// <library_materials>
 	MaterialsExporter me(writer, this->export_settings);
 	me.exportMaterials(sce);
@@ -291,7 +291,7 @@ int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
 	}
 
 	// <library_controllers>
-	ArmatureExporter arm_exporter(C, writer, this->export_settings);
+	ArmatureExporter arm_exporter(C, depsgraph, writer, this->export_settings);
 	ControllerExporter controller_exporter(writer, this->export_settings);
 	if (bc_has_object_type(export_set, OB_ARMATURE) || this->export_settings->include_shapekeys)
 	{
@@ -307,8 +307,8 @@ int DocumentExporter::exportCurrentScene(bContext *C, Scene *sce)
 		AnimationExporter ae(depsgraph, writer, this->export_settings);
 		ae.exportAnimations(bmain, sce);
 	}
-	se.exportScene(C, depsgraph, sce);
 
+	se.exportScene(C, depsgraph);
 
 	// <scene>
 	std::string scene_name(translate_id(id_name(sce)));
diff --git a/source/blender/collada/DocumentExporter.h b/source/blender/collada/DocumentExporter.h
index 743df6f04c8..a7174417115 100644
--- a/source/blender/collada/DocumentExporter.h
+++ b/source/blender/collada/DocumentExporter.h
@@ -28,6 +28,7 @@
 #define __DOCUMENTEXPORTER_H__
 
 #include "collada.h"
+#include "collada_utils.h"
 
 extern "C" {
 #include "DNA_customdata_types.h"
@@ -45,6 +46,7 @@ class DocumentExporter
 private:
 	Depsgraph *depsgraph;
 	const ExportSettings *export_settings;
+	KeyImageMap key_image_map;
 };
 
 #endif
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index f1fdf8f83c8..c8057ff3082 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -768,89 +768,14 @@ bool DocumentImporter::writeMaterial(const COLLADAFW::Material *cmat)
 void DocumentImporter::write_profile_COMMON(COLLADAFW::EffectCommon *ef, Material *ma)
 {
 	MaterialNode matNode = MaterialNode(mContext, ef, ma, uid_image_map);
-
 	matNode.set_reflectivity(ef->getReflectivity().getFloatValue());
 	matNode.set_ior(ef->getIndexOfRefraction().getFloatValue());
-	matNode.set_diffuse(ef->getDiffuse());
-
-	COLLADAFW::Color col;
-
-	// AMBIENT
-	// color
-	if (ef->getAmbient().isColor()) {
-#if 0
-		col = ef->getAmbient().getColor();
-#endif
-	}
-	// texture
-	else if (ef->getAmbient().isTexture()) {
-#if 0
-		COLLADAFW::Texture ctex = ef->getAmbient().getTexture();
-#endif
-	}
-
-	// SPECULAR
-	// color
-	if (ef->getSpecular().isColor()) {
-		col = ef->getSpecular().getColor();
-		ma->specr = col.getRed();
-		ma->specg = col.getGreen();
-		ma->specb = col.getBlue();
-	}
-	// texture
-	else if (ef->getSpecular().isTexture()) {
-#if 0
-		COLLADAFW::Texture ctex = ef->getSpecular().getTexture();
-#endif
-	}
-
-	// REFLECTIVE
-	// color
-	if (ef->getReflective().isColor()) {
-#if 0
-		col = ef->getReflective().getColor();
-#endif
-	}
-	// texture
-	else if (ef->getReflective().isTexture()) {
-#if 0
-		COLLADAFW::Texture ctex = ef->getReflective().getTexture();
-#endif
-	}
-
-	// EMISSION
-	// color
-	if (ef->getEmission().isColor()) {
-		// XXX there is no emission color in blender
-		// but I am not sure
-	}
-	// texture
-	else if (ef->getEmission().isTexture()) {
-#if 0
-		COLLADAFW::Texture ctex = ef->getEmission().getTexture();
-#endif
-	}
-
-	// TRANSPARENT
-	// color
-	if (ef->getOpacity().isColor()) {
-#if 0
-		col = ef->getTransparent().getColor();
-		float alpha = ef->getTransparency().getFloatValue();
-		if (col.isValid()) {
-			alpha *= col.getAlpha(); // Assuming A_ONE opaque mode
-		}
-		if (col.isValid() || alpha < 1.0) {
-			...
-		}
-#endif
-	}
-	// texture
-	else if (ef->getOpacity().isTexture()) {
-#if 0
-		COLLADAFW::Texture ctex = ef->getOpacity().getTexture();
-#endif
-	}
+	matNode.set_diffuse(ef->getDiffuse(), "Diffuse");
+	matNode.set_ambient(ef->getAmbient(), "Ambient");
+	matNode.set_specular(ef->getSpecular(), "Specular");
+	matNode.set_reflective(ef->getReflective(), "Reflective");
+	matNode.set_emission(ef->getEmission(), "Emission");
+	matNode.set_opacity(ef->getOpacity(), "Opacity");
 }
 
 /** When this method is called, the writer must write the effect.
diff --git a/source/blender/collada/DocumentImporter.h b/source/blender/collada/DocumentImporter.h
index 5d5c5df2aaf..26ded417aa6 100644
--- a/source/blender/collada/DocumentImporter.h
++

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list