9

UWA本地资源检测说明

 3 years ago
source link: https://blog.uwa4d.com/archives/pipelinesummary.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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

3892754435.png

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

2.png


一、核心功能介绍

1、主流资源的检测

报告内将详细反馈主流资源(网格、纹理、音频、材质、Animation、Shader、Video、Prefab)的使用情况,包括检测资源的属性、是否合理、处理的优先级情况等一览无遗。同时,我们已经支持批量检测粒子特效性能,自动扫描特效,一次运行,全部检测。(详情见UWA已支持批量检测粒子特效性能

3.png

最新版本中新增了Shader Analyzer模块功能,Shader脚本一键扫描,Build变体全面分析。请还未升级至最新版本的童鞋尽快下载最新版本,体验完整功能。

2、场景、Editor及代码扫描检测

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

5.png

3、Lua代码扫描检测

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

4、贴心的Tips功能

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

6.gif

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

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

7.png

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

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

8.png

6、自定义规则

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

9.png

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

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

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


二、使用方法

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

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

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


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

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

12.png

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

我们力图以浅显易懂的表达,让职场萌新或优化萌新深入理解。
本文会持续更新,欢迎加入收藏,定期翻阅充电。
资源篇
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)试图访问一个全局变量的未定义域


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK