
音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载本文以 Natron 官方插件文档 Documentation/source/plugins/net.sf.openfx.MergeRoto.rst 为核心系统讲解 RotoMergenet.sf.openfx.MergeRoto节点的合并原理、全部算子公式、输入与参数配置。读者将掌握如何在合成管线中借助 RotoMask 外部 alpha 通道以任意 Porter-Duff 算子或混合模式将 A 输入绘制到 B 输入上并理解每个参数在底层引擎中的真实作用。节点概述RotoMerge 与普通 Merge 的区别RotoMerge 是 Natron 合成节点家族中的一员其核心特征是使用外部 alpha 通道作为输入 A 的合成 alpha。普通 Merge 节点直接使用 A、B 两个输入各自的 alpha 通道参与合成而 RotoMerge 多出了一个关键维度RotoMask——一个独立的遮罩通常来自 Roto 节点的绘制结果被用作输入 A 的 alpha 值即公式中的小写字母a。具体而言该节点对两个输入执行逐像素pixel-by-pixel合并运算输入 A 的全部通道RGBA与输入 B 的全部通道进行合并但合并时输入 A 的 alpha 不再取自其自身 alpha 通道而是取 RotoMask 的值。于是A 的 alpha 通过 RotoMask覆盖到 B 的 alpha 之上。这一机制尤其适合以下场景用 Roto 绘制出的遮罩作为外部 alpha把 A 输入的颜色信息刷到 B 输入的 alpha 通道上在 A 自身 alpha 为零的区域仍然借助不透明的外部遮罩将 A 的像素值写入结果RotoMask 可以在 A 的 alpha 为 0 的位置保持完全不透明用受控的遮罩形状精确限定合并发生的区域避免 A 自身 alpha 形状干扰合成结果。从源码结构看Natron 内置的 Merge 节点与 RotoMerge 共享同一套算子体系引擎中的 Global/Enums.h 定义了MergingFunctionEnum枚举从eMergeATop到eMergeXOR共 38 个算子其注释明确要求与 OpenFX 的ofxsMerging.h保持同步Engine/MergingEnum.h 则提供getOperatorString()算子脚本名与getOperatorHelpString()算子公式提示两个辅助函数RotoMerge 文档中列出的算子名称与公式与该头文件逐项一致。在 GUI 端Gui/NodeGui.cpp 正是通过Merge::getOperatorString()与Merge::getOperatorPixmap()来为节点构建算子下拉列表和对应图标。重要前提输入 alpha 的不透明处理规则使用 RotoMerge 之前必须理解一条关键规则如果 A 或 B 输入只连接了 RGB 通道无 alpha其 alpha 通道会被视为恒为不透明值 1。此时只要B 通道 ABChannelsA复选框处于勾选状态输出就会完全不透明。造成这一行为的根本原因是非零 RGB 值与零 alpha 组合不是合法的 alpha 预乘premultipliedRGBA 值。如果用户希望背景保持完全透明那么背景只能为纯黑色——这等价于根本不使用合并算子。非黑色且完全透明的像素不应出现在任何规范的合成图compositing graph中这是所有合成软件共享的约定RotoMerge 只是严格遵循了这一约定。算子详解从 Porter-Duff 到混合模式RotoMerge 共提供 38 种合并算子全部通过operation脚本名operation参数选择默认值为over。以下为完整算子清单。为便于阅读约定大写A、B代表两个输入各自的某个分量R、G、B 或 A小写a、b代表两个输入各自的 alpha 通道值。运算公式对每个分量独立应用。Porter-Duff 合成算子这组算子是计算机图形合成的基础源自 Porter 与 Duff 的经典论文《Compositing Digital Images》SIGGRAPH 1984也是 W3C Compositing and Blending Level 1 规范的核心内容算子脚本名公式别名copyAsrcoverA B(1 - a)src-overunderA(1 - b) Bdst-overinA·bsrc-inmaskB·adst-inoutA(1 - b)src-outstencilB(1 - a)dst-outatopA·b B(1 - a)src-atopxorA(1 - b) B(1 - a)—其中over默认算子是最常用的前景叠背景操作A 覆盖在 B 之上重叠区域按 A 的 alpha 混合。matte见其他算子则是其非预乘版本。Multiply 与 Screen 类混合模式这类算子源于印刷与图像编辑的混合模式Blend Modes每个通道独立计算multiplyAB若 A 0 且 B 0 则取 AscreenA B - AB若 A 或 B ≤ 1否则max(A, B)overlayB 0.5 时取multiply(A, 2·B)B 0.5 时取screen(A, 2·B - 1)hard-lightA 0.5 时取multiply(2·A, B)A 0.5 时取screen(2·A - 1, B)soft-lightA 0.5 时做 burn-in加深A 0.5 时做 lighten提亮Dodge 与 Burn 类color-dodge将 B 向 A 的方向提亮brighten B towards Acolor-burn将 B 向 A 的方向压暗darken B towards ApinlightB ≥ 0.5 时取max(A, 2·B - 1)否则取min(A, B·2)differenceabs(A - B)别名 absminusexclusionA B - 2ABdivideA / B若 A 0 且 B 0 则取 0简单算术混合模式plusA B别名 addfromB - A别名 subtractminusA - Bdifferenceabs(A - B)别名 absminusminmin(A, B)别名 darken only只取暗者maxmax(A, B)别名 lighten only只取亮者色相、饱和度与亮度类HSL 类这组算子通过SetLum设置亮度与SetSat设置饱和度辅助函数定义用于将 A 的色相/饱和度/颜色与 B 的对应属性进行重组hueSetLum(SetSat(A, Sat(B)), Lum(B))——取 A 的色相、B 的饱和度与亮度saturationSetLum(SetSat(B, Sat(A)), Lum(B))——取 A 的饱和度、B 的色相与亮度colorSetLum(A, Lum(B))——取 A 的色相与饱和度、B 的亮度luminositySetLum(B, Lum(A))——取 B 的色相与饱和度、A 的亮度需要注意HSL 模式hue、saturation、color、luminosity始终强制启用 Alpha masking即这些模式下输出 alpha 始终按a b - a·b计算详见下文 Alpha masking 参数。其他算子average(A B) / 2conjoint-overA B(1 - a)/b若 a b 则取 Adisjoint-overA B(1 - a)/b若 a b 1 则取A Bfreeze1 - sqrt(1 - A)/Bgeometric2AB/(A B)grain-extractB - A 0.5源自 GIMP 图层模式grain-mergeB A - 0.5源自 GIMP 图层模式hypotsqrt(A·A B·B)matteA·a B(1 - a)即非预乘unpremultiplied版本的 overreflectA·A / (1 - B)参考资源除 Porter-Duff 论文外上述算子的理论依据还包括 W3C《Compositing and Blending Level 1》、W3C《SVG Compositing Specification》、ISO 32000-1:2008PDF 规范第 11.3 节Basic Compositing Operations、Marc Levoy 的《Digital Image Compositing》课程资料以及 Martin Constable 关于 Nuke Merge 算子与B 输入主导性Primacy of the B Feed的论述。grain-extract 与 grain-merge 的描述见 GIMP 官方文档的图层模式章节。这些资料共同构成了算子集合的理论出处。输入端口详解RotoMerge 共提供 4 个输入端口全部为可选Optional输入描述是否可选B主输入main input。当节点被禁用disable时B 被直接透传pass through作为输出。是A要与输入 B 合并的图像序列。是Mask遮罩输入作为输入 A 的外部 alpha 通道来源。是A2备用输入 A用途同 A。是关键行为由于 B 是主输入且承担透传职责禁用节点时输出的仍是 B而 A 与 A2 两个输入端口的存在意味着可以把两个不同的前景序列接入并切换使用在脚本中通过切换连接来实现 A 与 A2 的互换。Mask 端口即文档描述中RotoMask的接入位置——它并不参与颜色合并而是仅作为 A 的 alpha 值参与所有公式计算。控件参数Controls逐项解析以下是该节点面板中全部参数参数名/脚本名、类型、默认值、功能参数 / 脚本名类型默认值功能Operation /operationChoiceover用于合并 A 与 B 的算子。公式对每个分量独立应用若勾选 Alpha masking输出 alpha 改用a b - a·b计算HSL 模式hue、saturation、color、luminosity总是启用 Alpha masking。可选值见上文算子详解全部 38 项。Bounding Box /bboxChoiceUnion决定输出图像的包围盒bounding box来源Union (union)——所有已连接输入包围盒的并集Intersection (intersection)——所有已连接输入包围盒的交集A (a)——仅使用输入 A 的包围盒B (b)——仅使用输入 B 的包围盒。Alpha masking /screenAlphaBooleanOff启用后在另一图像 alpha 为 0 的区域输入图像保持不变输出 alpha 被设置为a b - a·b禁用时 alpha 通道与普通通道一样参与逐像素运算。对于该选项不适用或无影响的算子此参数会被置灰禁用。R /AChannelsRBooleanOn是否使用输入 A 的红色通道G /AChannelsGBooleanOn是否使用输入 A 的绿色通道B /AChannelsBBooleanOn是否使用输入 A 的蓝色通道A /AChannelsABooleanOn是否使用输入 A 的 alpha 通道R /BChannelsRBooleanOn是否使用输入 B 的红色通道G /BChannelsGBooleanOn是否使用输入 B 的绿色通道B /BChannelsBBooleanOn是否使用输入 B 的蓝色通道A /BChannelsABooleanOn是否使用输入 B 的 alpha 通道R /OutputChannelsRBooleanOn是否将红色通道写入输出G /OutputChannelsGBooleanOn是否将绿色通道写入输出B /OutputChannelsBBooleanOn是否将蓝色通道写入输出A /OutputChannelsABooleanOn是否将 alpha 通道写入输出Invert Mask /maskInvertBooleanOff勾选后效果在遮罩为 0 的区域完全生效即遮罩被反转。Mix /mixDouble1原图与变换后图像之间的混合因子0 表示完全不混合1 表示完全应用。关键参数的行为细节通道开关AChannels*/BChannels*/OutputChannels*这 12 个布尔参数让用户能够精确控制参与运算与写入输出的通道。例如只勾选 A 的 R 通道与 B 的 R 通道即可把合并限制在红色分量上关闭全部OutputChannels*中的某几个则对应通道在输出中被冻结为原值。这一设计使 RotoMerge 可以充当通道提取器或部分通道合成器。上文提到的 alpha 不透明规则正是通过BChannelsA与AChannelsA的取值体现的只要任一输入的 alpha 通道开关打开而该输入又缺少 alpha 数据就按不透明处理。Alpha maskingscreenAlpha启用后公式中的输出 alpha 变为a b - a·b这是典型的屏幕叠加式 alpha 累积公式——两个半透明区域的透明度按乘法概率合并。同时保证在另一图像 alpha 为 0 的区域本图像的像素原样保留不被另一侧擦掉。对于 copy、in、out 等 Porter-Duff 算子alpha 累积方式已由算子本身确定因此该选项不适用并被禁用。Bounding Boxbbox控制渲染区域RoD的确定方式。默认 Union 取所有已连接输入的包围盒并集保证合并结果完整选择 Intersection 则只渲染交集区域可显著缩小渲染面积、提升性能但会裁掉并集区域中只有单个输入存在的像素。Invert MaskmaskInvert实现遮罩取反。默认Off效果在遮罩值为 1 处生效勾选后变为在遮罩值为 0 处生效等价于外部 alpha 取反后再参与公式可用于快速切换合成内外区域。Mixmix在原始输出与最终合成结果之间做线性混合数值为 0 时节点等效于透传输出等于不经过合并的原始图像为 1 时完全应用合并结果中间值用于过渡动画。源码实现与文档生成机制RotoMerge 的文档页面由 Natron 自动生成而非手写维护。其生成链路如下引擎端 Engine/NodeDocumentation.cpp 负责收集插件的 ID、标签、描述、分组与图标等信息并将其与各参数的脚本名、类型、默认值、帮助文本组装为 Markdown 文档渲染器通过--export-docs命令行选项见 tools/genStaticDocs.sh批量导出所有插件的.md文档脚本随后调用 pandoc要求版本 ≤ 2.3.1以保证能生成 grid 表格将 Markdown 转换为 reStructuredText并插入.. _plugin-id:锚点标签与表格样式指令——CONTROLSTABLEPROPS占位符被替换为.. tabularcolumns::与.. cssclass:: longtable见脚本第 93 行这就是本文所依据的 net.sf.openfx.MergeRoto.rst 中 Controls 表格样式的来源。这意味着插件文档中的算子列表、参数表格与帮助文本与 Engine/MergingEnum.h 中维护的getOperatorString()/getOperatorHelpString()数据天然一致。例如 RotoMerge 文档中over的公式AB(1-a)与 Engine/MergingEnum.h 中eMergeOver的帮助字符串完全相同二者共同保证了 Natron 内置 Merge 节点如 Merge、MergeRoto 等基于同一算子集的节点与 RotoMerge 插件在算子语义上的一致性。实际应用PyPlug 脚本中的 RotoMerge 式用法在 Natron 自带的 Python 插件PyPlugs中可以找到大量直接使用这套合并算子与通道参数的实战范例可作为 RotoMerge 参数编排的参考Gui/Resources/PyPlugs/Glow.pyGlow 插件创建 Merge 节点后通过param.setValue(plus)选择加算混合并依据发光开关对lastNode.getParam(AChannelsA)调用setValue(False)/setValue(True)来启停 alpha 通道的参与随后param.setValue(Natron(plus)/Natron)为该参数写入表达式引用实现与其他节点参数的联动。Gui/Resources/PyPlugs/Glow.py同一脚本中以param.setValue(copy)使用 copy 算子配合表达式Natron(copy)/Natron实现通道搬运。Gui/Resources/PyPlugs/LightWrap.pyLightWrap 插件逐一访问AChannelsR、AChannelsG、AChannelsB三个参数展示了按通道粒度精细控制合并输入的做法。在脚本中创建 RotoMerge 节点并配置参数的通用模式为node app.createNode(net.sf.openfx.MergeRoto) node.connectInput(0, bInput) # 端口 0 B主输入 node.connectInput(1, aInput) # 端口 1 A node.connectInput(2, maskInput) # 端口 2 Mask外部 alpha node.getParam(operation).setValue(over) # 或 plus、multiply 等任意算子 node.getParam(screenAlpha).setValue(True) # 启用 alpha 遮罩式累积 node.getParam(AChannelsA).setValue(False) # 按需关闭 A 的 alpha 参与 node.getParam(mix).setValue(1.0)典型合成场景与注意事项场景一用 Roto 形状约束的叠加合成。将前景序列接入 ARoto 节点绘制形状的 alpha接入 MaskB 接入背景。选择over算子即可实现仅在 Roto 形状内把前景画到背景上的效果——前景自身的 alpha 形状被 RotoMask 取代合并区域完全由 Roto 决定。场景二通道级局部替换。关闭除红色通道外的所有AChannels*与BChannels*再配合bbox的 Intersection 选项可以实现受遮罩约束的单通道替换且只渲染必要区域。场景三HSL 色彩重组。使用 hue、saturation、color、luminosity 算子时注意其 alpha 恒按a b - a·b累积无需也无法再手动开启 Alpha masking。使用建议与限制保持规范化的预乘 alpha 数据流如前所述非黑色且 alpha 为 0 的像素在 RotoMerge 中会被不透明化处理。合成图内应避免出现这类非法像素否则结果可能与预期不符。B 输入承担透传职责禁用节点时输出等于 B因此将主画面接到 B、把次要画面接到 A 是更稳妥的连接习惯。先定算子、再调通道算子决定公式通道开关决定哪些分量参与公式。两者结合才能得到精确的合成行为当 Alpha masking 选项被置灰时说明当前算子如 copy、in、out 等的 alpha 语义已由 Porter-Duff 公式固定无需额外配置。Mix 用于过渡需要做合成强度动画时对mix参数打关键帧即可不必切换算子。RotoMerge 的价值在于把合并从单纯的 A/B 双输入操作扩展为A/B 图像 外部 Roto 遮罩的三方协作配合 38 种覆盖 Porter-Duff、混合模式、HSL 重组与特殊效果的算子使其成为 Natron 节点图中处理遮罩约束合成、通道搬运与色彩重组的通用工具。赞分享音视频视频处理图形学桌面应用【免费下载链接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.项目地址https://gitcode.com/gh_mirrors/na/Natron点击查看免费下载相关推荐Natron Difference 节点完全指南用 clean plate 与图像差异生成粗糙遮罩Natron Difference 节点完全指南用 clean plate 与图像差异生成粗糙遮罩 Differencenet.sf.openfx.Diff音视频视频处理图形学桌面应用Natron 合成实战Roto / RotoPaint 节点完全指南蒙版、抠像与矢量绘画Natron 合成实战Roto / RotoPaint 节点完全指南蒙版、抠像与矢量绘画 本文面向使用 Natron 进行视频合成的用户系统讲解节点图合音视频视频处理图形学桌面应用Natron ZMask 节点完全指南从深度缓冲生成可控遮罩的原理与实战Natron ZMask 节点完全指南从深度缓冲生成可控遮罩的原理与实战 本文围绕 Natron 内置的 ZMask 节点 插件 ID fr.inria.Z音视频视频处理图形学桌面应用上一篇graphql-go 高级特性并行执行、字段解析器和类型检查下一篇Draft.js 工程实践解密2017-03-31 周会中的 Feature Flags、Master 直发发布与内外仓库同步机制创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考