为Meta Spark准备3D模型

有许多工具可以帮助你为 Meta Spark Studio 创建 3D 对象,包括 Cinema4D、Blender 和 3ds Max。你还可以使用 Meta Spark Toolkit 优化 Blender 对象。

在本指南中,我们将介绍正确的设置,以便你可以成功地为 Meta Spark Studio 准备对象,并确保它们在你的体验中更有效地工作。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模 

1、缩放和定位

以下是在缩放和定位对象以进行导出时需要牢记的要求列表。导入后,你还可以启用 Meta Spark Studio 真实世界比例设置。

  • 以米为单位导出你的模型。Meta Spark Studio 假设模型以米为单位上传。
  • 使用内置的 3D 测量工具检查对象的尺寸,并根据需要放大和缩小对象以匹配对象的真实尺寸或所需尺寸。
  • 保持所有 3D 对象不小于 1 厘米且不大于 5 米。用户可能无法与超出这些尺寸的对象进行交互。
  • 将对象的原点设置为其几何体的中心。
  • 正确定位和缩放对象后,不要忘记将对象的新变换值设置为默认值。在导出对象之前执行此操作。

左侧的图像是导入的鸟类对象,但比例不正确。右侧的图像显示了一只正确缩放的鸟。

Meta Spark 界面中错误和正确缩放的鸟

2、网格

3D 对象网格中的三角形数量或“三角形数量”会影响性能。最好将三角形数量保持在尽可能低的水平。每个对象的最大三角形数量应低于 50,000。将效果中所有对象的总三角形数量保持在 150,000 以下。

以下是减少三角形数量的一些技巧:

  • 如果不需要可见,请从网格中删除任何内部几何图形:如果你的对象是戴帽子的角色,请删除隐藏在视图之外的头部部分。
  • 修复几何图形:尝试删除松散的几何图形、三角形和顶点,制作平面,删除重叠的面并合并重叠的顶点。这将减少三角形数量和产生伪影(意外像素化和其他图形效果)的可能性,尤其是在使用 3D 扫描时。如果你在 Blender 中工作,Meta Spark Toolkit 将为你清理网格。
  • 将网格中高度详细的部分转换为纹理:如果你正在制作花冠并且花朵不会聚焦,请将它们映射到低多边形凹盘上,而不是导入带有每个花瓣和所有柱头的整个 3D 花朵。你可以在不需要太多细节的选定区域中设置较低的网格密度。

在下图的右侧,可以删除构成短裤下方角色臀部和腿部的几何图形,因为用户看不到它们。

2 个 3D 模型,其中短裤下方的几何图形在右侧模型中突出显示

你还可以通过以下方式优化网格:

  • 尽可能将网格合并在一起。这将减少效果中的对象数量,并通常提高性能。
  • 将多边形保持在三角形和四边形中以避免伪影。

3、UV 贴图

UV 贴图是 3D 对象表面的 2D 表示。要获得最佳纹理效果,UV 贴图过程必须成功。要优化该过程:

  • 手动生成 UV 贴图,而不是自动生成。
  • 将 UV 外壳保持在最低限度,不要重叠,否则会出现伪影。
  • 在外壳之间留出填充。例如,1K 纹理的外壳之间应有 8 像素的填充。
  • 仅对 3D 对象使用一个 UV 贴图。

左侧的图像显示了具有重叠 UV 的 UV 贴图。右侧图像是组织良好的 UV 贴图。

两个 UV 贴图,具有重叠和不重叠的 UV

4、材质

创建材料时:

  • 优先考虑标准和平面着色器,而不是 PBR 着色器,以获得更高的性能。
  • 对于需要它的逼真 3D 模型,使用基于物理的材料 (PBR) 和环境纹理。
  • 尽可能少使用材料。
  • 尽可能合并材料以提高性能。
  • 使用着色器时,简单是最好的。加、乘、减函数比其他函数(pow、exp、log、cos、sin、tan)占用的资源更少。

5、纹理

