3D模型优化10个最佳实践

对于许多在建模、渲染和动画方面经验丰富的 3D 建模者来说,3D 优化可能是一个令人畏惧的过程 - 特别是当你正在优化实时应用程序的 3D 模型时! 在 Google 上快速搜索“如何优化 3D 文件”将会出现一些建议,例如减少多边形数和消除多余的顶点。

然而,针对实时应用程序优化 3D 文件存在许多细微差别,这些细微差别可能会让 3D 建模者感到不知所措。 无论你是在优化 Sketchup 或 Revit 建筑文件,还是在 Solidworks 中创建的工程模型,都需要牢记一些要点,在优化 VR 3D 模型时,我们将这些要点汇总到了最佳实践列表中。

1、实例化重复零件

想象一下重新处理相同的 3D 网格一百次。 听起来像是浪费资源,对吧? 这正是游戏引擎处理文件中重复网格时发生的情况。 无论你的模型是由数千个螺栓组成,还是多次包含相同的门模型,在渲染你的设计时,这些重复的零件都会重复处理。

虚幻引擎中的 3D 模型显示了各种重复的零件

你可以实例化重复项并创建它们的克隆,而不是处理相同的重复项并使用设备上的其他资源。 现在,当你编辑或渲染模型时,所有实例都会立即收到更新并更有效地进行处理。 速度和效率是在 VR 中实现优化的实时可视化的两个关键要求。

2、修正重叠或隐藏的部分

丢失或隐藏零件是由多名设计师处理同一项目的 3D 团队中的常见问题。 例如,在设计过程中,用户可能会隐藏某个部件而不是将其从项目中删除,而下一个用户导出文件时并不知道存在隐藏的部件或图层。 该问题也可能是由于转换过程中的错误造成的。 如果一个零件太复杂,它可能会意外地被转换两次。 无论哪种方式,隐藏的部分都会消耗额外的资源,从而损害 CPU 的处理能力。

最好检查并找到隐藏部分并将其删除,以避免实时可视化中不必要的延迟。

图像显示重叠的弹簧

3、减少面数

移动 VR 耳机具有标准 FPS,你需要保持在该标准内,以避免出现滞后问题和晕动病。 这通常在 60 到 90 FPS 之间。 详细且高多边形的 3D 模型是 FPS 缓慢的主要原因。 减少面数可以降低模型的复杂性,从而:

  • 游戏引擎渲染速度更快,实时性能提高
  • 3D 建模者可以更轻松地编辑网格、纹理和 UV 展开它。

对于 Autodesk Maya 用户来说,新的 2020 版本配备了新的重新网格和重新拓扑工具,用户可以控制修改设置。 对于需要简化的单个零件,Maya 的工具提供了一个很好的解决方案。

4、应用 LOD

当 3D 模型远离相机时,应用细节级别 (LOD) 可降低 3D 模型的复杂性,从而消除多余的细节。 应用 LOD 会删除网格特征,例如开口、间隙、凹凸、透明度等。 当网格靠近相机时,LOD 会渲染出所有所需的细节。 但当网格远离相机时,网格会与自身质量较低的版本进行交换,从而卸载来自 CPU 或 GPU 的渲染请求。

应用 LOD 时要记住的另一个因素是体积分辨率。 在可视化中不重要的较小对象不需要与较大对象一样高的分辨率。 例如,在为食品制造厂创建可视化时,模型的较大部件(例如传送带和机械臂)可以具有更详细的分辨率,而机械不同部件上的螺栓和螺钉可以采用低得多的 LOD。

Autodesk Maya 的全新重新拓扑工具和全新虚幻引擎 LOD 生成器可帮助 3D 开发人员达到最佳 FPS。

5、减少材质数量

3D 模型中的材质过多会增加文件大小和复杂性,使其难以在实时游戏引擎中使用。 保留尽可能少的材料对于实时优化 3D 模型非常重要。 另一个好的做法是使用纯色而不是图像纹理,因为它们更容易渲染。

生成 LOD 时,你会创建较低分辨率的多边形网格,并以较低的分辨率创建材质 LOD 副本。 创建材质 LOD 后,最好检查 LOD 材质是否具有任何金属、透明度或不透明属性。 如果存在,则可以将其删除,因为你不太可能在渲染中看到任何这些功能。

6、生成新的法线

基于物理的渲染(PBR)是改进实时可视化的重要一步。 PBR 使用一些可快速计算的参数来近似材料的最佳属性(参考)。 为了生成 PBR 的准确结果,3D 引擎在方程中使用多边形法线。 因此,CAD 转换后生成准确的法线对于最终结果至关重要。 反射、漫射、透明度、粗糙度和金属度在很大程度上依赖于法线。

在多边形网格转换期间,法线可能会被错误地面对。 渲染模型时,倒置的面会创建不正确的着色器。 为了避免这种情况,3D 建模者必须手动确保所有面都朝向正确的方向,就像在游戏引擎中渲染之前的 Maya 一样。

反转法线会在渲染中产生阴影

7、整理大纲

