当前位置: 首页 > news >正文

【Unity博客节选】Timeline 的 AnimationOutputWeightProcessor 理解

注:软件版本Unity 6.0 + Timeline 1.8.7

作者:CSDN @ RingleaderWang
原文:《Unity第25期——Timeline结构及其源码浅析》
文章首发Github👍:《Timeline结构及其源码浅析》

Bilibili 视频版👍👍:《Timeline结构及其源码解析》https://www.bilibili.com/video/BV1bHjYzNE35

AnimationPlayable的权重处理

Timeline构建graph过程中,对每个OutputTrack创建对应的playableOutput节点后,

如果是动画track的话,最后会为PlayableOutput注册一个权重处理回调m_EvaluateCallbacks.Add(new AnimationOutputWeightProcessor(animOutput)),构造AnimationOutputWeightProcessor时将AnimationPlayaleOutput的权重设为0(默认是1)。这个Processor会在graph后续运行时触发WeightEvaluate方法处理Animation相关的权重(会重新调整权重)。

Timeline 会利用 AnimationOutputWeightProcessor Evaluate方法处理AnimationMixer 、AnimationLayer和 AnimationPlayableOutput的权重。

大概效果如下,设四个clip初始权重分别为0.26,0.14,0.19,0.13,连到各自Mixer和Layer后,如果输入权重和小于1,会按比例放大为:

  • mixer input0 weight :0.65= 0.26/(0.26+0.14)*1
  • mixer input1 weight :0.35= 0.14/(0.26+0.14)*1
  • layer input0 weight :0.56=(0.26+0.14)/(0.26+0.14+0.19+0.13)*1
  • AnimationOutput weight : 0.72 = 0.26+0.14+0.19+0.13

如果输入权重和≥1,则只对≥1的输入钳值到1,不等比例缩小,且AnimationOutput weight 钳值为1.

比如四个clip初始权重分别为0.6,0.9,0.2,0.3,AnimationOutputWeightProcessor.Evaluate() 执行完后:

  • mixer input0 weight :0.6 (0.6+0.9>1不缩放,且0.6<1 不钳值)
  • mixer input1 weight :0.9(0.6+0.9>1不缩放,且0.9<1 不钳值)
  • layer input0 weight :1 (0.6+0.9+0.2+0.3>1不缩放,且0.6+0.9>1 则钳值到1)
  • layer input1 weight : 0.5 (0.6+0.9+0.2+0.3>1不缩放,且0.2+0.3<1 不钳值)
  • AnimationOutput weight:1(0.6+0.9+0.2+0.3>1 钳值到1)

这么处理的目的按源码注释的说法:”对动画轨道上的权重进行后处理,以正确归一化混合器权重,从而避免混合时出现默认姿势,并确保子轨道、图层以及图层图正确混合。Does a post processing of the weights on an animation track to properly normalize the mixer weights so that blending does not bring default poses and subtracks, layers and layer graphs blend correctly ”

测试用例过长,参见:🔗TimelineTestForAnimationWeightInfo.

http://www.xdnf.cn/news/756649.html

相关文章:

  • Leetcode 269. 火星词典
  • 湖北理元理律师事务所:个人债务管理的温度与精度
  • SCSAI平台面向对象建模技术的设计与实现
  • Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式
  • MATLAB实战:Arduino硬件交互项目方案
  • 【Go-补充】Sync包
  • QtWidgets,QtCore,QtGui
  • uniapp uni-id 如果是正式项目,需自行实现发送邮件的相关功能
  • RAGflow详解及实战指南
  • 深度学习中常见的超参数对系统的影响
  • Vue 3 组件化设计实践:构建可扩展、高内聚的前端体系
  • 初学大模型部署以及案例应用(windows+wsl+dify+mysql+Ollama+Xinference)
  • 「数据采集与网络爬虫(使用Python工具)」【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • (javaSE)Java数组进阶:数组初始化 数组访问 数组中的jvm 空指针异常
  • 卷积神经网络(CNN)完全指南:从原理到实战
  • Java 中 MySQL 索引深度解析:面试核心知识点与实战
  • 牛顿迭代算法-深度解析
  • USART 串口通信全解析:原理、结构与代码实战
  • YOLOv11改进 | Conv/卷积篇 | 全维度动态卷积ODConv与二次创新C3k2助力YOLOv11有效涨点
  • GIS数据类型综合解析
  • 【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录
  • 【计网】第六章(网络层)习题测试集
  • 【科研绘图系列】R语言绘制论文组合图形(multiple plots)
  • 某数字藏品qm加密算法技术解析:多层混合加密体系的深度剖析
  • RV1126-OPENCV 图像叠加
  • 【PhysUnits】15.8 引入P1后的减法运算(sub.rs)
  • 图文详解Java集合面试题
  • TDengine 基于 TDgpt 的 AI 应用实战
  • 【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】
  • vue3中的ref和reactive