TiXL Composition 概念详解:理解你在节点图嵌套结构中的当前位置 TiXL Composition 概念详解理解你在节点图嵌套结构中的当前位置【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3导读Composition合成是 TiXL 中一个看似简单却贯穿全局的核心概念它就是你当前在 Graph 窗口中打开、正在编辑和查看的那个算子Operator即当前正在编辑的子图。理解 Composition 意味着理解 TiXL 的嵌套项目结构、Graph 窗口与 Output 窗口之间的驱动关系以及进入算子和退出算子的导航模型。本文以 Composition.md 为骨架结合仓库源码深入剖析 Composition 的定义、运行时实现、层级导航与项目设置关联帮助你在 TiXL 中高效组织大型实时图形项目。一、Composition 是什么根据 Composition.md 的权威定义Composition是你当前在 Graph 窗口中打开的算子——即你正在编辑和查看内容的那个子图。在 TiXL 中每个算子Operator都可以嵌套其他算子。当你深入dive into一个算子时它就变成了活动的 Compositionactive composition并且它的输出会驱动Output 窗口OutputWindow.md你放置place、连接wire和动画animate的一切内容都发生在当前 Composition 内部当你返回stepping back out时就回到了它的父级 Composition。官方文档用一句非常形象的话总结把 Composition 理解为你在项目嵌套结构中所处的位置where you are in the nested structure of a project。在 ui-topics.md 的 UI Topic 注册表中Composition 被登记为独立话题id: Composition并标注其对应的核心实现类为Instanceclasses: Instance这为我们后续从源码层面理解 Composition 提供了入口。二、进入与退出Composition 的导航模型2.1 深入算子Dive Into在 Graph 窗口Graph.md中双击或打开一个算子即可深入其内部图打开后该算子成为当前活动的 CompositionGraph 窗口显示的是这个 Composition 的内部子图其子算子与连线你在其中添加的所有算子都成为该 Composition 的子实例child instances。2.2 返回父级Step Back Out退出当前 Composition 的方式是回到它的父级。这正是 GraphTitleAndBreadCrumbs.cs 所实现的面包屑导航breadcrumbs编辑器通过Structure.CollectParentInstances(composition.Instance)收集当前实例的全部祖先实例并把它们渲染成 Graph 窗口顶部的面包屑按钮序列见该文件第 41 行点击任意一个祖先按钮就会调用projectView.TrySetCompositionOpToParent()把当前 Composition 切换回该祖先第 76 行面包屑从项目根一路展开到当前 Composition直观呈现你在嵌套结构中的位置。2.3 Composition 与项目层级由于 TiXL 的算子可以无限嵌套一个算子内部还可以有算子项目实际上构成一棵算子树。Composition 就是你在遍历这棵树时当前停留的节点根级 Composition项目顶层算子没有父级子 Composition嵌套在其他算子内部的算子其父级是外层的 Composition。从源码看运行时这一层级关系由 Instance.cs 中的Instance.Parent父实例与ChildrenInstanceChildren.cs子实例集合双向维护。每一个Instance都通过InstancePath记录自己在整棵树中的全局 GUID 路径见 Instance.cs这正是面包屑导航与子实例查找_childSearchPath机制能够高效工作的基础。三、Composition 与 Output 窗口的驱动关系文档明确指出一旦深入某个算子它的输出就驱动 Output 窗口。OutputWindow.md 对此作了呼应Output 窗口显示所选算子的渲染结果——你正在构建的图像或 3D 场景。也就是说你深入算子 A → A 成为活动 Composition → A 的输出渲染到 Output 窗口这个模型带来的实际体验是所见即所得你在 Graph 中调整参数Output 窗口实时显示当前 Composition 的输出画面逐层验证你可以先在最内层算子中调试单一效果再逐级返回父级 Composition验证该效果在整体场景中的表现渲染与编辑同步TiXL 的 UI 刷新率与 Output 窗口的渲染直接同步参见 Concepts.md 中关于实时渲染的说明因此当前 Composition 的场景复杂度直接影响编辑器的响应速度。四、Composition 的运行时实现Instance 类文档在 ui-topics.md 中把 Composition 对应到Instance类这一映射关系值得深入展开。4.1 Symbol 与 Instance 的分工要理解 Composition必须先区分两个概念详见 Symbol.md 与 Concepts.mdSymbol算子的可复用定义包含其输入、输出和内部图结构。每当你把一组子图打包成新算子你就创建了一个 Symbol编辑它会影响所有使用它的地方InstanceSymbol 的运行时实例即放在某个 Composition 内部的那一份算子。两者关系在 Instance.cs 中直接体现public abstract partial class Instance : IGuidPathContainer, IResourceConsumer { public abstract Symbol Symbol { get; } public Symbol.Child SymbolChild { get; private set; } public InstanceChildren Children { get; private set; } public IReadOnlyListGuid InstancePath { get; private set; } }4.2 Composition 即正在被查看的 Instance从源码结构可以推断当前活动的 Composition本质上是正在被编辑器聚焦查看的那个Instance它的内部子图由ChildrenInstanceChildren集合承载每个子实例又可能嵌套更深层的子图Instance.Initialize()Instance.cs负责初始化子实例、排序输入槽、标记资源文件夹等保证 Composition 内部结构在进入时处于可用状态。4.3 子实例的按需创建InstanceChildren.cs 展示了 Composition 内部子实例的按需实例化机制TryGetChildInstance通过_childSearchPath缓存的 GUID 搜索路径查找或创建子实例allowCreate参数控制是否允许创建。这意味着 Composition 的运行时结构是按需展开的——只有被访问的子图才会被实例化这保证了大型嵌套项目在导航时的高效性。五、Composition 与项目设置CompositionSettings5.1 设置跟随 CompositionTiXL 的项目设置是跟随 Composition 存在并向下继承的。ProjectSettings.md 开篇即说明Settings live on a composition and are inherited by everything inside it.设置存在于 Composition 之上并被其内部的一切内容继承。窗口顶部的复选框Specify settings for …控制当前 Composition 是定义自己的设置还是继承父级的设置。5.2 源码中的实现这一机制在 CompositionSettings.cs 中得到印证/// Per-symbol project settings including playback configuration (soundtrack, BPM, audio input). /// Stored in .t3 files. Found via breadcrumb traversal up the graph hierarchy. public sealed class CompositionSettings关键实现点访问入口CompositionSettings.Current Animation.Playback.Current?.Settings ?? Defaults第 32 行——当前活动的回放对象Playback挂载着设置从而把当前 Composition与当前设置绑定在一起序列化设置以ProjectSettings键写入算子的.t3定义文件WriteToJson第 204 行起并支持从旧版PlaybackSettings键迁移ReadFromJson第 293 行起设置分组设置分为PlaybackBPM、音频源、节拍锁定等、Audio混音音量、重同步阈值、Export导出可执行文件参数和Proxy预览代理转码参数四组全部内嵌在 Composition 定义中随项目迁移主音轨查找TryGetMainSoundtrack第 41 行通过沿图层级向上遍历breadcrumb traversal查找主音轨与文档中设置被 Composition 内部一切内容继承的描述一致。5.3 Playback 与 Composition 的关系Playback.cs 进一步串联了 Composition 与时间/回放public class Playback { public static Playback Current { get; set; } public CompositionSettings Settings { get; set; } public double TimeInBars { get; set; } public double Bpm { get; set; } 120.0; }TiXL 中的所有时间都以**小节bar**为单位120 BPM 下 1 小节 2 秒见 Playback.cs。当前 Composition 的回放参数BPM、循环范围、播放速度正是通过Playback.Current与 Composition 的设置关联的。这也解释了为什么在 Composition 中调整 BPM 会立刻影响整个子图的关键帧与动画速度。六、Composition 视角下的典型工作流综合以上内容Composition 在实际项目中的典型使用方式如下6.1 逐层构建与调试从项目根级 Composition 开始双击空白处通过 Symbol Browser 添加算子深入某个算子进入其内部 Composition逐层添加、连接、动画化子算子每层 Composition 的输出都可在 Output 窗口实时预览逐层验证效果通过面包屑导航GraphTitleAndBreadCrumbs.cs随时返回任意父级 Composition。6.2 设置随 Composition 继承在顶层 Composition 的 Project Settings 中配置项目级参数BPM、主音轨、导出默认值进入嵌套的子 Composition若其继承父级设置则无需重复配置需要独立行为时勾选Specify settings for …为该 Composition 单独定义设置随.t3文件保存随项目分发见 CompositionSettings.cs 的序列化实现。6.3 组织大型项目将可复用的效果打包为 Symbol在各 Composition 中作为子实例复用利用嵌套 Composition 形成清晰的职责层级全局场景 → 分组效果 → 单元素控制当渲染性能成为瓶颈时优先检查当前 Composition 内的高开销算子——因为 Output 窗口渲染的正是当前 Composition 的输出见 Concepts.md 中关于实时渲染与 UI 刷新率同步的说明。七、总结Composition 是 TiXL 嵌套项目模型的核心导航概念维度说明定义当前在 Graph 窗口中打开、正在编辑的算子子图导航深入算子进入其 Composition面包屑返回父级输出活动 Composition 的输出驱动 Output 窗口运行时对应Instance类Instance.cs子图由InstanceChildren承载设置项目设置挂在 Composition 上并向下继承CompositionSettings.cs时间通过Playback.CurrentPlayback.cs以小节为单位驱动理解了Composition 你在项目嵌套结构中的位置这一核心隐喻你就掌握了 TiXL 从单算子调试到大型实时图形项目组织的关键心智模型。更多关联概念可继续阅读 Graph.md主画布、OutputWindow.md输出查看器、Symbol.md可复用定义与 ProjectSettings.md随 Composition 继承的项目设置。【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考