音视频视频处理图形学桌面应用【免费下载链接】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点击查看免费下载导读Premultnet.sf.openfx.Premult是 Natron 节点图合成管线中负责通道预乘premultiplication的核心节点它把选定平面Plane的通道乘以 Alpha或其他指定通道从而把非预乘straight/unpremultiplied图像转换为内部统一使用的预乘associated alpha表示。本文基于 net.sf.openfx.Premult.rst 展开结合 Engine 层源码与内置 Python 插件讲解该节点的全部输入、控件参数、底层像素运算原理以及如何在 Read 节点、PyPlugs 与混合合成流程中正确使用它。Premult 节点图标本文档对应插件版本为2.0net.sf.openfx.Premult。该文档由 Natron 自身自动生成文件头标注 Do not edit this file! It is generated automatically by Natron itself因此下述参数表与节点实际行为完全一致。Premult 节点是什么根据插件官方描述Premult 节点的作用是Multiply the selected channels by alpha (or another channel).将所选通道乘以 Alpha或其他任意通道。它在节点图中的视觉表现如下来自文档的|pluginIcon|占位符所指向的插件图标 net.sf.openfx.Premult.png[Source] ──► [Premult] ──► 预乘后的图像为什么要做预乘Natron 的预乘 Alpha 工作流Natron 与 Nuke 一致采用**预乘 Alphapremultiplied alpha / associated alpha**作为默认合成工作流。项目文档在 intro.rst 中明确说明Natron made the choice of using premultiplied alpha by default in the compositing workflow, like all modern compositing software, because images are stored internally with floating-point values.原因在于图像内部以浮点值存储预乘后的 RGB 值在颜色校正、混合Merge、模糊Blur等运算中能保持正确的边缘半透明效果避免出现黑边/白边fringe。因此 Premult 节点通常用于把非预乘素材例如多数 3D 渲染器的直通输出转换为 Natron 内部的预乘表示。关键行为未选通道时的元数据直通文档强调了一个容易忽略的行为If no channel is selected, or the premultChannel is set to None, the image data is left untouched, but its premultiplication state is set to PreMultiplied.即当By / premultChannel选择为None对应选项0常量通道时Premult 节点不会修改任何像素数据但会把输出的预乘状态premultiplication state标记为PreMultiplied。这在 Read 节点对素材预乘状态判断错误时非常有用——只需拖入一个 Premult 节点并保持默认参数就能纠正下游节点的元数据认知而不改变画面本身。输入InputsPremult 节点只有一个输入输入描述可选Source源图像否No输入必须连接否则节点无法渲染。Source 输入通常来自 Read 节点、Merge 节点或其他任意上游节点。控件参数详解Controls下表完整列出 Premult 节点的全部控件字段与文档 net.sf.openfx.Premult.rst 一致参数 / 脚本名类型默认值功能Plane /inputPlaneChoiceColor.RGBA要进行预乘的平面通道By /premultChannelChoiceColor.A用作反预乘依据的通道All Planes /processAllPlanesBooleanOff勾选后处理输入中的所有平面并输出到与输入相同的平面Clip Info... /clipInfoButton—显示输入的信息Plane /inputPlane选择要预乘的平面该参数决定对哪个平面做预乘。默认值为Color.RGBA可选值如下Color.RGBAuk.co.thefoundry.OfxImagePlaneColour颜色平面最常用DisparityLeft.Disparityuk.co.thefoundry.OfxImagePlaneStereoDisparityLeft左眼视差平面DisparityRight.Disparityuk.co.thefoundry.OfxImagePlaneStereoDisparityRight右眼视差平面Backward.Motionuk.co.thefoundry.OfxImagePlaneBackMotionVector向后运动矢量平面Forward.Motionuk.co.thefoundry.OfxImagePlaneForwardMotionVector向前运动矢量平面。这些标识符对应 OFX 标准中的图像平面命名uk.co.thefoundry.OfxImagePlane*说明该节点支持对立体视差与运动矢量等**辅助平面auxiliary plane**执行预乘操作而不仅限于颜色平面。By /premultChannel用作预乘依据的通道该参数指定乘以或除以哪一个通道默认Color.AAlpha 通道可选值Color.Ruk.co.thefoundry.OfxImagePlaneColour.R取 Source 输入的 R 通道Color.Guk.co.thefoundry.OfxImagePlaneColour.G取 G 通道Color.Buk.co.thefoundry.OfxImagePlaneColour.B取 B 通道Color.Auk.co.thefoundry.OfxImagePlaneColour.A取 A 通道默认00 常量通道11 常量通道。选择0常量通道时效果等同于None——不做任何像素修改仅更新预乘状态元数据见上文关键行为。选择1则相当于不改变数据但按常量 1 执行一次预乘运算数值上即像素保持不变。在 Unpremult 节点 中该参数用于执行反预乘unpremultiply即把 RGB 除以该通道。All Planes /processAllPlanes全平面处理开关默认Off。勾选后输入中的所有平面都会被处理并输出到与输入相同的平面。文档给出的典型用途示例It is useful for example to apply a Transform effect on all planes.即当希望把某个变换Transform等效果应用到所有平面而不只是颜色平面时可借助该选项保证视差、运动矢量等平面同样被正确处理避免仅颜色平面被变换而辅助平面掉队。Clip Info... /clipInfo查看输入信息按钮型参数点击后弹出窗口显示当前输入Source的格式信息用于排查输入分辨率、位深、通道布局与预乘状态等。它是 OFX 插件的通用诊断控件本身不参与像素运算。源码级原理Premult 的像素运算Premult 节点的核心算法在 Natron Engine 的Image类中实现位于 Image.h 与 Image.cpp。预乘/反预乘的模板实现Image类声明了premultImage与unpremultImage两个公开方法Image.hvoid premultImage(const RectI roi); // 预乘 void unpremultImage(const RectI roi); // 反预乘两者都基于模板函数premultForDepth按位深分派最终进入premultInternalPIX, doPremult模板。实际像素运算是逐像素、逐 RGB 通道执行的Image.cppfor (int c 0; c 3; c) { if (doPremult) { dstPix[c] PIX(float(dstPix[c]) * dstPix[3]); // RGB RGB × A } else { if (dstPix[3] ! 0) { dstPix[c] PIX( dstPix[c] / float(dstPix[3]) ); // RGB RGB ÷ A } } }即预乘PremultRGB RGB × A逐通道相乘反预乘UnpremultRGB RGB ÷ A且仅在A ≠ 0时执行除法避免除零产生 NaN 或无穷值。从代码可见运算只修改前三个颜色通道Alpha 通道本身保持不变同时模板按像素类型PIX如unsigned char、float、half自动适配位深浮点内部表示下不会引入量化误差。这也解释了 Natron 文档 intro.rst 所述内部以浮点值存储对预乘工作流的重要性。预乘状态的枚举与元数据传播Natron 在 Enums.h 中定义了三种预乘状态enum ImagePremultiplicationEnum { eImagePremultiplicationOpaque 0, eImagePremultiplicationPremultiplied, eImagePremultiplicationUnPremultiplied, };分别对应 OFX 标准中的三种图像预乘属性值。在 OFX 宿主适配层Natron 将内部枚举映射为 OFX 字符串属性OfxClipInstance.cppstatic const std::string prem(kOfxImagePreMultiplied); static const std::string unprem(kOfxImageUnPreMultiplied); static const std::string opq(kOfxImageOpaque);并在每次向上游插件/下游节点传递图像时把内部图像的预乘状态写入 OFX 属性kOfxImageEffectPropPreMultiplicationOfxClipInstance.cppofxImageBase-setStringProperty( kOfxImageEffectPropPreMultiplication, OfxClipInstance::natronsPremultToOfxPremult( internalImage-getPremultiplication() ) );因此Premult 节点不改像素只改状态的行为在实现上就是像素旁路pass-through但把输出图像的_premult成员置为eImagePremultiplicationPremultiplied。下游的 Merge、Viewer、Write 等节点会读取该状态来决定合成与输出方式。状态标记的查看Viewer 与 Checkerboard在 ViewerGL.cpp 中Viewer 的BlendSetter会根据图像的ImagePremultiplicationEnum选择 OpenGL 混合模式预乘图像使用对应预乘混合因子非预乘图像使用普通 Alpha 混合。这也是为什么数据直通但状态翻转的 Premult 节点会影响 Viewer 的棋盘格checkerboard显示结果。Premult 与 Unpremult一对互逆节点Premult 的孪生节点是 Unpremult 节点net.sf.openfx.Unpremult版本同为 2.0Divide the selected channels by alpha (or another channel)将所选通道除以 Alpha或其他任意通道。两者的参数表完全对称inputPlane、premultChannel、processAllPlanes、clipInfo差别仅在于一个是乘、一个是除节点运算状态标记PremultRGB × APreMultipliedUnpremultRGB ÷ AA≠0 时UnPreMultiplied在 Read 节点中素材的预乘状态由 Premultiplication 设置决定thenodes-image-read.rstNatron can work in both modes (and switch from one to the other with Premult and Unpremult Nodes). For a video leave all this to opaque, for most photoshop like documents use premultiplied in all, for some 3D render passes you will switch both to unpremultiplied.如果 Read 节点对文件预乘状态的判断与实际情况不符例如 3D 渲染器输出的是非预乘图像而 Read 误判为预乘可以在 Read 之后串联 Premult 或 Unpremult 节点进行显式修正。典型链路Read (非预乘素材) └──► Premult # RGB×A标记为 PreMultiplied └──► Merge / Blur / Grade ...内部预乘工作流输出时的预乘状态Write 节点会根据节点树中预乘标记的处理情况自动推断输出文件的 Input Premult 值thenodes-image-write.rst因此只要在树中正确使用 Premult/Unpremult 维护好状态标记输出文件就能正确记录预乘信息避免写出黑边图像。在 Natron 内置 Python 插件PyPlugs中的实际用法Natron 自带的若干内置 Python 插件在内部直接创建net.sf.openfx.Premult节点是观察其工程化用法的最佳示例。例如 DropShadow.py# Start of node Premult1 lastNode app.createNode(net.sf.openfx.Premult, 2, group) lastNode.setScriptName(Premult1) lastNode.setLabel(Premult1) # ... groupPremult1 lastNode # End of node Premult1 groupPremult1.connectInput(0, groupBlur1) # 对模糊后的 Alpha 通道执行预乘 groupMerge1.connectInput(0, groupPremult1)同样的模式还出现在 Fill.py对 Shuffle 输出的颜色执行预乘后再进 Merge、LightWrap.py对 Keyer 结果做预乘再参与合并以及 PIKColor.py 中。可以看到这些插件的共同套路是先用 Shuffle / Keyer / Blur 等节点构造可能为直通非预乘的中间结果再接一个 Premult 节点把颜色乘回 Alpha最后才交给 Merge 参与合成——这正是预乘工作流的正确打开方式。实战建议与注意事项结合官方合成教程 tutorials-evaluating-script-structure.rst 中的警告使用 Premult 节点时应注意不要对预乘图像直接做颜色校正Color correction should not be done on images that are premultiplied。需要调色时应先加 Unpremult 节点还原直通色再调色最后重新 Premult可用Premult → Unpremult → Grade → Premult三段式或直接利用 Unpremult 节点。避免重复预乘Do not apply premultiplication twice in a row to the same image. It can damage the edges of the alpha。连续两次 Premult 会造成 RGB 数值被 A² 加权破坏半透明边缘务必在节点树中保持预乘 ↔ 非预乘状态清晰可查。利用状态直通技巧当素材元数据预乘状态与真实数据不符、但你又不想改动像素时直接串联一个 Premult 节点并保持premultChannel 0或默认的 A 与像素无关的场景即可只修正状态标记。3D 渲染 pass 通常是非预乘正如 thenodes-image-read.rst 所提示多数软件输出预乘图像但并非所有 3D 渲染器如此。从渲染器导出的 beauty pass 进入合成前应根据其输出规范决定补 Premult 还是 Unpremult。保持与 Merge 的一致性Natron 是预乘合成器thenodes-merge-merge.rstMerge 节点按预乘语义计算任何送入 Merge 的颜色都应处于正确的预乘状态否则会产生错误边缘。小结Premult 节点虽只有四个控件却是 Natron 预乘 Alpha 工作流中承上启下的关键节点它既能对任意平面颜色、视差、运动矢量执行RGB × A的像素级预乘也能在数据不变的前提下仅翻转输出图像的预乘状态元数据。理解其参数inputPlane、premultChannel、processAllPlanes、底层模板实现Image.cpp以及状态枚举映射Enums.h即可在 Read、Merge、Write 与 PyPlugs 插件链路中正确维护预乘状态避免黑边与边缘损伤。赞分享音视频视频处理图形学桌面应用【免费下载链接】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 Merge 节点完全指南Porter-Duff 合成操作符、预乘 Alpha 纪律与参数详解Natron Merge 节点完全指南Porter Duff 合成操作符、预乘 Alpha 纪律与参数详解 Merge 节点是 Natron 中执行图像合成音视频视频处理图形学桌面应用Natron Gamma 节点使用指南通道级 Gamma 校正的原理、参数与实战Natron Gamma 节点使用指南通道级 Gamma 校正的原理、参数与实战 本文以 Natron 官方插件文档 net.sf.openfx.GammaP音视频视频处理图形学桌面应用Natron GMIC Bandpass 节点完全指南参数详解、通道处理与预览控制Natron GMIC Bandpass 节点完全指南参数详解、通道处理与预览控制 本篇技术指南以 Natron 官方自动生成的插件参考文档 eu.gmic音视频视频处理图形学桌面应用上一篇three-mesh-ui 项目教程下一篇Blender Bezier Utils 插件安装与使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考