Blender增强现实3D模型制作指南【AR】
推荐:用 NSDT编辑器 快速搭建可编程3D场景
将静态和动画 3D 内容集成到移动增强现实 (AR) 体验中是增强用户沉浸感和参与度的高效方法。 然而,为 AR 创建 3D 对象可能相当艰巨,尤其是对于那些缺乏 3D 建模经验的人来说。 与添加视频或照片 AR 图层不同,生成 3D 对象需要技术专业知识和专用软件。
不过,我们很乐意提供帮助 - 本教程旨在指导你使用免费开源 3D 创建软件 Blender 创建移动增强现实的 3D 内容。 以下文章提供了有关如何使用 Blender 生成可无缝集成到 3D编辑器中的 3D 对象的详细分步过程。
如果你已经有了可用的3D模型,只是需要转换成3D编辑器支持的格式,那么可以使用3DConvert这个在线3D格式转换工具。
1、为什么Blender 是增强现实的绝佳选择?
凭借其强大的 3D 建模工具套件和开源可用性,Blender 是希望在不花太多钱的情况下创建移动增强现实内容的开发人员和设计人员的绝佳选择。 Blender 提供的一系列功能可与 Cinema 4D、3DS Max 和 Maya 等昂贵的 3D 建模软件相媲美。 除非你已经投资了付费软件,否则选择比 Blender 更昂贵的替代品并没有显着的优势。
在过去的几年中,Blender 在扩展其功能和特性方面取得了显着的进步。 它现已被广泛认为是创建 3D 内容的行业标准工具。 凭借其用户友好的界面和全面的功能集,Blender 已成为寻求将其用于 AR 的新手和专家的热门选择。
2、准备 3D 对象以供3D 编辑器使用
为了确保你的 3D 对象与 3D 编辑器兼容,正确准备它们非常重要。 如果你的对象没有任何运动或动画,则可以以 OBJ 格式导入它们。
但是,如果你有更复杂的动画场景,则需要以 glTF 或 FBX 格式导出它们。 glTF 格式特别适合 Web 和移动应用程序,因为它针对快速加载和渲染进行了优化。
要为 3D 编辑器创建 3D 对象,你需要从 Blender 导出 3D 模型和动画,然后将此 3D 对象上传到 3D 编辑器,该编辑器具有内置文件优化工具。
3、了解 3D 模型的结构:多边形和网格
3D 开发的初始阶段是建模,其中对象实际上是在三个维度中创建的。 Blender 提供多种建模技术,其中“网格建模”是使用最广泛和基本的方法。
什么是网格?
在 3D 建模中,网格是指定义对象形状的一组顶点、边和面。
顶点(Vertex)也可以称为点,是空间中的单个位置:
边(Edge)是连接两个顶点的直线,定义它们之间的线段:
面(Face)也称为多边形,是由边包围的平坦表面。 它由通过边连接的三个或更多顶点来定义。
什么是多边形?
多边形是三维空间中三个或多个顶点用直边连接而成的几何形状。 顶点、边和面是多边形的基本组成部分,其中面指的是多边形的内部区域。 多边形建模通常涉及使用称为三角形的三边形状或称为四边形的四边形状。
多边形面由三个或更多顶点及其关联边包围的区域定义。 许多连接的面创建多边形网格,也称为多边形集或多边形对象,用于创建 3D 多边形模型。
在 Blender 中创建增强现实模型和场景时,对于所需的多边形数量没有具体要求。 然而,重要的是要记住,人们可能会在各种设备上访问此内容,其中一些设备可能较旧。 为了确保最佳性能,最好保持较少的多边形数量。
虽然现代设备可以轻松处理 60 万到 100 万个多边形,但建议将移动设备的场景限制为 25 万个多边形。
3、准备动画
对象动画可以通过多种方式创建,包括对象变换,其中涉及更改对象的位置、大小以及沿 x、y 和 z 轴的旋转。 对象绑定是另一种对于复杂对象(例如人类、动物和具有多个部件的机械设备)进行动画处理的方法。
例如,最近的一个项目利用索具系统来模拟蝴蝶翅膀的运动。
要创建动画,需要在时间轴中标记关键帧,以指示对象骨骼或骨架在 x、y 和 z 空间中发生变化的位置。
时间轴是用于创建动画的主要工具,动画标题及其与特定对象的关联添加在“摄影表”选项卡中,可以通过“动作编辑器”视图访问该选项卡。
5、了解渲染可视化和 AR 之间的颜色和光线差异
在 Blender 中向对象添加颜色是一项简单的任务。 你可以选择一种材质并为其指定颜色。 但是,如果你希望合并其他视觉元素,例如纹理、符号或颜色变化,则需要创建材质。
Blender 提供了一个选项来创建纹理并将其烘焙到 .JPG 或 .PNG 形式的对象上。 创建纹理时,确保场景中的闪电和阴影不被烘焙非常重要,因为它们会与 Unity 项目灯光发生冲突。 因此,建议选择烘焙类型为“漫反射”,并且仅打开“颜色”选项。
在烘焙纹理之前,必须检查法线是否面向正确的方向。 如果不是,某些多边形将在 3D编辑器环境中显示为黑色或透明。 扭转法线可以解决这个问题。 一旦纹理被烘焙,它就可以被分配给一个特定的对象,并且可以使用附加的纹理创建一个新的材质。
请记住,在 Sketchfab、Blender 或 Unity 3D 等平台上查看 3D 模型时,由于渲染系统的差异,外观可能会有所不同。 这些系统以独特的方式处理光照、纹理和阴影等元素,导致模型的最终外观略有不同。
然而,通过利用 glTF 或 GLB 格式以及通用材质层 (UML) 材质,可以标准化模型的外观,从而确保跨不同平台的视觉输出更加一致。
6、UV 映射指南
在 3D 建模中对模型进行纹理处理之前,创建 UV 坐标系贴图至关重要。 尽管这听起来令人畏惧,但这是一个简单的过程。 简而言之,它是显示 3D 对象上纹理出现位置的 2D 图像。 这就像为一个立方体创建纸张布局,然后进行切割、折叠和粘合。 创建布局后,可以为每个对象设计纹理并将其导入3D编辑器。
除了前面提到的方法之外,还可以使用Photoshop等程序来创建纹理。 可以使用各种纹理使材质变得有光泽、透明、粗糙或类似。 每个纹理应保存为 .JPG 文件。 例如,这对于创建窗户的反射或突出显示建筑物立面的不同方面非常有用。
在 Blender 中,无需创建灯光或摄像机,因为准备好的文件可以直接导入 3D 编辑器中。
7、了解文件格式和 glTF 的优点
创建动画后,必须以 glTF (.gltf/.glb)、FBX 或 OBJ 格式导出。 这些文件类型允许保存对象、纹理、动画和骨架。
glTF 文件格式在业界越来越流行。 其设计强调紧凑的文件大小、快速加载、运行时独立性和完整的 3D 场景表示。
在 glTF 之前,创建工具和引擎之间传输 3D 模型数据的两种主要格式是 FBX 和 OBJ。 FBX 有许多过时的功能,其专有性质和大型 C++ SDK 阻止在 Web 浏览器中直接加载。 对于OBJ格式来说,它的功能有限,并且在存储空间和读/写速度方面效率低下。
一些行业专家预计 glTF 的使用将持续增长,使其有可能成为行业内资产交换的标准格式。 鉴于 Blender 在增强现实方面的潜力,它可以在实现这一结果方面发挥重要作用。
最后,导出时,仅包含网格和骨架很重要。 最佳实践是在提交文件的同时提供纹理贴图到 3D编辑器,以确保顺利集成。
8、从 Blender 以 glTF 格式导出 3D 模型
要从 Blender 以 glTF 格式导出 3D 模型,请按照以下步骤操作:
- 在 Blender 中打开你的 3D 模型。
- 确保模型设置正确,包括材质、纹理和 UV 贴图。
- 单击 Blender 界面左上角的“文件”,然后从下拉菜单中选择“导出”。
- 从导出格式列表中选择“glTF 2.0 (.glb/.gltf)”。
- 在右侧的导出选项面板中,选择“GLB”(二进制格式)或“GLTF”(文本格式)作为你的首选格式。 GLB 文件更紧凑,而 GLTF 文件更容易被人类读取。
- 如有必要,配置其他导出设置,例如应用修改器、选择要导出的对象或调整动画设置。
- 选择导出文件的目标文件夹并为其命名。
- 单击“导出”以所选格式保存文件。
9、故障排除指南
当你在 Blender 中处理 3D 内容时,可能会遇到纹理外观损坏等问题,但这些通常是由于易于修复的人为错误造成的。 以下是一些最常见的场景:
- 检查错误:将导出的glTF文件重新导入Blender中,看是否显示正确。 如果没有,请查看 Blender 控制台中是否有任何错误消息,因为它们可能提供有关问题的有用信息。
- 验证材质和纹理:确保材质和纹理正确应用于 Blender 中的模型。 纹理缺失或分配不当可能会导致外观损坏。 另外,请确保你使用支持的材质类型进行 glTF 导出。
- 检查 UV 映射:仔细检查模型的 UV 映射,以确保纹理正确映射到几何体。 不正确的 UV 贴图可能会导致导出模型上的纹理扭曲或错位。
- 应用变换:在导出之前,通过选择对象,按 Ctrl+A,然后选择“所有变换”,对模型应用任何变换(缩放、旋转、位置)。
- 应用修改器:如果你的模型具有任何修改器(例如细分曲面或布尔值),请在导出之前应用它们,以确保导出的文件中包含正确的几何图形。
- 仔细检查导出设置也是一个好习惯。
10、将移动增强现实提升到新的水平
正如本指南所证明的那样,Blender 是一款功能强大的 3D 建模和动画软件,为创建移动增强现实项目提供了众多优势。
其多功能性使开发人员能够创建复杂的 3D 模型和动画,并将其导出到 3D编辑器。 该软件与 glTF 文件格式的兼容性确保了移动设备的模型和动画的高效压缩,同时保持其高质量。
Blender 拥有大量针对 AR 特定内容的插件和附加组件,是渴望为移动设备创建身临其境的一流 AR 体验的增强现实开发人员的首选。
原文链接:Blender增强现实模型制作 — BimAnt
相关文章:

