This is an RViz plugin that provides ambient, directional, point, and spot lights. These lights can be used to give an RViz scene a more interesting lighting environment. They can be attached to tf frames, mimicing lights attached to moving robot components.
RViz is not compatible with extra lights for a few reasons. I use a custom RViz with the following changes to get the full effect of rviz_lighting:
Following are the exact changes I made to RViz. If anything like rviz_lighting were to be added to RViz's default plugins, changes like these should be made (or they should at least be made optional).
diff --git a/src/rviz/default_plugin/markers/mesh_resource_marker.cpp b/src/rviz/default_plugin/markers/mesh_resource_marker.cpp
index 9ea7470..7b5386b 100644
--- a/src/rviz/default_plugin/markers/mesh_resource_marker.cpp
+++ b/src/rviz/default_plugin/markers/mesh_resource_marker.cpp
@@ -229,8 +229,10 @@ void MeshResourceMarker::onNewMessage(const MarkerConstPtr& old_message, const M
for (material_it = materials_.begin(); material_it != materials_.end(); material_it++)
{
Ogre::Technique* technique = (*material_it)->getTechnique(0);
- technique->setAmbient( r*0.5, g*0.5, b*0.5 );
+ technique->setAmbient( r, g, b );
technique->setDiffuse( r, g, b, a );
+ technique->setSpecular( 1, 1, 1, 1 );
+ technique->setShininess(20.0);
technique->setSceneBlending( blending );
technique->setDepthWriteEnabled( depth_write );
technique->setLightingEnabled( true );
diff --git a/src/rviz/robot/robot_link.cpp b/src/rviz/robot/robot_link.cpp
index f4ff022..03fbb5b 100644
--- a/src/rviz/robot/robot_link.cpp
+++ b/src/rviz/robot/robot_link.cpp
@@ -387,6 +387,8 @@ void RobotLink::updateAlpha()
Ogre::ColourValue color = material->getTechnique(0)->getPass(0)->getDiffuse();
color.a = robot_alpha_ * material_alpha_ * link_alpha;
material->setDiffuse( color );
+ material->setSpecular( 1, 1, 1, 1 );
+ material->setShininess(20.0);
if ( color.a < 0.9998 )
{
@@ -404,6 +406,8 @@ void RobotLink::updateAlpha()
Ogre::ColourValue color = color_material_->getTechnique(0)->getPass(0)->getDiffuse();
color.a = robot_alpha_ * link_alpha;
color_material_->setDiffuse( color );
+ color_material_->setSpecular( 1, 1, 1, 1 );
+ color_material_->setShininess(20.0);
if ( color.a < 0.9998 )
{
@@ -471,8 +475,10 @@ Ogre::MaterialPtr RobotLink::getMaterialForLink( const urdf::LinkConstSharedPtr&
if (visual->material->texture_filename.empty())
{
const urdf::Color& col = visual->material->color;
- mat->getTechnique(0)->setAmbient(col.r * 0.5, col.g * 0.5, col.b * 0.5);
+ mat->getTechnique(0)->setAmbient(col.r, col.g, col.b);
mat->getTechnique(0)->setDiffuse(col.r, col.g, col.b, col.a);
+ mat->getTechnique(0)->setSpecular(1, 1, 1, 1);
+ mat->getTechnique(0)->setShininess(20.0);
material_alpha_ = col.a;
}
@@ -926,8 +932,10 @@ void RobotLink::setColor( float red, float green, float blue )
color.r = red;
color.g = green;
color.b = blue;
- color_material_->getTechnique(0)->setAmbient( 0.5 * color );
+ color_material_->getTechnique(0)->setAmbient( color );
color_material_->getTechnique(0)->setDiffuse( color );
+ color_material_->getTechnique(0)->setSpecular(1, 1, 1, 1);
+ color_material_->getTechnique(0)->setShininess(20.0);
using_color_ = true;
setToNormalMaterial();
diff --git a/src/rviz/visualization_manager.cpp b/src/rviz/visualization_manager.cpp
index 9367b08..53d870f 100644
--- a/src/rviz/visualization_manager.cpp
+++ b/src/rviz/visualization_manager.cpp
@@ -141,12 +141,12 @@ VisualizationManager::VisualizationManager( RenderPanel* render_panel, WindowMan
scene_manager_ = ogre_root_->createSceneManager( Ogre::ST_GENERIC );
rviz::RenderSystem::RenderSystem::get()->prepareOverlays(scene_manager_);
-
+/*
directional_light_ = scene_manager_->createLight( "MainDirectional" );
directional_light_->setType( Ogre::Light::LT_DIRECTIONAL );
directional_light_->setDirection( Ogre::Vector3( -1, 0, -1 ) );
directional_light_->setDiffuseColour( Ogre::ColourValue( 1.0f, 1.0f, 1.0f ) );
-
+*/
root_display_group_ = new DisplayGroup();
root_display_group_->setName( "root" );
display_property_tree_model_ = new PropertyTreeModel( root_display_group_ );
@@ -277,6 +277,8 @@ void createColorMaterial(const std::string& name, const Ogre::ColourValue& color
Ogre::MaterialPtr mat = Ogre::MaterialManager::getSingleton().create( name, ROS_PACKAGE_NAME );
mat->setAmbient(color * 0.5f);
mat->setDiffuse(color);
+ mat->setSpecular(1, 1, 1, 1);
+ mat->setShininess(20.0);
if( use_self_illumination )
{
mat->setSelfIllumination(color);
@@ -355,7 +357,7 @@ void VisualizationManager::onUpdate()
view_manager_->getCurrent() &&
view_manager_->getCurrent()->getCamera() )
{
- directional_light_->setDirection(view_manager_->getCurrent()->getCamera()->getDerivedDirection());
+// directional_light_->setDirection(view_manager_->getCurrent()->getCamera()->getDerivedDirection());
}
frame_count_++;