ROS2与Gazebo11入门教程-视觉光照贴图(Visual Lightmap)
说明:
- 介绍视觉光照贴图(Visual Lightmap)
简介
- 光照贴图常用于改善复杂场景的渲染性能。可以将光照贴图视为具有预先烘焙到纹理中的照明信息的纹理贴图。
- 生成的模型看起来好像它们被环境中的灯光照射形成了阴影。由于照明是预先计算的,因此光照贴图适用于那些相对于场景中的灯光位姿不会移动的模型。
- 例如,在有定向光照环境中的静态建筑物、家具、地平面和地形等。
创建具有光照贴图的模型
可以使用流行的3D建模工具(例如Blender)创建光照贴图。
为节省时间,本节教程会提供一个网格和一个预先生成的光照贴图。
在Gazebo中,光照贴图会被应用于模型的视觉效果。
创建桌子模型
- 首先创建一个桌子模型。该模型暂时先不使用光照贴图:
mkdir -p ~/.gazebo/models/my_lightmap_table
- 下载网格和纹理文件,命令分别为:
mkdir -p ~/.gazebo/models/my_lightmap_table/meshes
cd ~/.gazebo/models/my_lightmap_table/meshes
wget http://gazebosim.org/models/table_marble/meshes/table_lightmap.dae
mkdir -p ~/.gazebo/models/my_lightmap_table/materials/scripts
mkdir -p ~/.gazebo/models/my_lightmap_table/materials/textures
cd ~/.gazebo/models/my_lightmap_table/materials/textures
wget http://gazebosim.org/models/table_marble/materials/textures/marble.png
wget http://gazebosim.org/models/table_marble/materials/textures/table_lightmap.png
- 创建一个会被桌子模型使用的材质脚本,命令为:
gedit ~/.gazebo/models/my_lightmap_table/materials/scripts/table_lightmap.material
- 将以下内容粘贴到该材质脚本文件中:
material Table/Marble_Lightmap
{
technique
{
pass
{
texture_unit
{
texture marble.png
}
}
}
}
- 创建一个模型配置文件model.config,命令为:
gedit ~/.gazebo/models/my_lightmap_table/model.config
- 将以下内容粘贴到该模型配置文件中:
<?xml version="1.0"?>
<model>
<name>Lightmap Table</name>
<version>1.0</version>
<sdf version="1.5">model.sdf</sdf>
<author>
<name>Kenny Wang</name>
<email>kennywangaigraphx@gmail.com</email>
</author>
<description>
A table with lightmap.
</description>
</model>
- 创建一个model.sdf文件,命令为:
gedit ~/.gazebo/models/my_lightmap_table/model.sdf
- 将以下内容粘贴到该model.sdf文件中:
<?xml version="1.0" ?>
<sdf version="1.5">
<model name="my_lightmap_table">
<static>true</static>
<pose>0 0 0.648 0 0 0</pose>
<link name="link">
<collision name="collision">
<geometry>
<mesh>
<uri>model://my_lightmap_table/meshes/table_lightmap.dae</uri>
<scale>0.25 0.25 0.25</scale>
</mesh>
</geometry>
</collision>
<visual name="visual">
<geometry>
<mesh>
<uri>model://my_lightmap_table/meshes/table_lightmap.dae</uri>
<scale>0.25 0.25 0.25</scale>
</mesh>
</geometry>
<material>
<script>
<uri>model://my_lightmap_table/materials/scripts</uri>
<uri>model://my_lightmap_table/materials/textures</uri>
<name>Table/Marble_Lightmap</name>
</script>
</material>
</visual>
</link>
</model>
</sdf>
- 输入以下命令来运行Gazebo:
gazebo
- 将Lightmap Table模型插入到场景中,如下图所示:
应用光照贴图
如果在前面您集中了注意力的话,您会注意到目前还没有使用table_lightmap.png文件。
该文件就是要应用的光照贴图。但是首先需要告知Gazebo,由于要使用光照贴图,因此不应该将动态照明应用于模型。
为此,需要编辑model.sdf文件:
gedit ~/.gazebo/models/my_lightmap_table/model.sdf
- 在model.sdf文件中定位到SDF的“材质(material)”元素,并将lighting元素值设置为false:
<material>
<script>
<uri>model://my_lightmap_table/materials/scripts</uri>
<uri>model://my_lightmap_table/materials/textures</uri>
<name>Table/Marble_Lightmap</name>
</script>
<lighting>false</lighting>
</material>
- 如果再次将my_lightmap_table模型插入到场景中,就应该会看到该模型现在只有纹理而不再有阴影。
- 然后告知材质脚本对光照贴图与现有的纹理进行合成(blend)。具体做法就是编辑该材质脚本:
gedit ~/.gazebo/models/my_lightmap_table/materials/scripts/table_lightmap.material
- 增加一个使用table_lightmap.png纹理的texture_unit:
material Table/Marble_Lightmap
{
technique
{
pass
{
texture_unit
{
texture marble.png
}
texture_unit
{
texture table_lightmap.png
}
}
}
}
- 最后,重启Gazebo并插入该桌子模型,如下图所示:
参考:
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号