大纲是模型的支柱。 它组织 3D 文件中的每个零件或节点,以及在你需要移动或操作场景中的组或单个网格时连接零件和父级。 凌乱的大纲不仅会使模型难以使用,还会在导入或保存过程中引起问题。

在将 CAD 转换为多边形网格的过程中,在许多情况下,所有网格的位置、旋转和比例都会转换为单独的父级。 这意味着网格将具有多个父节点,每个父节点都包含上述属性之一。 这种多重父问题会产生大量无用的数据集,通常会导致软件崩溃。

为了部分解决这个问题,Autodesk Maya 和其他软件包提供了冻结变换工具,该工具可以重置网格变换,从而消除上述的父依赖性。 现在可以安全地删除这些空父节点,而无需移动、旋转或重新缩放网格。 但问题是,将冻结变换工具应用于大文件中的所有网格可能会导致崩溃。 此外,手动删除所有网格的空父节点也是一个繁琐的过程。

右:优化前的大纲。 左:优化后的大纲

除了冻结和删除多个父节点之外,汇总工具还可以删除空节点。 一些空节点携带对可视化无用但占用空间的元数据,例如历史记录、零件 SKU、制造信息等。删除这些空节点是减少不必要的数据复杂性的简单方法。

8、合并相邻网格

正如上一节所讨论的,最小化的大纲对于 VR 开发的优化工作流程至关重要。 实现此目的的另一种有效方法是组合相邻网格。 例如,将五个螺钉组合成一个网格 - 因此在大纲视图中它显示为一个节点而不是五个。 组合零件将有助于使大纲视图更易于管理,并使零件选择和操作方式更加高效。

组合网格还可以减少对 CPU 和 GPU 的处理绘制调用的数量。 例如,当你组合了五个螺丝时,渲染时将只有一个绘制调用,而不是五个绘制调用。 这有效地帮助提高你的 FPS。 最后要注意的一件事是,组合网格后,UV 壳将全部移动到一个新的 UV 集,该集与壳重叠。 打开 UV 编辑器来组织 UV 布局。

9、重新拓扑模型

重新拓扑是通过更优化的几何形状改善网格边缘流的过程。 这一步尤其重要,你需要将面数从数百万减少到数百。 但是,如果你在不先生成 LOD 的情况下开始应用重新拓扑工具,则重新拓扑可能会导致不正确的边流出现错误。 确保首先使用 LOD 生成器或 Autodesk Maya 的“减少网格”工具来减少面数。 较少的面数有助于软件最大限度地减少 CPU 使用率并加快重新网格划分过程和准确性。

10、删除不必要的物体

删除可视化中不需要的部分是实时优化 3D 模型的另一种好方法。 这包括额外的节点、网格、材质和纹理,这些都会增加文件大小并使您的项目难以实时渲染。 例如,在汽车模型的可视化中,移除大量内部零件(例如螺钉或电线)将显着降低文件的复杂性和大小,从而使其更适合实时可视化。 移除螺钉等结构部件不会影响模型的完整性,因为机械和物理属性不适用于游戏引擎。

11、优化 VR 3D 文件,最终想法

我们希望本指南在你优化 VR 可视化项目的 3D 模型时有所帮助。 正如你所看到的,在优化 VR 3D 文件时需要考虑许多小细节。 随着 3D 文件变得越来越复杂,良好优化的好处变得更加明显。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/449995.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MATLAB 】 EMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码,请转文末观看代码获取方式~ 展示出图效果 1 EMD信号分解算法 EMD 分解又叫经验模态分解,英文全称为 Empirical Mode Decomposition。 EMD 是一种信号分解方法,它将一个信号分解成有限个本质模态函数 (EMD) 的和&#xff0c…

马斯克宣布本周开源AI助手Grok;Gemini 1.5:多模态理解

🦉 AI新闻 🚀 马斯克宣布本周开源AI助手Grok 摘要:马斯克通过X平台宣布,其人工智能公司xAI计划本周开源人工智能助手Grok。此前,马斯克因OpenAI及其CEO阿尔特曼违反了公司成立协议—推动AI技术为人类福祉而非利润而起…

Linux 多进程开发(上)