Blender增强现实3D模型制作指南【AR】
推荐:用 NSDT编辑器 快速搭建可编程3D场景 将静态和动画 3D 内容集成到移动增强现实 (AR) 体验中是增强用户沉浸感和参与度的高效方法。 然而,为 AR 创建 3D 对象可能相当艰巨,尤其是对于那些缺乏 3D 建模经验的人来说。 与添加视频或照片 AR…...

Java查看https证书过期时间(JKS,CERT)
在这里需要使用X.509 证书的抽象类 X509Certificate 。此类提供了一种访问 X.509 证书所有属性的标准方式。 这些证书被广泛使用以支持 Internet 安全系统中的身份验证和其他功能。常见的应用包括增强保密邮件 (PEM)、传输层安全 (SSL)、用于受信任软件发布的代码签名和安全电…...

关于vue,记录一次修饰符.stop和.once的使用,以及猜想。
内置指令 | Vue.js 在vue的api里,关于v-on有stop和once两个事件标签。 .stop - 调用 event.stopPropagation()。.once - 最多触发一次处理函数。 原有主要代码和页面效果 (无stop和once): ...<div class"div" click"di…...

解决git reset --soft HEAD^撤销commit时报错
今天在使用git回退功能的时候,遇到以下错误: 解决git reset --soft HEAD^撤销commit时报错 问题: 在进行完commit后,想要撤销该commit,于是使用了git reset --soft HEAD^命令,但是出现如下报错࿱…...

