TiXL Lib.flow ExecRepeatedly 操作符完全指南:用 RepeatCount 与 SkipFrameCount 精确控制子图执行频率

TiXL Lib.flow ExecRepeatedly 操作符完全指南:用 RepeatCount 与 SkipFrameCount 精确控制子图执行频率 TiXL Lib.flow ExecRepeatedly 操作符完全指南用 RepeatCount 与 SkipFrameCount 精确控制子图执行频率【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3ExecRepeatedly 是 TiXLt3实时运动图形引擎中Lib.flow流程控制库的核心操作符用于精确控制子图sub graph的执行频率。本文以其官方文档与仓库源码为主线完整讲解三个输入参数的含义、默认值与取值范围深入剖析其执行时序与钳制逻辑并结合Execute、ExecuteOnce、Loop等兄弟操作符给出实战选型建议。读完本文你将能在模拟加速/减速、抽帧优化、帧步进等场景中自如使用该操作符。功能定位控制子图的执行频率根据官方文档ExecRepeatedly 的作用是控制子图被执行的频繁程度Controls how frequently the sub graph is being executed并明确指出它可用于提高或降低模拟速度This can be useful for increasing or slowing down simulation speeds。在 Lib.flow 的算子目录中它被描述为Controls how frequently the sub graph is being executed归属于流程控制flow命名空间。这意味着它不是普通的每帧执行一次的开关而是一个可编程的执行节流器通过两个整数参数你可以让一段子图在一帧内重复执行多次加速模拟也可以让它每隔若干帧才执行一次减速模拟、节省开销。输入参数详解官方文档列出了三个输入参数结合仓库源码与默认配置它们的完整语义如下参数名类型说明默认值运行时钳制范围CommandCommand多输入槽要被执行/节流的子图命令可连接多条输入null—RepeatCountInt32每次触发时子图重复执行的次数0 表示禁用10 ~ 100SkipFrameCountInt32触发前跳过的帧数调用次数实现抽帧减速00 ~ 10000三个参数的默认值均可在序列化文件 ExecRepeatedly.t3 中确认RepeatCount默认 1、SkipFrameCount默认 0、Command默认为空。RepeatCount单帧内的重复次数每次触发后Command 子图会被连续执行RepeatCount次从而在一帧内完成多次模拟步进等效于加速模拟例如把物理/粒子模拟跑得更快。设为0时操作符直接返回不执行任何命令可用于临时静音一段子图。源码中使用RepeatCount.GetValue(context).Clamp(0, 100)将输入钳制在 0100 之间超出范围的数值会被安全截断。SkipFrameCount触发前的跳过帧数每帧每次 Update 调用计数器_callsSinceLastRefresh自增 1当计数 SkipFrameCount时操作符直接返回不执行直到超过该值才触发一次执行并重置计数器。默认0表示每帧都触发保持与父图同步的逐帧行为。增大该值可让子图每隔 N1 帧才执行一次实现抽帧式减速与性能节省例如低频轮询、低频刷新数据。源码中该值被钳制在 010000。执行时序与底层实现ExecRepeatedly 的完整执行逻辑在 ExecRepeatedly.cs 的Update方法中实现。核心流程如下private void Update(EvaluationContext context) { _callsSinceLastRefresh; var repeatCount RepeatCount.GetValue(context).Clamp(0, 100); if (repeatCount 0) return; var skipFrames SkipFrameCount.GetValue(context).Clamp(0, 10000); if (_callsSinceLastRefresh skipFrames) return; _callsSinceLastRefresh 0; var commands Command.CollectedInputs; // 1. 准备阶段调用所有命令的 PrepareAction for (int i 0; i commands.Count; i) commands[i].Value?.PrepareAction?.Invoke(context); // 2. 执行阶段重复 repeatCount 次每次遍历所有命令取 GetValue for (int repeation 0; repeation repeatCount; repeation) { for (int i 0; i commands.Count; i) commands[i].GetValue(context); } // 3. 清理阶段调用所有命令的 RestoreAction for (int i 0; i commands.Count; i) commands[i].Value?.RestoreAction?.Invoke(context); Command.DirtyFlag.Clear(); }三段式命令生命周期与 Command.cs 中定义的PrepareAction/RestoreAction委托对应ExecRepeatedly 严格遵循准备 → 执行 → 清理的三段式生命周期先通过PrepareAction完成前置准备再按RepeatCount循环取用命令值最后以RestoreAction恢复上下文。这种结构保证了即便重复执行多次命令的副作用也能被正确归位。计数器语义触发后立即重置值得注意的实现细节_callsSinceLastRefresh在执行前被重置为 0而判定条件是 skipFrames。因此SkipFrameCount 0时每次调用计数为 1 0每帧都执行SkipFrameCount 2时第 1、2 次调用被跳过第 3 次触发执行形成每 3 帧执行一次的节奏触发当帧本身也算作一次调用因此实际执行周期为SkipFrameCount 1帧。触发语义逐帧持续触发与 ExecuteOnce.cs仅在Trigger输入变脏时执行一次并向外暴露OutputTrigger不同ExecRepeatedly 没有外部触发输入只要计数器条件满足就会持续执行属于节流型持续执行器而非一次性触发器。与同族操作符的定位对比在Lib.flow流程控制家族中ExecRepeatedly 与以下操作符承担不同职责选型时可对照操作符核心职责关键输入典型用途ExecRepeatedly控制子图执行频率RepeatCount、SkipFrameCount加速/减速模拟、抽帧优化Execute按使能开关执行子图Command、IsEnabled分组、启停部分图见 Execute.csExecuteOnce仅在触发时执行一次Command、Trigger初始化缓冲、重置状态见 ExecuteOnce.csLoop循环迭代子图并暴露索引/进度变量Command、Count、IndexVariable、ProgressVariable迭代绘制函数见 Loop.cs若只想每帧执行或按开关执行用Execute若想只在某个信号触发时跑一次用ExecuteOnce若想在一帧内按变量迭代多次用Loop若想以可控频率反复执行含重复多次与抽帧两种模式用ExecRepeatedly。典型实战场景场景一加速模拟把粒子系统、弹簧动画等模拟子图接入Command将RepeatCount设为 3~10注意源码钳制上限 100即可让同一帧内模拟步进多次产生时间加速效果。适合用于爆炸、快速生长等需要数倍速模拟的画面。场景二减速 / 抽帧执行将RepeatCount保持为 1SkipFrameCount设为 4则子图每 5 帧才执行一次常用于低频更新的辅助逻辑如远程数据轮询、低优先级刷新在不影响主渲染的前提下显著降低每帧计算开销。场景三结合 Command 生命周期做受控资源更新由于 ExecRepeatedly 遵循 Prepare/Execute/Restore 生命周期即使RepeatCount 1也能安全用于需要成对准备与恢复的资源更新场景不会因多次执行破坏上下文状态。使用建议与注意事项合理利用钳制范围RepeatCount上限 100、SkipFrameCount上限 10000超限值会被静默截断设计参数动画如用曲线驱动这两个输入时注意范围。组合使用可将 ExecRepeatedly 与Loop嵌套先节流外层频率、再在单次触发内迭代形成低频 多次的复合节奏。默认值即逐帧执行新建节点时RepeatCount 1、SkipFrameCount 0行为等价于普通逐帧执行可放心作为起点逐步调整。性能权衡加速模拟的本质是用单帧 CPU 时间换取更多模拟步进RepeatCount过大可能拉长单帧耗时建议结合实际帧率TiXL 的Playback.LastFrameDuration类时序数据逐步调试。参考资源官方算子文档.help/docs/operators/lib/flow/ExecRepeatedly.md、.help/docs/operators/lib/flow/README.md核心实现Operators/Lib/Symbols/flow/ExecRepeatedly.cs默认配置Operators/Lib/Symbols/flow/ExecRepeatedly.t3命令数据类型Core/DataTypes/Command.cs同族操作符Execute.cs、ExecuteOnce.cs、Loop.cs【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考