Commit: 31b8b2aae2c8cf2e9b62b8991b04c4d2e06a22cb
Author: Kévin Dietrich
Date:   Thu May 26 14:38:45 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB31b8b2aae2c8cf2e9b62b8991b04c4d2e06a22cb

Revert changes done to the transform matrix read/write and axis
conversion code to the state of the original patch.

The rewrite wasn't ideal, and prone to bugs. The idea was to not
hardcode Y-up <-> Z-up conversions but rather let the user choose the
axis during the export/import process, but since the other DCCs commonly
found in VFX pipeline all use a Y-up system, hardcoding everything
should be fine for the time being. This will probably be revisited in
the future if need be.

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

M       source/blender/alembic/ABC_alembic.h
M       source/blender/alembic/intern/abc_hair.cc
M       source/blender/alembic/intern/abc_mesh.cc
M       source/blender/alembic/intern/abc_nurbs.cc
M       source/blender/alembic/intern/abc_object.cc
M       source/blender/alembic/intern/abc_transform.cc
M       source/blender/alembic/intern/abc_util.cc
M       source/blender/alembic/intern/abc_util.h
M       source/blender/alembic/intern/alembic_capi.cc
M       source/blender/editors/io/io_alembic.c
M       source/blender/makesrna/intern/rna_scene_api.c

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

diff --git a/source/blender/alembic/ABC_alembic.h 
b/source/blender/alembic/ABC_alembic.h
index db43c87..3fb2320 100644
--- a/source/blender/alembic/ABC_alembic.h
+++ b/source/blender/alembic/ABC_alembic.h
@@ -51,9 +51,9 @@ int ABC_export(struct Scene *scene, struct bContext *C, const 
char *filename,
                int vislayers, int renderable,
                int facesets, int matindices,
                int geogroups, int compression,
-               bool packuv, int to_forward, int to_up, float scale);
+               bool packuv, float scale);
 
-void ABC_import(struct bContext *C, const char *filename, int from_forward, 
int from_up, float scale);
+void ABC_import(struct bContext *C, const char *filename, float scale);
 
 void ABC_get_vertex_cache(const char *filepath, float time, void *verts, int 
max_verts, const char *sub_obj, int is_mvert);
 
diff --git a/source/blender/alembic/intern/abc_hair.cc 
b/source/blender/alembic/intern/abc_hair.cc
index 69da382..b830b7c 100644
--- a/source/blender/alembic/intern/abc_hair.cc
+++ b/source/blender/alembic/intern/abc_hair.cc
@@ -159,11 +159,8 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
 
                                        psys_interpolate_face(mverts, face, 
tface, NULL, mapfw, vec, tmpnor, NULL, NULL, NULL, NULL);
 
-                                       if (m_settings.do_convert_axis) {
-                                               
mul_m3_v3(m_settings.convert_matrix, tmpnor);
-                                       }
-
-                                       
norm_values.push_back(Imath::V3f(tmpnor[0], tmpnor[1], tmpnor[2]));
+                                       /* Convert Z-up to Y-up. */
+                                       
norm_values.push_back(Imath::V3f(tmpnor[0], -tmpnor[2], tmpnor[1]));
                                }
                        }
                        else {
@@ -214,11 +211,8 @@ void AbcHairWriter::write_hair_sample(DerivedMesh *dm,
                        copy_v3_v3(vert, path->co);
                        mul_m4_v3(inv_mat, vert);
 
-                       if (m_settings.do_convert_axis) {
-                               mul_m3_v3(m_settings.convert_matrix, vert);
-                       }
-
-                       verts.push_back(Imath::V3f(vert[0], vert[1], vert[2]));
+                       /* Convert Z-up to Y-up. */
+                       verts.push_back(Imath::V3f(vert[0], vert[2], -vert[1]));
 
                        ++path;
                }
@@ -266,11 +260,8 @@ void AbcHairWriter::write_hair_child_sample(DerivedMesh 
*dm,
 
                                psys_interpolate_face(mverts, face, tface, 
NULL, mapfw, vec, tmpnor, NULL, NULL, NULL, NULL);
 
-                               if (m_settings.do_convert_axis) {
-                                       mul_m3_v3(m_settings.convert_matrix, 
tmpnor);
-                               }
-
-                               norm_values.push_back(Imath::V3f(tmpnor[0], 
tmpnor[1], tmpnor[2]));
+                               /* Convert Z-up to Y-up. */
+                               norm_values.push_back(Imath::V3f(tmpnor[0], 
tmpnor[2], -tmpnor[1]));
                        }
                }
 
