第二课 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日

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

你的对手在看书

你的仇人在磨刀

你的闺蜜在减肥

隔壁的老王在练腰

而你在干嘛?

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

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

相关文章

RabbitMQ实现异步下单与退单

前言&#xff1a; 在电商项目中的支付模块也是一个很重要的模块&#xff0c;其中下订操作以及退订操作就是主要的操作。其次的下单是同步下单&#xff0c;也就是第三方支付、数据库扣减、积分增加、等等其他业务操作&#xff0c;等待全部执行完毕后向用户返回成功响应请求。对…

macOS 无法安装第三方app,启用任何来源的方法

升级新版本 MacOS 后&#xff0c;安装下载的软件时&#xff0c;不能在 ”安全性与隐私” 中找不到 ”任何来源” 选项。 1. 允许展示任何来源 点击 启动器 (Launchpad) – 其他 (Other) – 终端 (Terminal)&#xff1a; 打开终端后&#xff0c;输入以下代码回车&#xff1a; …

微服务即时通讯系统的实现(服务端)----(1)

目录 1. 项目介绍和服务器功能设计2. 基础工具安装3. gflags的安装与使用3.1 gflags的介绍3.2 gflags的安装3.3 gflags的认识3.4 gflags的使用 4. gtest的安装与使用4.1 gtest的介绍4.2 gtest的安装4.3 gtest的使用 5 Spdlog日志组件的安装与使用5.1 Spdlog的介绍5.2 Spdlog的安…

欧洲新车安全评鉴协会(Euro NCAP)2026 年规程的 5 项关键更新

数十年来,欧洲新车安全评鉴协会为全球车辆安全评级树立了黄金标准。该协会向来以引领潮流著称,常常在法规强制要求之前数年就采用新的安全技术。 随着 2026 年欧洲新车安全评鉴协会的更新即将到来,汽车行业急切地想知道需要格外密切关注哪些特性和技术。 尽管欧洲新车安全…

Jenkins迁移数据目录

查看当前容器挂载的目录 [roottest-server01 ~]# docker inspect -f "{{.Mounts}}" jenkins [{bind /etc/localtime /etc/localtime true rprivate} {bind /opt/jenkins_data /var/jenkins_home true rprivate}]复制数据目录到数据盘 [roottest-server01 opt…

利用 TensorFlow Profiler:在 AMD GPU 上优化 TensorFlow 模型

TensorFlow Profiler in practice: Optimizing TensorFlow models on AMD GPUs — ROCm Blogs 简介 TensorFlow Profiler 是一组旨在衡量 TensorFlow 模型执行期间资源利用率和性能的工具。它提供了关于模型如何与硬件资源交互的深入见解&#xff0c;包括执行时间和内存使用情…

二叉树——输出叶子到根节点的路径