GPU 内存是一种宝贵的资源,因此高效思考会让你的内容和其他内容的帧速率受益。要实现有趣而高效的纹理结果:

  • 在 sRGB 空间中使用纹理,最大分辨率为 1024 x 1024 像素,并且只使用你需要的大小。
  • 为了获得更好的性能,请以 2 的幂(64x64、128x128、256x256、512x512、1024x1024)制作纹理。
  • 对于简单对象,请尝试使用顶点颜色和平面着色以减少对纹理内存的依赖。你可以使用顶点颜色在 Spark 中为视觉交互性制作动画。
  • 尽可能利用纹理图集:将多个纹理组合成一个图像,以减少纹理和绘制调用的总数。更突出的英雄对象应该在你的图集中占用更多空间。
  • 可以更进一步,使用颜色通道打包来节省空间:将纹理信息编码到图像的各个颜色通道中,以便在逻辑中使用。专业提示:你可以通过这种方式使纹理单调,并动态更改其颜色或通过在顶部乘以颜色图来更改颜色。
  • 如果可能,请避免使用带有 alpha 通道的图像。这些图像比 RGB 图像消耗更多的 GPU 内存。你可以使用黑色背景和材质属性中的混合模式来实现类似的效果。
  • 如果使用 Adob​​e® Substance Painter® 纹理软件创建纹理,请使用 Meta Spark 模板使你的纹理兼容。
  • 对于具有重复图案的纹理,请导入较低分辨率的图像并使用 Meta Spark Studio 的视觉着色器和纹理平铺功能,而不是使用较大分辨率的图像。你还可以以独特的方式转换纹理以适当地重复使用它们。
  • 在将纹理带入 Spark 之前对其进行压缩,以更好地控制质量和灵活性。

在 AR 效果中很难实现具有逼真灯光的纹理,并且需要大量的处理能力。为减少对性能的影响:

  • 将照明直接烘焙到用于面部效果装饰的 3D 对象中,以暗示高光和阴影。
  • 将照明烘焙到静态(非移动)对象(如家具和配饰)中,以获得更逼真的效果
  • 使用柔和的灯光设置,不要使用强烈的高光或阴影。烘焙照明最适合光线、强度、颜色等在整个效果过程中不会发生变化的环境。
  • 将 MatCap(材质捕捉)反射环境纹理与平面着色器结合使用。
  • 不可以使用环境光将一个环境纹理用于所有 3D 对象,以便在场景中共享。

6、绑定和蒙皮

如果你正在构建动画 3D 对象,你将创建(装配)骨架并将网格附加(蒙皮)到骨架上,以控制对象移动时的变形方式。如果此过程未针对 Meta Spark 工作室进行优化,则动画的组件可能无法正常工作或性能不佳。

创建骨架时:

  • 虽然动画对象中可以使用的骨骼数量没有上限,但我们建议使用尽可能少的骨骼以减少对性能和大小的影响。少于 20 个是一个不错的开始。
  • 利用简单、直接动画的骨骼或“双骨架”装配导出到 Spark。Spark 无法理解约束和其他装配控件或高级设置。
  • 对骨骼使用一致的命名约定,并为每个单独的骨骼使用单独的名称。例如,左臂为 arm_L,右臂为 arm_R。
  • 使用 Z+ 向前和 Y+ 向上调整骨骼方向。
  • 在所有轴上将每个骨骼的比例设置为 1。
  • 以自然层次结构组织骨骼。Meta Spark Studio 将松散的骨骼视为空对象,不会将它们识别为变形器。

以下是两种可能的骨架层次结构。右侧图像是最佳实践示例。

组织良好和组织不良的骨架层次结构

不建议将下面的骨架层次结构用于动画 3D 骨架对象。

组织不良的骨架层次结构


蒙皮过程的一些一般准则包括:

  • 将装备绑定到网格时,将每个顶点的影响数限制为四个。这是 Meta Spark Studio 出于性能原因支持的最大数量。如果您的对象不符合这些准则,则可能会在动画之前和动画期间产生伪影。
  • 确保骨骼处于预期位置以避免伪影。

左侧的图像是一只 3D 鸟,其骨架位置不正确。右侧图像显示了一个位置良好的骨架。

