基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模
前言
- 本系列教程旨在使用
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系列教程:
- 第一期:UE5-C++入门教程(一):使用代码创建一个指定目标的移动小球-CSDN博客
- 第二期:UE5-C++入门教程(二)—编写Editor类别的自定义模型实现小球规划路线的可视化-CSDN博客
- 备注:最近博主在unity开发独立游戏,UE5系列的相关长期教程先暂时不更新了请大家多多谅解
- 本教程环境支持:
- UE5.43
- ubuntu 22.04 ros2 humble
- 本期我们来讲一下如何使用blender完成一个锥桶的建模和贴图,本节的最后我们会得到下面这样的效果

01 Blender介绍

- Blender 是一款开源且免费的3D建模软件,广泛用于3D建模、动画、渲染、视频编辑、游戏设计等多个领域。
- 多功能性:它不仅仅是一个3D建模软件,还包含了完整的动画制作、渲染、视频编辑和游戏设计功能。
- 开源:Blender的源代码是开放的,用户可以自由地查看、修改和分发。
- 跨平台:Blender可以在Windows、macOS和Linux等多个操作系统上运行。
- 社区支持:由于其开源的特性,Blender拥有一个庞大的社区,用户可以通过社区获得技术支持和教程。
- 教育用途:由于其免费和开源的特性,Blender被广泛用于教育和培训中,帮助学生学习3D建模和动画制作。
- 商业用途:尽管是免费的,但Blender的专业功能使其在商业领域也得到了广泛应用,许多专业的3D艺术家和工作室都在使用它。
02 安装
-
我们打开blender官网下载页面Blender官网选择LTS版本进行下载

-
根据提示一路next,选择安装路径然后install即可

-
安装好后点击blender图标,初次进入可以进行偏好设置

-
打开界面会有如下界面

3 Blender快速入门
基础操作
-
使用
鼠标滚轮中键可以进行场景的选择 -
使用
鼠标滚轮中键+shift可以进行移动 -
左侧的工具键有一些基本的移动缩放按钮

-
我们使用鼠标左键框选界面的全部物体,右上角的提示栏会显示基本的物体

-
我们一般设计建模物体的时候不需要光源和摄像头,选中他们,点击delete键删除
-
选择基础的立方体,我们点击键盘上的N,可以看到此立方体的基础属性

-
有时候我们要进行小物体建模的时候,我们希望物体的尺寸是cm,我们在右侧场景栏目更改缩放单位和长度的基本单位

-
这是你的网格会出现类似下述的状况,我们在右上角找到试图叠加层

-
把缩放更改回和上述单位设置的缩放单位一致就行了,可以看到网格恢复一致了

4 快速建模
4-1 数据确认
- 从实验室顺一个锥桶我们简单测一下数据

4-1 底盘平面和编辑模式
-
我们在上侧‘添加’点击网格,选择创建一个平面

-
调整尺寸为21cm✖21cm,并设置为Z识图俯视

-
我们选中物体,进入
编辑模式
-
物体模式(Object Mode)和编辑模式(Edit Mode)是Blender中用于操作3D物体的两种主要模式。它们在Blender的用户界面中通过一个模式选择器进行切换,通常位于3D视图的底部。物体模式(Object Mode): 物体模式是默认的模式,当你在Blender中打开一个新文件或者创建一个新的物体时,你通常是在物体模式下。在物体模式下,你可以执行以下操作:- 移动、旋转和缩放整个物体。
- 选择、添加、删除物体。
- 设置物体的变换中心点。
- 应用变换(例如,将移动、旋转或缩放变换应用到物体的几何数据上)。
- 创建父子关系,将一个物体作为另一个物体的子物体。
- 设置物体的渲染属性,如材质、纹理和灯光。
编辑模式(Edit Mode): 编辑模式是用于编辑物体内部几何结构的模式。当你切换到编辑模式时,你可以访问和修改物体的顶点、边、面和体。在编辑模式下,你可以执行以下操作:- 选择、移动、旋转和缩放物体的顶点、边或面。
- 删除或添加几何元素。
- 对几何元素进行布尔运算(合并、差集、交集)。
- 使用各种建模工具,如倒角、循环切割、挤出、缩放、扭曲等。
- 设置边的权重,用于平滑着色和变形。
- 使用雕刻工具,对物体进行精细的雕刻和塑造。
4-2 快速细分
-
选择平面,右键,选择细分

-
选择切割次数为7,这样21cm/7=3cm一个格

-
我们现在进行中间锥形的掏空,锥底部是15cm,21-15=6cm,一边就是3cm一个格子,拖动选择中间的格子

