Fix T53745: Alembic exported with vertex colors not readable by other software.
authorWybren van Keulen <wybren>
Wed, 19 Sep 2018 08:55:49 +0000 (10:55 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Wed, 19 Sep 2018 18:17:04 +0000 (20:17 +0200)
Most other software expects to read indexed vertex colors, so write indices
along with the colors as we already do for UVs.

Differential Revision: https://developer.blender.org/D3704

source/blender/alembic/intern/abc_customdata.cc

index f2ae1c831d11e856bc758e9c17d23cf279f740ec..424475dc61b2d57fc5a30974fcd2ff36f7a1550f 100644 (file)
@@ -185,7 +185,11 @@ static void write_mcol(const OCompoundProperty &prop, const CDStreamConfig &conf
        MLoop *mloops = config.mloop;
        MCol *cfaces = static_cast<MCol *>(data);
 
-       std::vector<Imath::C4f> buffer(config.totvert);
+       std::vector<Imath::C4f> buffer;
+       std::vector<uint32_t> indices;
+
+       buffer.reserve(config.totvert);
+       indices.reserve(config.totvert);
 
        Imath::C4f col;
 
@@ -203,7 +207,8 @@ static void write_mcol(const OCompoundProperty &prop, const CDStreamConfig &conf
                        col[2] = cface->g * cscale;
                        col[3] = cface->b * cscale;
 
-                       buffer[mloop->v] = col;
+                       buffer.push_back(col);
+                       indices.push_back(buffer.size() - 1);
                }
        }
 
@@ -211,6 +216,7 @@ static void write_mcol(const OCompoundProperty &prop, const CDStreamConfig &conf
 
        OC4fGeomParam::Sample sample(
                C4fArraySample(&buffer.front(), buffer.size()),
+               UInt32ArraySample(&indices.front(), indices.size()),
                kVertexScope);
 
        param.set(sample);