鸟模型上位置良好和位置不佳的骨架

7、动画

使用 Meta Spark Studio 中的程序动画可让你实时生成动画,同时保持项目大小较小。

在 Meta Spark Studio 之外向对象添加关键帧动画是创建更复杂和更详细的动作的不错选择,但它可能会增加文件大小。如果你需要使用关键帧动画:

  • 仅向标准属性(位置、比例和旋转)添加关键帧。
  • 不要向不需要动画的属性添加关键帧。例如,如果不需要,请不要向比例添加关键帧。
  • 请记住,自定义属性关键帧不会被导出。
  • 在你使用的 3D 软件中使用 24 fps(每秒帧数)的帧速率。

向 3D 对象添加复杂动画的另一种方法是创建动画剪辑并将其分配给 Meta Spark Studio 中的对象。你可以:

  • 使用 Autodesk® Maya® 中的 Game Exporter 插件等工具或 Blender 中的 NLA(非线性动画)操作来创建剪辑。
  • 在导入对象之前,你还应注意Meta Spark对文件格式和功能的要求和限制。

    原文链接:为Meta Spark准备3D模型 - BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

poi处理excel文档时,与lombok的@Accessors(chain = true)注解冲突

poi在反射封装数据时会判断set方法的返回是不是Void,加上Accessors会造成NoSuchMethodException异常

bash: git: command not found

在windows上重新安装Git之后,遇到cmd可以使用git命令,但是git bash中使用的git命令的时候,会提示: $ git bash: git: command not found 解决办法 找到用户目录下的.bash_profile和.bashrc文件,编辑打开,找…

DFA算法实现敏感词过滤

DFA算法实现敏感词过滤 需求:检测一段文本中是否含有敏感词。 比如检测一段文本中是否含有:“滚蛋”,“滚蛋吧你”,“有病”, 可使用的方法有: 遍历敏感词,判断文本中是否含有这个敏感词。 …

Java 正则表达式一口气讲完!b( ̄▽ ̄)d

Java 正则表达式元字符 Java正则表达式教程 - Java正则表达式元字符 元字符是在Java正则表达式中具有特殊含义的字符。 Java中的正则表达式支持的元字符如下: ( ) [ ] { } \ ^ $ | ? * . < > - ! 字符类 元字符 [和] 指定正则表达式中的字符类。 字符类是一组字…

(实战)WebApi第10讲:Swagger配置、RESTful与路由重载

一、Swagger配置 1、导入SwashBuckle.AspNetCore包 2、在.NET Core 5框架里的startup.cs文件里配置swagger 3、在.NET Core 6框架里的Program.cs文件里配置swagger 二、RESTful风格&#xff1a;路由重载&#xff0c;HttpGet()括号中加参数 &#xff08;1&#xff09;原则&…

【进阶sql】复杂sql收集及解析【mysql】

开发时会出现&#xff0c;必须写一些较复杂sql的场景 可能是给会sql的客户 提供一些统计sql 或是临时需要统计数据信息但是 开发一个统计功能有来不及的情况 也可能是报表系统组件 只支持 sql统计的情况 特地记录下这些sql 作为积累 substring 截取查询出的字符串&#xff…

心情追忆-AI分析报错

之前我独自开发了一个名为“心情追忆”的小程序&#xff0c;旨在帮助用户记录日常的心情变化及重要时刻。 项目需求来源->设计->前端(小程序)->后端->部署均由我一人完成. 上线一个月. 通过群聊分享等. 用户量也有了100多人. 我希望持续发展 由于项目的开发与测试…

Leetcode21:合并两个有效链表

原题地址&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示…

【Python · Pytorch】人工神经网络 ANN(中)

【Python Pytorch】人工神经网络 ANN&#xff08;中&#xff09; 6. 反向传播6.1 梯度下降法6.1.1 线搜索方法6.1.2 微分 & 导数6.1.3 偏导数6.1.4 Jacobian矩阵6.1.5 梯度 & 梯度下降法按维度介绍 6.1.6 面临挑战平原现象 & 振荡现象局部最小值鞍点梯度消失梯度爆…

