原文

文章目录

  • 1. 为模型添加颜色和纹理
  • 2. 关于Ambient, Diffuse, Specular, and Emissive
  • 3. 材料反射的光的成分
    • 3.1. Ambient
    • 3.2. Diffuse
    • 3.3. Specula
    • 3.4. Emissive
    • 3.5. 成分对比
  • 4. 颜色参数在哪里设置
    • 4.1. 设置光的颜色成分值
    • 4.2. 设置物体的颜色成分值
      • 4.2.1. SDF
      • 4.2.2. Ogre Material Script
      • 4.2.3. Collada and OBJ meshes
  • 5. 关于纹理textures
    • 5.1. 给物体设置纹理
      • 5.1.1. Ogre Material Scripts
      • 5.1.2. Collada
  • 6. 给模型添加颜色和纹理的例子
    • 基本文件和文件夹
    • 用URDF给轮子和电源指示灯上颜色
    • 使用Ogre Material Script 上颜色
    • 使用带有texture的collada上颜色
    • 在gazebo中效果

1. 为模型添加颜色和纹理

本教程描述了颜色在gazebo上的工作原理。读完之后,你会知道如何让仿真对象看起来更像真实世界中的对象。

2. 关于Ambient, Diffuse, Specular, and Emissive

在这一节的最后,你会知道什么参数与颜色的关系,以及它们是如何工作的。
使用Blinn-Phong shading model确定物体的颜色。有四个组件控制颜色:ambient、diffuse、specular和发emissive。OpenGL编程指南中关于照明的章节详细介绍了这些是如何工作的。

3. 材料反射的光的成分

物体的最终颜色取决于材料和照射在其上的光线。光线值代表发出的光的强度。材料值代表物体反射的光的百分比。同一种材料可能有不同的颜色,取决于照到它们的光。
例如,考虑具有RGBA漫射颜色(1,1,0.5,1.0)的材料。在白光下,它看起来是黄色的。如果暴露在发出漫射RGBA(0 1 0 1)的光下,它将呈现绿色。如果暴露在发出漫射RGBA(1 0 0 1)的光下,它会呈现红色。具有漫射RGBA(0 0 0 0.75 1)的光会使物体呈现深蓝色。

3.1. Ambient

Ambient light 是没有光线指向物体时物体的颜色。与物体本身是完全一致的。Ambient light的意思是已经被反射了很多次、很难分辨它是从哪里来的近似的光。

3.2. Diffuse

这是纯白色光线下物体的颜色。它是用光的方向和物体表面法线计算的。物体中正对光部分为最亮的。

3.3. Specula

Specular是来自镜面反射高光的颜色和光强,会使物体看起来更有光泽。抛光的金属表面会有很大的镜面反射值,而一张纸几乎没有镜面反射值。

3.4. Emissive

Emissive只能设置在材料上。像ambient一样,emissive给物体增加颜色。看起来好像光是从物体发出的,但emissive不会给其他物体施加光照。

3.5. 成分对比

四个成分中的每一个都会给物体添加颜色。物体的最终颜色是所有成分的总和。求和后,如果任何红色、绿色或蓝色值超过1.0,则设置为1.0。

4. 颜色参数在哪里设置

指定物体的颜色需要对灯光和物体的材质都进行设置。看过这一节,你将知道光和模型的颜色参数在哪里设置,以及如何调整它们。

4.1. 设置光的颜色成分值

浅色可以在世界SDF文件中指定。Ambient light在< scene >中全局设置。Ambient light数量是可由你选定。室内环境可能需要一个大的全局ambient light,因为每面墙和表面都会反射光。卫星模拟基本可以不要ambient light,因为大多数都辐射到太空中。
< light >里的< specular >和< diffuse>标签设置diffuse颜色和specular反射。这些标签需要4个介于0.0和1.0之间的浮点数(RGBA)。最后一个数字(alpha)对灯光没有影响。
光没有emissive和ambient成分。

