UWA本地资源检测说明

UWA本地资源检测说明

UWA本地资源检测是针对静态工程检测的自动化流水线,旨在帮助研发团队快速发现自身开发过程中存在的各种资源、代码和设置问题。以静态资源和代码分析为切入点,在项目早期可接入,秉持及时发现、及时解决的原则,大幅度节省项目研发的时间和人力成本。

为了帮助大家更快地上手,我们整理了这份完整版资源检测说明书,本文的结构分为三个部分:核心功能介绍、使用方法/优秀实践案例、知识点拓展【加餐】

当前最新版本【v2.0.2】支持的核心功能如下图所示,我们会在下文进行逐一说明:

另外,不少朋友关注的一点就是它的收费模式,小编这里告知大家:免费的,随便用,虽然小编也不知道这么好用的东西老板为什么不收费。


一、核心功能介绍

1、基本资源检测

报告内将详细反馈主流资源(网格、纹理、音频、材质、Animation、Shader、Video、Prefab)的使用情况,包括检测资源的属性、是否合理、处理的优先级情况等一览无遗。

同时,本地资源检测还支持特效播放检测,可以批量测试粒子特效性能,自动扫描特效,一次运行,全部检测。(详情见UWA已支持批量检测粒子特效性能

而Shader分析模块可以针对项目中的Shader资源进行排查,Shader脚本一键扫描,Build变体全面分析。(详情见帮你把关Shader变体问题!UWA本地资源检测又更新!

在最新的2.0.2版本中,UWA本地资源检测添加了“美术资源检测”模块,帮助美术成员检查模型、贴图的质量,快速排查美术资源,规范美术研发流程。(详情见本地资源检测大更新——2.0全新上线 / 美术资源检测 — 让你的网格无可挑剔

2、场景、全局设置及C#代码检测

同样的,针对场景、Editor以及代码设置,我们也设定了相关的检测规则。

3、Lua脚本检测

UWA本地资源检测现已支持Lua代码扫描检测,来帮助开发团队方便地检测Lua代码不规范的问题,提高代码质量,从而提高开发的效率。详情请戳本地资源检测支持Lua检测!

4、贴心的Tips功能

结合UWA结合多年的优化经验,我们在数据检测面板中提供了对应的分析建议,所有的检测结果都有对应的说明注释,大大降低了用户的使用门槛,也帮助开发者及时作出合理的优化策略。

5、行业阈值和自定义阈值

尚处于研发早期阶段的团队常常关心一个问题:这个数据在行业水平中是怎么样,我们是不是超标了?或者我们还有多大的发挥空间?为了帮助大家更科学地树立研发规范,我们提供了10套官方阈值,对应10种不同的游戏类型。如下图,用户可以在切换阈值设定的下拉菜单中看到我们推荐的阈值选项。

这些阈值的来源为所有提交至UWA官网的大数据,我们会定期更新每种参数的阈值,以保证这些数据的时效性。

同时,研发团队也可以点击报告的右上角自定义阈值,现支持阈值方案多套保存的功能,便于大家制作更加精细的定制化需求。

6、自定义规则

大家都希望能为项目量身定制一套资源规范的规则,因此我们也为大家开放了自定义规则API,大家可自行开发适合自身项目的检测规则。(传送门:规则我说了算!自定义规则重磅上线

7、历史数据对比与报告数据导出

报告支持对同一个项目下的任意两份报告进行全量数据对比。以“优化后通过的资源”、“历史检测通过,当前失败的资源”,“当前检测删除的资源”这三个维度,来方便研发团队进行直观的比较。我们还提供了资源对比功能,从这几张表格内可以看到是否发生了误添加/删资源的情况。


同时,报告支持对线上报告的数据导出,也可以针对单个规则进行数据导出,方便开发人员对数据进行相应的应用与处理。


二、使用方法

为方便大家能快速上手,我们制作了一个简易的【奶奶级】教程,绝不让大家踩坑,传送门:本地资源检测之民间文档 | 仅需10分钟,我又上手了一个新技能!

SDK的下载链接在https://www.uwa4d.com/#download,找到Pipeline SDK下载即可。已经在用的小伙伴也要记得及时更新喔,不然就无法体验最新功能啦。

该服务自上线以来,已经受到不少游戏开团队的积极反馈,更有一位资深用户分享了他们完整的实践流程,从接入到分析排查到复测再到总结复盘,详尽又落地,可作为大家实践参考的攻略帖:优化不再秃头,这个优秀实践我们一点一点说


三、知识点拓展加餐【持续更新】

在今年的UWA DAY 2020的《轻量级流水线结合方案助力打造高品质游戏》一讲中,我们罗列了在UWA本地资源检测上检测未通过的触发规则。

无论是大家在开发时的疏忽,还是相关知识点的缺失,这些问题的积累最终都会反映到项目的性能表现上。为此,我们将这些规则曝光出来,并且以一个个知识点的形式逐一解读,从而让大家更深刻地明白,它们是如何对项目的整体性能情况产生影响的。

我们力图以浅显易懂的表达,让职场萌新或优化萌新深入理解。
本文会持续更新,欢迎加入收藏,定期翻阅充电。
资源篇
1)尺寸过大的纹理——97%的项目中招
2)面片数过大的网格——95%的项目中招
3)使用了纯色纹理——92%的项目中招

4)包含空纹理采样的材质——91%的项目中招
5)未开启OptimizeGameObjects的Animator组件——87%的项目中招
6)包含Scale曲线的动画片段组件——86%的项目中招

