
TiXL t3 编辑器 Timeline 详解以小节为单位的键帧动画与媒体轨道工作流【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3TiXLt3的 Timeline时间线是编辑器底部用于“随时间动画化参数”的核心视图你可以在这里为参数铺设键帧keyframe、对齐音乐小节播放并把 mp3、视频等媒体作为时间片段TimeClip直接拖入轨道。本文基于帮助文档 Timeline 的核心描述结合 Editor/Gui/Windows/TimeLine/ 目录下的真实实现源码完整拆解时间线的组成结构、时间系统、Dope sheet 键帧编辑、内嵌曲线编辑器以及媒体片段拖放与交叠淡变的底层机制。时间线在编辑器中的定位与整体结构帮助文档对 Timeline 的概括是时间线是你随时间动画参数、铺设键帧、并与音乐或音频轨道同步播放的地方它位于编辑器底部时间默认以“音乐小节bar”为单位运行使动画锁定在节拍上它承载了 Dope sheet键帧排列视图和一个可展开的 Animation area含内嵌 Curve editor。这一描述与源码完全对应。时间线画布由 TimeLineCanvas 实现它通过[HelpUiID(Timeline)]特性绑定到上述帮助条目构造函数中组装了各功能部件TimeLineCanvas.cs#L39-L62部件职责实现文件DopeSheetArea行式键帧视图Dope sheetDopeSheetArea.csTimelineCurveEditor曲线编辑器独立模式 内嵌模式共用TimelineCurveEditor.csClipArea媒体/数据片段轨道区TimeClips/ClipArea.csTimelineDetailsArea底部可展开细节面板曲线/数据剪辑编辑TimelineDetailsArea.csTimeSelectionRange/SelectionRangeIndicator时间选择范围与范围指示TimeSelectionRange.csKeySetStrip键帧簇指示条标尺下方KeySetStrip.csTimeWarpDrag分段线性时间变速warp拖拽引擎TimeWarpDrag.cs画布每帧的绘制流程Draw方法TimeLineCanvas.cs#L102-L321体现了“上部面板Dope sheet 片段轨道| 分割手柄 | 细节面板”的三层布局当有参数行被展开时细节面板曲线编辑器或 DataClip 编辑器占用时间线主体底部的一条区域否则 Dope sheet 独占全部空间。时间系统默认按小节计数多种标尺可切换“Time runs in musical bars by default时间默认以音乐小节为单位运行”这一点在源码中随处可见播放头位置统一用Playback.TimeInBars表示例如当前时间标记线绘制于_currentTimeMarker.DrawLineInCurrentWindow(Playback.TimeInBars, this)TimeLineCanvas.cs#L232背景点击跳转播放时间时也直接把鼠标横坐标反变换为 bars 写回Playback.TimeInBarsTimeLineCanvas.cs#L308-L319。播放核心逻辑位于 Core/Animation/Playback.cs。时间标尺由Raster子目录下的多个实现构成Editor/Gui/Windows/TimeLine/Raster/BeatTimeRaster.cs音乐小节/节拍标尺默认模式保证键帧落点与节拍对齐SiTimeRaster.cs按标准秒计时的标尺适合非音乐场景TimeRasterSwitcher.cs标尺切换器同时是吸附点源——拖键帧时会自动吸附到标尺刻度上。标尺切换器、循环范围、片段范围等都被注册为水平方向的“吸附吸引子”snap attractor见 TimeLineCanvas.cs#L50-L57这是时间线“动画锁定在节拍上”的机制保障无论拖键帧还是拖片段落点都会自动对齐小节/拍位或相邻片段边界。此外时间线还支持播放循环Playback.IsLooping时绘制可拖动的循环范围_loopRange与组合片段范围显示TimeLineCanvas.cs#L286-L295并内置“跳到下一个键帧/片段边界”的步进动作PlaybackJumpToNextKeyframe会遍历当前选中参数的曲线以及所有片段的首尾边界寻找最近落点TimeLineCanvas.cs#L473-L499方便逐镜头核对动画。Dope sheet行式键帧视图与自动固定帮助文档 DopeSheet.md 定义了 Dope sheet 的交互它是时间线的行式键帧视图可以跨所有动画参数拖拽、复制和变速retime键帧。默认只显示选中算子的键帧开启 auto-pin 后每个动画参数在切换算子时保持可见ShiftK清空已固定的参数集合按住 Alt 可在选中范围内投放 warp 点拉伸内部而不移动两端。源码印证如下DopeSheetArea.cs默认仅显示选中算子的键帧画布每帧调用GetAnimationParametersForSelectedNodes收集选中节点的动画参数TimeLineCanvas.cs#L111。自动固定auto-pin每行左侧有图钉按钮点击切换PinnedParametersHashes集合当UserSettings.Config.AutoPinAllAnimations为 true 时所有参数行自动进入固定状态DopeSheetArea.cs#L196-L217固定集合定义在 DopeSheetArea.cs#L459。时间变速Alt warp由 TimeWarpDrag.cs 实现注释明确其为“分段线性时间变速引擎”支持三种交互拖动内部 warp 手柄围绕该点做两段重映射、整段拖移等实现上把 warp 几何保持在播放时间轴上而键帧本身保存在各行的局部时间中TimeWarpDrag.cs#L60最终生成可撤销的MacroCommand(TimeWarp)TimeWarpDrag.cs#L175。键帧复制/粘贴由独立的 KeyframeCopyAndPasting.cs 实现粘贴到另一参数时首个键帧落在当前播放时间。键帧簇指示标尺下方的KeySetStrip把同一时刻的多个键帧聚合成簇指示器支持按簇选择减少逐键点击。Animation area 与内嵌曲线编辑器帮助文档 AnimationArea.md 描述Animation area 是时间线底部可展开的细节面板展开某个参数行后出现在 Dope sheet 下方与同一时间标尺对齐让你就地编辑数值与切线而不是切换视图拖动调整手柄可改变高度点击关闭按钮可收起。对应源码是 TimelineDetailsArea.cs它同时承载两种内容——内嵌曲线编辑器InlineCurveArea.cs或内嵌 DataClip 编辑器InlineDataClipArea.cs。几个关键实现细节按需注册SyncInlineCurveEditorRegistrationTimeLineCanvas.cs#L332-L347只在“DopeView 模式且存在展开的参数行”时把TimelineCurveEditor注册进吸附处理器与键帧编辑器组避免同一选择集被两个编辑器重复应用拖拽增量源码注释特别指出双注册会造成键帧抖动的反馈回路。高度约束细节面板激活时DetailsAreaHeight被钳制在 80px 到可用高度减 80px 之间TimeLineCanvas.cs#L210-L219默认 200px见下文持久化。滚轮缩放只作用于时间轴内嵌曲线布局下时间线画布是 U 轴时间权威子画布只管 V 轴数值ApplyZoomDelta会把缩放约束为(zoomDelta, 1)防止滚轮误缩放数值轴TimeLineCanvas.cs#L358-L380。键帧数值与切线的最终计算由核心层的曲线类型完成Core/Animation/Curve.cs配合 Core/Animation/ 下的各类插值器如BezierInterpolator、SplineInterpolator时间线只负责把编辑结果写回这些曲线。直接拖入 mp3媒体片段的创建流程文档指出“可以直接把 mp3 拖到时间线上添加音频片段”。其实现是通用的时间线片段拖放处理器 TimelineClipDrop支持两条入口TimelineClipDrop.cs#L36-L95资源库拖放载荷是资产地址已导入拖放到时间线区域任意位置即落地外部 OS 文件拖放来自系统文件管理器如直接拖 mp3会先经FileImport.TryImportDroppedFile导入项目资源包再创建片段。处理规则的关键点类型泛化任何声明了AssetType.TimelineClipOperator的资产类型音频、视频、DataClip 等都能拖入新片段类型“声明提示即可开箱即用”源码注释见 TimelineClipDrop.cs#L25-L33落点计算鼠标横坐标反变换为起始 bars 时间纵坐标取整到片段层LayerIndex并夹取到现有层范围附近TimelineClipDrop.cs#L197-L220时长探测创建前探测文件真实时长——MIDI 走 MidiFileToDataSet 缓存、音频走AudioMixerManager.TryProbeAudioDurationSecs、视频走VideoExport工厂探测TimelineClipDrop.cs#L226-L243拖悬过程中还会用异步时长缓存绘制“幽灵”预览框显示片段落地后的真实长度TimelineClipDrop.cs#L102-L143单条可撤销命令整个拖放是一个MacroCommand内部依次执行AddSymbolChildCommand在组合下创建算子、直接初始化TimeClip输出的TimeRange/SourceRange/LayerIndex、以及通用的ChangeInputValueCommand通过SymbolAnalysis.TryGetFileInputFromInstance找到文件路径输入并赋值为资产地址TimelineClipDrop.cs#L145-L195。因此一次拖放可以整体 Undo。内容片段用秒、其余用小节视频/音频等“内容片段”实现IContentTimeClip的SourceRange以秒为单位保存其他类型片段用 bars保证变速时源映射不失真TimelineClipDrop.cs#L163-L167批量拖入多个文件时后续文件自动叠到下一层避免互相覆盖TimelineClipDrop.cs#L87-L91。选中片段后还可以编辑其源区域SourceRegionIndicator.cs、时间范围与层序ClipSelection.cs拖选范围的边界时对片段执行的是“裁剪到边界”而非拉伸从而保持速度与源映射不变TimeLineCanvas.cs#L88-L97。两个片段时间重叠实现淡变crossfade文档还说明把两个片段在时间上重叠就会在它们之间产生淡变。从源码结构看片段音频统一汇入核心音频混音层Core/Audio/AudioMixerManager.cs 等重叠区间内两个片段的音频同时参与混音从而形成自然的交叉淡变片段体渲染由 AudioClipBodyRenderer.cs 完成播放时由组合算子中的 soundtrack 找到并绘制波形图PlaybackUtils.TryFindingSoundtrack→TimeLineImage.DrawTimeLineCanvas.cs#L165-L168。使用时只需把第二个音频片段的起点拖到与第一个片段的尾端重叠即可获得交叉过渡效果。时间线视图状态的持久化时间线的视图状态不是临时的每个符号的.t3ui文件Settings块下存有Timeline状态由 TimelineState 序列化。主要字段TimelineState.cs#L15-L45字段含义默认值ScaleX/ScrollX时间线水平缩放与滚动位置1 / 0Mode视图模式DopeView或CurveEditor字符串枚举存储DopeViewTimelineHeight时间线整体高度-1 为自动这是项目级窗口布局只有根符号的副本会被写入-1InlineDataClipEditEnabled内嵌 DataClip 编辑开关工具条 Record 按钮旁的图标切换falseDetailsAreaHeight内嵌细节面板曲线或 DataClip 编辑器共用一个高度的用户高度200pxSourceExtentStart/SourceExtentEnd作者标注的“有意义内容范围”以 bars 计当该符号作为时间片段使用时决定新实例的默认SourceRange未标注时为 null反序列化还带有向后兼容逻辑旧版.t3ui中的InlineDataClipStripHeight会前向迁移到DetailsAreaHeightTimelineState.cs#L90-L107。这也解释了文档中“拖动调整手柄给编辑器更多空间”的行为——手柄改变的就是这个被持久化的DetailsAreaHeight。小结与延伸阅读Timeline 的设计可以概括为三层以 bars 为统一时间轴的小节感知标尺系统、行式键帧编辑的 Dope sheet含固定、warp、复制粘贴、以及可展开的内嵌曲线/数据细节面板媒体片段则通过通用拖放管线以可撤销命令的形式进入同一时间轴重叠即淡变。想继续深入建议按以下路径阅读时间线画布主逻辑TimeLineCanvas.csDope sheet 行渲染与固定DopeSheetArea.cs时间变速引擎TimeWarpDrag.cs媒体拖放与时长探测TimelineClipDrop.cs曲线数据结构与插值Core/Animation/Curve.cs 与 Core/Animation/ 目录相关帮助条目DopeSheet.md、AnimationArea.md、CurveEditor.md【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考