TiXL 节点详解:FluidFeedback —— 位移驱动型流体反馈效果实战指南
【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3
导读
FluidFeedback 是 TiXL 图像反馈(feedback)节点族中的代表性示例,其核心思路是"将上一帧输出与当前画面反复合成,并叠加位移(displacement)扰动",从而产生流动、融化、扩散等流体质感。本文以官方文档为主体,结合仓库中的节点定义(.cs)、图结构(.t3/.t3ui)与示例工程,完整解读该节点的 12 个输入参数、内部渲染链路与调参思路,并给出与 AdvancedFeedback、AfterGlow2 等兄弟节点的选型建议,帮助读者在实时视觉项目中快速落地。
1. 节点定位:它是什么,解决什么问题
FluidFeedback 属于 Lib.image.fx.feedback 反馈节点族。官方文档对其定位只有一句话:
An example of how feedback combined with displacement can lead to a variety of effects.
即"反馈 + 位移可以组合出多种效果"。它的核心机理是帧间自反馈(recursive feedback):
- 将上一步渲染结果写回一个循环缓冲区(RenderTarget);
- 下一帧开始时,把当前画面与该缓冲区内容再次合成;
- 在合成路径上插入位移(Displace)、模糊(Blur)与几何变换(缩放/旋转/偏移);
- 每一帧的结果都会成为下一帧的输入,由此积累出持续的流体运动感。
这种结构非常适合实时视觉(VJ、livecoding、生成艺术)场景——同一段素材在不同参数下会演化出完全不同的质感,这正是文档中"a variety of effects"的含义。
2. 输入参数全解析(含默认值与推荐调节范围)
文档给出的输入参数表共 12 项。下面结合 FluidFeedback.t3 中保存的默认值,逐一说明其作用与调参方向:
| 参数名 | 类型/相关性 | 默认值 | 作用说明 |
|---|---|---|---|
| Command | Command(必需) | null | 驱动节点执行的命令输入,提供画面来源或渲染触发,是整条反馈链的入口,必须接入 |
| Displacement | Single | 15.0 | 位移强度。控制 Displace 节点的核心扰动幅度,数值越大流体感越强,过大则画面破碎 |
| Shade | Single | 0.4 | 着色/暗部强度。影响位移通道的明暗处理,通常配合 Displacement 微调出层次感 |
| BlurRadius | Single | 4.0 | 模糊半径。作为 Blur 子节点的 Size,控制反馈图像的软化程度,越大越"弥散" |
| SampleDistance | Single | -0.07 | 位移采样距离。微调位移的取样偏移,改变流动方向与细腻度 |
| Twist | Single | 140.0 | 扭转强度。使位移场发生旋转扭曲,是制造漩涡、卷曲效果的关键参数 |
| Zoom | Single | 1.002 | 每帧缩放比例。默认 1.002 意味着反馈图像每帧略微放大,产生缓慢向内的收缩/推进感 |
| Rotate | Single | 0.0 | 每帧旋转角度(度)。持续旋转反馈图像,配合 Twist 可产生螺旋运动 |
| Offset | Vector2 | (0, 0) | 反馈层的位置偏移。用于漂移、漂移路径动画 |
| DisplaceOffset | Single | 0.06 | 位移偏移量。整体平移位移场,影响流动的起始相位 |
| Reset | Boolean | false | 重置反馈缓冲区。置为 true 时立即清空循环缓冲,重新开始积累,适合换段、切场景 |
| IsEnabled | Boolean | true | 总开关。关闭后节点不再更新反馈循环 |
默认值均来自 FluidFeedback.t3 的
Inputs段;输入槽的类型定义见 FluidFeedback.cs,其中Command使用MultiInputSlot,支持接入多个命令来源。
3. 输出
| 输出名 | 类型 | 说明 |
|---|---|---|
| ColorBuffer | T3.Core.DataTypes.Texture2D | 反馈循环最终合成的 2D 纹理,可继续接入下游图像/视频/合成节点 |
在 FluidFeedback.cs 中,输出槽为Slot<Texture2D>,其数据源是内部 RenderTarget 子节点的输出(见下文第 4 节连接关系)。
4. 内部实现:从 .t3 图结构还原反馈链路
FluidFeedback 不是一行 shader,而是一个由 13 个子节点组成的宏节点(macro symbol)。从 FluidFeedback.t3 的Children与Connections可以完整还原它的内部数据流,这也是理解参数语义的关键。
4.1 参与节点清单
| 子节点 | 作用 |
|---|---|
| Displace | 位移核心:把Displacement × 0.01、Shade × 0.01、DisplaceOffset × 0.01、Twist接入其位移参数,图像源来自 UseTextureReference(引用循环缓冲区纹理) |
| Blur | 模糊:BlurRadius接入其 Size 输入;内部默认 Samples=30、Size=1.99 |
| Layer2d | 几何变换:Zoom接入 Scale、Rotate接入旋转、Offset接入 Position;默认 Scale=0.998、Position=(0, 0.003)、关闭深度测试与混合 |
| Execute | 执行控制:接收 Command 输入与 Layer2d 的渲染内容 |
| DrawScreenQuad | 绘制全屏四边形,作为反馈内容的一条分支 |
| Switch | 双路切换:Index 决定使用"绘制分支"还是"反馈分支" |
| RenderTarget | 反馈缓冲区:默认开启 Clear、带深度缓冲、4x 多重采样,负责承接与输出合成结果 |
| HasTimeChanged | 时间变化检测:Mode=1,用于判断是否应推进反馈 |
| And | 逻辑与:将IsEnabled与 HasTimeChanged 的结果合并 |
| BoolToInt ×2 | 布尔转整数:一个将 Reset(true→2)转换,一个将"启用"逻辑(true→1/false→0)转换,共同驱动 Switch 的 Index |
| Multiply ×3 | 缩放:将各 Single 参数乘以 0.01 后送入 Displace,便于用户用较大的数调节 |
4.2 关键数据流(依据 Connections 段还原)
- 位移参数链路:
Displacement → Multiply(×0.01) → Displace.Displacement;Shade → Multiply(×0.01) → Displace.Shade;DisplaceOffset → Multiply(×0.01) → Displace.DisplacementOffset;Twist → Displace.Twist;循环纹理经UseTextureReference → Displace.Image。 - 反馈循环:
Displace 输出 → Layer2d(缩放/旋转/偏移) → Execute → Switch 分支2;同时DrawScreenQuad → Switch 分支1;RenderTarget接收 Switch 输出作为渲染内容,其输出再作为ColorBuffer输出,并经由 UseTextureReference 回到 Displace 形成自反馈闭环。 - 开关/重置逻辑:
IsEnabled ∧ HasTimeChanged → BoolToInt → Switch.Index(false→0 走绘制分支,true→1 走反馈分支);Reset → BoolToInt(true→2) → Switch.Index,强制切换到清屏绘制分支,从而"重置"反馈积累。
由此可以看出:文档参数表中的每个参数都对应图内一个明确的子节点输入,调节参数的本质是调节内部反馈链路的某个环节。
4.3 界面分组线索
从 FluidFeedback.t3ui 的InputUis可见,官方在参数面板上对常用参数做了分组提示:Displacement属于Feedback组,Twist属于Movement组,Offset增加了间距(AddPadding),Command标记为 Required(必需)。这提示了推荐的第一层调参顺序:先调 Feedback 组定强度,再调 Movement 组定运动。
5. 实战调参:从默认值出发的四种典型质感
以默认值为基准(FluidFeedback.t3),可快速演化出不同风格:
- 温和熔蜡:保持
Displacement≈15、BlurRadius≈4,将Zoom降到 1.0 附近并Rotate设为 0.01~0.1,得到缓慢扩散、边缘软化的熔融感。 - 漩涡扭曲:大幅提高
Twist(如 300~800),配合正负SampleDistance调整流动方向,画面出现卷曲与螺旋。 - 漂移粒子感:将
Offset用时间曲线(如正弦)驱动,让反馈层来回漂移,配合中等Shade突出明暗层次。 - 场景切换:在新段落开始时把
Reset触发为 true 一帧,清空缓冲再关闭,避免旧画面的残影污染新内容。
6. 仓库中的真实使用案例
FluidFeedback 在示例库中已有落地作品,可直接作为参考模板:
- FluidFireLogo.t3ui:官方描述为"SVG 线条动画与 FluidFeedback 结合,模拟火焰燃烧"——这是"反馈制造流动能量感"的典型示范。
- VJSpermZoomer.t3ui:描述为"Weird experiment with FluidFeedback effect",展示了其在 VJ 场景下的实验性使用。
- FadingFaces.t3ui:将 FluidFeedback 用于人脸/图像的渐变消散效果。
这些示例均位于 Operators/examples/Symbols/user/pixtur 下,可直接在编辑器中打开观察其参数接线方式。
7. 与同族节点如何选型
同目录下还有多个反馈节点,选型建议如下:
| 节点 | 特点 | 适用场景 |
|---|---|---|
| FluidFeedback(本文) | 结构简单直观,参数少,反馈+位移核心思路清晰 | 快速出流体质感、学习反馈原理 |
| AdvancedFeedback | 在 FluidFeedback 基础上增加边缘检测(DetectEdges)、色相/饱和度/亮度偏移、限制亮部、边缘增强等参数,并把反馈缓冲区稳定到有效数值范围,避免过黑或过亮 | 需要更强可控性与色彩处理的进阶使用(参数差异见 AdvancedFeedback.md) |
| AdvancedFeedback2 | 基于 OKLab 色彩空间的改进版反馈,色彩混合更自然 | 注重色彩保真的高级反馈场景 |
| AfterGlow2 | 面向运动图像的余辉(残影)效果,与反馈类节点互补 | 拖尾、光轨类效果(详见 AfterGlow2.md) |
三者的官方对照关系记录在反馈族目录 README.md:AdvancedFeedback 被描述为"FluidFeedback 的更通用但更难控制的进阶版",AdvancedFeedback2 则强调 OKLab 色彩空间。
8. 小结
FluidFeedback 以最少的参数封装了"反馈 + 位移"这一实时视觉中的经典范式:循环缓冲(RenderTarget)+ 位移扰动(Displace)+ 软化(Blur)+ 几何变换(Zoom/Rotate/Offset),并通过 Reset/IsEnabled 完成生命周期控制。掌握它的内部图结构后,读者可以:
- 在编辑器中打开 FluidFeedback.t3 直接观察/复制其反馈链路,改造出属于自己的反馈效果;
- 结合文档参数表与默认值快速调出四种以上的视觉质感;
- 在需要更复杂控制时平滑迁移到 AdvancedFeedback 与 AdvancedFeedback2。
本文中所有参数默认值、子节点构成与连接关系均取自仓库内的 FluidFeedback.t3、FluidFeedback.cs 与 FluidFeedback.t3ui 文件,可自行打开核对。
【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考