diff --git a/lib/mayaUsd/fileio/jobs/readJob.cpp b/lib/mayaUsd/fileio/jobs/readJob.cpp index ad2d702c84..d433cac046 100644 --- a/lib/mayaUsd/fileio/jobs/readJob.cpp +++ b/lib/mayaUsd/fileio/jobs/readJob.cpp @@ -495,8 +495,13 @@ void UsdMaya_ReadJob::_ConvertUpAxisAndUnits(const UsdStageRefPtr& stage) // Convert units if required and different between Maya and USD. const bool convertUnits = mArgs.unit; - conversion.mayaMetersPerUnit - = UsdMayaUtil::ConvertMDistanceUnitToUsdGeomLinearUnit(MDistance::internalUnit()); + // Note: when changing preference, we need to compare to the UI units. + // When adding scaling transforms, we need to compare to internal units. + const MDistance::Unit mayaUnits + = (mArgs.axisAndUnitMethod == UsdMayaJobImportArgsTokens->overwritePrefs) + ? MDistance::uiUnit() + : MDistance::internalUnit(); + conversion.mayaMetersPerUnit = UsdMayaUtil::ConvertMDistanceUnitToUsdGeomLinearUnit(mayaUnits); conversion.usdMetersPerUnit = UsdGeomGetStageMetersPerUnit(stage); conversion.needUnitsConversion = (convertUnits && (conversion.mayaMetersPerUnit != conversion.usdMetersPerUnit)); diff --git a/lib/mayaUsd/utils/utilSerialization.cpp b/lib/mayaUsd/utils/utilSerialization.cpp index 98f3300f6d..8a3ddc8155 100644 --- a/lib/mayaUsd/utils/utilSerialization.cpp +++ b/lib/mayaUsd/utils/utilSerialization.cpp @@ -371,7 +371,7 @@ void setLayerUpAxisAndUnits(const SdfLayerRefPtr& layer) = UsdMayaUtil::ConvertMDistanceUnitToUsdGeomLinearUnit(MDistance::internalUnit()); // Note: code similar to what UsdGeomSetStageUpAxis -> UsdStage::SetMetadata end-up doing, - // but without having to have a stage. We basically set metadat on the virtual root object + // but without having to have a stage. We basically set metadata on the virtual root object // of the layer. layer->SetField( PXR_NS::SdfPath::AbsoluteRootPath(), PXR_NS::UsdGeomTokens->metersPerUnit, metersPerUnit);