news 2026/9/20 23:34:43

TiXL 节点详解:Combine3Images —— 用三张输入图像重组 RGBA 通道

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TiXL 节点详解:Combine3Images —— 用三张输入图像重组 RGBA 通道
  • 音视频
  • 图形学
  • 桌面应用

【免费下载链接】t3

TiXL is an open source software to create realtime motion graphics.

项目地址:https://gitcode.com/GitHub_Trending/t3/t3
点击查看免费下载

本篇技术指南围绕 TiXL(tooll3/t3 实时动态图形创作工具)算子库Lib.image.use中的Combine3Images节点展开,讲解它如何将三张输入图像(ImageA / ImageB / ImageC)的任意通道(R、G、B、Average、Brightness)重新组装进输出纹理的 RGBA 四个通道,并配合 Color 输入做通道预调制、配合 Alpha 模式与 Mip 生成控制输出结果。读完本文,你将掌握该节点的全部输入参数、下拉选项的真实取值语义、底层 HLSL 实现原理,以及它在 RGB 分离、三源合成类特效中的典型接法。

Combine3Images 是什么

Combine3Images位于算子库Lib.image.use分类下(参见 Lib.image.use 算子索引),官方定义为:

A node to combine 3 input images into the RGBA channels of a new one.

即:把三张输入图像合并到一张新图像的 RGBA 通道中。它是 TiXL 图像合成类算子的成员之一,官方文档将其与同目录下的 BlendImages、Blend、BlendWithMask 归为"所有混合/合成类操作"一族:

All blend ops and similar: [BlendImages] [Blend] [BlendWithMask] [Combine3Images]

与其余三个节点"按权重或蒙版把两张图混合成一张"的语义不同,Combine3Images 不做加权混合,而是逐通道重新路由:输出的每个通道都可以独立选择来自哪张图、哪个分量,因此特别适合构建通道级重组类特效(如 RGB 分离、三源通道交换、把三张灰度图打包成一张彩色图等)。

输入参数一览

官方文档给出了完整参数表,本节在保留原表的基础上,结合 Combine3Images.cs 的源码补齐每个下拉选项的真实取值与 Combine3Images.t3 中的默认值。

名称相关性 & 类型说明默认值(来自 .t3)
ImageATexture2D,必填第一路输入图像,参与 R/G/B/Average/Brightness 通道提取null
ColorAVector4与 ImageA 采样的颜色逐分量相乘(调制系数),默认 (1,0,0,1) 即纯红(1, 0, 0, 1)
ImageBTexture2D,必填第二路输入图像null
ColorBVector4与 ImageB 相乘的调制系数,默认 (0,1,0,1) 即纯绿(0, 1, 0, 1)
ImageCTexture2D,必填第三路输入图像null
ColorCVector4与 ImageC 相乘的调制系数,默认 (0,0,1,1) 即纯蓝(0, 0, 1, 1)
SelectChannel_RInt32(下拉)输出 R 通道的数据来源,见下方 SelectInput 枚举0(ImageA_R)
SelectChannel_GInt32(下拉)输出 G 通道的数据来源6(ImageB_G)
SelectChannel_BInt32(下拉)输出 B 通道的数据来源12(ImageC_B)
SelectAlphaChannelInt32(下拉)输出 Alpha 通道的数据来源,见下方 SelectAlphaInput 枚举4(SetToOne)
GenerateMipsBoolean是否在输出纹理上生成 Mip 链false

从 Combine3Images.cs 可以看到,三个 Select 通道输入都通过MappedType = typeof(SelectInput)映射为枚举下拉框,其完整取值语义为:

含义含义含义
0ImageA.R5ImageB.R10ImageC.R
1ImageA.G6ImageB.G11ImageC.G
2ImageA.B7ImageB.B12ImageC.B
3ImageA.Average(RGB 均值)8ImageB.Average13ImageC.Average
4ImageA.Brightness(感知亮度)9ImageB.Brightness14ImageC.Brightness

Alpha 输入(SelectAlphaInput,Combine3Images.cs)的取值语义为:

含义
0直接使用 ImageA 的 Alpha
1直接使用 ImageB 的 Alpha
2直接使用 ImageC 的 Alpha
3强制设为 0(完全透明)
4强制设为 1(完全不透明)

注意到.t3默认配置(SelectChannel_R=0SelectChannel_G=6SelectChannel_B=12SelectAlphaChannel=4)恰好构成"R 取 A、G 取 B、B 取 C、Alpha 全不透明"的默认路由,配合 A/B/C 三路默认的纯红/纯绿/纯蓝调制色,节点开箱即用即可观察典型的三通道合成效果。

输出

名称类型
OutputT3.Core.DataTypes.Texture2D

输出是一张新的 Texture2D,其尺寸由内部_trippleImageFxSetup算子与渲染目标的设置决定,RGB 三通道来自 Select 路由,Alpha 通道来自 Alpha 模式选择。

内部实现:从算子到 HLSL

Combine3Images 并不是直接写像素的叶子节点,从 Combine3Images.t3 的 Connections 可以看出,它是一个组合算子:内部实例化了一个名为_trippleImageFxSetup的子算子,并把 ShaderPath 指向Lib:shaders/img/use/img-combine-3.hlsl,同时用多个Vector4Components(拆解 ColorA/B/C)、IntToFloat(把通道选择索引转为 float)子算子把上层输入喂给该子算子的FloatParams多输入槽。

底层渲染核心位于 img-combine-3.hlsl(作者 Thomas Helzle,Screendream.de,2022),其像素着色器逻辑可分三步理解:

  1. 采样与调制(第 42-44 行):三路纹理按同一组 UV 采样,并分别乘以 ColorA/B/C:
