第二课 Model模型资源导入设置检查与优化

上期我们学习了最简单的audio音效的优化,接下来我们继续model模型资源的优化,我将汇总各路大神关于模型优化的思路和方法供你和我学习。

首先我们还是要把我们优化的目标重申一遍:

优化的目标

1.文件体积尽可能小

2.内存占用尽可能小

3.画质够用

DCC中模型要求

  • Unity 支持多种标准和专有模型文件格式(DCC)。Unity 内部使用 .fbx 文件格式作为其导入链。最佳做法尽可能使用 .fbx 文件格式,并且不应在生产中使用专有文件格式。
  • 优化原始导入模型文件,删除不需要的数据
  1. 统一单位
  2. 导出的网格必须是多边形拓扑网格,不能是贝塞尔曲线、样条曲线、NURBS、NURMS、细分曲面等
  3. 烘培Deformers,在导出之前,确保变形体被烘培到网格模型上,如骨骼形变烘培到蒙皮权重上
  4. 不建议模型使用到的纹理随模型导出
  5. 如果你需要导入blend shape normals,必须要指定光滑组smooth groups
  6. DCC导出面板设置, 不建议携带场景信息导出,如不建议导出摄像机、灯光、材质等信息,因为这些的信息与Unity内默认都不同。除非你自己为某DCC做过自定义导出插件。

Unity模型导入流程

原始模型文件对性能的影响点

  • 最小化面数,不要使用微三角形(一定要使用lod对原始模型进行调整),三角面尽量分布尽量均匀
  • 合理的网络拓扑和平滑组,尽可能是闭包
  • 尽量少的使用材质个数 ,材质的增多,同样会使shader和贴图的暴涨
  • 尽可能少的使用蒙皮网格
  • 尽可能少的骨骼数量, 过多的骨骼数量后期可能会导致CPU和GPU的瓶颈
  • FK与IK节点没分离,unity不支持导入的ik骨骼,导出时ik骨骼节点应删除

Unity模型的设置面板:

Model界面

Scene:场景级属性,例如是否导入灯光和照相机,以及使用什么比例因子。

Scale Factor:缩放因子(也就是模型导入后大小如果小了或者大了在这里直接改是相当于该模型的大小的,而且在scale那栏里不会有缩放数值)

Convert Units:单位转换(unity默认单位为米,用咱们三维软件做的时候单位不统一的情况下,在这里她会执行一遍单位转换,默认是勾着的)

Import BlendShapes:是否导入BlendShape表情/混合形状。BlendShape表情,主要工作量在美术,美术制作好表情动画之后,导入Unity中按照下面设置播放即可。美术方面:美术额外导出一个FBX,带有蒙皮信息、骨骼动画只保留一个造型、单独面部的动画信息(Morphing),经过测试,只有美术网格、骨骼、蒙皮、Morphing动画一起导出来的Fbx才能保留表情动画信息。导入到Unity中,基础模型要开启Import BlendShape,对应的面部SkinnedMeshRenderer上会多出BlendShape的配置(调整这些值就可以看到表情变化了)。

Import Visibility:可见性是否导入(在编辑模型导出之前可以隐藏模型,隐藏模型选上他了还是可以导出来,勾选上这个在模型拖入场景时,她会显示为隐藏状态);

Import Cameras:摄像机是否导入(在3D软件打好摄像机了,摄像机的信息会存在fbx里)

Import Lights:灯光信息是否导入;(在3D软件打好灯光了,灯光的信息会存在fbx里)

Preserve Hierarchy:保留层次结构(即使此模型只有一个根,也要始终创建一个明确的预制根。通常,FBX 导入会从模型中剥离所有空的根节点作为优化策略。但是,如果您有多个FBX文件,且它们具有相同层次结构的某些部分,则可以使用此选项保留原始层次结构。例如,file1.fbx包含一个装备,而Mesh和file2.fbx包含相同的装备,但仅包含该装备的动画。如果在未启用此选项的情况下导入file2.fbx,则Unity会剥离根节点,层次结构不匹配,并且动画会中断。)


Mesh:网格的属性。

Mesh Compression:设置压缩率级别以减小网格的文件大小。通过使用网格边界和每个组件较低的位深度来压缩网格数据,增加压缩率会降低网格的精度。最好将其调高到尽可能高的水平,而网格物体看起来与未压缩版本没有太大不同。这对于优化游戏大小很有用。(off:不使用压缩;Low:使用低压缩率;Medium:使用中等压缩比;High:使用高压缩比。)

