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 {
// 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",
@@ -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() {
@@ -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