float4 tA = ImageA.Sample(texSampler, psInput.texCoord) * ImageAColor; float4 tB = ImageB.Sample(texSampler, psInput.texCoord) * ImageBColor; float4 tC = ImageC.Sample(texSampler, psInput.texCoord) * ImageCColor;

这意味着 Color 参数不仅是"着色",更相当于通道级增益系数:例如把 ColorA 设为 (1,0,0,1),则 tA 中只有 R 分量被保留,G/B 被清零——这正是在合成前对某一路做"只留红色"预处理的低成本做法。

  1. Alpha 模式分发(第 48-69 行):按AlphaMode的 0-4 五个 case 分别取 tA.a / tB.a / tC.a / 0.0 / 1.0,与前端枚举一一对应。

  2. 逐通道路由(第 71-109 行):把 Select_R/G/B 组成int3,循环三次、用switch按 0-14 的 15 个 case 取出对应分量,写入color[0..2],最终返回float4(color.rgb, a)

关于两个非直接分量的实现细节:

  • Average(r+g+b)/3.0,即算术平均灰度;
  • Brightnessmin(1.0, max(0.0, 0.239*r + 0.686*g + 0.075*b)),即 Rec.709 风格感知亮度权重并钳制到 [0,1](第 86 行)。当某一路需要"按灰度参与合成"(例如当作蒙版或亮度图打包)时,选 Average 或 Brightness 比单独选某个通道更合理。

实战接法:RGB 分离示例

仓库自带的示例 RgbSplitShiftExample.t3 展示了 Combine3Images 的典型上游组合:Pixelate像素化后的图像、TransformImage旋转后的图像、RenderTarget渲染结果等三路信号分别接入 ImageA/ImageB/ImageC(第 866-882 行),再配合后续的 Layer2d、DrawMesh 等算子输出到画布。

据此可以总结出几个直接可复用的接入套路:

  1. 通道打包(Channel Packing):把三张灰度图分别作为 ImageA/B/C,三个 Select 分别设为 ImageA.R / ImageB.R / ImageC.R(值 0/5/10),Alpha 选 SetToOne,即得一张三通道彩色图。这一模式与同分类下 CombineMaterialChannels、CombineMaterialChannels2(把 roughness/metallic/AO 打包给 [SetMaterial])思路一致,但 Combine3Images 的通道来源选择更自由,不局限于 PBR 语义。

  2. RGB 分离效果:将原始图的三路经过不同位移(如分别做 R/G/B 偏移的 Glitch 类效果)后接入三路输入,Select 保持默认的 R←A、G←B、B←C,即可得到经典色散效果——示例 RgbSplitShiftExample 正是这种思路的完整演示。

  3. 亮度/蒙版重映射:把同一张图接三路,分别选 ImageA.Average、ImageA.Brightness 与固定常数色,可快速得到灰度与亮度信息重组的变体。

  4. 混合任意来源:由于每个输出通道可独立选择三路中的任一通道或灰度派生值,Combine3Images 天然可用于"三选一/三选多"的通道路由,配合SelectChannel_*三个输入均可接表达式或动画值,可以实时驱动通道在 A/B/C 之间切换。

使用提示与注意事项

  • 必填输入:ImageA / ImageB / ImageC 均为Texture2D Required,未连接时输出无法正确更新;Color 输入虽然非必填,但默认值决定了各路的调制色,改动前请确认其 RGB 分量是否符合预期。
  • 尺寸一致性:三路输入按同一组 UV 采样,若三张图分辨率不一致,输出会按渲染目标尺寸统一处理,建议在接入前用 TransformImage 或 RenderTarget 统一规格。
  • Alpha 的取舍:默认 Alpha 为 SetToOne(不透明)。当需要把 A/B/C 某一路的透明度传递出去时,将SelectAlphaChannel改为对应选项(0/1/2);需要完全透明或实心则用 3/4。
  • Mip 链:若输出纹理后续会被缩小采样(例如作为远处贴图或被 Scale 缩小),可打开GenerateMips避免闪烁与摩尔纹;若只是逐像素取用,保持 false 更省资源。
  • 性能:整个节点是一次全屏像素着色器 pass,与图像分辨率正相关,适合在实时渲染与演出场景下作为后处理链的一环使用。

延伸阅读

  • 算子库分类索引:Lib.image.use 全部图像使用类算子
  • 同族混合节点:BlendImages / Blend / BlendWithMask
  • 通道打包的 PBR 应用:CombineMaterialChannels
  • 源码与资源:Combine3Images.cs、Combine3Images.t3、着色器 img-combine-3.hlsl、内部载体算子 _trippleImageFxSetup.cs
  • 音视频
  • 图形学
  • 桌面应用

【免费下载链接】t3

TiXL is an open source software to create realtime motion graphics.

项目地址:https://gitcode.com/GitHub_Trending/t3/t3
点击查看免费下载

相关推荐

上一篇:3步开启AI绘画训练:Kohya_ss图形化界面全攻略
下一篇:如何使用apollo-link-state构建React应用本地状态管理系统

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 23:33:57

DevSecOps标准解读:从安全左移到流水线门禁落地实践

简介:DevSecOps标准解读PDF是一份面向网络安全、研发运维与合规管理从业者的标准科普资料,重点解决团队在落地DevOps时安全介入过晚的痛点。资源以安全左移为主线,系统梳理DevSecOps的起源、核心理念,以及计划、开发、构建、测试、…

作者头像 李华
网站建设 2026/9/20 23:29:50

markdown-it 嵌套强调(Nested Emphasis)解析原理与基准测试指南

开发工具CLI 【免费下载链接】markdown-it Markdown parser, done right. 100% CommonMark support, extensions, syntax plugins & high speed 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-it 点击查看 免费下载 导读 本文以仓库基准样本 benchma…

作者头像 李华