點(diǎn)完全指南:利用外部 Roto 遮罩實(shí)現(xiàn)像素級通道合并)
音視頻視頻處理圖形學(xué)桌面應(yīng)用【免費(fèi)下載鏈接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.項(xiàng)目地址https://gitcode.com/gh_mirrors/na/Natron點(diǎn)擊查看免費(fèi)下載本文以 Natron 官方插件文檔 Documentation/source/plugins/net.sf.openfx.MergeRoto.rst 為核心系統(tǒng)講解 RotoMergenet.sf.openfx.MergeRoto節(jié)點(diǎn)的合并原理、全部算子公式、輸入與參數(shù)配置。讀者將掌握如何在合成管線中借助 RotoMask 外部 alpha 通道以任意 Porter-Duff 算子或混合模式將 A 輸入繪制到 B 輸入上并理解每個(gè)參數(shù)在底層引擎中的真實(shí)作用。節(jié)點(diǎn)概述RotoMerge 與普通 Merge 的區(qū)別RotoMerge 是 Natron 合成節(jié)點(diǎn)家族中的一員其核心特征是使用外部 alpha 通道作為輸入 A 的合成 alpha。普通 Merge 節(jié)點(diǎn)直接使用 A、B 兩個(gè)輸入各自的 alpha 通道參與合成而 RotoMerge 多出了一個(gè)關(guān)鍵維度RotoMask——一個(gè)獨(dú)立的遮罩通常來自 Roto 節(jié)點(diǎn)的繪制結(jié)果被用作輸入 A 的 alpha 值即公式中的小寫字母a。具體而言該節(jié)點(diǎn)對兩個(gè)輸入執(zhí)行逐像素pixel-by-pixel合并運(yùn)算輸入 A 的全部通道RGBA與輸入 B 的全部通道進(jìn)行合并但合并時(shí)輸入 A 的 alpha 不再取自其自身 alpha 通道而是取 RotoMask 的值。于是A 的 alpha 通過 RotoMask覆蓋到 B 的 alpha 之上。這一機(jī)制尤其適合以下場景用 Roto 繪制出的遮罩作為外部 alpha把 A 輸入的顏色信息刷到 B 輸入的 alpha 通道上在 A 自身 alpha 為零的區(qū)域仍然借助不透明的外部遮罩將 A 的像素值寫入結(jié)果RotoMask 可以在 A 的 alpha 為 0 的位置保持完全不透明用受控的遮罩形狀精確限定合并發(fā)生的區(qū)域避免 A 自身 alpha 形狀干擾合成結(jié)果。從源碼結(jié)構(gòu)看Natron 內(nèi)置的 Merge 節(jié)點(diǎn)與 RotoMerge 共享同一套算子體系引擎中的 Global/Enums.h 定義了MergingFunctionEnum枚舉從eMergeATop到eMergeXOR共 38 個(gè)算子其注釋明確要求與 OpenFX 的ofxsMerging.h保持同步Engine/MergingEnum.h 則提供getOperatorString()算子腳本名與getOperatorHelpString()算子公式提示兩個(gè)輔助函數(shù)RotoMerge 文檔中列出的算子名稱與公式與該頭文件逐項(xiàng)一致。在 GUI 端Gui/NodeGui.cpp 正是通過Merge::getOperatorString()與Merge::getOperatorPixmap()來為節(jié)點(diǎn)構(gòu)建算子下拉列表和對應(yīng)圖標(biāo)。重要前提輸入 alpha 的不透明處理規(guī)則使用 RotoMerge 之前必須理解一條關(guān)鍵規(guī)則如果 A 或 B 輸入只連接了 RGB 通道無 alpha其 alpha 通道會被視為恒為不透明值 1。此時(shí)只要B 通道 ABChannelsA復(fù)選框處于勾選狀態(tài)輸出就會完全不透明。造成這一行為的根本原因是非零 RGB 值與零 alpha 組合不是合法的 alpha 預(yù)乘premultipliedRGBA 值。如果用戶希望背景保持完全透明那么背景只能為純黑色——這等價(jià)于根本不使用合并算子。非黑色且完全透明的像素不應(yīng)出現(xiàn)在任何規(guī)范的合成圖compositing graph中這是所有合成軟件共享的約定RotoMerge 只是嚴(yán)格遵循了這一約定。算子詳解從 Porter-Duff 到混合模式RotoMerge 共提供 38 種合并算子全部通過operation腳本名operation參數(shù)選擇默認(rèn)值為over。以下為完整算子清單。為便于閱讀約定大寫A、B代表兩個(gè)輸入各自的某個(gè)分量R、G、B 或 A小寫a、b代表兩個(gè)輸入各自的 alpha 通道值。運(yùn)算公式對每個(gè)分量獨(dú)立應(yīng)用。Porter-Duff 合成算子這組算子是計(jì)算機(jī)圖形合成的基礎(chǔ)源自 Porter 與 Duff 的經(jīng)典論文《Compositing Digital Images》SIGGRAPH 1984也是 W3C Compositing and Blending Level 1 規(guī)范的核心內(nèi)容算子腳本名公式別名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默認(rèn)算子是最常用的前景疊背景操作A 覆蓋在 B 之上重疊區(qū)域按 A 的 alpha 混合。matte見其他算子則是其非預(yù)乘版本。Multiply 與 Screen 類混合模式這類算子源于印刷與圖像編輯的混合模式Blend Modes每個(gè)通道獨(dú)立計(jì)算multiplyAB若 A 0 且 B 0 則取 AscreenA B - AB若 A 或 B ≤ 1否則max(A, B)overlayB 0.5 時(shí)取multiply(A, 2·B)B 0.5 時(shí)取screen(A, 2·B - 1)hard-lightA 0.5 時(shí)取multiply(2·A, B)A 0.5 時(shí)取screen(2·A - 1, B)soft-lightA 0.5 時(shí)做 burn-in加深A(yù) 0.5 時(shí)做 lighten提亮Dodge 與 Burn 類color-dodge將 B 向 A 的方向提亮brighten B towards Acolor-burn將 B 向 A 的方向壓暗darken B towards ApinlightB ≥ 0.5 時(shí)取max(A, 2·B - 1)否則取min(A, B·2)differenceabs(A - B)別名 absminusexclusionA B - 2ABdivideA / B若 A 0 且 B 0 則取 0簡單算術(shù)混合模式plusA B別名 addfromB - A別名 subtractminusA - Bdifferenceabs(A - B)別名 absminusminmin(A, B)別名 darken only只取暗者maxmax(A, B)別名 lighten only只取亮者色相、飽和度與亮度類HSL 類這組算子通過SetLum設(shè)置亮度與SetSat設(shè)置飽和度輔助函數(shù)定義用于將 A 的色相/飽和度/顏色與 B 的對應(yīng)屬性進(jìn)行重組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始終強(qiáng)制啟用 Alpha masking即這些模式下輸出 alpha 始終按a b - a·b計(jì)算詳見下文 Alpha masking 參數(shù)。其他算子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)即非預(yù)乘unpremultiplied版本的 overreflectA·A / (1 - B)參考資源除 Porter-Duff 論文外上述算子的理論依據(jù)還包括 W3C《Compositing and Blending Level 1》、W3C《SVG Compositing Specification》、ISO 32000-1:2008PDF 規(guī)范第 11.3 節(jié)Basic Compositing Operations、Marc Levoy 的《Digital Image Compositing》課程資料以及 Martin Constable 關(guān)于 Nuke Merge 算子與B 輸入主導(dǎo)性Primacy of the B Feed的論述。grain-extract 與 grain-merge 的描述見 GIMP 官方文檔的圖層模式章節(jié)。這些資料共同構(gòu)成了算子集合的理論出處。輸入端口詳解RotoMerge 共提供 4 個(gè)輸入端口全部為可選Optional輸入描述是否可選B主輸入main input。當(dāng)節(jié)點(diǎn)被禁用disable時(shí)B 被直接透傳pass through作為輸出。是A要與輸入 B 合并的圖像序列。是Mask遮罩輸入作為輸入 A 的外部 alpha 通道來源。是A2備用輸入 A用途同 A。是關(guān)鍵行為由于 B 是主輸入且承擔(dān)透傳職責(zé)禁用節(jié)點(diǎn)時(shí)輸出的仍是 B而 A 與 A2 兩個(gè)輸入端口的存在意味著可以把兩個(gè)不同的前景序列接入并切換使用在腳本中通過切換連接來實(shí)現(xiàn) A 與 A2 的互換。Mask 端口即文檔描述中RotoMask的接入位置——它并不參與顏色合并而是僅作為 A 的 alpha 值參與所有公式計(jì)算。控件參數(shù)Controls逐項(xiàng)解析以下是該節(jié)點(diǎn)面板中全部參數(shù)參數(shù)名/腳本名、類型、默認(rèn)值、功能參數(shù) / 腳本名類型默認(rèn)值功能Operation /operationChoiceover用于合并 A 與 B 的算子。公式對每個(gè)分量獨(dú)立應(yīng)用若勾選 Alpha masking輸出 alpha 改用a b - a·b計(jì)算HSL 模式hue、saturation、color、luminosity總是啟用 Alpha masking??蛇x值見上文算子詳解全部 38 項(xiàng)。Bounding Box /bboxChoiceUnion決定輸出圖像的包圍盒bounding box來源Union (union)——所有已連接輸入包圍盒的并集Intersection (intersection)——所有已連接輸入包圍盒的交集A (a)——僅使用輸入 A 的包圍盒B (b)——僅使用輸入 B 的包圍盒。Alpha masking /screenAlphaBooleanOff啟用后在另一圖像 alpha 為 0 的區(qū)域輸入圖像保持不變輸出 alpha 被設(shè)置為a b - a·b禁用時(shí) alpha 通道與普通通道一樣參與逐像素運(yùn)算。對于該選項(xiàng)不適用或無影響的算子此參數(shù)會被置灰禁用。R /AChannelsRBooleanOn是否使用輸入 A 的紅色通道G /AChannelsGBooleanOn是否使用輸入 A 的綠色通道B /AChannelsBBooleanOn是否使用輸入 A 的藍(lán)色通道A /AChannelsABooleanOn是否使用輸入 A 的 alpha 通道R /BChannelsRBooleanOn是否使用輸入 B 的紅色通道G /BChannelsGBooleanOn是否使用輸入 B 的綠色通道B /BChannelsBBooleanOn是否使用輸入 B 的藍(lán)色通道A /BChannelsABooleanOn是否使用輸入 B 的 alpha 通道R /OutputChannelsRBooleanOn是否將紅色通道寫入輸出G /OutputChannelsGBooleanOn是否將綠色通道寫入輸出B /OutputChannelsBBooleanOn是否將藍(lán)色通道寫入輸出A /OutputChannelsABooleanOn是否將 alpha 通道寫入輸出Invert Mask /maskInvertBooleanOff勾選后效果在遮罩為 0 的區(qū)域完全生效即遮罩被反轉(zhuǎn)。Mix /mixDouble1原圖與變換后圖像之間的混合因子0 表示完全不混合1 表示完全應(yīng)用。關(guān)鍵參數(shù)的行為細(xì)節(jié)通道開關(guān)AChannels*/BChannels*/OutputChannels*這 12 個(gè)布爾參數(shù)讓用戶能夠精確控制參與運(yùn)算與寫入輸出的通道。例如只勾選 A 的 R 通道與 B 的 R 通道即可把合并限制在紅色分量上關(guān)閉全部OutputChannels*中的某幾個(gè)則對應(yīng)通道在輸出中被凍結(jié)為原值。這一設(shè)計(jì)使 RotoMerge 可以充當(dāng)通道提取器或部分通道合成器。上文提到的 alpha 不透明規(guī)則正是通過BChannelsA與AChannelsA的取值體現(xiàn)的只要任一輸入的 alpha 通道開關(guān)打開而該輸入又缺少 alpha 數(shù)據(jù)就按不透明處理。Alpha maskingscreenAlpha啟用后公式中的輸出 alpha 變?yōu)閍 b - a·b這是典型的屏幕疊加式 alpha 累積公式——兩個(gè)半透明區(qū)域的透明度按乘法概率合并。同時(shí)保證在另一圖像 alpha 為 0 的區(qū)域本圖像的像素原樣保留不被另一側(cè)擦掉。對于 copy、in、out 等 Porter-Duff 算子alpha 累積方式已由算子本身確定因此該選項(xiàng)不適用并被禁用。Bounding Boxbbox控制渲染區(qū)域RoD的確定方式。默認(rèn) Union 取所有已連接輸入的包圍盒并集保證合并結(jié)果完整選擇 Intersection 則只渲染交集區(qū)域可顯著縮小渲染面積、提升性能但會裁掉并集區(qū)域中只有單個(gè)輸入存在的像素。Invert MaskmaskInvert實(shí)現(xiàn)遮罩取反。默認(rèn)Off效果在遮罩值為 1 處生效勾選后變?yōu)樵谡谡种禐?0 處生效等價(jià)于外部 alpha 取反后再參與公式可用于快速切換合成內(nèi)外區(qū)域。Mixmix在原始輸出與最終合成結(jié)果之間做線性混合數(shù)值為 0 時(shí)節(jié)點(diǎn)等效于透傳輸出等于不經(jīng)過合并的原始圖像為 1 時(shí)完全應(yīng)用合并結(jié)果中間值用于過渡動畫。源碼實(shí)現(xiàn)與文檔生成機(jī)制RotoMerge 的文檔頁面由 Natron 自動生成而非手寫維護(hù)。其生成鏈路如下引擎端 Engine/NodeDocumentation.cpp 負(fù)責(zé)收集插件的 ID、標(biāo)簽、描述、分組與圖標(biāo)等信息并將其與各參數(shù)的腳本名、類型、默認(rèn)值、幫助文本組裝為 Markdown 文檔渲染器通過--export-docs命令行選項(xiàng)見 tools/genStaticDocs.sh批量導(dǎo)出所有插件的.md文檔腳本隨后調(diào)用 pandoc要求版本 ≤ 2.3.1以保證能生成 grid 表格將 Markdown 轉(zhuǎn)換為 reStructuredText并插入.. _plugin-id:錨點(diǎn)標(biāo)簽與表格樣式指令——CONTROLSTABLEPROPS占位符被替換為.. tabularcolumns::與.. cssclass:: longtable見腳本第 93 行這就是本文所依據(jù)的 net.sf.openfx.MergeRoto.rst 中 Controls 表格樣式的來源。這意味著插件文檔中的算子列表、參數(shù)表格與幫助文本與 Engine/MergingEnum.h 中維護(hù)的getOperatorString()/getOperatorHelpString()數(shù)據(jù)天然一致。例如 RotoMerge 文檔中over的公式AB(1-a)與 Engine/MergingEnum.h 中eMergeOver的幫助字符串完全相同二者共同保證了 Natron 內(nèi)置 Merge 節(jié)點(diǎn)如 Merge、MergeRoto 等基于同一算子集的節(jié)點(diǎn)與 RotoMerge 插件在算子語義上的一致性。實(shí)際應(yīng)用PyPlug 腳本中的 RotoMerge 式用法在 Natron 自帶的 Python 插件PyPlugs中可以找到大量直接使用這套合并算子與通道參數(shù)的實(shí)戰(zhàn)范例可作為 RotoMerge 參數(shù)編排的參考Gui/Resources/PyPlugs/Glow.pyGlow 插件創(chuàng)建 Merge 節(jié)點(diǎn)后通過param.setValue(plus)選擇加算混合并依據(jù)發(fā)光開關(guān)對lastNode.getParam(AChannelsA)調(diào)用setValue(False)/setValue(True)來啟停 alpha 通道的參與隨后param.setValue(Natron(plus)/Natron)為該參數(shù)寫入表達(dá)式引用實(shí)現(xiàn)與其他節(jié)點(diǎn)參數(shù)的聯(lián)動。Gui/Resources/PyPlugs/Glow.py同一腳本中以param.setValue(copy)使用 copy 算子配合表達(dá)式Natron(copy)/Natron實(shí)現(xiàn)通道搬運(yùn)。Gui/Resources/PyPlugs/LightWrap.pyLightWrap 插件逐一訪問AChannelsR、AChannelsG、AChannelsB三個(gè)參數(shù)展示了按通道粒度精細(xì)控制合并輸入的做法。在腳本中創(chuàng)建 RotoMerge 節(jié)點(diǎn)并配置參數(shù)的通用模式為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) # 按需關(guān)閉 A 的 alpha 參與 node.getParam(mix).setValue(1.0)典型合成場景與注意事項(xiàng)場景一用 Roto 形狀約束的疊加合成。將前景序列接入 ARoto 節(jié)點(diǎn)繪制形狀的 alpha接入 MaskB 接入背景。選擇over算子即可實(shí)現(xiàn)僅在 Roto 形狀內(nèi)把前景畫到背景上的效果——前景自身的 alpha 形狀被 RotoMask 取代合并區(qū)域完全由 Roto 決定。場景二通道級局部替換。關(guān)閉除紅色通道外的所有AChannels*與BChannels*再配合bbox的 Intersection 選項(xiàng)可以實(shí)現(xiàn)受遮罩約束的單通道替換且只渲染必要區(qū)域。場景三HSL 色彩重組。使用 hue、saturation、color、luminosity 算子時(shí)注意其 alpha 恒按a b - a·b累積無需也無法再手動開啟 Alpha masking。使用建議與限制保持規(guī)范化的預(yù)乘 alpha 數(shù)據(jù)流如前所述非黑色且 alpha 為 0 的像素在 RotoMerge 中會被不透明化處理。合成圖內(nèi)應(yīng)避免出現(xiàn)這類非法像素否則結(jié)果可能與預(yù)期不符。B 輸入承擔(dān)透傳職責(zé)禁用節(jié)點(diǎn)時(shí)輸出等于 B因此將主畫面接到 B、把次要畫面接到 A 是更穩(wěn)妥的連接習(xí)慣。先定算子、再調(diào)通道算子決定公式通道開關(guān)決定哪些分量參與公式。兩者結(jié)合才能得到精確的合成行為當(dāng) Alpha masking 選項(xiàng)被置灰時(shí)說明當(dāng)前算子如 copy、in、out 等的 alpha 語義已由 Porter-Duff 公式固定無需額外配置。Mix 用于過渡需要做合成強(qiáng)度動畫時(shí)對mix參數(shù)打關(guān)鍵幀即可不必切換算子。RotoMerge 的價(jià)值在于把合并從單純的 A/B 雙輸入操作擴(kuò)展為A/B 圖像 外部 Roto 遮罩的三方協(xié)作配合 38 種覆蓋 Porter-Duff、混合模式、HSL 重組與特殊效果的算子使其成為 Natron 節(jié)點(diǎn)圖中處理遮罩約束合成、通道搬運(yùn)與色彩重組的通用工具。贊分享音視頻視頻處理圖形學(xué)桌面應(yīng)用【免費(fèi)下載鏈接】NatronOpen-source video compositing software. Node-graph based. Similar in functionalities to Adobe After Effects and Nuke by The Foundry.項(xiàng)目地址https://gitcode.com/gh_mirrors/na/Natron點(diǎn)擊查看免費(fèi)下載相關(guān)推薦Natron Difference 節(jié)點(diǎn)完全指南用 clean plate 與圖像差異生成粗糙遮罩Natron Difference 節(jié)點(diǎn)完全指南用 clean plate 與圖像差異生成粗糙遮罩 Differencenet.sf.openfx.Diff音視頻視頻處理圖形學(xué)桌面應(yīng)用Natron 合成實(shí)戰(zhàn)Roto / RotoPaint 節(jié)點(diǎn)完全指南蒙版、摳像與矢量繪畫Natron 合成實(shí)戰(zhàn)Roto / RotoPaint 節(jié)點(diǎn)完全指南蒙版、摳像與矢量繪畫 本文面向使用 Natron 進(jìn)行視頻合成的用戶系統(tǒng)講解節(jié)點(diǎn)圖合音視頻視頻處理圖形學(xué)桌面應(yīng)用Natron ZMask 節(jié)點(diǎn)完全指南從深度緩沖生成可控遮罩的原理與實(shí)戰(zhàn)Natron ZMask 節(jié)點(diǎn)完全指南從深度緩沖生成可控遮罩的原理與實(shí)戰(zhàn) 本文圍繞 Natron 內(nèi)置的 ZMask 節(jié)點(diǎn) 插件 ID fr.inria.Z音視頻視頻處理圖形學(xué)桌面應(yīng)用上一篇graphql-go 高級特性并行執(zhí)行、字段解析器和類型檢查下一篇Draft.js 工程實(shí)踐解密2017-03-31 周會中的 Feature Flags、Master 直發(fā)發(fā)布與內(nèi)外倉庫同步機(jī)制創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考