USD import fix: set active mesh color.
Fixed a bug where the active color wasn't being set on imported meshes, resulting in no colors displaying in the viewport.
This commit is contained in:
@@ -449,11 +449,17 @@ void USDMeshReader::read_colors(Mesh *mesh, const double motionSampleTime)
|
|||||||
|
|
||||||
pxr::UsdGeomPrimvarsAPI primvarsAPI = pxr::UsdGeomPrimvarsAPI(mesh_prim_);
|
pxr::UsdGeomPrimvarsAPI primvarsAPI = pxr::UsdGeomPrimvarsAPI(mesh_prim_);
|
||||||
|
|
||||||
std::vector<pxr::UsdGeomPrimvar> primvars = primvarsAPI.GetPrimvars();
|
std::vector<pxr::UsdGeomPrimvar> primvars = primvarsAPI.GetPrimvarsWithValues();
|
||||||
|
|
||||||
|
pxr::TfToken active_color_name;
|
||||||
|
|
||||||
/* Convert all color primvars to custom layer data. */
|
/* Convert all color primvars to custom layer data. */
|
||||||
for (pxr::UsdGeomPrimvar pv : primvars) {
|
for (pxr::UsdGeomPrimvar pv : primvars) {
|
||||||
|
|
||||||
|
if (!pv.HasValue()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
pxr::SdfValueTypeName type = pv.GetTypeName();
|
pxr::SdfValueTypeName type = pv.GetTypeName();
|
||||||
|
|
||||||
if (!ELEM(type,
|
if (!ELEM(type,
|
||||||
@@ -465,6 +471,13 @@ void USDMeshReader::read_colors(Mesh *mesh, const double motionSampleTime)
|
|||||||
|
|
||||||
pxr::TfToken name = pv.GetPrimvarName();
|
pxr::TfToken name = pv.GetPrimvarName();
|
||||||
|
|
||||||
|
/* Set the active color name to 'displayColor', if a color primvar
|
||||||
|
* with this name exists. Otherwise, use the name of the first
|
||||||
|
* color primvar we find for the active color. */
|
||||||
|
if (active_color_name.IsEmpty() || name == usdtokens::displayColor) {
|
||||||
|
active_color_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
/* Skip if we read this primvar before and it isn't animated. */
|
/* Skip if we read this primvar before and it isn't animated. */
|
||||||
if (primvar_varying_map_.find(name) != primvar_varying_map_.end() &&
|
if (primvar_varying_map_.find(name) != primvar_varying_map_.end() &&
|
||||||
!primvar_varying_map_.at(name)) {
|
!primvar_varying_map_.at(name)) {
|
||||||
@@ -473,6 +486,10 @@ void USDMeshReader::read_colors(Mesh *mesh, const double motionSampleTime)
|
|||||||
|
|
||||||
read_colors(mesh, pv, motionSampleTime);
|
read_colors(mesh, pv, motionSampleTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!active_color_name.IsEmpty()) {
|
||||||
|
BKE_id_attributes_active_color_set(&mesh->id, active_color_name.GetText());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void USDMeshReader::read_colors(Mesh *mesh,
|
void USDMeshReader::read_colors(Mesh *mesh,
|
||||||
|
Reference in New Issue
Block a user