【BASH】回顾与知识点梳理(三十四)
【BASH】回顾与知识点梳理 三十四 三十四. 认识系统服务(二)34.1 systemctl 针对 service 类型的配置文件systemctl 配置文件相关目录简介systemctl 配置文件的设定项目简介[Unit] 部份[Service] 部份[Install] 部份 两个 vsftpd 运作的实例多重的重复设…...

Python可视化在量化交易中的应用(11)_Seaborn折线图
举个栗子,用seaborn绘制折线图。 Seaborn中折线图的绘制方法 在seaborn中,我们一般使用sns作为seaborn模块的别名,因此,在下文中,均以sns指代seaborn模块。 seaborn中绘制折线图使用的是sns.plot()函数: …...

无涯教程-TensorFlow - TensorBoard可视化
TensorFlow包含一个可视化工具,称为TensorBoard,它用于分析数据流图,还用于了解机器学习模型。 TensorBoard的重要功能包括查看有关垂直对齐的任何图形的参数和详细信息的不同类型统计的视图。 深度神经网络包括多达36,000个节点…...

[uni-app] uview封装Popup组件,处理props及v-model的传值问题
文章目录 需求及效果遇到的问题解决的办法偷懒的写法 需求及效果 uView(1.x版本)中, 有Pop弹出层的组件, 现在有个需求是,进行简单封装,有些通用的设置不想每次都写(比如 :mask-custom-style"{background: rgba(0, 0, 0, 0.7)}"这种) 然后内部内容交给插槽去自己随…...

