
TiXL BlendImages 算子深度解析用浮点索引对多输入图像实现交叉淡化【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3TiXL 是一款用于创作实时动态图形的开源软件本文聚焦其算子库中Lib.image.use类别下的BlendImages算子讲解它如何通过一个浮点索引对多个连接的输入图像进行交叉淡化cross-fading。读完本文你将掌握该算子的全部输入参数与输出类型、其内部子图PickTexture Blend的工作机制、底层 HLSL 混合着色器的原理以及分辨率不一致时的正确用法可直接用于滑片切换、纹理轮播等实时演出场景。算子定位Lib.image.use 家族中的“多图混合器”根据官方文档 BlendImages.md 的描述Blends the connected input images with cross-fading and using a float index.BlendImages 的作用是将多个连接的输入图像混合在一起混合过程由一个浮点float索引驱动索引的整数部分决定“当前显示第几张图”小数部分决定两张相邻图之间的交叉淡化进度。它归属于 Lib.image.use 类别与 Blend、BlendWithMask、Combine3Images 等算子共同构成 TiXL 图像混合工具集。输入参数与输出官方文档给出了完整的参数表结合源码 BlendImages.cs 与配置文件 BlendImages.t3ui 可以补充每个参数的默认值与 UI 约束名称相关性与类型说明默认值 / UI 范围来自 .t3ui/.t3BlendFractionSingle浮点混合索引控制选择哪张输入图以及交叉淡化进度默认0.0UI 范围-1.0 ~ 16383.0启用 ClampMin/ClampMaxInputTexture2DRequired输入图像多路输入可同时连接多张纹理默认null标记为 RequiredResolutionInt2显式指定输出分辨率默认(0, 0)表示自动UI 范围-1 ~ 16384启用 ClampMin/ClampMax输出名称类型OutputImageT3.Core.DataTypes.Texture2D关键点Input在源码中声明为MultiInputSlotTexture2D见 BlendImages.cs这意味着它是一个多路输入槽可以连接任意数量的纹理这也是“循环浏览多个输入图像”能力的基础。相比之下BlendFraction和Resolution都是单值输入槽。内部机制PickTexture 与 Blend 的组合子图BlendImages 并非一个直接调用着色器的叶子算子而是一个由多个子算子组合而成的复合算子。从符号定义文件 BlendImages.t3 的Children与Connections可以完整还原其内部子图Clamp对BlendFraction进行钳制子图配置中Max为10000.0防止索引越界FloatToInt将钳制后的浮点索引取整得到当前纹理的整数序号PickTexture第一个以该整数序号从多路Input中选择“当前图像 A”对应连接12a875e2…→2743cd73…的 Input序号 → IndexAddInt在序号上1Input2默认值1得到下一张图的序号PickTexture第二个以序号1选择“下一张图像 B”Modulo对钳制后的BlendFraction取模提取小数部分RgbaToColor将小数部分转换为颜色值Blend接收图像 A、图像 B 与来自RgbaToColor的颜色执行最终混合输出到OutputImage。连接关系同时表明Resolution直接透传给内部Blend节点的Resolution输入Blend的输出536fae14…连到根输出的OutputImage83ad8874…。由此可以推断其工作流程为整数部分决定“正在显示哪张图”选中第 N 张整数部分 1决定“即将切到哪张图”第 N1 张小数部分作为淡化系数在两图之间做平滑交叉淡化。当BlendFraction持续增长例如接上时间轴、节拍同步或噪声动画时就能在全部输入纹理上循环轮播并自然过渡。由于内部使用了Modulo与Clamp超过输入数量的索引会循环或钳制回有效范围。底层着色器Blend.hlsl 的混合语义内部Blend节点在 Blend.t3 中配置其 ShaderPath 为Lib:shaders/img/fx/Blend.hlsl对应仓库文件 Blend.hlsl。着色器以ImageA、ImageB两张纹理采样为基础核心混合公式为float4 tA ImageA.Sample(texSampler, uv) * ImageAColor; float4 tB ImageB.Sample(texSampler, uvB) * ImageBColor; float3 rgbNormalBlended (1.0 - tB.a) * tA.rgb tB.a * tB.rgb;即默认的Normal 模式ColorMode 0下RGB 通道按ImageB的 alpha 对两张图线性插值——这正是交叉淡化的本质。Alpha 通道默认采用tA.a tB.a - tA.a * tB.a标准 alpha 叠加。着色器还内置了 Screen、Multiply、Overlay、Difference、Max、Sub 等 RGB 混合模式以及 Multiply、Additive、Max 等 Alpha 模式见 Blend.hlsl 的 switch 分支而Blend算子的枚举定义可在 Blend.cs 中查阅。另外值得注意的是BlendImages 子图中的Blend节点被预设为ScaleMode 1对应Fit见 Blend.t3 与 Blend.cs 的 ScaleModes 枚举。在Fit模式下着色器会按宽高比差异对uvB进行缩放适配见 Blend.hlsl从而保证不同宽高比的图像在混合时能正确对齐。分辨率一致性官方明确的使用注意官方文档特别提示Please note: this will lead to inconsistent behavior if used with images of varying resolution unless you set an explicit resolution.即当输入图像分辨率不一致时若不显式设置Resolution混合结果可能不一致。因此在实际使用中若所有输入图像分辨率相同保持Resolution为默认(0, 0)自动即可若输入图像分辨率不同建议显式指定ResolutionInt2例如1920, 1080让内部Blend在统一分辨率下输出避免因逐输入采样尺寸不同而出现抖动或错位Resolution的 UI 约束范围为-1 ~ 16384见 BlendImages.t3ui取值超出会被钳制。实战用法建议幻灯片式交叉淡化将多张静态/视频纹理连入Input把BlendFraction接到随时间增长的表达式如Time * 0.5即可让画面在输入图像之间自动循环切换并交叉淡化节拍驱动切换将BlendFraction接到 TiXL 的节拍同步或 BPM 相关数值使切换节奏跟随音乐手动控制直接对BlendFraction做动画/曲线调制小数部分在 0~1 之间即表现为两张相邻图像的淡化过程整数部分递增即完成“翻页”与 PickTexture 对比若只需要“选中某一张图”而不需要淡化过渡可参考 PickTexture——它同样基于整数索引选择多路输入中的一路但只更新被选中的连接不产生混合。相关算子速查BlendImages 属于 TiXL 图像混合家族官方文档列出的同类算子包括Blend — 混合两张图像BlendImages 的内部核心BlendWithMask — 通过第三张遮罩图的亮度混合两张图像Combine3Images — 将三张输入图像组合进一张新图像的 RGBA 通道。源码导航若想深入研读实现可按以下路径继续探索算子声明Operators/Lib/Symbols/image/use/BlendImages.cs符号子图与连接Operators/Lib/Symbols/image/use/BlendImages.t3UI 布局与参数约束Operators/Lib/Symbols/image/use/BlendImages.t3ui内部 Blend 算子Operators/Lib/Symbols/image/use/Blend.cs混合着色器实现Operators/Lib/Assets/shaders/img/fx/Blend.hlsl类别总览.help/docs/operators/lib/image/use/README.md【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考