4.2. 设置物体的颜色成分值

物体上的颜色成分可以在SDF、Ogre Material Script或某些类型的meshes中设置。

4.2.1. SDF

每个< visual>都有一个< material >标签,用于控制物体的颜色成分。这些标签是:

  • < ambient >
  • < diffuse >
  • < specular >
    Note: Specular intensity via SDF is currently not functioning in gazebo. See issue #2120
  • < emmissive >

4.2.2. Ogre Material Script

  • ambient
  • diffuse
  • specular
  • emissive

如果同时设置了SDF和Ogre Material Script,则SDF值用于ambient,diffuse,和emissive。如果两者都定义了specular,那么最终的specular就是Ogre Material Script和SDF值的相加。

4.2.3. Collada and OBJ meshes

如果visual使用了Collada(.dae)或Wavefront (obj)的mesh,则gazebo从这些格式里寻找颜色的值
物体的Collada颜色分量取自< phong >(第8-69页)效果。如果collada mesh没有任何效果,那么在gazebo7中,它将被显示为具有RGBA(1 1 1 1)的emissive值。在gazebo8+中,它将显示灰色diffuse和ambient,但没有emissive和specular。

Wavefront obj颜色来源于物体材料:Ka, Kd, Ks, Ns. 见wiki
Note: OBJ materials may not display correctly in versions earlier than gazebo 8.

5. 关于纹理textures

纹理将图像映射到形状上。它在不添加几何图形的情况下向模型添加细节。
abmient light和diffuse light可以使得纹理被看到。

5.1. 给物体设置纹理

5.1.1. Ogre Material Scripts

Ogre Material Scripts有许多选项可以将纹理应用到物体上。阅读Ogre Document了解更多信息。

5.1.2. Collada

Collada文件可以对物体应用纹理。如何创建这样的文件超出了本教程的范围。Blender是一个开源建模工具,可以导出Collada。
确保< library_images >中的纹理路径可以关联到collada文件

6. 给模型添加颜色和纹理的例子

这个示例会简单给出如何给基本模型添加颜色

基本文件和文件夹

mkdir ~/color_tutorial

颜色包括两部分:模型和光
光在世界文件中设置,所以建立一个世界文件,保存为:

~/color_tutorial/lit_world.world

它有一个有方向的明亮的白色光和ambient light。

<?xml version="1.0" ?>
<sdf version="1.6"><world name="default"><scene><ambient>0.4 0.4 0.4 1</ambient><background>0.25 0.25 0.25 1</background><shadows>false</shadows></scene><light type="directional" name="some_light"><diffuse>0.7 0.7 0.7 0</diffuse><specular>1 1 1 0</specular><direction>-1 -1 -1</direction></light></world>
</sdf>

下一步创建模型。文件结构为:

models文件加必须在环境标量GAZEBO_MODEL_PATH中。本教程假定你使用了文件夹~/color_tutorial/models。

export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/color_tutorial/models

创建模型

mkdir -p ~/color_tutorial/models/example_model/materials/scripts
mkdir -p ~/color_tutorial/models/example_model/materials/textures
mkdir -p ~/color_tutorial/models/example_model/materials/meshes

保存为文件model.config

<?xml version="1.0"?><model><name>Example Model For Color Tutorial</name><version>1.0</version><sdf version="1.6">model.sdf</sdf><author><name>YOUR NAME HERE</name><email>YOUR EMAIL HERE</email></author><description>Example of adding color to a model</description></model>

保存为文件model.config

