From 8e5436c3354eb5fee5eba3d4b1f7f2c38eba3d34 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Thu, 12 Feb 2026 01:06:45 -0800 Subject: [PATCH] Make phong-shading multipliers configurable. PiperOrigin-RevId: 869080920 Change-Id: I4eb7311b54270d596c09a01d6725c1efb931de4b --- src/experimental/filament/filament/material.cc | 17 ++++++----------- .../filament/filament/object_manager.cc | 7 +++++++ .../filament/filament/object_manager.h | 7 +++++++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/experimental/filament/filament/material.cc b/src/experimental/filament/filament/material.cc index edf205ca..c62733b9 100644 --- a/src/experimental/filament/filament/material.cc +++ b/src/experimental/filament/filament/material.cc @@ -24,11 +24,6 @@ namespace mujoco { -// Various tweakable parameters for mapping mujoco values onto filament. -static constexpr float kSpecularMultiplier = 0.6f; -static constexpr float kShininessMultiplier = 0.1f; -static constexpr float kEmissiveMultiplier = 0.3f; - Material::Material(ObjectManager* object_mgr) : object_mgr_(object_mgr) { instances_[kDepth] = object_mgr->GetMaterial(ObjectManager::kUnlitDepth)->createInstance(); @@ -88,16 +83,16 @@ void Material::UpdateMaterialInstances() { params_.color); } if (material->hasParameter("EmissiveFactor")) { - instance->setParameter("EmissiveFactor", - params_.emissive * kEmissiveMultiplier); + const float multiplier = object_mgr_->GetEmissiveMultiplier(); + instance->setParameter("EmissiveFactor", params_.emissive * multiplier); } if (material->hasParameter("SpecularFactor")) { - instance->setParameter("SpecularFactor", - params_.specular * kSpecularMultiplier); + const float multiplier = object_mgr_->GetSpecularMultiplier(); + instance->setParameter("SpecularFactor", params_.specular * multiplier); } if (material->hasParameter("GlossinessFactor")) { - instance->setParameter("GlossinessFactor", - params_.glossiness * kShininessMultiplier); + const float multiplier = object_mgr_->GetShininessMultiplier(); + instance->setParameter("GlossinessFactor", params_.glossiness * multiplier); } if (material->hasParameter("MetallicFactor")) { instance->setParameter("MetallicFactor", diff --git a/src/experimental/filament/filament/object_manager.cc b/src/experimental/filament/filament/object_manager.cc index 20443c25..28eee711 100644 --- a/src/experimental/filament/filament/object_manager.cc +++ b/src/experimental/filament/filament/object_manager.cc @@ -129,6 +129,13 @@ ObjectManager::ObjectManager(const mjModel* model, filament::Engine* engine, fallback_textures_[mjTEXROLE_ORM] = fallback_orm_; fallback_indirect_light_ = LoadFallbackIndirectLight("ibl.ktx", 1.0f); + + specular_multiplier_ = ReadElement( + model_, "filament.phong.specular_multiplier", specular_multiplier_); + shininess_multiplier_ = ReadElement( + model_, "filament.phong.shininess_multiplier", shininess_multiplier_); + emissive_multiplier_ = ReadElement( + model_, "filament.phong.emissive_multiplier", emissive_multiplier_); } ObjectManager::~ObjectManager() { diff --git a/src/experimental/filament/filament/object_manager.h b/src/experimental/filament/filament/object_manager.h index a9aaf4d1..fd37f526 100644 --- a/src/experimental/filament/filament/object_manager.h +++ b/src/experimental/filament/filament/object_manager.h @@ -104,6 +104,10 @@ class ObjectManager { filament::IndirectLight* LoadFallbackIndirectLight(std::string_view filename, float intensity); + float GetSpecularMultiplier() const { return specular_multiplier_; } + float GetShininessMultiplier() const { return shininess_multiplier_; } + float GetEmissiveMultiplier() const { return emissive_multiplier_; } + const mjModel* GetModel() const { return model_; } ObjectManager(const ObjectManager&) = delete; @@ -129,6 +133,9 @@ class ObjectManager { filament::Texture* fallback_normal_ = nullptr; filament::Texture* fallback_orm_ = nullptr; filament::IndirectLight* fallback_indirect_light_ = nullptr; + float specular_multiplier_ = 0.6f; + float shininess_multiplier_ = 0.1f; + float emissive_multiplier_ = 0.3f; }; } // namespace mujoco