Appearance
资源限制与优化
Unity 3d 有哪些常用的性能测试工具? - Unity 官方的回答 https://www.zhihu.com/question/31186642/answer/2490285061
1 主场景资源限制
以下为主观测试数据,仅供参考,请给广大低性能机型的用户预留算力空间
- 高性能机型测试机:iPhone 13 Pro(A15、2532x1170、6G 内存)
- 低性能机型测试机:Vivo S10(天玑 1100、2400×1080、8G 内存)
- iPhoneX 为推荐 AR 体验中的最低 iOS 设备,性能实测略高于 Vivo S10
- 小米12、Vivo iQoo8、realmeGT2 等机型为推荐 AR 体验中的高端 Android 设备,性能实测为 iPhone 13 Pro 的 85%
- 华为除部分不支持 AR 能力的机型外普遍好于Android设备
模块 | 维度 | Native | Unity(高性能) | Unity(低性能) | |
---|---|---|---|---|---|
模型 | 模型格式 | fbx/obj | fbx/obj | fbx/obj | |
面数上限(同屏) | 单模型 | 20w以内 | 100w以内 | 20w以内 | |
总面数 | 静态模型:500w 动态模型:300w | 静态模型:3000w 动态模型:1800w | 静态模型:1200w 动态模型:780w | ||
模型尺寸 | 无 | 无 | 无 | ||
单文件模型上限 | 模型数量 | 50 | 50 | 30 | |
材质 | 类型 | 无强制要求 | 无强制要求 | 无强制要求 | |
材质贴图 | 尺寸限制 | 1024 x 1024(推荐512 or 1024正方形) | 1024 x 1024(推荐2的幂指数) | 1024 x 1024(推荐2的幂指数) | |
文件格式 | png/jpg/jpeg | png/jpg/jpeg/tga | png/jpg/jpeg/tga | ||
同屏材质数 | (待验证) | 3400 | 500 | ||
动画 | 2D序列帧动画 | 基础要求 | 不支持(可以自己用shader实现) | 可以自己用shader实现(可以用第三方插件) | 可以自己用shader实现(可以用第三方插件) |
帧数限制 | 无 | 无 | 无 | ||
3D动画 | 基础要求 | 无,同Unity | 无 | 无 | |
单模型骨骼上限 | 150 | 200 | 200 | ||
图片 | 图片 | 格式 | png/jpg/jpeg | png/jpg/jpeg/tga | png/jpg/jpeg/tga |
最大尺寸 | 1024 x 1024 | 1024 x 1024 | 1024 x 1024 | ||
2D素材压缩 | 是否有该功能 | - 编辑器导出时自动压缩处理(android:etc ios:pvrtc) - Unity中可以修改max size & compression配置项 | - 编辑器导出时自动压缩处理(android:etc ios:pvrtc) - Unity中可以修改max size & compression配置项-尽量使用不透明贴图 | - 编辑器导出时自动压缩处理(android:etc ios:pvrtc) - Unity中可以修改max size & compression配置项-尽量使用不透明贴图 | |
多媒体 | 音频 | 格式 | mp3 | mp3/wav | mp3/wav |
大小 | 无 | 无 | 无 | ||
其他 | 无 | 无 | 无 | ||
视频 | 格式 | mp4 | mp4/mov | mp4/mov | |
大小(全景) | 不推荐 | 视内存而定,最多3.5G | 视内存而定,最多1.4G | ||
大小(α通道) | 不推荐 | 视内存而定,最多1.5G | 视内存而定,最多0.7G | ||
大小(4K) | 不推荐 | 视内存而定,最多6G | 视内存而定,最多2G | ||
推荐分辨率 | 1080P | 1080P即可,往上性价比不高 | 1080P即可,往上性价比不高 | ||
灯光 | 类型 | 一盏平行光 | 一盏平行光、烘焙点光源 | 一盏平行光、烘焙点光源 | |
特效 | 粒子 | 同屏粒子 | (待验证) | 10000 | 3000 |
透明 | 同屏透明对象 | (待验证) | 300 | 50 | |
HDR | 同屏HDR对象 | (待验证) | 7000 | 1000 | |
物理 | 基础要求 | 部分参数可用,详见文档 | 详见Unity官方文档 | 详见Unity官方文档 | |
刚体数量 | 50 | 100 | 50 | ||
DrawCall | 极限上限 | 建议不要超过50 | 10000后卡死 | 5700后卡死 | |
抗锯齿 | 无 | 支持 | 支持 | ||
效率 | 内存 | 最大限制 | 同Unity | <1000M(内容资源占的内存,不包含算法) | <500M(内容资源占的内存,不包含算法) |
帧率 | 最高30 | 推荐高于30 | 推荐高于30 | ||
包体 | 包体限制(仅渲染) | 最大 | 50M | 200M(内容资源,不包含算法) | 100M(内容资源,不包含算法) |
平台限制 | 导入限制 | ||||
导出限制 | |||||
编程语言 | JS/LUA | JS | JS |
2 资源优化
2.1 面数优化
- 在 Game 窗口的 Stats 渲染统计窗口选项可以查看各项性能开销数值. Tris 代表当前窗口渲染的三角面片数.
- 通过移动 maincamera 位置可以查看不同角度内容同屏三角面数,建议在运行状态下查看该数值.
- 素材模型三角面数过大时需要对模型面数进行优化,网上有很多教程和不同方法可以参考这里不做详细解释.
2.2 压缩贴图
在 assets 中找到贴图,点选后右侧 inspector 中会显示贴图各项数据.
将 MaxSize 设置为 1024 或以下尺寸,也可以选择 Compression 进行压缩. 选择完毕后点击 Apply 即可完成 Unity 内的贴图压缩. 此外也可以使用 https://tinypng.com 等工具进行贴图压缩.
2.3 GPU Instancing
为 Materials 启用 GPU Instancing:在 Project window 中选中你的Material,然后在 Inspector 窗口中,勾选 Enable Instancing 复选框。
使用 GPU Instancing 可以一次渲染(render)相同网格的多个副本,仅使用少量DrawCalls。在渲染诸如建筑、树木、草等在场景中重复出现的事物时,GPU Instancing 很有用。
每次 draw call,GPU Instancing 只渲染相同(identical )的网格,但是每个实例(instance)可以有不同的参数(例如,color 或 scale),以增加变化(variation),减少重复的出现。
GPU Instancing 可以减少每个场景 draw calls 次数。这显著提升了渲染性能。
Unity 只会在 Material 使用的 Shader 支持 GPU Instancing 时,才会显示这个复选框。这些支持 GPU Instancing 的 Shaders 包括:Standard, StandardSpecular 及所有的 surface Shaders。