第二章 Linux 多进程开发 2.1 进程概述2.2 进程状态转换2.3 进程创建2.4 exec 函数族2.5 进程控制 网络编程系列文章: 第1章 Linux系统编程入门(上) 第1章 Linux系统编程入门(下) 第2章 Linux多进程开发(…

PCL 约束Delaunay三角网(版本二)

目录 一、算法概述二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法概述 PCL 点云Delaunay三角剖分一文给出了PCL中Delaunay三角网算法的基础用法。本文在基础用法的基…

python 蓝桥杯 之 字符串

文章目录 题目一find(str,start,end) 函数 题目一 find(str,start,end) 函数 在Python中,find()函数用于在字符串中查找子字符串,并返回第一次出现的子字符串的索引。如果找不到子字符串,则返回-1。find()函数的语法如下: str.f…

少儿编程机器人技术架构解析与实现流程

随着科技的飞速发展,少儿编程机器人成为了越来越受欢迎的教育工具,为孩子们提供了学习编程的新途径。在这篇文章中,我们将深入探讨少儿编程机器人的技术架构和实现过程,揭示背后的技术原理和开发策略。同时,我们也将介…

visual studio 将编译后的dll等文件自动复制到指定目录

编译后的文件dll等总要手动复制到指定目录下,为了解决这一繁琐的操作,可以直接设置在编译完成后,自动复制到目标目录 - 在解决方案资源管理器,选中项目右键-》选中属性-》在弹出的面板选择生成事件 - 在后期生成事件命令行里填写…

Vue3全家桶 - VueRouter - 【3】嵌套路由【children】

嵌套路由【children】 如果在路由视图中展示的组件包含自己的路由占位符(路由出口),则此处会用到嵌套路由;如图所示:点击关于链接,则会展示About组件,在其组件中又包含了路由链接和路由占位符&…

Spring Cloud Alibaba微服务从入门到进阶(一)

Springboot三板斧 1、加依赖 2、写注解 3、写配置 Spring Boot Actuator Spring Boot Actuator 是 Spring Boot 提供的一系列用于监控和管理应用程序的工具和服务。 SpringBoot导航端点 其中localhost:8080/actuator/health是健康检查端点,加上以下配置&#xf…

用链表实现顺序表的插入和删除操作(操作封装在函数中)

#include <iostream> using namespace std; struct node{int val;node * next; }; void print(node * head){if(headNULL ||head->nextNULL){cout<<"链表中已经无元素";return;}cout<<"打印列表:";node * phead->next;while(p){co…

安卓bp文件详解

概念 Android.bp文件是安卓构建系统&#xff08;Android Build System&#xff09;中使用的构建描述文件&#xff0c;它用于定义Android项目中的模块、库、应用等构建规则&#xff0c;该文件使用 Blueprint 语言&#xff0c;是 Soong 构建系统的一部分。 Soong则是专为Android…

vue+elementUI用户修改密码的前端验证

用户登录后修改密码&#xff0c;密码需要一定的验证规则。旧密码后端验证是否正确&#xff1b;前端验证新密码的规范性&#xff0c;新密码规范为&#xff1a;6-16位&#xff0c;至少含数字/字母/特殊字符中的两种&#xff1b;确认密码只需要验证与新密码是否一致&#xff1b; 弹…

VMware17.5.1导入x.ova格式虚拟机

1、用的是2024年2月发布的VMware17.5.1 pro、导入的是VisualBox制作的ova。 2、VMware导入ova后&#xff0c;能正常进入虚拟机&#xff0c;并正常运行。 3、注意导入过程中会提示一个选择窗口&#xff0c;务必要点击“重试”&#xff0c;不要点击取消。

【JAVA重要知识 | 第七篇】Java异常知识总结(声明、抛出、捕获异常)

7.Java异常知识总结&#xff08;声明、抛出、捕获异常&#xff09; 7.1异常定义 在程序运行过程中&#xff0c;如果JVM检测出一个不可能执行的操作时&#xff0c;就会出现运行时错误&#xff08;runtime error&#xff09;。在Java中&#xff0c;运行时错误会作为异常抛出。异…

Power Apps 学习笔记 -- Action

文章目录 1. Action 简介2. Action 配置3. 待补充 1. Action 简介 Action基础教程 : Action概述 操作Action: 1. 操作Action类似于工作流Workflow&#xff0c;提供一些重用性的操作&#xff0c;允许工作流或其他Web服务端点调用(例如javascript). 2. Action 类似于c#当中的一个…

【电路笔记】-晶体管作为开关

晶体管作为开关 文章目录 晶体管作为开关1、概述2、截止区域3、饱和区域4、示例5、晶体管开关类型及应用5.1 数字逻辑晶体管开关5.2 PNP晶体管开关5.3 达林顿晶体管开关6、总结1、概述 晶体管开关可用于通过使用处于饱和或截止状态的晶体管来打开或关闭低压直流设备(例如 LED…

基于PLC的轨检小车控制器设计

摘要&#xff1a; 本文提出了轨道检测车的总体设计方案&#xff0c;首先设计出轨检车总体结构&#xff0c;轨检车主要结构有纵梁、横梁、行走机构、导向机构、支撑架、控制计算机、电机等组成。接着对电机进行选型&#xff0c;选择合适的步进电机及与其相匹配的驱动器来给轨检…

web端功能测试

web端功能测试 web项目环境说明环境的定义环境(服务器)的组成面试题&#xff1a;你们公司有几套环境 熟悉商城项目信息来源商城项目的核心业务商城项目的核心功能模块 测试流程的应用01需求评审02计划编写03设计用例04用例执行05缺陷管理06测试报告 商城项目测试01发货业务02评…

【CV论文阅读】【计算机视觉中的Transformer应用综述】(1)

0.论文摘要 摘要——自然语言任务的Transformer model模型的惊人结果引起了视觉社区的兴趣&#xff0c;以研究它们在计算机视觉问题中的应用。在它们的显著优点中&#xff0c;与递归网络例如长短期记忆&#xff08;LSTM&#xff09;相比&#xff0c;Transformer能够模拟输入序…

基于ACM32 MCU的两轮车充电桩方案介绍,有利于打造高效安全的电池管理

随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决两轮车…