目录 代码 算法思想 例子 思维拓展 代码 int LeaveBit(Bitree T,int flag,int g) {if (!T) {return 0;}if (T->rchild NULL && T->lchild NULL) {//cout << "empty:" << T->data << endl;s.push(T->data);while (!s.emp…

PIL学习---彩色RGB图像按通道输出

要将 RGB 图像拆分为单独的 R、G、B 通道并分别展示&#xff0c;可以通过 PIL 中的 split() 方法将图像的三个通道分开&#xff0c;并使用 matplotlib 来显示每个通道的图像。效果如下图所示&#xff1a; 代码部分&#xff1a; from PIL import Image import matplotlib.pypl…

CSS实现实现当文本内容过长时,中间显示省略号...,两端正常展示

HTML 结构解析 文档结构: <ul class"con">: 一个无序列表&#xff0c;包含多个列表项。 每个 <li class"wrap"> 表示一个列表项&#xff0c;内部有两个 <span> 元素&#xff1a; <span class"txt">: 显示文本内容。<…

ROS VRRP软路由双线组网方式

虚拟路由冗余协议 Virtual Router Redundancy Protocol (VRRP)&#xff0c;MikroTik RouteROS VRRP 协议遵循 RFC 2338。 VRRP 协议是保证访问一些资源不会中断&#xff0c;即通过多台路由器组成一个网关集合&#xff0c;如果其中一台路由器出现故障&#xff0c;会自动启用另外…

设计编程网站集:简述可扩展性系统设计(笔记)

视频连接&#xff1a;简述可扩展性系统设计 三个关键原则 无状态 松散耦合 异步处理 扩展 负载均衡 缓存 分片

openCV与eigen两种方法---旋转向量转旋转矩阵

#include <Eigen/Dense> #include <opencv2/core/eigen.hpp> #include <opencv2/opencv.hpp> using namespace cv; using namespace std; int main() {// opencv 旋转向量cv::Vec3d rvec(1.0, 2.0, 3.0);cv::Mat rotation_matrix;cv::Rodrigues(rvec, rotati…

卷积运算和卷积定理

卷积运算 卷积运算是信号处理、图像处理和深度学习中的核心概念&#xff0c;用于表示两个函数之间的相互作用。它将一个函数通过滑动窗口的方式与另一个函数结合&#xff0c;产生一个新的函数&#xff0c;反映两者的重叠程度。 1. 定义 连续信号的卷积&#xff1a; 给定两个连…

【板间连接器焊接】

一、背景 近期工作需要,用到了AX7Z020核心板(黑金),官网链接:https://www.alinx.com/detail/271。 板子打好之后,遇到了焊接问题。对自身焊接技术还是比较自信的,直接上去焊接了2个连接器。拖锡搞了3小时后,放弃了。热风枪1分钟不到就把连接器吹下来了,看引脚90%都是…

低代码开发平台搭建思考与实战

什么是低代码开发平台&#xff1f; 低代码开发平台是一种平台软件&#xff0c;人们能通过它提供的图形化配置功能&#xff0c;快速配置出满足各种特定业务需求的功能软件。 具有以下特点&#xff1a; 提供可视化界面进行程序开发0代码或少量代码快速生成应用 什么是低代码产…

React Native 基础

React 的核心概念 定义函数式组件 import组件 要定义一个Cat组件,第一步要使用 import 语句来引入React以及React Native的 Text 组件: import React from react; import { Text } from react-native; 定义函数作为组件 const CatApp = () => {}; 渲染Text组件

ftdi_sio应用学习笔记 3 - GPIO

目录 1. 查找gpiochip 2. 打开GPIO 2.1 libgpiod库方式 2.2 系统方式 3. 关闭GPIO 3.1 libgpiod库方式 3.2 系统方式 4. 设置方向 4.1 libgpiod库方式 4.2 系统方式 5. 设置GPIO电平 5.1 libgpiod库方式 5.2 系统方式 6. 读取GPIO电平 6.1 libgpiod库方式 6.2 …

微信小程序登录注册页面设计(小程序项目)

需求 在微信小程序设计并实现登录页面&#xff0c;并填写相关登录注册函数 实现效果 代码实现 html代码 <view class"top" style"border-bottom-style: none;background-color:#FF8C69;"><!-- <view class"back" bind:tap"…

神经网络(系统性学习三):多层感知机(MLP)

相关文章&#xff1a; 神经网络中常用的激活函数 神经网络&#xff08;系统性学习一&#xff09;&#xff1a;入门篇 神经网络&#xff08;系统性学习二&#xff09;&#xff1a;单层神经网络&#xff08;感知机&#xff09; 多层感知机&#xff08;MLP&#xff09; 多层感…

Android 14 screenrecord录制视频失败的原因分析

文章目录 1. 权限问题2. 存储空间不足3. 命令被中断4. 目标路径问题5. Android 14 的新限制6. 文件系统同步问题7. 录制失败检查步骤总结&#xff1a; 在 Android 14 系统上&#xff0c;使用 screenrecord 命令录制视频后&#xff0c;生成的文件大小为 0&#xff0c;可能的原因…