From 7e848e9406e69b582198e3680ffc9341a1ee85a7 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Wed, 29 Apr 2026 07:57:55 -0700 Subject: [PATCH] Add mjr_sceneParams for creating Scene objects. PiperOrigin-RevId: 907589621 Change-Id: If7537cf6fbac6d6418ac2bf8315714ada969511d --- src/experimental/filament/compat/imgui_bridge.cc | 10 ++++++---- src/experimental/filament/compat/scene_bridge.cc | 4 +++- src/experimental/filament/filament/scene_view.cc | 13 ++++++++++++- src/experimental/filament/filament/scene_view.h | 2 +- .../filament/render_context_filament.cc | 6 ++++++ src/experimental/filament/render_context_filament.h | 13 +++++++++++++ 6 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/experimental/filament/compat/imgui_bridge.cc b/src/experimental/filament/compat/imgui_bridge.cc index 6b303f05..26ca06c2 100644 --- a/src/experimental/filament/compat/imgui_bridge.cc +++ b/src/experimental/filament/compat/imgui_bridge.cc @@ -37,10 +37,12 @@ using filament::math::float3; using filament::math::mat3f; ImguiBridge::ImguiBridge(FilamentContext* ctx) : ctx_(ctx) { - scene_view_ = std::make_unique(ctx_); - scene_view_->DisableShadows(); - scene_view_->DisableReflections(); - scene_view_->DisablePostProcessing(); + mjrSceneParams params; + mjr_defaultSceneParams(¶ms); + params.enable_post_processing = false; + params.enable_reflections = false; + params.enable_shadows = false; + scene_view_ = std::make_unique(ctx_, params); } ImguiBridge::~ImguiBridge() { diff --git a/src/experimental/filament/compat/scene_bridge.cc b/src/experimental/filament/compat/scene_bridge.cc index 85d2b1e0..ed35625d 100644 --- a/src/experimental/filament/compat/scene_bridge.cc +++ b/src/experimental/filament/compat/scene_bridge.cc @@ -83,7 +83,9 @@ static std::unique_ptr CreateFallbackIndirectLightTexture( SceneBridge::SceneBridge(FilamentContext* ctx, const mjModel* model) : ctx_(ctx) { - scene_view_ = std::make_unique(ctx_); + mjrSceneParams params; + mjr_defaultSceneParams(¶ms); + scene_view_ = std::make_unique(ctx_, params); model_objects_ = std::make_unique(model, ctx_); // Configure options for the normal view. diff --git a/src/experimental/filament/filament/scene_view.cc b/src/experimental/filament/filament/scene_view.cc index 588e98ec..c8fe57fa 100644 --- a/src/experimental/filament/filament/scene_view.cc +++ b/src/experimental/filament/filament/scene_view.cc @@ -121,7 +121,8 @@ static void SetupReflectionCamera(const mat4& surface_xform, reflection_camera->setCustomProjection(oblique, near, far); } -SceneView::SceneView(FilamentContext* ctx) : ctx_(ctx) { +SceneView::SceneView(FilamentContext* ctx, const mjrSceneParams& params) + : ctx_(ctx) { filament::Engine* engine = ctx_->GetEngine(); scene_ = engine->createScene(); camera_ = engine->createCamera(utils::EntityManager::get().create()); @@ -152,6 +153,16 @@ SceneView::SceneView(FilamentContext* ctx) : ctx_(ctx) { tm.create(fog); tm.setTransform(tm.getInstance(fog), mat4::rotation(filament::math::f::PI / 2, float3{-1, 0, 0})); + + if (!params.enable_post_processing) { + DisablePostProcessing(); + } + if (!params.enable_reflections) { + DisableReflections(); + } + if (!params.enable_shadows) { + DisableShadows(); + } } SceneView::~SceneView() { diff --git a/src/experimental/filament/filament/scene_view.h b/src/experimental/filament/filament/scene_view.h index 26f41161..e64be22e 100644 --- a/src/experimental/filament/filament/scene_view.h +++ b/src/experimental/filament/filament/scene_view.h @@ -43,7 +43,7 @@ namespace mujoco { // (e.g. normal, depth, segmentation, etc.) as well as reflective surfaces. class SceneView : public mjrScene { public: - explicit SceneView(FilamentContext* ctx); + SceneView(FilamentContext* ctx, const mjrSceneParams& params); ~SceneView(); SceneView(const SceneView&) = delete; diff --git a/src/experimental/filament/render_context_filament.cc b/src/experimental/filament/render_context_filament.cc index 30891f5a..74c1d3e1 100644 --- a/src/experimental/filament/render_context_filament.cc +++ b/src/experimental/filament/render_context_filament.cc @@ -63,6 +63,12 @@ void mjr_defaultMeshData(mjrMeshData* data) { std::memset(data, 0, sizeof(mjrMeshData)); } +void mjr_defaultSceneParams(mjrSceneParams* params) { + params->enable_post_processing = true; + params->enable_reflections = true; + params->enable_shadows = true; +} + void mjr_defaultLightParams(mjrLightParams* params) { params->type = mjLIGHT_POINT; params->texture = nullptr; diff --git a/src/experimental/filament/render_context_filament.h b/src/experimental/filament/render_context_filament.h index e338a55c..577b11a6 100644 --- a/src/experimental/filament/render_context_filament.h +++ b/src/experimental/filament/render_context_filament.h @@ -284,6 +284,19 @@ struct mjrMeshData { // Initializes the mjrMeshData to default values. void mjr_defaultMeshData(mjrMeshData* data); +// Configuration parameters for a Scene. +struct mjrSceneParams { + // Whether or not to enable post processing; enabled by default. + mjtByte enable_post_processing; + // Whether or not to enable reflections; enabled by default. + mjtByte enable_reflections; + // Whether or not to enable shadows; enabled by default. + mjtByte enable_shadows; +}; + +// Initializes the mjrSceneParams to default values. +void mjr_defaultSceneParams(mjrSceneParams* params); + // Configuration parameters for a light. struct mjrLightParams { // The type of light (e.g. spot, point, directional, etc.)