diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc index 56fea8a7fea..d6aa7168165 100644 --- a/source/blender/io/usd/intern/usd_reader_mesh.cc +++ b/source/blender/io/usd/intern/usd_reader_mesh.cc @@ -180,6 +180,12 @@ static std::optional convert_usd_type_to_blender( map.add_new(pxr::SdfValueTypeNames->TexCoord3fArray, CD_PROP_FLOAT2); map.add_new(pxr::SdfValueTypeNames->TexCoord3hArray, CD_PROP_FLOAT2); map.add_new(pxr::SdfValueTypeNames->Float3Array, CD_PROP_FLOAT3); + map.add_new(pxr::SdfValueTypeNames->Point3fArray, CD_PROP_FLOAT3); + map.add_new(pxr::SdfValueTypeNames->Point3dArray, CD_PROP_FLOAT3); + map.add_new(pxr::SdfValueTypeNames->Point3hArray, CD_PROP_FLOAT3); + map.add_new(pxr::SdfValueTypeNames->Normal3fArray, CD_PROP_FLOAT3); + map.add_new(pxr::SdfValueTypeNames->Normal3dArray, CD_PROP_FLOAT3); + map.add_new(pxr::SdfValueTypeNames->Normal3hArray, CD_PROP_FLOAT3); map.add_new(pxr::SdfValueTypeNames->Vector3fArray, CD_PROP_FLOAT3); map.add_new(pxr::SdfValueTypeNames->Vector3hArray, CD_PROP_FLOAT3); map.add_new(pxr::SdfValueTypeNames->Vector3dArray, CD_PROP_FLOAT3); @@ -189,6 +195,8 @@ static std::optional convert_usd_type_to_blender( map.add_new(pxr::SdfValueTypeNames->StringArray, CD_PROP_STRING); map.add_new(pxr::SdfValueTypeNames->BoolArray, CD_PROP_BOOL); map.add_new(pxr::SdfValueTypeNames->QuatfArray, CD_PROP_QUATERNION); + map.add_new(pxr::SdfValueTypeNames->QuatdArray, CD_PROP_QUATERNION); + map.add_new(pxr::SdfValueTypeNames->QuathArray, CD_PROP_QUATERNION); return map; }(); @@ -885,6 +893,11 @@ void USDMeshReader::read_custom_data(const ImportSettings *settings, continue; } + if (!pv.GetAttr().GetTypeName().IsArray()) { + /* Non-array attributes are technically improper USD. */ + continue; + } + const pxr::SdfValueTypeName type = pv.GetTypeName(); const pxr::TfToken varying_type = pv.GetInterpolation(); const pxr::TfToken name = pv.StripPrimvarsName(pv.GetPrimvarName()); @@ -897,6 +910,16 @@ void USDMeshReader::read_custom_data(const ImportSettings *settings, continue; } + if (ELEM(type, + pxr::SdfValueTypeNames->StringArray, + pxr::SdfValueTypeNames->QuatfArray, + pxr::SdfValueTypeNames->QuatdArray, + pxr::SdfValueTypeNames->QuathArray)) + { + /* Skip creating known unsupported types, and avoid spammy error prints. */ + continue; + } + /* Read Color primvars. */ if (convert_usd_type_to_blender(type) == CD_PROP_COLOR) { if ((settings->read_flag & MOD_MESHSEQ_READ_COLOR) != 0) {