{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames/",
  "atlas": "https://www.pystone.net/?node=uwa-answer-legacy-animation-compression-rotation-frames#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames.md",
  "context": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:uwa-answer-legacy-animation-compression-rotation-frames",
  "slug": "uwa-answer-legacy-animation-compression-rotation-frames",
  "title": "关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "石心.Yong"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题",
  "contentRole": "source",
  "sourceType": "source",
  "sourceMetadata": {
    "author": "石心.Yong"
  },
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "external_source",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "d2127ab3ede0c868adf69bbef06976502d836065b4243f4e1910965c8ca2e3d2",
  "assets": [
    {
      "reference": "assets/608ceb6c6bb31032f97914bd/01.png",
      "url": "/media/93f24bf56f28fa2d115f.png",
      "mediaType": "image/png",
      "contentHash": "93f24bf56f28fa2d115f6143d8d48a8e83f55476201810c4eea2f9e45c99e798",
      "byteLength": 17872,
      "width": 738,
      "height": 150
    },
    {
      "reference": "assets/608ceb6c6bb31032f97914bd/02.png",
      "url": "/media/ad3dbfcfcf50b07a80f9.png",
      "mediaType": "image/png",
      "contentHash": "ad3dbfcfcf50b07a80f9c6023d1187392682e92c304e587180ce2b537744ef3a",
      "byteLength": 25403,
      "width": 1331,
      "height": 123
    },
    {
      "reference": "assets/608ceb6c6bb31032f97914bd/03.png",
      "url": "/media/01b2c2e39524f23be89a.png",
      "mediaType": "image/png",
      "contentHash": "01b2c2e39524f23be89a49c2044058490bf077cadfbbc1b1d09b9c7c04541330",
      "byteLength": 16468,
      "width": 1175,
      "height": 104
    },
    {
      "reference": "assets/608ceb6c6bb31032f97914bd/04.png",
      "url": "/media/70334fbdf0b9ae40786e.png",
      "mediaType": "image/png",
      "contentHash": "70334fbdf0b9ae40786ed1edf951df3be73daa29c1f0dc3f795d483d2ed64b67",
      "byteLength": 37422,
      "width": 713,
      "height": 365
    },
    {
      "reference": "assets/608ceb6c6bb31032f97914bd/05.png",
      "url": "/media/16eeaadc2103854b31e5.png",
      "mediaType": "image/png",
      "contentHash": "16eeaadc2103854b31e5418893a69d6b40caa6f4ef154279978e48d0df8cf842",
      "byteLength": 1471,
      "width": 175,
      "height": 31
    },
    {
      "reference": "assets/608ceb6c6bb31032f97914bd/06.png",
      "url": "/media/06cd3cca0853850e3aa3.png",
      "mediaType": "image/png",
      "contentHash": "06cd3cca0853850e3aa36630ae0d586de3ef54a027118b411b56be77d0afbfea",
      "byteLength": 3834,
      "width": 319,
      "height": 64
    }
  ],
  "headings": [
    {
      "depth": 1,
      "text": "关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题",
      "anchor": "关于legacy动画压缩精度到3位后unity在rotaiton曲线中产生自动补帧的问题",
      "citation": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames/#%E5%85%B3%E4%BA%8Elegacy%E5%8A%A8%E7%94%BB%E5%8E%8B%E7%BC%A9%E7%B2%BE%E5%BA%A6%E5%88%B03%E4%BD%8D%E5%90%8Eunity%E5%9C%A8rotaiton%E6%9B%B2%E7%BA%BF%E4%B8%AD%E4%BA%A7%E7%94%9F%E8%87%AA%E5%8A%A8%E8%A1%A5%E5%B8%A7%E7%9A%84%E9%97%AE%E9%A2%98"
    },
    {
      "depth": 2,
      "text": "问题",
      "anchor": "问题",
      "citation": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames/#%E9%97%AE%E9%A2%98"
    },
    {
      "depth": 2,
      "text": "我的回答",
      "anchor": "我的回答",
      "citation": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames/#%E6%88%91%E7%9A%84%E5%9B%9E%E7%AD%94"
    },
    {
      "depth": 2,
      "text": "来源与关系",
      "anchor": "来源与关系",
      "citation": "https://www.pystone.net/notes/uwa-answer-legacy-animation-compression-rotation-frames/#%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-legacy-animation-compression-rotation-frames/#%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": "2021-05-02：关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题（资源管理）",
      "citation": "https://www.pystone.net/notes/my-uwa-answers/#2021"
    },
    {
      "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问答中的“2021-05-02 - 关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题”导航项",
      "citation": "https://www.pystone.net/notes/game-graphics-and-runtime/#%E6%88%91%E7%9A%84uwa%E9%97%AE%E7%AD%94"
    }
  ],
  "contentMarkdown": "# 关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题\n\n> [!note] 我的 UWA 问答\n> 本文收录我在 UWA 问答发表的公开回答。问题内容归原提问者；回答保留当时语境，技术结论可能受 Unity 版本、平台和项目条件限制。\n\n## 问题\n\n[如何降低动画文件的浮点数精度](https://answer.uwa4d.com/question/593955b6c42dc04f4d8f7341)\n\n在对Legacy动画采用上述方法进行压缩后，发现使用下面两种插值方式的Rotaion动画都被自动填充了中间的帧\n\n![image.png](assets/608ceb6c6bb31032f97914bd/01.png)\n\n压缩前：\n\n![image.png](assets/608ceb6c6bb31032f97914bd/02.png)\n\n压缩后：\n\n![image.png](assets/608ceb6c6bb31032f97914bd/03.png)\n\n请问大家知道产生的原因吗 谢谢各位\n\n- 提问者：Tiki\n- 提问时间：2021-05-01 21:47:24\n\n## 我的回答\n\n造成 “填充中间帧” 的问题的原因是Unity对插值的处理，与降低精度的算法没有关系。可以尝试：单纯GetEditorCurve，然后SetEditorCure，不进行修改，依然会存在题主说的“填充中间帧”的问题。\n\n![image.png](assets/608ceb6c6bb31032f97914bd/04.png)\n\n要理解这个问题的原因，需要理解Unity对Rotation的处理方式。Rotation在Unity内部都是用Quaternion处理的，即使动画资源与内存中存储的是欧拉角(Eular)。官方的说法：“Unity has to convert rotation values to Quaternions eventually, since the engine only works with Quaternions.”\n\n而AnimationClip的插值方式的三个选项，实质上是如下含义：\n\n- Eular Angles - 欧拉角插值，AnimationClip资源中存的是欧拉角，运行时插值后转为四元数\n- Quaternion - 四元数插值，AnimationClip中存四元数，运行时插值\n- Eular Angles(Quaternion) - 欧拉角插值，并把插值后的角度值烘焙(Bake)成Quaternion，存到资源文件中\n\n使用Eular Angles(Quaternion) 的方式，可以在AnimationClip文件中看到曲线的字段如下：localEulerAnglesBaked\n\n![image.png](assets/608ceb6c6bb31032f97914bd/05.png)\n\n这种情况，资源本身占用的内存会增大：\n\n![image.png](assets/608ceb6c6bb31032f97914bd/06.png)\n\n这就是使用Eular Angles(Quaternion)方式插值，中间的帧都出现的原因，引擎把插值结果烘焙到了资源中。而GetEditorCurve和SetEditorCurve后在能看到插值的效果，只是因为Get/Set之后，Unity把数据显示到了引擎当中。\n\n参考：\n\nhttps://docs.unity3d.com/Manual/animeditor-AnimationCurves.html\n\nhttps://docs.unity3d.com/Manual/AnimationEulerCurveImport.html\n\n- 回答时间：2021-05-02 08:45:20\n- 最后更新：2021-05-02 10:01:45\n- 采纳状态：已采纳\n\n## 来源与关系\n\n- 上位集合：[[10-计算机、信息技术与工程/05-游戏图形与运行时/我的UWA问答/我的UWA问答|我的 UWA 问答]]\n- UWA 标签：资源管理\n- 原始问题：[关于Legacy动画压缩精度到3位后Unity在Rotaiton曲线中产生自动补帧的问题](https://answer.uwa4d.com/question/608ceb6c6bb31032f97914bd)\n- 源页最后更新：2021-05-03 01:05:00\n"
}