-
按住i进行inset,拖动选中框的角,进行适当缩放(
inset是一个用于编辑模式的建模工具,它允许用户在选定的面上创建一个向内的倒角或切口。这个工具在创建复杂的几何形状或添加细节时非常有用。)
-
让点击键盘的x进行删除,选择面x

-
删除完变成下述如下

-
我们选中上述轮廓,点击alt+shift+s进行求球面化,这时候你的鼠标变成一个球型化箭头

-
往外拖得到球型化的结果

-
然后右键选择平滑顶点

-
选择重复到5

-
然后再次进行alt+shift+s进行再次球型化

4-3 拉伸锥体
-
我们切换到侧视图

-
保持刚刚中心轮廓存在的同时点击e进行Extrude(
Extrude(挤出)是一个用于编辑模式的建模工具,它允许用户从选定的几何元素(如顶点、边或面)中创建新的几何元素。),同时按住ctrl向上拖动,可以进行跨整网格进行移动,同时我们设置Z为26cm
-
按住S进行Scale缩放,5.5cm/15cm=0.3666的缩放比

-
我们转一个视角,选择上方轮廓如下图所示

-
点击S继续进行缩放,3.5cm/5.5cm=0.636

-
点击E向下稍微拉伸

-
ctrl+R 进行 Loop Cut,
Loop Cut(循环切割)是一个用于编辑模式的建模工具,它允许用户在选定的几何元素(如面或边)之间添加等距的循环边。Loop Cut工具通常用于细分模型,增加细节,或者改善模型的拓扑结构。 -

-
同理我们在锥桶两侧也添加loop cut

4-4 锥桶底部
-
点击底边屏幕的一条边,alt+左键双击全选整个面

-
键盘点击e进行向下拉伸,和上面的操作一致
4-5 基本型细分
-
我们切回物体模式![[Pasted image 20240907153325.png]]

-
选择整个物体,右键进行平滑着色

-

-
然后点击ctrl+2进行细分,我们进行级别2的细分

-
同时我们再次使用环切提前把反光条的位置画出来

5 贴图和材质渲染
5-1 着色
-
点击右上角的试图着色方式

-
点击正上方进入
Shading模式,Shading(着色)是3D渲染中的一个重要步骤,它涉及到为3D模型表面添加颜色、纹理和光照效果,以模拟真实世界中的视觉外观。在Blender中,着色主要通过节点编辑器来完成,这个过程可以极大地影响最终渲染图像的质量和外观。 -
着色的基本概念
- 材质(Material):材质定义了物体表面的视觉属性,如颜色、纹理、反光率等。
- 纹理(Texture):纹理用于添加细节到材质上,如木纹、布料纹理等。
- 光照(Lighting):光照是模拟光线如何与物体表面交互的过程,包括反射、折射和阴影等。

5-2 Node Wrapper
-
在编辑视图找到偏好设置
-

-
在插件中使能Node Wrangler:Node Wrangler是Blender中的一个强大插件,旨在提高节点编辑的效率和便捷性。以下是关于Node Wrangler插件的基本信息、功能和使用教程的总结: 主要功能
- 快捷键组合:Node Wrangler提供了许多快捷键,可以大大提高工作效率。例如,通过快捷键可以快速重新加载节点树中使用的所有图像,无需手动加载5。
- 节点选择和操作:用户可以快速选择、复制和粘贴节点,以及根据不同标准对节点进行标签和重命名812。
- 节点管理:插件可以帮助用户管理复杂的节点树,通过分组、折叠和整理节点来简化工作流程13

5-3 材质(Material)和纹理(Texture)
-
以下几个小节为了方便查询,我们在设置-偏好中把语言改为英文
-
我们来创建一个全新的材料,点击下方的按钮new,取名为body

-
新建的材质会出现如下的材质

-
点击shift+A可以添加新的组件,我们添加下述几个材质

-
效果如下==(注意这里的材质由于缩放比例的原因发生了变形,后续6-3修正后会变回去)==

6 反光带贴图
6-1 添加材质
-
然后我们回到编辑模
型,alt+鼠标左键x选择中间的部分
-
我们在右侧添加一个新的材料

-
点击Assign应用到实体上

-
如此依赖基本的锥桶就有了,接下来我们来添加贴图==(注意这里的材质由于缩放比例的原因发生了变形,后续6-3修正后会变回去)==

6-2 找寻贴图材质
-
我们在任意素材网站上找到想要贴上去的图片,这里我找了一个反光的贴图

