# 如何压缩您的 VRChat 模型大小 # 模型大小与 VRChat 新限制 ### **什么是模型大小?** **压缩大小 / 下载文件大小:**下载时模型文件的大小。 **未压缩大小 / UNCOMPRESSED SIZE:**模型下载并解压缩到设备运行内存空间(RAM)后的总大小,。 **显存使用量 / 显存占用:**模型使用的显卡内存(VRAM)大小。有时也称为“VRAM 使用率”。(需要注意的是,当前 VRChat 的“显存占用”只统计贴图大小,不包含网格占用) ### **让我们举个例子:** [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/4ixAPefDW1zxOPvx-image.png)这是 VRChat 内的模型详情页面,其中 UNCOMPRESSED SIZE 指解压文件大小,下载文件大小指模型文件大小,显存占用即显存使用量; 您可以通过一些方法或插件(如 thry,lilAvatarUtils 等等)来在 Unity 内查看自己模型的大小。 ### **新模型大小标准是?** VRChat 官方发布了一个模型大小标准对比的表格数据,如下:
PC 最大指标 | 7 月 16 日前 | 7 月 16 日后 | 涨跌幅 |
未压缩大小(RAM 使用率) | 1200兆字节(MB) | 500兆字节(MB) | -41.6% |
压缩大小(下载大小) | 500兆字节(MB) | 200兆字节(MB) | -40% |
对应关系 | Alpha Is Transparency 关闭 | Alpha Is Transparency 打开 |
预览 | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/m5YzzmlbjArtuSIg-2024-07-06-033439.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/HtdsuBrXeNZ7BJ6X-2024-07-06-032731.png) |
有些着色器(例如:liltoon)会提供使用 Alpha 蒙版 来制作透明或半透明效果的选项。遇到此情况应该去修改贴图对应的材质球设置!
### **Generate Mipmaps / 生成 Mipmap:** 此选项用于生成一系列逐渐降低分辨率的贴图,用来在视角与物体之间选择适合当前距离的分辨率,以减少视觉效果上的撕裂或摩尔纹。如表格所示:对应关系 | 近距离观察 Generate Mipmaps 关闭 | Generate Mipmaps 关闭 | Generate Mipmaps 打开 |
预览 | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/ImTFz7XcKV4UBS9Z-2024-07-06-025708.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/o8eRBAMV4I76hfZx-2024-07-06-025606.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/KcO5Zv79dvDjRsTh-2024-07-06-025510.png) |
Compression | Normal Quality | Normal Quality | Normal Quality |
原始大小 | 75.0 MB | 75.0 MB | 75.0 MB |
导入大小 | 7.1 MB | 7.1 MB | 9.5 MB |
对应关系 | 4096 | 2048 | 1024 | 512 |
预览 | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/015d4MQQxkYQ6Of3-2024-07-06-024118.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/ahIATvBvcDNHkz3L-2024-07-06-024222.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/gbSQLXfrVWDnmQv3-2024-07-06-024332.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/OvCYXRql5aufOemA-2024-07-06-024421.png) |
Compression | Normal Quality | Normal Quality | Normal Quality | Normal Quality |
原始大小 | 7.8 MB | 7.8 MB | 7.8 MB | 7.8 MB |
压缩大小 | 8.0 MB | 2.0 MB | 0.5 MB | 128.0 KB |
对应关系 | 主色 / Albedo | 法线 / Normal | 材质捕捉 / MatCap | 各种 Mask |
128 | √ | |||
256 | √ | √ | ||
512 | √ | √ | ||
1024 | √ | √ | ||
2048 | √ | |||
4096 |
对应关系 | DXT5|BC3 | DXT1|BC1 | DXT5|BC3 | DXT1|BC1 |
预览 | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/VMNpuOps1bh0Gfrx-image.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/X9iE7POZFpShzalB-image.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/1UWhpUA5M2c3rwQr-image.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/bXqPFUP19pGF464L-image.png) |
Compression | Normal Quality | Normal Quality | Normal Quality | Normal Quality |
Alpha Is Transparency | 是 | 是 | 否 | 否 |
原始大小 | 4.2 MB | 4.2 MB | 4.2 MB | 4.2 MB |
导入大小 | 4.0 MB | 2.0 MB | 4.0 MB | 2.0 MB |
对于 法线 / Normal 贴图,您不应该尝试着更改它们的格式。这可能会导致意想不到的结果,请将选项保持在 **Automatic**。
### **Compression / 压缩:** 此选项影响着贴图被 Max Size 选项进行压缩后的质量,越低的质量意味着越小的大小和越多的杂色和色块。如表格所示:对应关系 | None | Low Quality | Normal Quality | High Quality |
预览 | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/DR9KHPBtDX0Xf4wp-2024-07-06-022435.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/wweYGTEMcF59QCnf-2024-07-06-022631.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/DGK0SXHiFtiCXnZy-2024-07-06-022754.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/o55OpjPyliMSvnXo-2024-07-06-022940.png) |
Max Size | 2048 | 2048 | 2048 | 2048 |
原始大小 | 4.9 MB | 4.9 MB | 4.9 MB | 4.9 MB |
压缩大小 | 12.0 MB | 2.0 MB | 2.0 MB | 4.0 MB |
如果您使用的是中文界面的 Unity,“Normal Quality”将会被显示为“法线质量”,这是翻译上的错误,正确翻译为“普通质量”,并非真的按照法线的质量进行压缩!
### **Use Crunch Compression / 使用 Crunch 压缩:** 此选项会以非常夸张的比例来压缩您的贴图。当您勾选了此选项后,将会在下方添加一个拖动滑块,用来设置压缩质量,同时也会降低视觉效果,如表格所示:对应关系 | 关闭 | 25 | 50 | 75 | 100 |
预览 | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/XGk5C7Mkimu3hREu-2024-07-06-031536.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/rYT4eMwYtrPkugjw-2024-07-06-031643.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/Wxe6YQbTKFHhYVQi-2024-07-06-031739.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/Fbh4sImqRK8YpcL0-2024-07-06-031840.png) | [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/4uyWlYm2YnaRtxGK-2024-07-06-031930.png) |
Compression | Normal Quality | Normal Quality | Normal Quality | Normal Quality | Normal Quality |
原始大小 | 4.9 MB | 4.9 MB | 4.9 MB | 4.9 MB | 4.9 MB |
导入大小 | 8.0 MB | 0.7 MB | 0.8 MB | 0.8 MB | 0.9 MB |
关于此选项,你可以点击 [此处](https://ask.vrchat.com/t/developer-update-14-march-2024/23401#how-do-i-reduce-the-compressed-and-uncompressed-size-of-my-avatars-17 "VRChat 对于 Crunch 的看法。") 来查看 VRChat 官方的看法。
### **使用 lilAvatarUtils 来批量设置贴图导入设置:** 如果您觉得一个个寻找模型上使用的贴图并修改导入设置很繁琐的话,您可以尝试使用 lilAvatarUtils 来批量调整贴图导入设置。lilAvatarUtils 是由 liltoon 作者 lilxyzw 开发的模型优化插件,如果您感兴趣,访问它的 Github 页面来进一步了解 lilAvatarUtils:[https://github.com/lilxyzw/lilAvatarUtils](https://github.com/lilxyzw/lilAvatarUtils "官方 Github 页面。")。您也可以点击 [这里](https://docs.vrcd.org.cn/books/lilavatarutils "lilavatarutils 使用说明书") 来前往 **夜嵐蝶 Alma** 编写的 lilAvatarUtils 使用说明书。 [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/f4RtepC8gnGWDDWF-2024-07-06-035839.png)注意:lilAvatarUtils 原生不支持中文!如果你需要中文,请访问 [此处](https://hrenact.booth.pm/items/5843998 "lilAvatarUtils 汉化。") 来获得汉化文件!
# 音频方面 尽管 Unity 使用的打包格式 [AssetBundle](https://docs.unity3d.com/cn/2022.3/Manual/AssetBundles-Cache.html) 一般情况下压缩率都很高,但是对于音频这样的[信息熵](https://www.ruanyifeng.com/blog/2014/09/information-entropy.html)很高的多媒体文件,常规的**无损压缩**很难减小它的体积。因此,对于较长的音频文件,如果想要大幅降低体积,必须使用合适的**有损压缩**方式。压缩率的计算方式为:压缩后大小 / 压缩前大小,因此压缩率越小,压缩效果越好。
Unity 支持大多数常见音频文件,并且针对各种用例提供了不同的压缩、加载方式。Unity 将音频文件称之为 `Audio Clip`,而正确配置 `Audio Clip 导入设置` 非常重要!取决于您的音频长度,错误的配置方式可能会严重影响你的**模型大小,**加载后的**内存消耗**以及播放时的 **CPU 周期消耗**!
CPU 运行指令时需要消耗 CPU 时钟周期,用掉的 CPU 周期越多,任务管理器中显示的 CPU 占用率越高。
下面是一个 .wav 文件的典型的 Audio Clip 导入设置(此处提供简体中文和英文版本作为交叉对照): [](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/ctw4NGBnvSvOXInX-KSg5RFoyhj.png)[](https://docs.vrcd.org.cn/uploads/images/gallery/2024-07/oZu3uwV8UZyvVArp-NdfFZsoKPo.png) 关于这些属性的详细解释,请参考 Unity 官方对于 Audio Clip 的[文档](https://docs.unity3d.com/cn/2022.3/Manual/class-AudioClip.html)。 这些属性中,最重要的是以下几个选项: - **后台加载(Load In Background)**:如果加载类型(Load Type)选择`加载时解压缩(Decompress On Load)`,则 VRChat SDK 要求必须启用后台加载。 - **加载类型(Load Type)**:决定 Unity 对 Audio Clip 的加载行为,**后文会详细解释该选项**。 - **压缩格式(Compression Format)**:配置 Unity 打包该音频文件时使用什么格式压缩。取决于 Audio Clip 的长度及其播放频率,应该视情况设置,以均衡文件大小及 CPU 周期消耗,**后文会详细解释该选项**。 - **质量(Quality)**:当使用有损压缩格式(Vorbis,或 Android 平台时可以使用 MP3)时用于设置压缩后的音质。质量越低,压缩后的体积越小,相应的音频质量也会更低。 - **采样率设置(Sample Rate Setting)**:采样率越低,音频文件越小,相应的音频质量也会更低,**后文会详细解释该选项**。如果决定进行 Android 平台的支持,可以类似贴图导入设置一样启用 Android 平台的覆盖设置(Override for Android),其属性基本一致,但是压缩格式额外增加了 `MP3`支持。由于 `Vorbis` 格式解压时 CPU 周期消耗相对较高,因此如果 PC 平台使用 `Vorbis`,推荐 Android 平台使用 `MP3`。
至于其它属性,由于对模型体积以及性能消耗并不重要,因此这里简单介绍一下功能: - 强制变为单声道(Force To Mono):打包时将多声道音频缩减为单声道 - 全景声:用于 360° 视频和 XR 视频等支持,一般不需要勾选 - 预加载音频数据:Unity 场景加载后会加载该 Audio Clip,但是对于模型上传而言似乎并不重要,VRChat Avatar SDK 也并没有强制要求进行设置,一般打开即可。 下面,我们将对**压缩格式**、**采样率**和**加载类型**两个属性进行深入的解释。 --- ### 压缩格式 Unity 导入音频后将根据压缩格式将原始音频文件打包到最终的生成产物中。Unity 提供了以下几种压缩格式: ##### PCM - 原始的音频数据,完全不需要任何处理可以直接被播放,体积最大,但是播放时不需要解压,CPU 周期消耗最低。 - 适用于**短、播放频繁**的音频类型,如脚步声、撞击声、武器声音等。 ##### ADPCM - 一种有损压缩格式,由 PCM 进行差分编码压缩得来,体积固定为 PCM 的 27 % ,播放时解压的 CPU 周期消耗低。 - 由于 ADPCM 的编码特性,不同音频内容的压缩效果不一,一般而言,高频率的音频内容 使用 ADPCM 的压缩质量相对较差,因此如果使用 ADPCM,因此**应当始终检查 ADPCM 压缩后的音频质量**。 - 适用于**短、播放频繁**且**对音质要求不高**的音频类型,如噪声,爆炸声等。 ##### Vorbis - 一种有损压缩格式,通常使用 Ogg 作为容器,称之为 Ogg Vorbis。压缩率优秀,体积最小,播放时解压的 CPU 周期消耗最高。 - 使用 Vorbis 时,可以修改**质量(Quality)**数值来平衡压缩率与体积: - 质量越高,体积越大,音质越好; - 质量越低,体积越小,音质越差。 - 需要注意的是,Vorbis 只能进行可变比特率编码,这意味着**不同音频内容的压缩率会有所不同**。 - 适用于**长、播放不频繁**的音频类型,如**音乐、歌曲**等。 ##### \*MP3 - 一种有损压缩格式,仅在 **Android 平台**可用,类似 Vorbis,压缩率较 Vorbis 更低,但是播放时解压的 CPU 周期消耗相对 Vorbis 较小。 - 可以作为 Android 平台上 Vorbis 的替代。 - 不支持无缝循环。音频质量是主观的,没有固定的标准,因此对于如何选取配置压缩质量,用户需要根据音频的类型自行平衡质量与体积。当然,也可以用最低质量换取最低的文件体积,只要你能接受压缩带来的音频质量损失
正确设置压缩格式不但影响音频体积,还会影响播放时的 CPU 周期消耗:ADPCM、Vorbis 和 MP3 在播放前必须被解压为 PCM 格式才能播放。取决于**加载类型**,错误的压缩格式配置可能会造成**高 CPU 周期消耗**或者**高内存消耗**!加载类型造成的影响将在后文中进行解释。
### 采样率设置 尽管现实世界的音频是连续的模拟量,但是存储为数字格式时需要转换为离散的数据格式,这一过程被称之为“采样”。采样率这一参数就是表示了音频文件的采样,其单位为 Hz,意为“每秒进行多少次采样”。 对于采样率,Unity 提供了三个选项: - 保持采样率(Preserve Sample Rate):使用原始音频文件的采样率 - 优化采样率(Optimize Sample Rate):让 Unity 根据音频文件内容自行设置一个合适的采样率 - 覆盖采样率(Override Sample Rate):手动设置采样率 类似压缩质量,采样率越低,体积越小,音频质量越差。信息不能无中生有:设置为比原始音频文件**更高**的采样率**不能提高音质**,只能**浪费**更多的存储空间!
--- ### **附录:不同压缩格式的参考压缩效果** **原始音频**为长度 **02:26** 的 **WAV** 文件,内容为歌曲,采样率 **48000 Hz**,体积 **26.8 MB**。 采样率只列出了部分情况;不包含 MP3 相关的数据。 由于 Vorbis 为可变比特率,因此不同音频内容的压缩率会有所不同,**表格数值仅供参考**。压缩格式 | 品质 | 采样率(Hz) | 文件大小(MB) |
PCM | N/A | 48,000 | 26.8 |
ADPCM | N/A | 48,000 | 7.5 |
Vorbis | 100 | 48,000 | 7.2 |
Vorbis | 50 | 48,000 | 2.8 |
Vorbis | 1 | 48,000 | 1.3 |
PCM | N/A | 22,050 | 12.3 |
ADPCM | N/A | 22,050 | 3.5 |
Vorbis | 100 | 22,050 | 3.0 |
Vorbis | 50 | 22,050 | 1.6 |
Vorbis | 1 | 22,050 | 0.7 |
音频文件解压为 PCM 后的体积不算在模型性能限制中的“未压缩大小”,未压缩大小只计算 AssetBundle 解压后大小。
除了可能的内存消耗,解压过程中消耗的 CPU 周期也不能被简单忽略。对于频繁播放的音效(例如脚步声等),如果使用高压缩率格式,**如果每次播放都要进行解压**,这会**消耗大量的 CPU 周期**,拖慢程序性能。 为了适应不同场景的需求,Unity 提供了如下几个加载类型: ##### 加载时解压缩(Decompress On Load) - 使用此选项,Unity 将在**加载模型时**将音频**解压为 PCM**。这样当音频播放时不需要进行额外的解压操作,每次播放时 CPU 周期消耗最低,但是由于 PCM 体积非常大,如果音频很长,这会导致极高的内存占用。 - 适用于需要**频繁播放**且**长度短**的音频内容,如频繁触发的音效,脚步声,枪械声等。 ##### 压缩内存(Compressed In Memory) - 使用此选项, Unity 将在加载模型时将压缩后的音频内容保持压缩状态,播放时再动态解压缩为 PCM。需要注意的是,Unity 并不会在第一次播放后将音频解压缩为 PCM 并替换掉原始的压缩的内容,而是每次播放时都要消耗 CPU 进行解压。作为好处,如果有**很多**的音频文件,这会极大地降低音频文件的内存占用。 - 适用于**不会经常播放**且**长度较长**的音频内容,如歌曲,舞蹈的配乐等。 ##### 流式处理(Streaming) - 音频文件不会被读入内存,而是在播放时动态地从硬盘上读入内存,具有最低的内存占用,但有着三种加载类型中最高的 CPU 周期消耗。而且在大多数操作系统上,能同时打开的文件数量是有限的,这会限制该功能的使用。 - **对于模型而言,任何时候都不推荐使用该加载类型**!一定要根据自己的**需求**正确设置加载模式!不然你可能会面临**高 CPU 周期消耗**及**高内存消耗**。
--- ### 总结 综上所述,对于不同类型的音频文件,建议使用以下配置:音频类型 | 长度 | 播放频率 | 推荐压缩格式 | 推荐加载类型 |
长度短,不常播放的音频内容 | 短 | 低 | 任意 | 加载时解压缩或压缩内存 |
各种音效,如脚步声、交互声音 | 短 | 高 | 任意 | 加载时解压缩 |
质量需求低的音效,如爆炸、噪声 | 短 | 高 | ADPCM 或任意 | 加载时解压缩 |
质量要求高,长度很长的音乐 | 长 | 低 | Vorbis(或 Android 平台使用 MP3) | 压缩内存 |
质量要求低,长且频繁播放的音频内容 | 长 | 高 | ADPCM | 压缩内存 |