diff --git a/src/experimental/usd/plugins/mjcf/mujoco_to_usd.cc b/src/experimental/usd/plugins/mjcf/mujoco_to_usd.cc
index aba248dd..db16ed7f 100644
--- a/src/experimental/usd/plugins/mjcf/mujoco_to_usd.cc
+++ b/src/experimental/usd/plugins/mjcf/mujoco_to_usd.cc
@@ -554,6 +554,16 @@ class ModelWriter {
break;
}
+ pxr::GfVec3f gravity(spec_->option.gravity[0], spec_->option.gravity[1],
+ spec_->option.gravity[2]);
+ // Normalize will normalize gravity in place and return the magnitude before normalization.
+ float gravity_magnitude = gravity.Normalize();
+
+ WriteUniformAttribute(physics_scene_path, pxr::SdfValueTypeNames->Float,
+ pxr::UsdPhysicsTokens->physicsGravityMagnitude, gravity_magnitude);
+ WriteUniformAttribute(physics_scene_path, pxr::SdfValueTypeNames->Vector3f,
+ pxr::UsdPhysicsTokens->physicsGravityDirection, gravity);
+
pxr::GfVec3d wind(spec_->option.wind[0], spec_->option.wind[1],
spec_->option.wind[2]);
WriteUniformAttribute(physics_scene_path, pxr::SdfValueTypeNames->Double3,
diff --git a/test/experimental/usd/plugins/mjcf/mjcf_file_format_test.cc b/test/experimental/usd/plugins/mjcf/mjcf_file_format_test.cc
index 019d7d61..65c4b8dc 100644
--- a/test/experimental/usd/plugins/mjcf/mjcf_file_format_test.cc
+++ b/test/experimental/usd/plugins/mjcf/mjcf_file_format_test.cc
@@ -976,6 +976,38 @@ TEST_F(MjcfSdfFileFormatPluginTest, TestPhysicsScenePrimSDFIterations) {
60);
}
+TEST_F(MjcfSdfFileFormatPluginTest, TestPhysicsScenePrimGravity) {
+ auto stage = pxr::UsdStage::Open(LoadLayer(R"(
+
+
+
+ )"));
+
+ ExpectAttributeEqual(stage,
+ kPhysicsScenePrimPath.AppendProperty(
+ pxr::UsdPhysicsTokens->physicsGravityMagnitude),
+ 123.0f);
+ ExpectAttributeEqual(stage,
+ kPhysicsScenePrimPath.AppendProperty(
+ pxr::UsdPhysicsTokens->physicsGravityDirection),
+ pxr::GfVec3f(-1.0f, 0.0f, 0.0f));
+
+ stage = pxr::UsdStage::Open(LoadLayer(R"(
+
+
+
+ )"));
+
+ ExpectAttributeEqual(stage,
+ kPhysicsScenePrimPath.AppendProperty(
+ pxr::UsdPhysicsTokens->physicsGravityMagnitude),
+ 7.0f);
+ ExpectAttributeEqual(stage,
+ kPhysicsScenePrimPath.AppendProperty(
+ pxr::UsdPhysicsTokens->physicsGravityDirection),
+ pxr::GfVec3f(0.2857143f, 0.42857143f, 0.85714287f));
+}
+
TEST_F(MjcfSdfFileFormatPluginTest, TestPhysicsScenePrimDisableFlags) {
auto stage = pxr::UsdStage::Open(LoadLayer(R"(