From 8f6a13aa8fbb2f4dd1c3e133b17c5cdb96ba87d8 Mon Sep 17 00:00:00 2001 From: Robin Alazard Date: Fri, 27 Jun 2025 02:15:47 -0700 Subject: [PATCH] Add support for displayColor/Opacity (convert to rgba) PiperOrigin-RevId: 776488857 Change-Id: I34713748ac553b5fdfad736801cdaa7dc2b7f1b0 --- src/experimental/usd/usd_to_mjspec.cc | 28 +++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/experimental/usd/usd_to_mjspec.cc b/src/experimental/usd/usd_to_mjspec.cc index 0e9e5ebf..d1c48ceb 100644 --- a/src/experimental/usd/usd_to_mjspec.cc +++ b/src/experimental/usd/usd_to_mjspec.cc @@ -49,6 +49,8 @@ #include #include #include +#include +#include #include #include #include @@ -742,6 +744,32 @@ void ParseUsdPhysicsCollider(mjSpec* spec, ParseMjcPhysicsCollisionAPI(geom, pxr::MjcPhysicsCollisionAPI(prim)); } + // Convert displayColor and displayOpacity to rgba. + // We want to support primvar inheritance, hence FindPrimvarWithInheritance. + pxr::UsdGeomPrimvarsAPI primvarsAPI(prim); + pxr::UsdGeomPrimvar displayColorPrimvar = + primvarsAPI.FindPrimvarWithInheritance( + pxr::UsdGeomTokens->primvarsDisplayColor); + pxr::UsdGeomPrimvar displayOpacityPrimvar = + primvarsAPI.FindPrimvarWithInheritance( + pxr::UsdGeomTokens->primvarsDisplayOpacity); + if (displayColorPrimvar.HasAuthoredValue()) { + pxr::VtArray display_color; + displayColorPrimvar.Get(&display_color); + if (!display_color.empty()) { + geom->rgba[0] = display_color[0][0]; + geom->rgba[1] = display_color[0][1]; + geom->rgba[2] = display_color[0][2]; + } + } + if (displayOpacityPrimvar.HasAuthoredValue()) { + pxr::VtArray display_opacity; + displayOpacityPrimvar.Get(&display_opacity); + if (!display_opacity.empty()) { + geom->rgba[3] = display_opacity[0]; + } + } + SetLocalPoseFromPrim(prim, parent_prim, geom, xform_cache); if (!MaybeParseGeomPrimitive(prim, geom, xform_cache)) {