-
我们即将使用到的一个名为
Unwrap的功能,Unwrap(UV展开)是Blender中的一个关键功能,主要用于将3D模型的表面展开成2D平面,以便于后续的纹理映射和绘制。在3D建模中,UV展开是一个重要的步骤,它涉及到将3D模型的表面(通常称为“网格”或“几何体”)展开成一个或多个2D平面,这些平面称为“UV贴图”。这个过程允许艺术家在一个平面上设计纹理,然后将这些纹理应用到3D模型的表面。通过UV展开,艺术家可以精确控制纹理在模型上的分布,从而实现更加细致和真实的视觉效果。
6-3 重要检查
-
在进行unwrap前我们必须要做到一下几个基础要求,否则unwarp展开的图片会变得和奇怪,我们必须保证我们的主体实物的位置和旋转分别是0,0,0,此外缩放比必须是1:1:1(如下图,我的缩放比不正确,我们必须进行修正)

-
我们选中物体,ctrl+A,选择旋转+缩放

-
这时候你会发现我们的缩放比被修正为1:1:1

6-4 Unwrap
-
我们在正上方选中UV Editiing进入uv模式

-
我们在左上角新建一个UV网格
-

-
选择如下参数
-

-
会有如下UV默认帮助你进行贴图确认的网格出现

-
然后我们在右侧材料,找到刚刚创建的材料,选择固有色

-
选择图像纹理
-
选择我们刚刚创建的UV_Grid![[Pasted image 20240907225836.png]]

-
我们点击右上角的视图着色方式,可以看到UV_Grid被在这个材质中展开了,但是展开的方式不太对,这时候我们就需要进行调整

6-5 UnWrap调整–裁切
-
我们在编辑模式下全选锥桶模型,并点击UV_editor右上角的打叉暂时关闭GV_Grid显示

-
然后我们现在正式开始UV图的调整,搜先我们需要做的就是UV图的裁剪

-
进入选择模式

-
alt+鼠标左击选择反光条的上侧

-
右键选择标记缝合边

-
同理我们标记下边缘![[Pasted image 20240907230614.png]]

-
紧接着我们按下A选择全部物体

-
按下U选择展开Unwrap

-
我们就拿到展开图了

-
如果出现展开是如下情况,回到6-3进行重要检查的确认

-
然后我们再次进行裁剪,alt左键选择,右键标记分割线

-
然后A选中全部,U展开

6-5 UnWrap调整–微调
-
我们希望网格应该是顺着圆锥的母线镜像下移动
-

-
我们选择左侧编线,右键选择

-
X向拉直

-
可以方向一遍已经对齐

-
同理我们有如下

-
对于倾斜的斜面
-

-
右键选择自动对齐
-

-
然后依次自动对齐我们就有

-
这是快大功告成辣!!!!
6-6 替换贴图图片
-
w我们在材质右侧找到图片替换

-
选择刚刚的图片并导入,不要慌,我们缩放一下图片

-
A选择全部,然后I进行缩放![[Pasted image 20240907234227.png]]


-
左侧进行缩放,鼠标左键进行拖拽
-
大功告成!!!!!!!!!!!!!!!!!!!!!!!!!

7 总结
- 本节我们介绍了如何入门到完成下述这个带材质和贴图的锥桶!!!
- 下一节我们讲讲如何将这个模型导入UE5,并通过深度相机访问它
- 如有错误欢迎指出!感谢大家的支持