Read/Write Enabled:启用此选项后,Unity会将Mesh数据上传到GPU可寻址的内存,但也将其保留在CPU可寻址的内存中。这意味着Unity可以在运行时访问Mesh数据,并且您可以从脚本中访问它。例如,如果您要按程序生成网格,或者要从网格复制某些数据,则可能要执行此操作。禁用此选项后,Unity会将Mesh数据上传到GPU可寻址的内存,然后将其从CPU可寻址的内存中删除。默认情况下,此选项是禁用的。在大多数情况下,要节省运行时内存使用量,请禁用此选项。

Optimize Mesh:确定网格中三角形的排列顺序,以提高GPU性能。(Nothing:没有优化;Everything:一切让Unity重排多边形和顶点的顶点和索引。这是默认值。Polygon Order:多边形排序仅对多边形重新排序。Vertex Order:顶点顺序仅对顶点重新排序。)

Generate Colliders:启用自动生成网格碰撞器(mesh collider)。


Generate :与几何相关的属性,用于处理拓扑,UV和法线。

Keep Quads:启用此选项可阻止Unity将具有四个顶点的多边形转换为三角形。例如,如果您正在使用“镶嵌着色器”(Tessellation Shaders),则可能要启用此选项,因为镶嵌四边形可能比镶嵌多边形更有效。Unity可以导入任何类型的多边形(三角形到N-gon)。无论此设置如何,具有四个以上顶点的多边形始终会转换为三角形。但是,如果网格具有四边形和三角形(或将N形转换为三角形),则Unity会创建两个子网格来分隔四边形和三角形。每个子网格仅包含三角形或仅包含四边形。提示:如果要从3ds Max将四边形导入Unity,则必须将其导出为可编辑多边形。

Weld Vertices:合并在空间上具有相同位置的顶点,但前提是它们在整体上具有相同的属性(包括UV,法线,切线和顶点颜色)。通过减少网格的总数,可以优化网格上的顶点数。默认情况下启用此选项。在某些情况下,导入网格物体时可能需要关闭此优化。例如,如果您故意有重复的顶点在网格中占据相同位置,则您可能更喜欢使用脚本来读取或操纵单个顶点和三角形数据。

Index Format:定义网格索引缓冲区的大小。注意:出于带宽和内存存储大小的原因,您通常希望将16位索引保留为默认值,并且在必要时仅使用32位,这是“自动”选项所使用的。(Auto:让Unity根据网格顶点数来决定在导入网格时是使用16位索引还是32位索引。这是在Unity 2017.3及更高版本中添加的资产的默认设置。16bit:导入网格时使用16位索引。如果网格较大,则将其划分为<64k个顶点块。这是Unity 2017.2或更早版本中创建的项目的默认设置。32bit:导入网格时使用32位索引。如果您使用的是基于GPU的渲染流水线(例如,使用计算着色器三角形剔除),使用32位索引可确保所有Mesh都使用相同的索引格式。这减少了着色器复杂性,因为它们只需要处理一种格式。)

Legacy Blend Shape Normals:计算法线的旧方法(版本2017.1之前)。在某些情况下,与当前实施方式相比,它给出的结果略有不同。这是所有FBX预制件的默认设置在将项目迁移到最新版本的Unity之前导入。

Blend Shape Normals(2019版本):定义是否以及如何计算混合形状的法线。使用与“法线”属性相同的值。

Normals:定义是否以及如何计算法线。这对于优化游戏大小很有用。(Import:从文件导入法线‘’这是默认选项。如果文件不包含法线,则将对其进行计算。Calculate:计算根据法线模式,平滑度源和平滑角(如下)计算法线。None:禁用法线。如果网格既不是法线贴图也不是实时光照的影响,则使用此选项。)

Normals Mode:定义Unity如何计算法线。仅在将法线设置为计算或导入时可用。(Unweighted Legacy:计算法线的旧方法(版本2017.1之前)。在某些情况下,与当前实施方式相比,它给出的结果略有不同。这是所有FBX预制件的默认设置在将项目迁移到最新版本的Unity之前导入。Unweighted:法线不加权。Area Weighted:法线由面的面积大小加权。Angle Weighted:法线由每个面上的顶角大小加权。Area and Angle Weighted:法线由面的面积和每个面的顶角加权。这是默认选项。)