<?xml version="1.0"?>
<sdf version="1.6"><model name="Color Tutorial Model"><static>true</static><link name="robot_link"><collision name="body_collision"><geometry><box><size>1 1 1</size></box></geometry></collision><visual name="wheel1_visual"><pose>-0.2 0 -0.25 0 1.57079 0</pose><geometry><cylinder><radius>0.05</radius><length>0.02</length></cylinder></geometry></visual><visual name="wheel2_visual"><pose>0.2 0 -0.25 0 1.57079 0</pose><geometry><cylinder><radius>0.05</radius><length>0.02</length></cylinder></geometry></visual><visual name="power_led_visual"><pose>0.225 0.225 0.25 0 0 0</pose><geometry><sphere><radius>0.003</radius></sphere></geometry></visual><visual name="body_visual"><geometry><box><size>0.5 0.5 0.5</size></box></geometry></visual><visual name="head_visual"><pose>0 0 0.25 0 0 -2.5</pose><geometry><sphere><radius>0.25</radius></sphere></geometry></visual></link></model>
</sdf>

用URDF给轮子和电源指示灯上颜色

车轮和电源指示灯将是单一的统一颜色,因此它们将使用SDF设置。本示例让轮子变成深蓝色的材料子。将其添加到两个车轮< visual >标签中。

        <material> <!-- Wheel material --><ambient>0.1 0.1 0.1 1</ambient><diffuse>0.1 0.1 0.2 1</diffuse><specular>0 0 0 0</specular><emissive>0 0 0 1</emissive></material> <!-- End wheel material -->


电源指示灯是其自身的光源,因此将使用emissive。将此添加到power_led < visual >中,使其始终为全绿色。

        <material> <!-- LED material --><ambient>0 0 0 1</ambient><diffuse>0 0 0 1</diffuse><specular>0 0 0 0</specular><emissive>0 1 0 1</emissive></material> <!-- End LED material -->

使用Ogre Material Script 上颜色

给物体覆盖纹理
将图像保存成seamless_texture.png

保存为repeated.material。它使纹理重复覆盖在正方体的每个面上

