{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check/",
  "atlas": "https://www.pystone.net/?node=uwa-answer-effect-overdraw-in-local-resource-check#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check.md",
  "context": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:uwa-answer-effect-overdraw-in-local-resource-check",
  "slug": "uwa-answer-effect-overdraw-in-local-resource-check",
  "title": "本地资源检测，特效检测中overdraw相关问题",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "石心.Yong"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "本地资源检测，特效检测中overdraw相关问题",
  "contentRole": "source",
  "sourceType": "source",
  "sourceMetadata": {
    "author": "石心.Yong"
  },
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "external_source",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "7bdf471d91eafc8cfb3eef7bc774f6fb7d1eb34523d32df2e2e0366ae96c4b80",
  "assets": [
    {
      "reference": "assets/5fc7171310a17c6c2b09d47b/01.png",
      "url": "/media/8f1ec5438181128225d2.png",
      "mediaType": "image/png",
      "contentHash": "8f1ec5438181128225d2dba8fd07162995254b425072085d99ca71c29ce48272",
      "byteLength": 14593,
      "width": 1059,
      "height": 130
    },
    {
      "reference": "assets/5fc7171310a17c6c2b09d47b/02.png",
      "url": "/media/6188336631270ed38615.png",
      "mediaType": "image/png",
      "contentHash": "6188336631270ed38615b06be423f471e94614414e65f76c7f8877d044a33c1b",
      "byteLength": 7416,
      "width": 337,
      "height": 118
    },
    {
      "reference": "assets/5fc7171310a17c6c2b09d47b/03.png",
      "url": "/media/886335b467fe05d5dfb9.png",
      "mediaType": "image/png",
      "contentHash": "886335b467fe05d5dfb9d0b0ffabfb69cc1c50a47fcea90e7ac009f6d760ff62",
      "byteLength": 299615,
      "width": 3827,
      "height": 1157
    },
    {
      "reference": "assets/5fc7171310a17c6c2b09d47b/04.png",
      "url": "/media/73101c45573bacc1ded1.png",
      "mediaType": "image/png",
      "contentHash": "73101c45573bacc1ded1115d633ccc376bb65b4122037bd036c4c63d9ff83eac",
      "byteLength": 22698,
      "width": 434,
      "height": 236
    },
    {
      "reference": "assets/5fc7171310a17c6c2b09d47b/05.png",
      "url": "/media/3d8a756b3742ff544e66.png",
      "mediaType": "image/png",
      "contentHash": "3d8a756b3742ff544e663882890cc56c5a4d350d2a999020f502487e345e7650",
      "byteLength": 7919,
      "width": 512,
      "height": 512
    },
    {
      "reference": "assets/5fc7171310a17c6c2b09d47b/06.png",
      "url": "/media/b5a065c1e4ddbd32dddc.png",
      "mediaType": "image/png",
      "contentHash": "b5a065c1e4ddbd32dddcd5e8ba9564756d9d99dbc76a70f80ac073516f69b356",
      "byteLength": 9000,
      "width": 512,
      "height": 512
    }
  ],
  "headings": [
    {
      "depth": 1,
      "text": "本地资源检测，特效检测中overdraw相关问题",
      "anchor": "本地资源检测特效检测中overdraw相关问题",
      "citation": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check/#%E6%9C%AC%E5%9C%B0%E8%B5%84%E6%BA%90%E6%A3%80%E6%B5%8B%E7%89%B9%E6%95%88%E6%A3%80%E6%B5%8B%E4%B8%ADoverdraw%E7%9B%B8%E5%85%B3%E9%97%AE%E9%A2%98"
    },
    {
      "depth": 2,
      "text": "问题",
      "anchor": "问题",
      "citation": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check/#%E9%97%AE%E9%A2%98"
    },
    {
      "depth": 2,
      "text": "我的回答",
      "anchor": "我的回答",
      "citation": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check/#%E6%88%91%E7%9A%84%E5%9B%9E%E7%AD%94"
    },
    {
      "depth": 2,
      "text": "来源与关系",
      "anchor": "来源与关系",
      "citation": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check/#%E6%9D%A5%E6%BA%90%E4%B8%8E%E5%85%B3%E7%B3%BB"
    }
  ],
  "claims": [],
  "outgoing": [
    {
      "id": "note:my-uwa-answers",
      "title": "我的 UWA 问答",
      "url": "https://www.pystone.net/notes/my-uwa-answers/",
      "atlas": "https://www.pystone.net/?node=my-uwa-answers#knowledge-atlas",
      "label": "我的 UWA 问答",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "上位集合：我的 UWA 问答",
      "citation": "https://www.pystone.net/notes/uwa-answer-effect-overdraw-in-local-resource-check/#%E6%9D%A5%E6%BA%90%E4%B8%8E%E5%85%B3%E7%B3%BB"
    }
  ],
  "incoming": [
    {
      "id": "note:my-uwa-answers",
      "title": "我的 UWA 问答",
      "url": "https://www.pystone.net/notes/my-uwa-answers/",
      "atlas": "https://www.pystone.net/?node=my-uwa-answers#knowledge-atlas",
      "label": "我的 UWA 问答",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "2020-12-04：本地资源检测，特效检测中overdraw相关问题（终端平台）",
      "citation": "https://www.pystone.net/notes/my-uwa-answers/#2020"
    },
    {
      "id": "note:game-graphics-and-runtime",
      "title": "游戏图形与运行时",
      "url": "https://www.pystone.net/notes/game-graphics-and-runtime/",
      "atlas": "https://www.pystone.net/?node=game-graphics-and-runtime#knowledge-atlas",
      "label": "游戏图形与运行时",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "我的UWA问答中的“2020-12-04 - 本地资源检测，特效检测中overdraw相关问题”导航项",
      "citation": "https://www.pystone.net/notes/game-graphics-and-runtime/#%E6%88%91%E7%9A%84uwa%E9%97%AE%E7%AD%94"
    }
  ],
  "contentMarkdown": "# 本地资源检测，特效检测中overdraw相关问题\n\n> [!note] 我的 UWA 问答\n> 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者；回答保留当时语境，技术结论可能受 Unity 版本、平台和项目条件限制。\n\n## 问题\n\n咱们这个特效资源检测 overdraw 和实际检测差距有点大。是不是统计峰值比较好一些？   有可能一个特效播放时间特别长  但是峰值就很短的时间  这样一平均 overdraw就很低了\n\n![image.png](assets/5fc7171310a17c6c2b09d47b/01.png)\n\n![image.png](assets/5fc7171310a17c6c2b09d47b/02.png)\n\n- 提问者：一周闲七天\n- 提问时间：2020-12-02 20:24:51\n\n## 我的回答\n\n首先要谈谈Overdraw的定义问题：\n\n1. Overdraw是一个描述像素重复绘制次数的概念。单个像素的重复绘制次数很容易理解，但是对于一个特效的Overdraw，笔者还没有找到什么公认的“标准”的计算公式，也不存在什么“官方”的定义。对于一帧来说，Overdraw值可以定义为  该帧总体绘制像素的次数 / 屏幕上实际绘制的像素数。而这个值也不能简单理解为\"绘制的层数\"。（试想如果总共在屏幕上绘制了1000个像素，其中只有一个像素绘制了10层，那这个重复绘制的像素对overdraw值得贡献也是可以忽略的，计算结果为 1009/1000=1.009）。而对于整个特效播放过程中的Overdraw，具体公式如何定义，又是一个问题。\n2. sunbrando的开源库（https://github.com/sunbrando/ParticleEffectProfiler）的计算方法：整个播放过程中\n\n![MommyTalk1607005585466.png](assets/5fc7171310a17c6c2b09d47b/03.png)\n\n分子是对**每一帧绘制像素的次数求和**，分母是对**每一帧屏幕上实际显示的像素数求和**。这个公式确实可以从整体上衡量一个特效播放过程中的Overdraw。但是这样计算存在这样一个问题：在有些帧，特效占屏幕的比例很大，有些帧特效占屏幕的比例很小，而运算结果受屏幕占比大的帧影响比较大。比如第一帧绘制了1000个像素，只绘制了1层，而第二帧绘制了2个像素，绘制了10层，那么计算出的值为（1000x1 + 2x10) / (1000 + 2) = 1.018 。\n\n###\n\nUWA本地资源检测对特效Overdraw的计算与上述开源库计算公式是相同的。不同的是特效播放的逻辑与相机对准的方式。影响两个工具计算结果不同的因素有：\n\n1. 相机的对准方式不同。UWA的工具有一套相机自动对准的逻辑，相机的摆放不同，会造成overdraw不同。\n2. 播放的时机不同。UWA的工具会创建好场景后，自动加载并实例化特效，进行播放。而开源库ParticleEffectProfiler的方案是先把特效放到场景中，启动场景后再执行相关的逻辑，进行检测。\n\n-------------------------------------\n\n楼主的案例中，除了相机对准方式不同导致两个工具计算结果不同之外，很大程度上受到了获取的特效播放时机的影响。\n\n使用开源库工具进行检测，发现抓取相机的Overdraw数据前，已经进行了三次Update，如下图所示。也就是说，特效的Overdraw是从第4帧开始统计的。这与该工具的代码逻辑有关，就不对原因进行分析了。\n\n![log.png](assets/5fc7171310a17c6c2b09d47b/04.png)\n\n而前三帧恰恰又是在数值上贡献最大的帧，如图所示，前三帧特效中有一个面片占了很大的屏幕空间。\n\n![big.png](assets/5fc7171310a17c6c2b09d47b/05.png)\n\n而第四帧开始，特效的像素占比就小了很多。\n\n![smal.png](assets/5fc7171310a17c6c2b09d47b/06.png)\n\n这是两个工具即使使用相同的对准方式，Overdraw计算结果也不相同的原因。\n\n###\n\n另外UWA 的特效检测还存在一个问题：相机视锥体的Size是不断调整的，那么不同的帧特效的屏幕占比会因此而改变，像素的绘制量也不同，对上述Overdraw值计算公式的贡献也就不一样。也就是说，相机的Size越小的帧，特效屏幕占比越大，对结果的影响越大。这里有两套解决方案——\n\n- 换公式，每帧都计算出OverdrawRate，再求平均。\n- 用户自定义相机，相机的视锥体保持固定，这样就是放弃自动对准，使相机的设置更接近用户的实际使用环境。\n\n-------------------------------------\n\n**UWA的工具会不断迭代，根据需求尽可能找到一套最佳策略来帮助开发者对项目进行规范。**\n\n如果在优化中要使用工具进行检测，并衡量优化结果的话，建议使用一套工具即可，使用同一套标准至少可以对资源的性能进行一个排名，据此来选择优化的优先级，并使用同一套标准评估优化结果。\n\n- 回答时间：2020-12-04 06:32:59\n- 最后更新：2020-12-04 06:39:05\n- 采纳状态：未采纳\n\n## 来源与关系\n\n- 上位集合：[[10-计算机、信息技术与工程/05-游戏图形与运行时/我的UWA问答/我的UWA问答|我的 UWA 问答]]\n- UWA 标签：终端平台\n- 原始问题：[本地资源检测，特效检测中overdraw相关问题](https://answer.uwa4d.com/question/5fc7171310a17c6c2b09d47b)\n- 源页最后更新：2021-09-01 22:29:40\n"
}
