基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(六):Blender烘培和UE5导入
前言
- 本系列教程旨在使用
UE5
配置一个具备激光雷达
+深度摄像机
的仿真小车,并使用通过跨平台的方式进行ROS2
和UE5
仿真的通讯,达到小车自主导航的目的。 - 本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客
- 往期教程:
- 第一期:基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(一)—UnrealCV获取深度+分割图像-CSDN博客
- 第二期:基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(二)—ROS2与UE5进行图像数据传输-CSDN博客
- 第三期:基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(三)—创建自定义激光雷达Componet组件-CSDN博客
- 第四期:关于雷达数据的处理(文章源文件我暂时丢了,有空补更一下)
- 第五期:基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模-CSDN博客
- UE5系列教程:
- 第一期:UE5-C++入门教程(一):使用代码创建一个指定目标的移动小球-CSDN博客
- 第二期:UE5-C++入门教程(二)—编写Editor类别的自定义模型实现小球规划路线的可视化-CSDN博客
- 备注:最近博主在unity开发独立游戏,UE5系列的相关长期教程先暂时不更新了~
请大家多多谅解~
- 本教程环境支持:
- UE5.4.4(本节被从5.4.3–>5.4.4)
- ubuntu 22.04 ros2 humble
- 上期我们使用Blender完成了基本的建模,本期我们将介绍Blender的烘培技术和实现,然后将我们的模型转成fbx导入UE5中,最后达到如下效果
0 零帧起手–UE5.4.4更新
- 好久没开UE5今天打开居然UE5.4.3更新补丁了…我们更新一下,更新后就是5.4.4了
1 基础概念
1-1 FBX
- FBX(Filmbox)是一种用于存储三维模型、动画、材质、贴图等信息的文件格式。
- 在Blender中,FBX文件可以用于以下几种情况:
- 导入和导出模型:你可以使用FBX格式将其他三维软件创建的模型导入到Blender中,也可以将Blender中的模型导出为FBX文件以便在其他软件中使用。
- 跨软件工作流:FBX格式被许多三维软件支持,这使得在不同的软件之间交换模型变得更加容易。例如,你可能需要将Blender中的模型导入到3ds Max或Maya中进行进一步的处理。
- 动画数据传输:除了几何数据外,FBX文件还可以包含动画数据,这使得在软件之间转移动画变得非常方便。
- 游戏开发:许多游戏引擎支持FBX格式,因此Blender用户可以轻松地将自己的作品导入到游戏引擎中进行游戏开发。
- 协同工作:在团队工作中,FBX格式可以作为一个标准化的交换格式,确保团队成员在不同软件中工作时的数据一致性。
1-2 烘培
-
不对,放错图了
-
烘焙(Baking)
是一个重要的功能,用于将复杂的3D模型、动画或者光照信息转换成2D图像或者贴图,以便于实时渲染或用于其他3D软件。 -
烘焙
的基本概念: 烘焙的主要目的是减少渲染时的计算量,提高渲染速度。例如,在游戏开发中,为了实现流畅的实时渲染,通常需要对场景中的光照、阴影、法线等数据进行烘焙,生成相应的贴图。这样,在游戏运行时,只需应用这些预烘焙的贴图,就能快速渲染出复杂的场景效果,而不必实时计算。 -
可能有朋友会问了,如果不考虑算力问题,这里为什么要使用到烘培呢,我们来回顾一下上一节我们自定义的材质
-
可以看到上述节点图中我们自定义的材料图过于复杂,在进行格式转换的时候容易出现模型无法正常或者良好转换的情况,如下图我的尝试,按照正确步骤对上述模型进行fbx文件直接export导出后再次进行import到blender中的时候,出现了如下无法正常解析texture的情况
-
题外话:经过搜寻和问题查找最终我暂时把问题归咎于自定义材质的复杂性,解决方式可以是尝试对材质进行简化,或者考虑烘培。在不想优化材质的懒惰下我最后还是选择了烘培(我在已经确保fbx导出时候已经选择了正确的导出形式和选择)
2 快速开烤
2-1 三个特性
- 在明白了为什么要进行烘培之后,那我们来快速上手,我们要做的很简单,分别进行3次烘培,分别对
color(颜色)
,roughness(粗糙度)
和normal(发现)
三个特性进行烘培,得到三张PNG图像。
- 颜色(Color)烘焙:颜色烘焙是将模型的材质颜色信息烘焙到一张2D图像上。这样,在实时渲染时,就不需要再次计算材质的颜色,可以直接使用这张图像来显示模型的颜色。这对于保持材质的细节和颜色一致性非常重要。
- 粗糙度(Roughness)烘焙:粗糙度烘焙用于将材质的粗糙度信息烘焙到一张2D图像上。粗糙度决定了材质表面反射光线的散射程度,从而影响材质的外观。例如,一个粗糙的表面会散射更多的光线,而一个光滑的表面则会产生更集中的反射。在实时渲染中,使用烘焙的粗糙度贴图可以快速实现这些效果,而不需要实时计算。
- 法线(Normal)烘焙:法线烘焙是将高多边形模型的法线信息烘焙到低多边形模型上。法线贴图可以模拟出高多边形模型的细节,而不需要使用高多边形的模型进行渲染。这对于减少渲染负担、提高渲染速度非常有帮助。在实时渲染中,法线贴图可以用来模拟凹凸不平的表面,使低多边形模型看起来更加复杂和真实。
- 这三项也分别对应上一节我们绘制基本材料时候连接的三个特性
2-2 创建Image Texture✖3
-
顾名思义,找到我们需要的body材料(需要烘焙的部分)
-
shift+A添加三个特性的
Image Texture
,注意粗糙度和法线的颜色空间要选择Non-Color.接下来我们烘培的结果将会存储在这三个ImageTexture中
2-3 开始烘培
-
右侧Render属性栏,选择配置我们烤箱的引擎Cycles,同时我们选择GPU可以为烘培进行加速
-
在Blender中,
Cycles
是一个强大的渲染引擎,它使用光线追踪技术来创建逼真的图像。Cycles是一个基于物理的渲染器(Physically Based Renderer,PBR),这意味着它模拟了光线在现实世界中的行为,包括光的反射、折射、散射和吸收。 -
接着我们配置第一个Color的烘培参数,你要确保一下选项:
- 物体被全选
- 材料是选对的
- Bucket_Color(Image Texture)被选中
- Bake Type 是Diffuse(当你选择"Diffuse"(漫反射)作为烘焙类型时,你是在指示渲染引擎只计算并保存对象表面的漫反射颜色,而不包括高光、反射或折射等效果。)
- 取消Contributions的Direct和Indirect
-
然后点击Bake开始烤箱
-
下方有个进度条,进度条走完就是完成了
-
烘培结束后我们可以在UV展开视图中找到刚刚烘培得到的图片
-
选中后我们点击Image进行PNG另存为
-
我们就有如下画面
2-4 烘培结束
-
相同步骤,粗糙度选中粗制度进行烘培
-
法线选择Normal进行烘培
-
得到如下三张烘培结果的效果图片
-
然后我们选中这三个组件,复制,创建一个新的材质
-
如下
-
这个新的材质只需要同时包含这个三个烘培结果的图进行叠加就可以获得相同效果的材质了
-
至此我们完成了烘培的全部工作,新材质效果基本上看起来和原来的没有上面差别
3 FBX导出
-
老规矩A选择全部物体,文件-导出-FBX文件
-
我们填一下导出的基本属性,注意
-
注意右边这个小按钮一定要点上
-
我们没有骨骼和动画,取消勾选,平滑选择面
-
值得一提的是右上角的加号可以保存你的选项,以便下次使用
-
自此我们完成了导出的全部工作
4 UE5导入FBX文件
-
老规矩新建项目,C++,使能光线追踪,点击create
-
在新项目中创建一个bucket文件夹点击import导入fbx文件
-
选项可以设置默认,然后点击Import All
-
导入存在一点点问题,不要慌,我们一个个解决
-
可以看的出来我们的body_bake没有被加载出来,那我们就手动添加,把刚刚烘培的三张PNG图拖到资源文件夹中
-
然后双击body_bake 进入材质编辑页面
-
和Blender逻辑一样,鼠标右键搜索添加Texture Sample
-
在左下角属性出为三个特性添加PNG烘培图
-
添加后然后连连看,可以看到左上角的材质球已经显示出来了!
-
ctrl+s保存,回到主界面可以看到我们的锥桶已经成功展现了![[Pasted image 20240908110123.png]]
-
向上拖动导入一个锥桶
-
自由摆放环节
5 总结
- 本节我们介绍了Blender的烘焙工艺及其使用,然后将我们的模型转成fbx导入UE5中。
- 下一节我们讲讲如何为我们的小车创建基础环境。
- 如有错误,欢迎指出!!!谢谢大家的支持