TiXL 图像反馈特效算子家族指南:Lib.image.fx.feedback 全部 7 个 Feedback 算子解析
【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3
本指南以 TiXL(开源实时动态图形创作软件)算子库中的Lib.image.fx.feedback模块为核心,系统讲解反馈(Feedback)类图像特效算子的分类、参数语义与源码级实现。读完本文,你将掌握 FluidFeedback、AdvancedFeedback、AdvancedFeedback2、AfterGlow/AfterGlow2、SimpleLiquid/SimpleLiquid2 七种算子的适用场景、完整输入输出参数含义,以及它们背后共享的"反馈缓冲 + 空间变换 + 色彩重塑"通用架构,可直接在 TiXL 的实时视觉项目中组合出流动液体、拖尾余晖、有机形变等动态效果。
反馈特效的基本原理:为什么 Feedback 算子家族如此强大
反馈(Feedback)特效是实时动态图形(Realtime Motion Graphics)中最经典的视觉手法之一:将当前渲染帧输出到一张纹理,再在下一帧将其作为输入采样回来,与实时画面叠加、扭曲或变换。只要叠加的权重、位移、缩放、旋转与色彩偏移存在差异,每一帧都会在上一帧的基础上累积演化,从而产生流动、拖尾、无限延伸的视觉结果。
在 TiXL 中,整个反馈算子家族位于Lib.image.fx.feedback命名空间下,对应的源文件集中在 Operators/Lib/Symbols/image/fx/feedback/ 目录。从文档结构看,该模块被分为两条产品线:
- 实时帧反馈线:
FluidFeedback→AdvancedFeedback→AdvancedFeedback2,它们以Command(渲染指令)为输入、以ColorBuffer纹理为输出,将上一帧的渲染结果喂回自身,适合直接嵌入渲染管线形成自反馈循环; - 输入图像残影线:
AfterGlow/AfterGlow2,以现成Texture2D图像为输入,输出叠加了"余晖"(afterglow)的合成结果; - 物理流体模拟线:
SimpleLiquid/SimpleLiquid2,移植自 Shadertoy 的"简单精细流体"演示,输出ColorBuffer纹理,用于实时水/墨/流体质感。
官方文档在 feedback/README.md 中明确标注了该目录由算子库自动生成(Auto-generated from the operator library),因此每个算子页的输入输出表与源码中的槽位声明是一一对应的,可作为可靠的功能契约来阅读。
FluidFeedback:反馈与置换(Displacement)结合的入门典范
FluidFeedback被官方文档定位为"反馈与置换结合可以产生多种效果"的示例算子(见 FluidFeedback.md)。它是整个反馈家族中最易于上手的入口:把上一帧画面按一定的置换强度扭曲后与本帧叠加,即可得到类似流体翻涌的视觉效果。
在源码 FluidFeedback.cs 中,该算子的 GUID 为f9d453d1-04d9-43ef-9189-50008f93bcc2,输出为Slot<Texture2D>类型的ColorBuffer,输入槽全部以InputSlot<float>/InputSlot<Vector2>/InputSlot<bool>声明,与文档参数表完全吻合。
输入参数表
| 名称(类型) | 说明 |
|---|---|
| Command(Command,必填) | 渲染指令输入,通常连接需要进入反馈循环的绘制操作 |
| Displacement(Single) | 置换强度,控制上一帧画面被扭曲的幅度 |
| Shade(Single) | 着色/明暗调节,影响反馈累积的亮度层次 |
| BlurRadius(Single) | 反馈缓冲的模糊半径,模糊可柔化拖尾细节 |
| SampleDistance(Single) | 采样距离,决定置换采样的偏移范围 |
| Twist(Single) | 扭曲(旋转缠绕)强度 |
| Zoom(Single) | 缩放,大于 1 放大、小于 1 缩小反馈画面 |
| Rotate(Single) | 旋转反馈画面的角度 |
| Offset(Vector2) | 二维平移偏移 |
| DisplaceOffset(Single) | 置换偏移量 |
| Reset(Boolean) | 触发时清空反馈缓冲,用于重新开始演化 |
| IsEnabled(Boolean) | 总开关,关闭时反馈循环暂停 |
输出
| 名称 | 类型 |
|---|---|
| ColorBuffer | T3.Core.DataTypes.Texture2D |
使用要点
Reset是反馈类算子最重要的控制信号:反馈系统是"有记忆"的,一旦画面污染或需要切换视觉状态,必须用Reset清空历史缓冲。Zoom与Rotate组合可以做出经典的"万花筒式无限收缩/旋转"效果;Displacement与Twist则贡献流动感。建议先用默认值跑通循环,再逐项调制。
AdvancedFeedback:更灵活的进阶版反馈
AdvancedFeedback是官方文档所述的 FluidFeedback 进阶版——"更通用但更难控制",见 AdvancedFeedback.md。它的提升体现在两点(官方原文):
- 利用 DetectEdges 算子:借助边缘检测丰富反馈细节;
- 将反馈缓冲稳定在有效数值范围内:避免出现全黑或过亮的极端值——这是反馈循环最容易发生的两个失控状态(累积衰减到零、或反复放大到饱和)。
输入参数表
| 名称(类型) | 说明 |
|---|---|
| Command(Command,必填) | 渲染指令输入 |
| Displacement(Single) | 置换强度 |
| Shade(Single) | 着色/明暗 |
| BlurRadius(Single) | 模糊半径 |
| SampleDistance(Single) | 采样距离 |
| SampleRadius(Single) | 采样半径(AdvancedFeedback 新增) |
| Twist(Single) | 扭曲强度 |
| Zoom(Single) | 缩放 |
| Rotate(Single) | 旋转 |
| Offset(Vector2) | 平移偏移 |
| DisplaceOffset(Single) | 置换偏移 |
| ShiftHue(Single) | 色相偏移(AdvancedFeedback 新增) |
| ShiftSaturation(Single) | 饱和度偏移(AdvancedFeedback 新增) |
| ShiftBrightness(Single) | 亮度偏移(AdvancedFeedback 新增) |
| LimitBrights(Single) | 限制高光/亮部,防止过曝(AdvancedFeedback 新增) |
| AmplifyEdges(Single) | 边缘放大强度,与 DetectEdges 配合(AdvancedFeedback 新增) |
| Reset(Boolean) | 清空反馈缓冲 |
| IsEnabled(Boolean) | 总开关 |
输出
| 名称 | 类型 |
|---|---|
| ColorBuffer | T3.Core.DataTypes.Texture2D |
相比 FluidFeedback 的能力扩展
- 色彩控制三件套
ShiftHue/ShiftSaturation/ShiftBrightness:让反馈不仅变形,还能在演化中持续"染色",这是制造虹彩、色偏、霓虹渐变的关键; - 数值稳定机制
LimitBrights:反馈缓冲每帧被拉回合理范围,避免亮度雪崩; - 细节强化
SampleRadius与AmplifyEdges:前者控制采样窗口,后者放大画面边缘结构,与 DetectEdges 一起让流体反馈带上清晰的轮廓特征。
AdvancedFeedback2:基于 OKLab 色彩空间的改进版反馈
AdvancedFeedback2是官方文档标注为"基于 OKLab 空间改进的反馈效果"的算子(见 AdvancedFeedback2.md)。OKLab 是一种感知均匀(perceptually uniform)的色彩空间,在 OKLab 中做色相/饱和度/亮度操作,色彩变化更符合人眼感知,能显著减少传统 RGB 空间调色产生的突兀色偏。TiXL 的核心库 Core/Utils/OkLab.cs 的存在也从侧面印证了该色彩模型在项目中的基础地位。
从源码 AdvancedFeedback2.cs 可见,该算子 GUID 为a2ea3af5-d78b-46b4-84db-09d31f042798,除了继承 AdvancedFeedback 的绝大多数参数外,还新增了LuminosityRange、ChromaRange、RangeClamping、TwirlNoise系列与AddBlurred、BlurMethod等高级控制。
输入参数表
| 名称(类型) | 说明 |
|---|---|
| Command(Command,必填) | 渲染指令输入 |
| Displacement(Single) | 置换强度 |
| BlurRadius(Single) | 模糊半径 |
| SampleDistance(Single) | 采样距离 |
| Twist(Single) | 扭曲强度 |
| Zoom(Single) | 缩放 |
| Rotate(Single) | 旋转 |
| Offset(Vector2) | 平移偏移 |
| DisplaceOffset(Single) | 置换偏移 |
| ShiftHue(Single) | 色相偏移(OKLab 空间) |
| ShiftSaturation(Single) | 饱和度偏移 |
| ShiftBrightness(Single) | 亮度偏移 |
| AmplifyEdges(Single) | 边缘放大 |
| LuminosityRange(Vector2) | 亮度范围,定义参与反馈的明度区间(新增) |
| ChromaRange(Vector2) | 色度范围,定义参与反馈的色彩饱和度区间(新增) |
| RangeClamping(Single) | 范围钳制强度,决定超出范围的值如何收敛(新增) |
| TwirlNoise(Single) | 旋涡噪声强度,为反馈加入不规则的旋转扰动(新增) |
| TwirlNoiseScale(Single) | 旋涡噪声缩放(新增) |
| TwirlNoiseSpeed(Single) | 旋涡噪声演化速度(新增) |
| AddBlurred(Single) | 叠加模糊层的权重(新增) |
| Reset(Boolean) | 清空反馈缓冲 |
| IsEnabled(Boolean) | 总开关 |
| BlurMethod(Int32) | 模糊算法选择(源码新增,见 AdvancedFeedback2.cs) |
输出
| 名称 | 类型 |
|---|---|
| ColorBuffer | T3.Core.DataTypes.Texture2D |
关键新特性的实战价值
LuminosityRange/ChromaRange/RangeClamping三位一体:把反馈演化限制在指定的亮度与色度区间内。例如只让中亮度的颜色参与拖尾,暗部与高光保持稳定,即可做出"选择性余晖";RangeClamping决定区间外的值被钳制的软硬程度。TwirlNoise系列:以随时间演化的噪声场驱动旋涡变形,让流体反馈具备不规则的有机扰动,避免机械感。TwirlNoiseSpeed控制演化快慢,TwirlNoiseScale控制扰动颗粒度。AddBlurred:将模糊后的图层混入反馈,等效于"自带光晕/柔化"。BlurMethod(Int32):可在多种模糊实现间切换,便于在画质与性能之间取平衡。
AfterGlow 与 AfterGlow2:移动图像的余晖(拖尾)特效
AfterGlow/AfterGlow2与前述三个"自反馈"算子不同,它们以显式输入的Image(Texture2D)为源,为移动中的图像生成余晖拖尾效果,官方定位为 PostFX(后处理)管线中的一环。文档在 AfterGlow.md 与 AfterGlow2.md 中同时推荐了一组配套的后处理算子:MotionBlur(运动模糊)、DepthOfField(景深)、ChromaticAberration(色差)、Glow(辉光)、Grain(颗粒)、Blur(模糊)。
两个版本的区别在于:AfterGlow为较老版本(文档注明"与新版 AfterGlow2 效果相同"),增加了ContrastOffset2与Resolution(Int2)两个输入;AfterGlow2是文档主推的当前版本,参数更精炼,并新增OrgColor(对原始图像的着色)。
AfterGlow2 输入参数表
| 名称(类型) | 说明 |
|---|---|
| Image(Texture2D) | 输入图像 |
| DecayRate(Single) | 余晖衰减速度,决定拖尾消失的快慢(官方说明:Defines how quickly the afterglow fades) |
| GlowImpact(Single) | 辉光强度(官方说明:Controls the intensity of a glow effect) |
| BlurAmount(Single) | 余晖图像的模糊程度(官方说明:Controls how much the images created by the afterglow effect are blurred) |
| Color(Vector4) | 叠加到余晖上的颜色(官方说明:Defines a color that is added to the afterglow) |
| OrgColor(Vector4) | 叠加到原始图像上的颜色(官方说明:Defines a color that is added to the original image) |
AfterGlow2 输出
| 名称 | 类型 |
|---|---|
| Output | T3.Core.DataTypes.Texture2D |
| CombinedLayers | T3.Core.DataTypes.Command |
AfterGlow(旧版)输入参数表
| 名称(类型) | 说明 |
|---|---|
| Image(Texture2D) | 输入图像 |
| BlurAmount(Single) | 余晖模糊程度 |
| GlowImpact(Single) | 辉光强度 |
| DecayRate(Single) | 衰减速度 |
| ContrastOffset2(Single) | 对比度偏移(旧版独有) |
| Resolution(Int2) | 输出分辨率(旧版独有) |
| Color(Vector4) | 余晖叠加色 |
输出与 AfterGlow2 相同:Output(Texture2D)与CombinedLayers(Command)。
源码 AfterGlow2.cs 中,该算子 GUID 为04ac6a30-a2ad-4e43-8954-94dc852b0602,CombinedLayers输出为Slot<Command>类型,意味着它内部实际组织了多层绘制指令(余晖层、辉光层、原图层的合成),可直接作为后续绘制节点的 Command 源。
使用要点
DecayRate越小拖尾越长(余晖保留更久),越大拖尾越短;这是营造"光迹"与"彗尾"效果的核心旋钮。BlurAmount将余晖层模糊后叠加,能做出柔和的光晕质感而非生硬的残影。Color与OrgColor分别给"余晖层"和"原图层"染色,例如把余晖染成青色、原图保持原色,即可快速得到赛博朋克风格的霓虹拖尾。
SimpleLiquid 与 SimpleLiquid2:Shadertoy 精细流体移植
SimpleLiquid/SimpleLiquid2是流体模拟类算子,官方文档注明二者均为 Lomateron 在 Shadertoy 上"simple detailed fluid"(https://www.shadertoy.com/view/sl3Szs 与 SimpleLiquid2.md。它们把"反馈"用于物理模拟:每一帧的流体状态(速度场、质量场)被反馈到下一帧,结合重力、阻尼、边界反弹等规则持续演化。
SimpleLiquid 输入参数表
| 名称(类型) | 说明 |
|---|---|
| ShouldReset(Single) | 触发重置流体状态 |
| Gravity(Vector2) | 重力向量(方向与大小) |
| BorderStrength(Single) | 边界强度,控制流体碰到边缘时的反弹力度 |
| Damping(Single) | 阻尼,衰减流体运动速度 |
| MassAttraction(Single) | 质量吸引,控制流体质点间的聚合倾向 |
| Brightness(Single) | 画面亮度 |
| StabilizeMass(Single) | 质量稳定强度 |
| StabilizeMassTarget(Single) | 质量稳定的目标值 |
| FxTexture(Texture2D) | 外部 FX 纹理输入 |
| ApplyFxTexture(Vector4) | 各通道应用 FX 纹理的权重 |
SimpleLiquid 输出
| 名称 | 类型 |
|---|---|
| ColorBuffer | T3.Core.DataTypes.Texture2D |
SimpleLiquid2:通道化 FX 纹理驱动
SimpleLiquid2是当前版本,文档对其工作原理给出了最详细的说明,是理解整个流体反馈机制的关键文本(官方原文要点):
当与一张FX Texture组合时,会产生非常有趣的结果。FX 纹理可包含以下通道:
- RB → 速度向量(0.5 为中性值)
- G → 质量(Mass)
- A → 效果量(Effect Amount)
每个通道都可与
ApplyFxTexture参数相乘来调节影响权重。
SpeedFactor每帧施加,可用于为系统添加摩擦(小于 1 的值)或增强动态感(大于 1 的值)。StabilizeFactor会降低过强的质量并放大过低的质量值。 迭代次数(Iterations)可加速整个系统的处理进程。
这条通道约定是使用 SimpleLiquid2 的核心:把任意灰度图/噪点图按 RGBA 通道编码成"速度 + 质量 + 效果量"的指令纹理,就可以驱动流体在不同区域以不同速度、不同密度演化,实现"墨水注入""烟雾蔓延"等可控的有机运动。
SimpleLiquid2 输入参数表
| 名称(类型) | 说明 |
|---|---|
| TriggerReset(Boolean) | 触发重置 |
| Gravity(Vector2) | 重力向量 |
| BorderStrength(Single) | 边界反弹强度 |
| MassAttraction(Single) | 质量吸引 |
| ApplyFxTexture(Single) | FX 纹理整体应用权重 |
| FX_RG_Velocity(Single) | 速度通道(RG)权重 |
| SpeedFactor(Single) | 每帧速度系数:<1 产生摩擦阻尼,>1 增强动态 |
| FX_B_AddRemoveMass(Single) | 质量增减通道(B)权重 |
| StabilizeFactor(Single) | 质量稳定系数:压低过强质量、放大过低质量 |
| ResetFillFactor(Single) | 重置时的填充系数 |
| MouseClick_Force(Single) | 鼠标点击产生的冲击力 |
| OnClick_AddRemoveMass(Single) | 点击时增减质量 |
| FxTexture(Texture2D) | FX 指令纹理 |
| Iterations(Int32) | 每帧迭代次数,越高处理越精细/越慢 |
SimpleLiquid2 输出
| 名称 | 类型 |
|---|---|
| ColorBuffer | T3.Core.DataTypes.Texture2D |
实操建议
- 先用
Gravity与BorderStrength调出基本流体行为,再引入FxTexture做区域化控制; SpeedFactor是"手感"的关键:想让流体显得粘稠、安静,用 0.9 左右的低值;想让它激烈迸溅,用大于 1 的值;Iterations在性能允许的范围内尽量提高,可显著改善流体细节,但注意实时渲染的帧预算。
家族总览与选型建议
根据官方文档与源码,可以按"是否自反馈、是否需要输入图、是否做物理模拟"快速选型:
| 算子 | 核心机制 | 典型用途 | 关键参数 |
|---|---|---|---|
| FluidFeedback | 反馈 + 置换 | 入门流体反馈、无限演化背景 | Displacement / Twist / Zoom / Reset |
| AdvancedFeedback | 反馈 + 边缘检测 + 缓冲稳定 | 需要色彩漂移与细节轮廓的复杂反馈 | ShiftHue / LimitBrights / AmplifyEdges |
| AdvancedFeedback2 | OKLab 感知均匀色彩空间反馈 | 高质量有机流体,选择性范围反馈 | LuminosityRange / ChromaRange / TwirlNoise |
| AfterGlow | 图像余晖拖尾(旧版) | 后处理拖尾光效 | DecayRate / GlowImpact / BlurAmount |
| AfterGlow2 | 图像余晖拖尾(新版) | 后处理拖尾光效(推荐) | DecayRate / Color / OrgColor |
| SimpleLiquid | 流体物理模拟(旧版) | 简单流体质感 | Gravity / Damping / MassAttraction |
| SimpleLiquid2 | 通道化 FX 纹理流体模拟 | 可控墨水/烟雾/流体特效 | FxTexture / SpeedFactor / StabilizeFactor |
官方文档特别强调的三个配套阅读线索也值得留意:
- 所有反馈算子:
FluidFeedback、AdvancedFeedback、AdvancedFeedback2被文档反复并列提及(见各算子文档"All Feedback Ops"一节),它们构成一条从易到难的自反馈学习路径; - AdvancedFeedback 依赖 DetectEdges:边缘检测算子是其细节增强链路的一部分,使用前建议先在图中确认 DetectEdges 的输入输出连接;
- PostFX 配套管线:使用 AfterGlow/AfterGlow2 时,可将其与 MotionBlur、DepthOfField、ChromaticAberration、Glow、Grain、Blur 等算子串联,搭建完整的后期处理链。
阅读与进一步探索指引
- 模块索引文档:feedback/README.md
- 算子源码目录:Operators/Lib/Symbols/image/fx/feedback/(对应
AdvancedFeedback.cs、AdvancedFeedback2.cs、AfterGlow.cs、AfterGlow2.cs、FluidFeedback.cs、SimpleLiquid.cs、SimpleLiquid2.cs共 7 个算子类,每个类通过[Guid]标识并由Instance<T>模板承载输入输出槽位) - 反馈模块的上级目录 image/fx/README.md 还包含 blur、distort、glitch、stylize 等相邻特效模块,可作为拓展阅读
- 反馈涉及的色彩数学可参考 TiXL 核心工具 Core/Utils/OkLab.cs(OKLab 色彩空间实现)与 Core/Utils/MathUtils.cs
需要说明的是,文档中的参数表由算子库自动生成,部分参数在表格中未附详细文字说明;本文中"官方说明"引用的描述均来自对应算子文档原文,其余参数语义结合了源码槽位类型(如InputSlot<float>、InputSlot<Vector2>、InputSlot<bool>)与反馈特效的通用规律进行解读,实际使用时可先以文档参数表为索引,再在 TiXL 编辑器中逐一调制观察效果。
【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考