Make phong-shading multipliers configurable.

PiperOrigin-RevId: 869080920
Change-Id: I4eb7311b54270d596c09a01d6725c1efb931de4b
This commit is contained in:
Haroon Qureshi
2026-02-12 01:06:45 -08:00
committed by Copybara-Service
parent 2396a2541c
commit 8e5436c335
3 changed files with 20 additions and 11 deletions
+6 -11
View File
@@ -24,11 +24,6 @@
namespace mujoco { 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) { Material::Material(ObjectManager* object_mgr) : object_mgr_(object_mgr) {
instances_[kDepth] = instances_[kDepth] =
object_mgr->GetMaterial(ObjectManager::kUnlitDepth)->createInstance(); object_mgr->GetMaterial(ObjectManager::kUnlitDepth)->createInstance();
@@ -88,16 +83,16 @@ void Material::UpdateMaterialInstances() {
params_.color); params_.color);
} }
if (material->hasParameter("EmissiveFactor")) { if (material->hasParameter("EmissiveFactor")) {
instance->setParameter("EmissiveFactor", const float multiplier = object_mgr_->GetEmissiveMultiplier();
params_.emissive * kEmissiveMultiplier); instance->setParameter("EmissiveFactor", params_.emissive * multiplier);
} }
if (material->hasParameter("SpecularFactor")) { if (material->hasParameter("SpecularFactor")) {
instance->setParameter("SpecularFactor", const float multiplier = object_mgr_->GetSpecularMultiplier();
params_.specular * kSpecularMultiplier); instance->setParameter("SpecularFactor", params_.specular * multiplier);
} }
if (material->hasParameter("GlossinessFactor")) { if (material->hasParameter("GlossinessFactor")) {
instance->setParameter("GlossinessFactor", const float multiplier = object_mgr_->GetShininessMultiplier();
params_.glossiness * kShininessMultiplier); instance->setParameter("GlossinessFactor", params_.glossiness * multiplier);
} }
if (material->hasParameter("MetallicFactor")) { if (material->hasParameter("MetallicFactor")) {
instance->setParameter("MetallicFactor", instance->setParameter("MetallicFactor",
@@ -129,6 +129,13 @@ ObjectManager::ObjectManager(const mjModel* model, filament::Engine* engine,
fallback_textures_[mjTEXROLE_ORM] = fallback_orm_; fallback_textures_[mjTEXROLE_ORM] = fallback_orm_;
fallback_indirect_light_ = LoadFallbackIndirectLight("ibl.ktx", 1.0f); 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() { ObjectManager::~ObjectManager() {
@@ -104,6 +104,10 @@ class ObjectManager {
filament::IndirectLight* LoadFallbackIndirectLight(std::string_view filename, filament::IndirectLight* LoadFallbackIndirectLight(std::string_view filename,
float intensity); 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_; } const mjModel* GetModel() const { return model_; }
ObjectManager(const ObjectManager&) = delete; ObjectManager(const ObjectManager&) = delete;
@@ -129,6 +133,9 @@ class ObjectManager {
filament::Texture* fallback_normal_ = nullptr; filament::Texture* fallback_normal_ = nullptr;
filament::Texture* fallback_orm_ = nullptr; filament::Texture* fallback_orm_ = nullptr;
filament::IndirectLight* fallback_indirect_light_ = nullptr; filament::IndirectLight* fallback_indirect_light_ = nullptr;
float specular_multiplier_ = 0.6f;
float shininess_multiplier_ = 0.1f;
float emissive_multiplier_ = 0.3f;
}; };
} // namespace mujoco } // namespace mujoco