Smoothing Angle:控制是否为硬边分割顶点:通常,较高的值会减少顶点。注意:仅在非常光滑的物体或非常高的多边形模型上使用此设置。否则,最好在3D建模软件中手动进行平滑处理,然后将“法线”选项设置为“导入”(如上)进行导入。由于Unity的硬边仅基于一个角度,所以您可能会错误地对模型的某些部分进行平滑处理。仅在将法线设置为计算时可用。

Tangents:定义应如何导入或计算顶点切线。仅在将法线设置为计算或导入时可用。(Import:如果将法线设置为导入,则从FBX文件导入顶点切线。如果“网格”没有切线,则它不适用于法线贴图着色器。计算切线空间使用MikkTSpace计算切线。Calculate Tangent Space:如果“法线”设置为“计算”,则这是默认选项。Calculate Legacy:使用传统算法计算切线。Calculate Legacy - Split Tangent:使用传统算法计算切线,并在UV图表上进行分割。如果法线贴图使用此网格上的接缝破坏了照明。这通常仅适用于字符。None:不导入顶点切线。网格没有切线,因此不适用于法线贴图着色器。)

Swap UVs:交换网格中的UV通道。如果漫反射纹理使用光照贴图中的UV,请使用此选项。Unity最多支持八个UV通道,但并非所有3D建模应用程序都导出两个以上的通道。

Generate Lightmap UVs:为光照贴图创建第二个UV通道。


Rig

这一栏也就是我们俗称的骨骼
Animation Type有四个选项,分别是None/Legacy/Generic/Humanoid

  • None:没有骨骼(静态物件就选这个)
  • Legacy:使用旧版动画系统。与Unity 3.x及更早版本一样,导入和使用动画。

  • Generic:如果您的装备不是类人动物(四足动物或要进行动画处理的任何实体),请使用通用动画系统。Unity选择一个根节点,但是您可以标识另一个骨骼作为“根”节点代替。(用自己的骨骼系统分类)
  • Humanoid:如果您的装备是类人动物(它有两条腿,两条手臂和一个头),请使用类人动物动画系统。Unity通常会检测骨架并将其正确映射到头像。在某些情况下,您可能需要更改“头像定义”并手动配置映射。(用unity通用的四足动物骨骼分类,可以动画通用。)
Animation

Materials

Material Creation Mode:里面选项有None、Standard、Import via MaterialDescription (Experimental)

  • None:不导入材质
  • Standard:导入材质用标准材质球,也就是Standard
  • Import via MaterialDescription (Experimental):根据Fbx里面的材质信息分析用的什么材质,比如 Autodesk Interactive


Location:

  • Use External Materials (Legacy):使用外部材质,也就是她会直接导出材质到当前materials文件夹
  • Use Embedded Materials:嵌入材料,就和prefab似的,可以手动赋予。

Extract Textures和Extract Materials 就是导出材质和贴图。
导出贴图就是在导出FBX时候勾选了 Embed Media 的时候会显示,直接从FBX里导出里面的贴图

Extract Materials 是Location选择Use Embedded Materials时有效。因为刚导入的FBX材质都会在FBX内部,发现不能修改,也不建议这么做,所以需要手动导出来或者手动赋予一个材质。
下面On Demand Remap部分就是一些导出材质或者索引材质的命名规则了。导出之前一定要先设置这部分

Naming这部分就是命名了

  • By Base Texture Name:使用主贴图命名
  • From Model's Material:使用原本的材质球命名
  • Model Name Model's Material:使用模型命名+材质命名
  • Search部分是下面Search and Remap按钮查找以有材质自动挂到材质上的索引规则

Local Materials Folder :当前的Materials

  • Recursive-Up :从当前文件夹往Assets根目录查找
  • Project-Wide:项目所有的位置

下面一堆材质部分就是Location选择Use Embedded Materials时会显示 用来察看已挂在的材质和手动挂载用;

优化过程

  • 尽可能的将网格合并到一起
  • 尽可能使用共享材质
  • 不要使用网格碰撞体
  • 不必要不要开启网格读写
  • 使用合理的LOD级别
  • Skin Weights受骨骼影响个过多
  • 合理压缩网格
  • 不需要rigs和BlendShapes尽量关闭
  • 如果可能,禁用法线或切线
  • 多套模型

以下是在处理导入Unity的网格(模型)时要记住的几点。可以根据设置来改进导入模型数据的性能。应注意以下四点。

  • 已启用读写Read/Write Enabled
  • 顶点压缩Vertex Compression
  • 网格压缩Mesh Compression
  • 优化网格数据Optimize Mesh Data