@@ -282,11 +273,8 @@ void AbcHairWriter::write_hair_child_sample(DerivedMesh 
*dm,
                        copy_v3_v3(vert, path->co);
                        mul_m4_v3(inv_mat, vert);
 
-                       if (m_settings.do_convert_axis) {
-                               mul_m3_v3(m_settings.convert_matrix, vert);
-                       }
-
-                       verts.push_back(Imath::V3f(vert[0], vert[1], vert[2]));
+                       /* Convert Z-up to Y-up. */
+                       verts.push_back(Imath::V3f(vert[0], vert[2], -vert[1]));
 
                        ++path;
                }
diff --git a/source/blender/alembic/intern/abc_mesh.cc 
b/source/blender/alembic/intern/abc_mesh.cc
index 85bad65..7c7b561 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -452,23 +452,11 @@ void AbcMeshWriter::getPoints(DerivedMesh *dm, 
std::vector<float> &points)
 
        MVert *verts = dm->getVertArray(dm);
 
-       if (m_settings.do_convert_axis) {
-               float vert[3];
-
-               for (int i = 0, e = dm->getNumVerts(dm); i < e; ++i) {
-                       copy_v3_v3(vert, verts[i].co);
-                       mul_m3_v3(m_settings.convert_matrix, vert);
-                       points.push_back(vert[0]);
-                       points.push_back(vert[1]);
-                       points.push_back(vert[2]);
-               }
-       }
-       else {
-               for (int i = 0, e = dm->getNumVerts(dm); i < e; ++i) {
-                       points.push_back(verts[i].co[0]);
-                       points.push_back(verts[i].co[1]);
-                       points.push_back(verts[i].co[2]);
-               }
+       for (int i = 0, e = dm->getNumVerts(dm); i < e; ++i) {
+               /* Convert Z-up to Y-up. */
+               points.push_back(verts[i].co[0]);
+               points.push_back(verts[i].co[2]);
+               points.push_back(-verts[i].co[1]);
        }
 
        calcBounds(points);
@@ -907,27 +895,16 @@ void AbcMeshWriter::getVelocities(DerivedMesh *dm, 
std::vector<float> &vels)
 
        if (fss->meshVelocities) {
                float *meshVels = reinterpret_cast<float 
*>(fss->meshVelocities);
+               float vel[3];
 
-               if (m_settings.do_convert_axis) {
-                       float vel[3];
-
-                       for (int i = 0; i < totverts; ++i) {
-                               copy_v3_v3(vel, meshVels);
-                               mul_m3_v3(m_settings.convert_matrix, vel);
+               for (int i = 0; i < totverts; ++i) {
+                       copy_v3_v3(vel, meshVels);
 
-                               vels.push_back(vels[0]);
-                               vels.push_back(vels[1]);
-                               vels.push_back(vels[2]);
-                               meshVels += 3;
-                       }
-               }
-               else {
-                       {
-                               vels.push_back(meshVels[0]);
-                               vels.push_back(meshVels[1]);
-                               vels.push_back(meshVels[2]);
-                               meshVels += 3;
-                       }
+                       /* Convert Z-up to Y-up. */
+                       vels.push_back(vels[0]);
+                       vels.push_back(vels[2]);
+                       vels.push_back(-vels[1]);
+                       meshVels += 3;
                }
        }
        else {
@@ -1180,8 +1157,8 @@ void AbcMeshReader::readObjectData(Main *bmain, Scene 
*scene, float time)
        MeshCacheModifierData *mcmd = reinterpret_cast<MeshCacheModifierData 
*>(md);
        mcmd->type = MOD_MESHCACHE_TYPE_ABC;
        mcmd->time_mode = MOD_MESHCACHE_TIME_SECONDS;
-       mcmd->forward_axis = m_settings->from_forward;
-       mcmd->up_axis = m_settings->from_up;
+       mcmd->forward_axis = OB_POSZ;
+       mcmd->up_axis = OB_NEGY;
 
        BLI_strncpy(mcmd->filepath, m_iobject.getArchive().getName().c_str(), 
1024);
        BLI_strncpy(mcmd->sub_object, m_iobject.getFullName().c_str(), 1024);
@@ -1198,19 +1175,12 @@ void AbcMeshReader::readVertexDataSample(Mesh *mesh, 
const P3fArraySamplePtr &po
                MVert &mvert = mesh->mvert[j];
                Imath::V3f pos_in = (*positions)[i];
 
+               /* Convert Y-up to Z-up. */
                mvert.co[0] = pos_in[0];
-               mvert.co[1] = pos_in[1];
-               mvert.co[2] = pos_in[2];
-
+               mvert.co[1] = -pos_in[2];
+               mvert.co[2] = pos_in[1];
                mvert.bweight = 0;
        }
-
-       if (m_settings->do_convert_mat) {
-               for (int i = 0, j = vertex_start; i < vertex_count; ++i, ++j) {
-                       MVert &mvert = mesh->mvert[j];
-                       mul_m4_v3(m_settings->conversion_mat, mvert.co);
-               }
-       }
 }
 
 void AbcMeshReader::readPolyDataSample(Mesh *mesh,
diff --git a/source/blender/alembic/intern/abc_nurbs.cc 
b/source/blender/alembic/intern/abc_nurbs.cc
index 7760ba5..fd97f4f 100644
--- a/source/blender/alembic/intern/abc_nurbs.cc
+++ b/source/blender/alembic/intern/abc_nurbs.cc
@@ -103,8 +103,7 @@ static void recompute_pnts_cyclic(const BPoint *bps,
                                   const int num_u, const int num_v,
                                   const int add_u, const int add_v,
                                   std::vector<Imath::V3f> &pos,
-                                  std::vector<float> &posWeight,
-                                  bool rotate, float rot_mat[3][3])
+                                  std::vector<float> &posWeight)
 {
        const int new_u = num_u;/* + add_u; */
        const int new_v = num_v;/* + add_v; */
@@ -115,31 +114,23 @@ static void recompute_pnts_cyclic(const BPoint *bps,
 
        std::vector< std::vector<Imath::Vec4<float> > > pnts;
        pnts.resize(new_u);
+
        for (int u = 0; u < new_u; ++u) {
                pnts[u].resize(new_v);
 
-               if (rotate) {
-                       for (int v = 0; v < new_v; ++v) {
-                               const BPoint& bp = bps[u + (v * new_u)];
-                               float vert[3];
-                               copy_v3_v3(vert, bp.vec);
-                               mul_m3_v3(rot_mat, vert);
-
-                               pnts[u][v] = Imath::Vec4<float>(vert[0], 
vert[1], vert[2], bp.vec[3]);
-                       }
-               }
-               else {
-                       for (int v = 0; v < new_v; ++v) {
-                               const BPoint& bp = bps[u + (v * new_u)];
-                               pnts[u][v] = Imath::Vec4<float>(bp.vec[0], 
bp.vec[1], bp.vec[2], bp.vec[3]);
-                       }
+               for (int v = 0; v < new_v; ++v) {
+                       const BPoint& bp = bps[u + (v * new_u)];
+                       pnts[u][v] = Imath::Vec4<float>(bp.vec[0], bp.vec[1], 
bp.vec[2], bp.vec[3]);
                }
        }
 
        for (int u = 0; u < new_u; ++u) {
                for (int v = 0; v < new_v; ++v) {
-                       Imath::Vec4<float>& pnt = pnts[u][v];
-                       pos.push_back(Imath::V3f(pnt.x, pnt.y, pnt.z));
+                       const Imath::Vec4<float> &pnt = pnts[u][v];
+
+                       /* Convert Z-up to Y-up. */
+                       pos.push_back(Imath::V3f(pnt.x, pnt.z, -pnt.y));
+
                        posWeight.push_back(pnt.z);
                }
        }
@@ -193,8 +184,7 @@ void AbcNurbsWriter::do_write()
                std::vector<Imath::V3f> sampPos;
                std::vector<float> sampPosWeights;
                recompute_pnts_cyclic(nu->bp, nu->pntsu, nu->pntsv, add_u, 
add_v,
-                                     sampPos, sampPosWeights,
-                                     m_settings.do_convert_axis, 
m_settings.convert_matrix);
+                                     sampPos, sampPosWeights);
 
                nuSamp.setPositions(sampPos);
                nuSamp.setPositionWeights(sampPosWeights);
@@ -281,14 +271,11 @@ void AbcNurbsReader::readObjectData(Main *bmain, Scene 
*scene, float time)
                                posw_in = (*positionsW)[i];
                        }
 
+                       /* Convert Y-up to Z-up. */
                        nu->bp[i].vec[0] = pos_in[0];
-                       nu->bp[i].vec[1] = pos_in[1];
-                       nu->bp[i].vec[2] = pos_in[2];
+                       nu->bp[i].vec[1] = -pos_in[2];
+                       nu->bp[i].vec[2] = pos_in[1];
                        nu->bp[i].vec[3] = posw_in;
-
-                       if (m_settings->do_convert_mat) {
-                               mul_m4_v3(m_settings->conversion_mat, 
nu->bp[i].vec);
-                       }
                }
 
                for (size_t i = 0; i < numKnotsU; i++) {
diff --git a/source/blender/alembic/intern/abc_object.cc 
b/source/blender/alembic/intern/abc_object.cc
index fca0580..714a233 100644
--- a/source/blender/alembic/intern/abc_object.cc
+++ b/source/blender/alembic/intern/abc_object.cc
@@ -350,26 +350,33 @@ void AbcObjectReader::readObjectMatrix(const float time)
                Alembic::AbcGeom::XformSample xs;
                schema.get(xs, xform_sample);
 
-               float loc[3];
-               for (int i = 0; i < 3; ++i) {
-                       loc[i] = xs.getTranslation()[i];
-                       m_object->size[i] = xs.getScale()[i];
+               Alembic::Abc::M44d xfrom = xs.getMatrix();
+
+               for (int i = 0; i < 4; ++i) {
+            for (int j = 0; j < 4; j++) {
+                m_object->obmat[i][j] = xfrom[i][j];
+            }
+        }
+
+               if (m_object->type == OB_CAMERA) {
+                       float cam_to_yup[4][4];
+                       unit_m4(cam_to_yup);
+                       rotate_m4(cam_to_yup, 'X', M_PI_2);
+                       mul_m4_m4m4(m_object->obmat, m_object->obmat, 
cam_to_yup);
                }
 
-               m_object->rot[0] = xs.getXRotation() * M_PI / 180;
-               m_object->rot[1] = xs.getYRotation() * M_PI / 180;
-               m_object->rot[2] = xs.getZRotation() * M_PI / 180;
+               create_transform_matrix(m_object);
 
-               if (m_settings->do_convert_mat) {
-                       mul_v3_m4v3(m_object->loc, m_settings->conversion_mat, 
loc

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to