diff --git a/src/experimental/filament/filament/drawable.cc b/src/experimental/filament/filament/drawable.cc index 9c02f9c6..f4b08b42 100644 --- a/src/experimental/filament/filament/drawable.cc +++ b/src/experimental/filament/filament/drawable.cc @@ -72,6 +72,10 @@ static constexpr int kArrow2BottomConeDisk = 4; Drawable::Drawable(ObjectManager* object_mgr, const mjvGeom& geom) : material_(object_mgr), renderables_(object_mgr->GetEngine()) { + if (geom.category == mjCAT_DECOR) { + renderables_.DisableShadows(); + } + switch ((mjtGeom)geom.type) { case mjGEOM_MESH: AddMesh(geom.dataid); diff --git a/src/experimental/filament/filament/renderables.cc b/src/experimental/filament/filament/renderables.cc index daa18faa..cd925018 100644 --- a/src/experimental/filament/filament/renderables.cc +++ b/src/experimental/filament/filament/renderables.cc @@ -103,7 +103,7 @@ utils::Entity Renderables::CreateEntity(const FilamentBuffers& buffers) { } builder.boundingBox(buffers.bounds) .culling(false) - .castShadows(true) + .castShadows(cast_shadows_) .receiveShadows(true) .layerMask(1, visible_ ? 1 : 0) .screenSpaceContactShadows(true); @@ -197,4 +197,12 @@ void Renderables::Show() { } } +void Renderables::DisableShadows() { + filament::RenderableManager& rm = engine_->getRenderableManager(); + for (utils::Entity& entity : entities_) { + rm.setCastShadows(rm.getInstance(entity), false); + } + cast_shadows_ = false; +} + } // namespace mujoco diff --git a/src/experimental/filament/filament/renderables.h b/src/experimental/filament/filament/renderables.h index 66372f91..45d3c008 100644 --- a/src/experimental/filament/filament/renderables.h +++ b/src/experimental/filament/filament/renderables.h @@ -61,6 +61,9 @@ class Renderables { // Returns true if the entities are visible. bool IsVisible() const { return visible_; } + // Disables the renderables from casting shadows. + void DisableShadows(); + // Adds all managed entities to the given filament Scene. void AddToScene(filament::Scene* scene); @@ -84,6 +87,7 @@ class Renderables { std::vector entities_; std::vector> owned_buffers_; bool visible_ = true; + bool cast_shadows_ = true; }; } // namespace mujoco