1.Read/Write Enabled

第一个网格注释是Read/Write Enabled。模型检查器中的这个选项在默认情况下是禁用的。

如果你不需要在运行时访问网格,你应该禁用它。具体来说,如果模型被放置在Unity中并且只用于播放AnimationClip, Read-/Write Enabled可以禁用。 启用读/写将消耗两倍的内存,因为CPU可访问的信息存储在内存中。请检查一下,因为简单地禁用它将节省内存。

2.Vertex Compression

顶点压缩是一个将网格顶点信息的精度从float改为half的选项。这可以在运行时减少内存使用和文件大小。

但是,请注意,在以下条件下顶点压缩是禁用的 •已开启读写功能 •Mesh Compression是启用的 •启用动态批处理和可适应的网格(少于300个顶点和少于900个顶点属性)

3.Mesh Compression

网格压缩允许你改变网格的压缩比。压缩比越高,文件大小越小,占用的存储空间越少。压缩后的数据在运行时解压缩。因此,运行时的内存使用不会受到影响。 网格压缩提供了四种压缩设置。

  • Off:未压缩
  • Low:低压缩
  • Medium:中等压缩
  • High:高压缩

4.Optimize Mesh Data

优化网格数据是一个功能,自动删除不必要的顶点数据从网格。不必要的顶点数据将根据使用的着色器自动确定。这将减少运行时的内存和存储。 可以在“Project Settings -> Player ”下的“Other ”中进行设置。但是可能会导致模型的动画不正确;

这个选项很有用,因为它会自动删除顶点数据,但要注意,它可能会导致意想不到的问题。例如,在运行时切换材质和着色器时,访问的属性可能会被删除,导致不正确的渲染结果。当只绑定网格资源时,不正确的材质设置可能会导致不必要的顶点数据。这在只提供网格参考的情况下很常见,例如在粒子系统中。

5.如果模型未使用法线、切线、光照UV等,可以设置为None或取消勾选;

6.勾选Rig中的Optimize Game Objects可以优化模型;
7.没有动画的模型取消勾选Animation中的Import Animation

8.通过Anim.Compression选择合适的动画压缩策略;

今天是2024年11月21日

重复一段毒鸡汤来勉励我和你

你的对手在看书

你的仇人在磨刀

你的闺蜜在减肥

隔壁的老王在练腰

而你在干嘛?

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米路由器用外网域名访问管理界面

本文在Redmi AX3000 (RA81)设置&#xff0c;其他型号路由器的管理界面端口可能各不相同。 开始之前需要保证路由器SSH功能正常&#xff0c;如果没有SSH可以参考这里。 1. 给WAN口开放80端口 可以通过下载mixbox的firewall插件或者其他防火墙插件开放端口。 2. 把域名解析到路…

一次需升级系统的wxpython安装(macOS M1)

WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景&#xff1a;想在macos安装Robot Framework &#xff0c;显示pip3不是最新&#xff0c;更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…

Leetcode 求根节点到叶节点数字之和

使用深度优先搜索 DFS 来做 我提供的代码使用的是 深度优先搜索&#xff08;DFS&#xff0c;Depth-First Search&#xff09; 算法。以下是具体的算法思想和实现步骤的解释&#xff1a; 算法思想 树的路径代表数字&#xff1a; 树中每条从根节点到叶子节点的路径可以看作一个整…

IDEA:2023版远程服务器debug

很简单&#xff0c;但是很多文档没有写清楚&#xff0c;wocao 一、首先新建一个远程jvm 二、配置 三、把上面的参数复制出来 -agentlib:jdwptransportdt_socket,servery,suspendn,address5005 四、然后把这串代码放到服务器中&#xff08;这里的0.0.0.0意思是所有IP都能访问&a…

计算机毕业设计 | SpringBoot+vue汽车资讯网站 汽车购买咨询管理系统(附源码+论文)

1&#xff0c;绪论 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理汽车资讯网站的相关信息成为必然…

RedHat系统配置静态IP

1、执行nmtui命令进入字符配置界面如下图所示 2、选择编辑连接进入 3、选择编辑进入后&#xff0c;将IPv4设置为手动模式后&#xff0c;选择显示后进行ip地址、网关、DNS的配置&#xff0c;配置完成后选择确定退出编辑 4、进入主界面后选择启用连接进入后&#xff0c;选择启用&…

