如何剔除動畫中冗餘的scale數據

美術作的人物動畫,是不需要用到scale的,所以動畫數據裏有大量的scale冗餘信息。體現在constant curves數目過多。如圖所示
圖片.png

如何去掉冗餘的scale信息?

 

可以使用OnPostprocessModel後處理腳本在import的時候去掉scale信息。對比下處理前後的結果
處理前
圖片.png

處理後:
圖片.png

constant曲線減少了300左右,整體內存減少了16%。(該模型Generic模式、使用Optimal壓縮格式)
我自己實測,美術模型的Object數目越多,這個優化的效果越明顯(並不確定)。如果只有一個object,優化一般只有2~3%。

Tips,如果想在editor中瞭解動畫文件在真機內存中的佔用,可以看inspector裏面顯示的容量,該數據與真機內存佔用非常接近,雖然並不完全相同 [By Xin]

附上後處理代碼

void OnPostprocessModel(GameObject g) {
		// for skeleton animations.
		if(assetPath.Contains("_anim"))
		{
		
			List<AnimationClip> animationClipList = new List<AnimationClip>(AnimationUtility.GetAnimationClips(g));
			if (animationClipList.Count == 0) {
				AnimationClip[] objectList = UnityEngine.Object.FindObjectsOfType (typeof(AnimationClip)) as AnimationClip[];
				animationClipList.AddRange(objectList);
			}
			
			foreach (AnimationClip theAnimation in animationClipList)
			{
				foreach (EditorCurveBinding theCurveBinding in AnimationUtility.GetCurveBindings(theAnimation))
				{
					string name = theCurveBinding.propertyName.ToLower();
					if (name.Contains("scale"))
					{
						AnimationUtility.SetEditorCurve(theAnimation, theCurveBinding, null);
					}
				} 
			}
		}
	}```

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章