相关文章:
基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模
前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博…...
C++竞赛初阶L1-15-第六单元-多维数组(34~35课)557: T456507 图像旋转
题目内容 输入一个 n 行 m 列的黑白图像,将它顺时针旋转 90 度后输出。 输入格式 第一行包含两个整数 n 和 m,表示图像包含像素点的行数和列数。1≤n≤100,1≤m≤100。 接下来 n 行,每行 m 个整数,表示图像的每个像…...
无线领夹麦克风哪个牌子好?西圣、罗德、猛犸领夹麦克风深度评测
如今短视频和直播行业蓬勃发展,无线领夹麦克风成为了许多创作者不可或缺的工具。然而,市场上的无线领夹麦克风品牌众多、质量参差不齐,为了帮助大家挑选到满意的产品,我作为数码测评博主,对无线领夹麦克风市场进行了…...
React Native 0.76,New Architecture 将成为默认模式,全新的 RN 来了
关于 React Native 的 New Architecture 概念,最早应该是从 2018 年 RN 团队决定重写大量底层实现开始,因为那时候 React Native 面临各种结构问题和性能瓶颈,最终迫使 RN 团队开始进行重构。 而从 React Native 0.68 开始,New A…...
Java并发:互斥锁,读写锁,Condition,StampedLock
3,Lock与Condition 3.1,互斥锁 3.1.1,可重入锁 锁的可重入性(Reentrant Locking)是指在同一个线程中,已经获取锁的线程可以再次获取该锁而不会导致死锁。这种特性允许线程在持有锁的情况下,可…...
客户端负载均衡Ribbon实例
文章目录 一,概述二,实现过程三,项目源码1. 源码放送:2. 部署方式 四,功能演示五,其他 一,概述 一般来说,提到负载均衡,大家一般很容易想到浏览器 -> NGINX -> 反…...
MySQL数据库负载均衡
数据库负载均衡是通过将数据库请求分散到多个数据库服务器上,以提高数据库的处理能力和可用性。在高并发的场景下,使用数据库负载均衡器可以有效避免单点故障,提高系统的整体性能和可靠性。 数据库负载均衡器 数据库负载均衡器可以是硬件设…...
达梦CASE_SENSITIVE参数解析
1. 参数含义 标识符大小写敏感,默认值为 Y。 当大小写敏感时,小写的标识符应用双引号括起,否则被转换为大写;当大小写不敏感时,系统不自动转换标识符的大小写,在标识符比较时也不区分大小写。 CASE_SENS…...
酒店智能轻触开关工作原理
在现代化酒店中,智能轻触开关已成为提升宾客居住体验的重要设备之一。这些开关不仅操作便捷,而且功能丰富,能够实现对灯光、窗帘、空调等设备的精准控制。本文将深入探讨酒店智能轻触开关的工作原理。 一、智能轻触开关的基本概念 智能轻触开…...
web基础之RCE
简介:RCE称为远程代码执行漏洞;是互联网的一种安全漏洞;攻击者可以直接向后台服务器远程注入操作系统命令;从而操控后台系统;也是CTF比较常考的一个方面 1、eval执行 (1)分析后端代码…...
c语言--水仙花数,求Sn的前五项和
用C语言实现输出水仙花数 什么是“水仙花数”? 所谓“水仙花数”是指一个n位数,其各位数字n次方之和等于该数本身。 例如:1531 ^3 5 ^3 3 ^3 如何求解水仙花数? 思路: 步骤1:先计算出数i的位数&#x…...
SpringBoot教程(二十八) | SpringBoot集成Elasticsearch(Java High Level Rest Client方式)
SpringBoot教程(二十八) | SpringBoot集成Elasticsearch(Java High Level Rest Client方式) 前言添加maven依赖yml配置ElasticsearchConfig 连接配置类EsUtil 工具类开始测试 前言 由ES官方提供,代码语法和DSL语法相似…...
【Vue3】常用的响应式数据类型
ref 定义基本类型 <template><div>{{ sum }}</div> </template><script setup> import { ref } from vuelet sum ref(10)const btn () > {sum.value 200 } </srcipt>reactive 定义复杂类型 <template><div>{{ sum }…...
搭建本地DVWA靶场教程 及 靶场使用示例
1. DVWA简介 DVWA(Damn Vulnerable Web Application)一个用来进行安全脆弱性鉴定的PHP/MySQL Web 应用平台,旨在为网络安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。 DVW…...
60. n 个骰子的点数【难】
comments: true difficulty: 简单 edit_url: https://github.com/doocs/leetcode/edit/main/lcof/%E9%9D%A2%E8%AF%95%E9%A2%9860.%20n%E4%B8%AA%E9%AA%B0%E5%AD%90%E7%9A%84%E7%82%B9%E6%95%B0/README.md 面试题 60. n 个骰子的点数 题目描述 把n个骰子扔在地上,所…...
高性能编程:无锁队列
目录 1. 无锁队列 1.1 无锁 1.1.1 阻塞(Blocking) 1.1.2 无锁(Lock-Free) 1.1.3 无等待(Wait-Free) 1.2 队列 1.2.1 链表实现的队列 1.2.2 数组实现的队列 1.2.3 混合实现的队列 1.3 多线程中的先…...
word标题排序编号错误
1.问题:word中有时会出现当前编号是2.1、3.1、4.1,下级编号却从1.1.1开始的情况,类似情况如下: 2.原因:此问题多为编号4.1、4.2和编号4.1.1使用的多级编号模板不一样,可以选中4.2,看下使用的多级…...
力扣---80. 删除有序数组中的重复项 II
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 说明&…...
一篇文章,讲清SQL的 joins 语法
SQL 中的不同 JOIN 类型: 1. (INNER)JOIN(内连接):返回两个表中具有匹配值的记录。 2. LEFT(OUTER)JOIN(左外连接):返回左表中的所有记录&#…...
设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)
文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例:1)实现要求2)UML图3)实现步骤:1)创建一个表示食物条目和食物包装的接口2)创建实现Packing接口的实体类3&a…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