material RepeatedTexture
{technique{pass{texture_unit{// Relative to the location of the material scripttexture ../textures/seamless_texture.png// Repeat the texture over the surface (4 per face)scale 0.5 0.5}}}
}

结果是立方体的每个面都有四份相同的seamless纹理

使用带有texture的collada上颜色

将图像保存成head_texture.png

下载head.dae
这个collada将图像作为纹理。我们需要检查路径。打开head.dae,查看< library_images >

 <library_images><image id="head_texture_png" name="head_texture_png"><init_from>head_texture.png</init_from></image></library_images>

模型应用图片没有路径信息。它默认png图片和head.dae同一文件夹下,但是我们想把它保存在另一文件夹下。在head.dae中更改图像路径

  <library_images><image id="head_texture_png" name="head_texture_png"><init_from>../materials/textures/head_texture.png</init_from></image></library_images>

最后在gazebo中打开

在gazebo中效果

模型路径必须被添加进环境变量GAZEBO_MODEL_PATH。设置后,打开gazebo

export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/color_tutorial/models
gazebo --verbose ~/color_tutorial/lit_world.world

插入你创建的模型

【转载】Gazebo中为模型添加颜色和纹理相关推荐

  1. blender2.8为模型添加材质和纹理

    blender2.8为模型添加材质和纹理 从网上下载的模型很多是素模,纯颜色,没有贴图的模型.用起来不是十分方便,所以需要我们自己快速的给模型添加颜色或者纹理.这个时候我们可以使用blender,最新 ...

  2. gazebo中给机器人添加16线激光雷达跑LIO-SAM

    目录: 前言 1.下载雷达仿真包 2.添加雷达支架描述文件 3.添加雷达描述文件 4.启动仿真 5.添加IMU模块 6.添加RGB-D相机 7.LIO-SAM仿真 安装依赖 安装GTSAM 编译LIO ...

  3. php psr4 控制器调用模型,控制器中调用模型添加数据

    > ## 在控制器中调用模型进行添加数据 ### 1. 添加一条数据<save方法新增数据返回的是写入的记录数.> ```php // 注意不要在同一个实例里面多次新增数据,如果实在 ...

  4. gazebo中使用自定义图片建立带纹理的地面模型方法

    很多时候,我们的gazebo中需要使用带有丰富纹理的模型,比如,双目计算视差等等(题外话,很多人都说gazebo并不是仿真视差的上乘之选). 那么,在建模之前,首先要明确一下,gazebo的模型放的位 ...

  5. 列举在ps中为灰度图像添加颜色的几种方法

    先看下是否RGB通道 上色有色阶,曲线,通道混合器(对通道调整),颜色平衡,可选颜色的中性色变化,色相饱和度的着色,匹配颜色,颜色图层的图层混合模式,样式里的颜色叠加等.. 一般常用,图层面板添加色相 ...

  6. 转载python中append函数添加多个

    转载,仅作为记录,大佬请跳过. 用.extend 参考大佬博主文章传送门

  7. Gazebo仿真平台模型搭建与修改

    ROS进阶教程(一)Gazebo仿真平台模型搭建与修改 文件讲解 Models 文件 World文件 Launch文件 模型编辑 可视化操作 配置文件编辑 仿真操作流程 完成model建模 world ...

  8. 【从零开始的ROS四轴机械臂控制】(三) - 为机械臂添加摄像头和夹爪、解决gazebo模型抖动、使用gazebo建立sdf模型

    [从零开始的ROS四轴机械臂控制(三)] 五.在gazebo中添加摄像头 1.修改arm1.gazebo.xacro文件 2.修改arm1.urdf.xacro文件 3.查看摄像头图像 六.为模型添加 ...

  9. Gazebo中使用Blender贴图模型

    Solidworks的模型导入到gazebo中会丢失颜色信息和纹理信息,这是比较头疼的,最近学习了一下如何使用Blender贴图来添加纹理信息. 一.Blender制作模型 Blender操作上和So ...

最新文章

  1. Git和Repo扫盲——如何取得Android源代码
  2. 网工小课堂(part1)--计算机网络概论
  3. 谷歌云请更正这张卡片的信息_如何识别和更正Google Analytics(分析)报告中的(未设置)值
  4. 《四世同堂》金句摘抄(六)
  5. 一对一语音视频直播双端原生+php后台源码
  6. assets和res/raw的用法
  7. fstream的使用(一)
  8. 零基础 | 入行软件测试,你想知道的都在这里了
  9. 调用iphone客户端进行授权发微博的方法--使用友盟组件
  10. redhat solutions
  11. mac 使用vmware funsion 挂载cdlinux跑wifi字典经历
  12. DBeaver执行SQL脚本文件
  13. 1985-2020年全国各省一二三产业就业人数/各省分产业就业人数数据(无缺失)
  14. Python3,为了“娑娜“,我花费3分钟把lol所有的英雄都下载了。
  15. 艾宾浩斯30天计划表_干货丨艾宾浩斯遗忘曲线
  16. 工商管理专业知识与实务(初级)【7】
  17. Git对G码云上项目的上传及同步
  18. Filco圣手二代双模蓝牙机械键盘|科大讯飞鼠标连接Mac方法
  19. 美国服务器电影网站版权问题,为什么说选择美国服务器做电影网站比较好
  20. Mybase7延长试用期

热门文章

  1. 华为模拟器防火墙打开web_华为防火墙的管理方式(Console、Telnet、Web、SSH)
  2. 全面HTML5化:火狐移动操作系统B2G价值几何
  3. 职场正能量,一天看一遍
  4. PDF页面大小不一致怎么办?
  5. echart 入门小案例
  6. 家装老总“傍”邓亚萍找到第一桶金
  7. 邀请函 | 远光ECP平台2020年度产品发布会
  8. Ubuntu双系统的安装(有U盘就行)
  9. 绝地求生2月26服务器维护吗,绝地求生更新维护到几点今天 2月26日停机更新维护公告...
  10. C++ 类 B站学习记录 封装,构造函数 99 -- 109