7)精度过高的动画片段——86%的项目中招
8)包含无用纹理采样的材质——79%的项目中招
9)粒子数上限超过30的粒子系统——79%的项目中招
10)引用纹理尺寸大于256的粒子系统——78%的项目中招

11)未使用Streaming加载的长音频
12)未使用PCM格式的音频
13)双声道的音频
14)尺寸过大的视频资源

15)包含Color属性的网格
16)未开启OptimizeMesh选项的网格
17) 包含Tangent属性的网格
18) 包含uv3或uv4属性的网格

19) 包含Normal属性的网格
20) 开启Read/Write选项的网格
21) 蒙皮网格骨骼数过大

22) 包含无效透明通道的纹理
23) 过滤模式为Trilinear的纹理
24) 开启Read/Write选项的纹理

25)开启Mipmap选项的Sprite纹理
26)使用非压缩格式的纹理
27)Wrap模式为Repeat的纹理

28)包含相同纹理采样的材质
29)包含纯色纹理采样的材质
30)纹理采样数过多的Shader

31)Compression != Optimal的动画资源
32)AnimationState数量过高的AnimatorController

33)网格发射数超过5的粒子系统
34)所使用的网格未开启Read/Write选项的粒子系统
35)引用网格面片数超过500的粒子系统
36)引用纹理数超过5的粒子系统

37)使用了MotionVector的SkinnedMeshRenderer
38)使用Tiled模式的Image组件
39)不可见的Image组件

40)可能生成变体数过多的Shader
41)全局关键字过多的Shader
42)Build后生成变体数过多的Shader

43)使用了Outline的Text组件
44)使用了默认纹理的RawImage组件
45)不可见的RawImage组件
46)开启Prewarm的粒子系统
47)开启Collision或Trigger的ParticleSystem

48)特效播放时平均Overdraw率过高
49)特效播放时DrawCall峰值过高
50)特效总贴图内存过大
51)使用了Standard Shader的材质

52)特效运行时包含的ParticleSystem组件数量过多
53)播放特效时最大粒子数量过多
54)特效总贴图数量过大
55)开启各向异性过滤的纹理

56)移动端场景雾效检测
57)UI子节点过多的Canvas
58)检测场景中的MeshCollider

59)挂载多个AudioListener的物体
60)检测场景物件与Prefab的连接是否正常
61)挂载RigidBody的静态物体

62)场景总顶点数过大/总面片数过大
63)阴影分辨率设置不规范的灯光
64)检测场景中的Rigidbody
65)场景中MeshCollider使用的总面片数过多

代码篇
66)类中存在OnGUI方法
67)类中存在空的Update、LateUpdate和FixedUpdate方法
68)该类的方法中存在Camera.main的调用
69)该类的方法中存在ComputeBuffer.GetData调用
70)该类的方法中存在对纹理SetPixels的调用
71)该类的方法中存在GameObject.SendMessage调用
72)该类的方法中存在GetComponentsInChildren调用/该类的方法中存在GetComponentsInParent调用
73)该类的方法中存在FindObjectsOfType调用
74)该类的方法中存在Reflection相关函数的调用
75)该类的方法中存在对Renderer进行Material/Materials的获取

76)该类的方法中存在 .tag的调用
77)该类的方法中存在对纹理GetPixels()/GetPixels32()调用
78)该类的方法中存在 GetComponentsInChildren调用/该类的方法中存在 GetComponentsInParent调用
79)该类的方法中存在Linq相关函数的调用
80)该类的方法中存在对Renderer进行sharedMaterials的获取
81)该类的方法中存在 Input.touches调用
82)FindObjectsOfType调用
83)该类的方法中存在 TextAsset/WWW.bytes调用

84)设置一个未定义的全局变量
85)更改一个未定义的全局变量
86)访问一个未定义的全局变量
87)试图设置一个只读的全局变量
88)试图设置一个全局变量的只读域
89)未被使用的隐式定义的全局变量
90)试图设置一个全局变量的未定义域
91)试图访问一个全局变量的未定义域

  • パーティクルシステム最適化—— スキル特殊効果の最適化 发表在 9月30日 回复

    [...]1. ローカルアセットテストは、UWAによって押し出したアセット規範へのモニタリングサービスです。日々の開発では、テクスチャ、メッシュ、アニメーションアセット、パーティクル特殊効果などに対し、パフォーマンステストを1つずつ行います。下図のように示しています。[...]

  • パーティクルシステム最適化—— スキル特殊効果の最適化 发表在 9月30日 回复

    [...]1. ローカルアセットテストは、UWAによって押し出したアセット規範へのモニタリングサービスです。日々の開発では、テクスチャ、メッシュ、アニメーションアセット、パーティクル特殊効果などに対し、パフォーマンステストを1つずつ行います。下図のように示しています。[...]

  • 发表在 9月30日 回复

    [...]1. ローカルアセットテスト(中国語注意)は、UWAによって押し出したアセット規範へのモニタリングサービスです。日々の開発では、テクスチャ、メッシュ、アニメーションアセット、パーティクル特殊効果などに対し、パフォーマンステストを1つずつ行います。下図のように示しています。[...]