尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

TiXL 图构建实战指南:子图封装、上下文变量与流程控制

TiXL 图构建实战指南:子图封装、上下文变量与流程控制 TiXL 图构建实战指南子图封装、上下文变量与流程控制【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3本文是 TiXLTooll 3中关于构建 Operator 图的实战技术指南围绕官方 FAQ 文档 FaqBuildingContent.md 展开系统讲解子图subpatch的拆分时机、基于 Evaluation Context 的全局变量机制以及时间条件、分支切换等流程控制的四种实现方案。读完本文你将掌握如何在实时图形项目中把重复的 3D 场景、特效、排版与数学逻辑封装为可复用算子并学会用粒子年龄驱动缩放等典型技巧。何时创建子图Sub-Graph“是否应该把一段图封装成子图”本质上属于个人偏好问题但以下信号可以作为判断依据重复出现超过 2 次当你发现图的某一部分被重复放置多次两次以上时这通常是最强烈的抽象信号。常见的可泛化对象包括场景例如一个反复出现的 3D 元素特效例如一组组合使用的点修改器point modifiers排版元素例如开场标题中反复显示的名字数学逻辑例如计算某个元素尺寸的公共表达式。单个嵌套算子太小一个仅含 1 个算子的“子图”大概率过小了。大多数算子的内部规模在2 到 30 个算子之间。主输出即类型绝大多数算子只有一个主输出其输出类型直接决定了该算子在画布上的颜色只有极少数算子带有额外输出例如第二张贴图纹理。参数化成本极低为封装后的子图添加参数例如前面“标题”案例中的 Names 参数非常快你可以随时修改、重排或重命名这些参数这进一步降低了抽象的门槛。变量Variables机制变量如何工作在 TiXL 中变量是Evaluation Context求值上下文的组成部分。从源码看上下文内部按类型用字典存储变量见 EvaluationContext.csDictionarystring, bool BoolVariablesDictionarystring, int IntVariablesDictionarystring, float FloatVariablesDictionarystring, object ObjectVariables用于浮点、整数之外的对象Dictionarystring, string StringVariables每次求值周期开始Reset()这些字典都会被清空重建见 EvaluationContext.cs因此变量是“每帧有效”的临时通信手段而不是跨帧持久化存储。赋值与读取SetFloatVar / GetFloatVar由于变量随求值上下文传播你需要在图中尽早赋值——即靠近最终输出的“右侧”这样位于图“左侧”下游的子图才能读到它。实际操作符位于flow/context目录对应源码文件为SetFloatVar.cs写入浮点变量输入包括VariableName、FloatValue、可选的SubGraphCommand 输入以及ClearAfterExecution。其实现逻辑是若SubGraph有连接则先写入新值、执行子图执行完毕后再恢复此前保存的旧值这正是“子图中覆盖变量后自动恢复”的来源若子图未连接则直接写入context.FloatVariables[name]。SetBoolVar.cs、SetIntVar.cs分别对应布尔与整数变量。GetFloatVar.cs读取浮点变量。读取器还实现了ICustomDropdownHolder在编辑器里会基于当前上下文中已存在的变量名生成下拉候选列表同时提供FallbackDefault输入作为变量不存在时的回退值避免“取不到值”导致参数归零。典型应用场景如文档所述定义一批全局变量让各个子图根据 MIDI 输入等信息选择不同的变体variant——用SetFloat/SetBool等提前写入下游子图用GetFloatVar/GetBoolVar读取即可。子图中的覆盖与恢复文档强调“变量可以在子图中被覆盖先前的值会被恢复”。这一点在 SetFloatVar.cs 的实现中得到印证当SubGraph有输入连接时代码用TryGetValue保存previous子图求值完成后若存在旧值则恢复旧值否则根据ClearAfterExecution决定是否移除该变量。这保证了变量赋值具有词法作用域的语义——内层子图临时改值不会污染外层图。流程控制条件逻辑的四种方案文档以if(time 16.0 time 18.0) { ... }这类演出编排需求为例给出了四种实现思路按推荐程度排序方案一TimeClips最推荐TimeClips是最方便的条件控制方式尤其是当你正确设置 BPM 并启用时间线的bar-raster小节栅格模式后可以享受精确的吸附、剪切等时间线编辑能力。核心算子 TimeClip.cs 的求值逻辑为根据当前时间LocalFxTime与 clip 的TimeRange计算归一化时间并写入上下文变量_normalizedTime供 clip 内部内容读取实现区域映射依次对连接的 Command 执行PrepareAction、GetValue、RestoreAction即只在 clip 时间窗口内激活其内容。底层的时间映射由 Core/Animation/TimeClip.cs 提供MapTimelineToSource/MapSourceToTimeline实现时间线与源时间区间的仿射映射Speed与GetPlaybackSpeed处理变速播放SourceUnit则区分源区间以 Bars 还是 Seconds 计时音乐类内容用 Bars、音视频等墙钟媒体用 Seconds。所以 TimeClips 不仅能做“开/关”还能做时间重映射与变速。方案二Compare Execute/Group 的 Enabled 参数用[Compare]产生布尔结果配合布尔逻辑去驱动[Execute]或[Group]的Enabled参数。当条件为假时对应分支整体不被求值效果等同于停用。方案三动画 [Switch] 的索引[Switch]算子见 Switch.cs通过Index输入选择求值哪个分支其行为有明确的边界值语义索引指向已连接图的序号只求值该分支其余分支不会被求值这与“停用其他分支”等价-1全部禁用源码中index -1时直接返回不执行任何命令-2全部启用源码中遍历所有 command 依次执行并统一做恢复。从源码看Index为其它值时会取模index % commands.Count以支持循环切换并提供Count输出已连接命令数与OptimizeInvalidation仅失效被选中索引提升多分支下的求值性能。方案四禁用算子不推荐用于演出直接禁用算子连同其完整子图虽然简单但无法被动画化或通过参数控制因此不适合需要随时间切换的演出场景。实战用粒子年龄驱动缩放文档给出了一个经典案例把粒子年龄age从 0 增长到 1直接作为缩放因子时粒子会在“出生时尺寸为 0、死亡时尺寸最大”这通常与预期相反。期望的行为往往是粒子从 0 快速膨胀到最大尺寸随后再淡出回 0。推荐链路为[ParticleSystem] → [MapPointAttributes]Input Mode 设为 F1MapPointAttributes.cs 的输入模式枚举InputModes包括BufferOrder、F1、F2与Random把F1粒子的第一个浮点属性通道典型即年龄作为驱动源。真正实现“快速膨胀再淡出”需要组合其映射与写入模式Mapping映射模式Centered以 0.5 为中心、ForStart、PingPong、Repeat、UseOriginalW。其中PingPong可以让 0→1 的输入折返为 0→1→0天然形成“先增后减”的形状WriteTo写入目标可写回F1、F2或Scale——要实现尺寸变化应写入ScaleWriteMode写入方式Replace替换、Multiply相乘、Add叠加用于与粒子已有的缩放值组合MappingCurve接受一个Curve输入可以自定义非对称的缩放包络例如快速上升、缓慢衰减的 ADSR 式曲线这是实现“很快膨胀到最大、再淡出到 0”最灵活的手段其余输入如Range、Phase、Strength、StrengthFactor、Gradient、ValueTexture可用于进一步调整映射范围、相位偏移与颜色输出。粒子数据本体由 ParticleSystem.cs 承载包含ParticleBuffer、SpeedFactor、IsReset、InitializeVelocityFactor等字段MapPointAttributes 读取其缓冲并逐粒子改写属性输出新的BufferWithViews供渲染使用。文档中所举的[ParticleSystem] → [MapPointAttributes]即是在粒子缓冲上做属性重映射的标准管线。小结构建高质量 TiXL 图的核心方法论可以浓缩为三点用子图消化重复2~30 个算子的封装粒度、用上下文变量做跨子图通信在靠近输出的右侧赋值子图内覆盖自动恢复、用 TimeClips / Compare / Switch 做时间与分支控制牢记 Switch 的-1全关、-2全开语义。在此基础上粒子等数据对象的属性重映射如年龄驱动缩放只是 MapPointAttributes 这类算子对缓冲属性的常规操作组合好 Mapping、WriteTo 与 WriteMode 即可得到丰富的动态效果。【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表