Android开发教程案例源码分享-匹配动画多个头像飘动效果

Android开发教程案例源码分享-匹配动画多个头像飘动效果 匹配往往出现多个头像飘动&#xff0c;吸引人点击&#xff0c;有时出现的位置还不固定 一、思路&#xff1a; 用MotionLayout 二、效果图&#xff1a; 看视频更直观点&#xff1a; Android开发教程案例源码分享-匹配…

设计LRU缓存

LRU缓存 LRU缓存的实现思路LRU缓存的操作C11 STL实现LRU缓存自行设计双向链表 哈希表 LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;缓存是一种常见的缓存淘汰算法&#xff0c;其基本思想是&#xff1a;当缓存空间已满时&#xff0c;移除最近最少使…

SAM-Med2D 训练完成后boxes_prompt没有生成mask的问题

之前对着这这篇文章去微调SAM_Med2D(windows环境),发现boxes_prompt空空如也。查找了好长时间问题SAM-Med2D 大模型学习笔记&#xff08;续&#xff09;&#xff1a;训练自己数据集_sam训练自己数据集-CSDN博客 今天在看label2image_test.json文件的时候发现了一些端倪: 官方…

39页PDF | 毕马威_数据资产运营白皮书(限免下载)

一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性&#xff0c;提出了数据资产运营的“三要素”&#xff08;组织与意识、流程与规范、平台与工具&#xff09;和“四重奏”&#xff08;数据资产盘点、评估、治理、共享&#xff09;…

在 macOS 和 Linux 中,波浪号 `~`的区别

文章目录 1、在 macOS 和 Linux 中&#xff0c;波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中&#xff0c;波浪号 ~ 在 macO…

【LeetCode每日一题】——485.最大连续 1 的个数

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时空频度】九【代码实现】十【提交结果】 一【题目类别】 数组 二【题目难度】 LeetCode 三【题目编号】 485.最大连续 1 的个数 四【题目描述】 给定…

windows 操作系统下载 Android源码教程

前言 开始我是装了hyber-v 虚拟机ubuntu 的&#xff0c;然而非常的卡顿且难用。因此我尝试在windows上使用repo&#xff0c;因此有了这篇文章 补充 第二天发现编译源码也需要linux命令因为源码中的很多脚本都是.sh的 因此最终通过安装WSL解决&#xff08;在window应用商店就…

单片机进阶硬件部分_day2_项目实践

设计要求 从绘制原理图到画PCB板&#xff0c;完成智能云衣柜项目 STM32 &#xff08;Modbus&#xff09;云IOT衣物云端管理 华为PCB布线规范 基于IoT的智享家主控系统 步骤分析 需求分析 器件选型绘制原理图&#xff08;器件连接&#xff09;PCB布局、布线泪滴、铺铜、添加丝印…

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…

Flutter:photo_view图片预览功能

导入SDK photo_view: ^0.15.0单张图片预览&#xff0c;支持放大缩小 import package:flutter/material.dart; import package:photo_view/photo_view.dart;... ...class _MyHomePageState extends State<MyHomePage>{overrideWidget build(BuildContext context) {return…

【Linux】详解僵尸进程与孤儿进程(Z僵死状态引发的内存泄漏与处理办法)

&#x1f308; 个人主页&#xff1a;谁在夜里看海. &#x1f525; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 丢掉幻想&#xff0c;准备斗争 目录 引言 一、僵尸进程 1.子进程的创建与退出 2.进程表 3.僵尸状态产生 4.直观感受一下&#xff1a; 二、…

基于微信小程序的科学健身助手的设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

【Pytorch】torch.utils.data模块

torch.utils.data模块主要用于进行数据集处理&#xff0c;是常用的一个包。在构建数据集的过程中经常会用到。要使用data函数必须先导入&#xff1a; from torch.utils import data 下面介绍几个经常使用到的类。 torch.utils.data.DataLoader DataLoader(dataset, batch_…

Qt在designer设计师界面使用QSplitter

QSplitter控件是解决软件不同分辨率自适应布局的好帮手之一&#xff0c;该控件无法在控件列表找到&#xff0c;使用条件较为隐蔽 环境 qt5.12.12 MSVC2017 1.新建一个qt项目&#xff0c;初始自带Mainwindow&#xff0c;拖两个qwidget进来&#xff0c;注意此时centralWidget处于…