[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