【C++】int a;和int *p=new int;有什么区别?
2023年8月19日,周六早上 int a; 和 int *p new int; 之间有以下区别: 1. 内存分配方式:int a; 是在栈上分配内存,而 int *p new int; 是在堆上动态分配内存。 2. 生命周期:int a; 的生命周期与其所在的作用域相同&…...

redis事务管理
目录 一、redis事务定义 二、事务控制命令——Multi、Exec、discard 三、事务的错误处理 四、事务的冲突问题 悲观锁 乐观锁 WATCH unwatch 五、事务特性 单独的隔离操作 没有隔离级别的概念 不保证原子性 一、redis事务定义 Redis 事务是一个单独的隔离操作&…...

TPS_C++版本及功能支持备注
TPS_C版本及功能支持备注 相关参考链接C23:https://zh.cppreference.com/w/cpp/23 相关参考链接C20:https://zh.cppreference.com/w/cpp/20 相关参考链接C17:https://zh.cppreference.com/w/cpp/17 相关参考链接C14:https://zh.cp…...

同步jenkinsfile流水线(sync-job)
环境 变量:env(环境变量:sit/dev/simulation/prod/all),job(job-name/all)目录:/var/lib/jenkins/jenkinsfile environment.json: [roottest-01 jenkinsfile]# cat env…...