时间序列预测(十)——长短期记忆网络(LSTM)

目录 一、LSTM结构 二、LSTM 核心思想 三、LSTM分步演练 &#xff08;一&#xff09;初始化 1、权重和偏置初始化 2、初始细胞状态和隐藏状态初始化 &#xff08;二&#xff09;前向传播 1、遗忘门计算&#xff08;决定从上一时刻隐状态中丢弃多少信息&#xff09; 2、…

基于springboot+小程序的汽车销售管理系统(汽车4)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 1、管理员实现了首页、个人中心、管理员管理、基础数据管理、论坛管理、公告信息管理、汽车管理、用户管理、轮播图信息等。 ​ 2、用户实现了注册、登录、首页、汽车类型、论坛、购物…

C++ | Leetcode C++题解之第522题最长特殊序列II

题目&#xff1a; 题解&#xff1a; class Solution { public:int findLUSlength(vector<string>& strs) {auto is_subseq [](const string& s, const string& t) -> bool {int pt_s 0, pt_t 0;while (pt_s < s.size() && pt_t < t.siz…

Android Preference浅析(设置Setting)

各位&#xff0c;好久不见&#xff0c;最近时间较为充裕&#xff0c;更新一下博客。 本篇在我的理解、认识范围内&#xff0c;讲述一下Android中的Preference&#xff08;破粉斯~&#xff09;这玩意&#xff0c;常用于项目中的设置模块中。在工作中我也主要负责了设置模块相关…

双指针问题解法集(一)

1.指针对撞问题&#xff08;利用有序数组的单调性衍生&#xff09; 1.1LCR 179. 查找总价格为目标值的两个商品 - 力扣&#xff08;LeetCode&#xff09;​​​​​​ 1.1.1题目解析 有序数组&#xff0c;找到和为price的两个元素&#xff0c;只需要一个解即可。 1.1.2算法…

根据提交的二维数据得到mysql建表和插入数据实用工具

根据提交的二维数据得到mysql建表和插入数据实用工具,这是重构版本(之前有过)。 会通过数据的长度&#xff0c;类型&#xff0c;是否数字&#xff0c;是否唯一等做判断&#xff0c;且每千条一个插入语句以优化性能。 <?php //整理与分享&#xff1a;yujianyue<1505859…

数据库连接池实现

目录 前提&#xff1a;如果我要操作多个表&#xff0c;那么就会产生冗余的JDBC步骤&#xff0c;另一个弊端就是每次都需要数据库连接对象&#xff08;Connection&#xff09;&#xff0c;获取效率低下&#xff0c;每次使用时都需要先进行连接 数据库连接池的特点&#xff1a; …

JavaEE初阶------网络编程续+传输层UDP协议介绍

文章目录 1.实现翻译服务器2.TCP的socket api使用3.初识网络编程3.1开发中常见的格式3.1.1行文本方式构造3.1.2xml格式表示3.1.3json处理格式3.1.4protobuffer格式 3.2传输层3.2.1UDP报文格式3.2.2校验和的说明3.2.3校验和的计算方法3.2.3.1CRC算法3.2.3.2MD5算法 1.实现翻译服…

python的数据结构列表方法及扩展(栈和队列)

python的数据结构 python的list方法 list.append() 添加一个元素到列表末尾。list,append(num)相当于a[len(a):] [num] a [1,2,3,4,5] a.append(6) print(a) a[len(a):] [7] print(a)list.extend() 添加指定列表的所有元素。list.extend(nums)相当于a a nums a [1,2,3]…

我与Linux的爱恋:基础IO 文件描述符重定向缓冲区

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;Linux的学习 文章目录 文件描述符文件描述符分配规则访问文件的本质 重定向原理缓冲区的理解 文件描述符 通过上述内容&#xff0c;我们知道使用 open 系统调用打开文件时&#xff0c;系…

Java每日刷题之二分算法

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 转化 通过题目时间复杂度为O(logN),我们就可以联想到二分算法&#xff0c;但是我们前面学到的算法&#xff0c;是查找出&#xff0c;有序数组里的值&#xff0c;并不是求其中的范围&a…