< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-视觉光照贴图(Visual Lightmap)

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并插入该桌子模型,如下图所示:

请输入图片描述

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程