STM32单片机WIFI-APP智能温室大棚系统CO2土壤湿度空气温湿度补光
实践制作DIY- GC0161--智能温室大棚系统 基于STM32单片机设计---智能温室大棚系统 二、功能介绍: 电路组成:STM32F103CXT6最小系统LCD1602显示器DHT11空气温度湿度光敏电阻光强土壤湿度传感器SGP30二氧化碳传感器 1个继电器(空气加湿&#x…...

SpringBoot复习:(52)不再需要使用@EnableTransactionManagement的原因
在Spring项目中,要用事务,需要EnableTransactionManagement注解加Transactional注解。而在SpringBoot项目,有事务的自动配置类TransactionAutoConfiguration,代码如下: 可以在其内部类EnableTransactionManagementConfiguratio…...

HackNos 3靶场
配置 进入控制面板配置网卡 第一步:启动靶机时按下 shift 键, 进入以下界面 第二步:选择第二个选项,然后按下 e 键,进入编辑界面 将这里的ro修改为rw single init/bin/bash,然后按ctrlx,进入…...

【办公自动化】使用Python批量生成PPT版荣誉证书
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...

【C++深入浅出】初识C++中篇(引用、内联函数)
目录 一. 前言 二. 引用 2.1 引用的概念 2.2 引用的使用 2.3 引用的特性 2.4 常引用 2.5 引用的使用场景 2.6 传值、传引用效率比较 2.7 引用和指针的区别 三. 内联函数 3.1 内联函数的概念 3.2 内联函数的特性 一. 前言 上期说道,C是在C的基础之上&…...

前端:VUE2中的父子传值
文章目录 一、背景什么是父子传值二、业务场景子传父1、在父页面中引入子页面2、子传父:父组件标识3、子传父:子组件标识 父传子父组件调用子组件中的方法 总结: 一、背景 最近做项目中需要使用到流工作,在这里流工作需要用到父子…...

【100天精通python】Day40:GUI界面编程_PyQt 从入门到实战(完)_网络编程与打包发布
目录 8 网络编程 8.1 使用PyQt 网络模块进行网络通信 服务器端示例 客户端示例 8.2 处理网络请求和响应 9 打包和发布 9.1 创建可执行文件或安装程序 9.2 解决依赖问题 9.3 发布 PyQt 应用到不同平台 9.3.1 发布到 Windows 9.3.2 发布到 macOS 9.3.3 发布到 Linux 9…...

Redis——set类型详解
概要 Set(集合),将一些有关联的数据放到一起,集合中的元素是无序的,并且集合中的元素是不能重复的 之前介绍的list就是有序的,对于列表来说[1, 2, 3] 和 [2, 1, 3]是两个不同的列表,而对于集合…...

redis---》高级用法之慢查询/pipline与事务/发布订阅/bitmap位图/HyperLogLog/GEO地理位置信息/持久化
高级用法之慢查询 # 配置一个时间,如果查询时间超过了我们设置的时间,我们就认为这是一个慢查询 # 配置的慢查询,只在命令执行阶段# 慢查询演示-设置慢查询---》只要超过某个时间的命令---》都会保存起来# 设置记录所有命令CONFIG SET slowl…...

Find My资讯|苹果Vision Pro开发者需将设备配对 AirTag
最近苹果Vision Pro获开发者申请,苹果要求获批的申请者使用 Measure and Fit 应用确认合适的佩戴尺寸,并会根据申请者提交的信息,定制不同的 Vision Pro 开发者套件,以便于契合申请者的面部特征,提供更好的佩戴体验。 …...

Go 语言中排序的 3 种方法
原文链接: Go 语言中排序的 3 种方法 在写代码过程中,排序是经常会遇到的需求,本文会介绍三种常用的方法。 废话不多说,下面正文开始。 使用标准库 根据场景直接使用标准库中的方法,比如: sort.Intsso…...

12----Emoji表情
本节我们主要讲解markdown的Emoji 在 Markdown 里使用 Emoji 表情有两种方法:一种是直接输入 Emoji 表情,另一种是使用 Emoji 表情短码(emoji shartcodes)。 一、打印方式: 直接输入 Emoji 表情:在 Markdown 中,可以直接输入 Em…...

C++四种强制类型转换
一、C强制转换与C强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2c除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cas…...

git仓库新建上传记录
新建git仓会出现版本分支问题,解决过程: 其他的前期绑定之类的传送:https://blog.csdn.net/qq_37194189/article/details/130767397 大概思路:新建一个分支,上传,合并,删除分支 git branch …...

flutter调用so
lutter是一种基于Dart语言的跨平台开发框架,通常用于开发Android和iOS应用程序。如果您想要在Flutter应用程序中调用一个SO库,您可以按照以下步骤进行操作: 首先,将您的SO库文件复制到Flutter项目的“lib”目录下。 接下来&…...

c#依赖注入
依赖注入(Dependency Injection,简称 DI)是一种设计模式,用于将对象的创建和管理责任从使用它的类中分离出来,从而实现松耦合和易于测试的代码。在 C# 中,依赖注入通常通过以下方式实现: 构造函数注入(Constructor Injection): 这是最常见的依赖注入方式,通过类的构…...

Django框架使用定时器-APScheduler实现定时任务:django实现简单的定时任务
一、系统环境依赖 系统:windows10 python: python3.9.0 djnago3.2.0 APScheduler3.10.1 二、django项目配置 1、创建utils包,在包里面创建schedulers包 utils/schedulers/task.py #1、设置 Django 环境,就可以导入项目的模型类这些了 …...

Go学习笔记之数据类型
文章目录 GO数据类型数组array切片slice集合map结构体make和new GO数据类型 在go语言中,定义的全局数据结构不使用不会报错,定义的局部数据结构必须使用,否则报错;建议定义的数据类型就要使用,要么不定义。 数组array …...