ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

TiXL SetFloatVar 算子详解:在求值上下文(Context)中写入与传递浮点变量的实战指南

TiXL SetFloatVar 算子详解:在求值上下文(Context)中写入与传递浮点变量的实战指南 TiXL SetFloatVar 算子详解在求值上下文Context中写入与传递浮点变量的实战指南【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3导读SetFloatVar是 TiXL实时图形合成与 VJ 创作工具Lib.flow.context算子库中的核心上下文算子用于把单个浮点值写入求值上下文EvaluationContext的浮点变量字典供图中更靠下游的GetFloatVar读取。本文以 SetFloatVar.md 为主线结合其 源码实现、配套示例 SetContextVariableExample.t3 与编辑器节点 UI完整讲解它的全部输入输出、作用域与清理语义、典型接线方式以及它与GetFloatVar、Loop配合实现一处计算、多处复用的实用模式。一、算子速览功能与定位SetFloatVar位于Lib.flow.context算子库官方描述为Writes a float value to the contexts float variable dictionary. UseGetFloatVarto read this value further down the graph.即把一个 float 值写入当前求值上下文的浮点变量字典再通过更下游的 GetFloatVar 读取该值。它的输出类型是T3.Core.DataTypes.Command因此本质上是一个沿数据流执行动作的命令类算子常用于在节点图中共享参数、跨分支传递数值。该算子家族还包括SetBoolVar、SetIntVar、SetStringVar、SetVec3Var、SetMatrixVar、SetObjectVar等完整列表见 Lib.flow.context 目录本文聚焦浮点版本。二、输入参数与输出完整说明原文档给出了完整的输入/输出清单整理如下含类型与用途解读输入参数Input Parameters名称相关度与类型说明FloatValue(Single)要写入变量的浮点值。可来自常量、数值动画、Multiply等任意输出Single的算子VariableName(String)变量名字典 Key。同一名字在GetFloatVar中引用时必须完全一致大小写敏感SubGraph(Command)可选子图。若接入命令SetFloatVar会先写入变量、再执行该子图执行后按规则恢复/清理变量见第三节作用域语义ClearAfterExecution(Boolean)仅在SubGraph接入时生效子图执行完毕后是否删除该变量默认关闭输出Outputs名称类型OutputT3.Core.DataTypes.Command输出为 Command可继续级联驱动后续命令算子或绘制算子。三、源码级原理写入、作用域与清理语义SetFloatVar的实现非常精简位于 SetFloatVar.csLib.flow.context命名空间InstanceSetFloatVar单例算子。核心执行逻辑在Update(EvaluationContext context)方法中var name VariableName.GetValue(context); var newValue FloatValue.GetValue(context); var clearAfterExecution ClearAfterExecution.GetValue(context); if (string.IsNullOrEmpty(name)) { Log.Warning($Cant set variable with invalid name {name}, this); return; } if (SubGraph.HasInputConnections) { var hadPreviousValue context.FloatVariables.TryGetValue(name, out var previous); context.FloatVariables[name] newValue; SubGraph.GetValue(context); if (hadPreviousValue) { context.FloatVariables[name] previous; // 恢复旧值 } else if (!clearAfterExecution) { context.FloatVariables.Remove(name); // 删除本次写入的变量 } } else { context.FloatVariables[name] newValue; // 简单写入持续生效 }由此可以提炼出四个关键语义空名保护当VariableName为空字符串或null时直接跳过写入并向日志输出警告Cant set variable with invalid name避免污染字典。简单写入模式SubGraph未接线时仅执行context.FloatVariables[name] newValue变量持续存在于字典中供后续下游GetFloatVar读取。子图作用域模式SubGraph接线后形成临时作用域——先备份旧值若存在写入新值执行子图子图结束后恢复旧值若原本无旧值且未勾选ClearAfterExecution则删除该变量防止泄漏到兄弟分支。ClearAfterExecution 的精确含义它只影响原本不存在的变量。若变量在被写入前已存在无论该开关如何执行完毕后都会恢复旧值若此前不存在勾选后子图执行完会保留该值不清理不勾选则删除。底层字典FloatVariables浮点变量实际存放在EvaluationContext的FloatVariables字典中Dictionarystring, float见 EvaluationContext.cs。该字典在每帧求值开始时被清空FloatVariables.Clear()见同文件第 51 行附近意味着上下文变量的生命周期严格限定在当前帧的求值过程中这正是按帧流动的数据传递设计。四、实战接线与 GetFloatVar 配对使用最典型的用法是上游写入、下游读取。以仓库自带的官方示例 SetContextVariableExample.t3对应可视化工程 SetContextVariableExample.t3ui为例一个SetFloatVar将FloatValue 0.19写入VariableName size图中两处GetFloatVarSymbolId均为e6072ecf-30d2-4c52-afa1-3b195d61617b都以VariableName size读取该值其中一个读取结果送入MultiplyB 2.0后驱动第一份TorusMesh的 Segments另一个直接驱动第二份TorusMesh。这条链路展示了该模式的典型价值同一个数值如尺寸、强度只需在一处计算/动画就能在下游多个分支中一致复用无需重复拖线也便于整体调参。GetFloatVar 侧要点对应读取算子 GetFloatVar 提供VariableName(String)要读取的变量名必须与SetFloatVar写入的名字完全一致FallbackDefault(Single)变量不存在时的兜底默认值避免读取到空值导致下游异常输出Result(System.Single)。五、进阶模式与 Loop 配合传递归一化进度原文档及 GetFloatVar 中特别强调了一个高频实战场景——与Loop算子搭配If youre using this together withLoop, dont forget to use f as the normalized progress variable.在循环结构中Loop 的归一化进度变量习惯上命名为f此时GetFloatVar的VariableName应填f。其意义在于通过上下文变量把当前循环进度这一浮点值传递给子图内的多个算子让它们基于同一进度协同变化例如位置、缩放、透明度共同随f演化。这是上下文变量机制在多实例/循环场景下避免重复计算、保证各读取点取值一致的关键细节。六、编辑器内交互SetFloatVar 的自定义节点 UISetFloatVar在节点编辑器中有专门的自定义 UI见 SetFloatVarUi.cs节点标题默认显示为Set float: 变量名例如Set float: size若该节点实例被命名则显示实例名方便一眼识别写入目标节点主体直接以0.000三位小数格式显示当前FloatValue便于在图中直观核对数值鼠标悬停时编辑器会通过DrawVariableReferences绘制变量引用参考线高亮图中所有引用同名变量的GetFloatVar其 GUID 为e6072ecf-30d2-4c52-afa1-3b195d61617b帮助快速定位谁在写、谁在读该 UI 还返回PreventInputLabels与PreventOpenSubGraph标志隐藏常规输入标签并阻止误展开子图保持节点区域整洁。七、工程化实践建议结合上述实现语义总结几条可直接落地的使用规范命名一致性写入与读取的VariableName必须逐字符一致建议使用简短、有语义的小写标识如size、f、progress并避免与项目内其他变量重名。善用子图作用域需要在某一小段子图内临时改变某变量、执行完即还原时务必把这段逻辑挂到SubGraph输入上利用其自动恢复旧值的机制防止变量泄漏影响兄弟分支。理解 ClearAfterExecution若子图执行后希望变量继续存活供分支外下游读取勾选ClearAfterExecution否则保持默认让其随作用域结束自动清理。配合 FallbackDefault读取侧尽量为GetFloatVar配置合理的FallbackDefault应对变量未写入如分支未执行的帧。注意帧生命周期FloatVariables字典每帧求值开始时被清空因此不要指望上下文变量跨帧持续存在跨帧状态应使用算子的持久输入或项目参数完成。总结SetFloatVar虽然接口简单1 个浮点输入 1 个字符串名 可选子图但其背后承载了 TiXL 上下文变量机制的精髓以帧为生命周期的浮点字典、子图级作用域与自动恢复、以及一处写入、多处读取的数据流共享范式。结合GetFloatVar、Loop的f惯例以及仓库自带的 SetContextVariableExample 示例即可在实时图形项目中优雅地组织跨分支参数传递显著减少重复计算与连线复杂度。【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表