TouchDesigner 雙投影機拼接夾角面:projectorBlend 切畫面,Stoner 與 kantanMapper 校正

摘要

兩台投影機投兩個有夾角的面時,可以讓接縫落在兩面相接的折線上,不做融接。projectorBlend 只負責切畫面,每台投影機再各用一個 Stoner 修正布面下垂、一個 kantanMapper 對齊四角。

文章目錄

兩台投影機要投滿兩個有夾角的面時,我會讓接縫直接落在兩面相接的折線上,不做融接。兩台各投一面,交界就在折線上,畫面不需要重疊。在 TouchDesigner(以下簡稱 TD)裡,projectorBlend 只負責把畫面切成左右兩半。每台投影機各接一個 Stoner 修正布面下垂,再接一個 kantanMapper 對齊四角。這三個元件都在 TD 的 Palette 裡,整條流程如下:

原始畫面經 Fit TOP 以 Fit Outside 填滿 1280×400 畫布,projectorBlend 以 2×1、overlap 0 處理後用 Crop 取左右兩半,各自經過 Stoner 修下垂與 kantanMapper 拉四角後送到左右兩台投影機

本文的截圖來自用 td-cli 在 TD 2025.32050 重建的模擬環境:兩片 2.4 m × 1.5 m 的布面以 120° 夾角相接,中央往後垂 10 cm,兩台投影機放在地上往上仰 40°。Non-Commercial 版的 TOP 最大只到 1280 px,所以模擬時把每台投影機縮成 640×400,正式案場要用 Commercial 授權跑投影機的原生解析度。

畫布與解析度

我在現場真正算過的只有解析度。畫布是兩台投影機拼起來的大小,kantanMapper 則是單台的大小。兩台 1920×1200 的投影機左右並排時,Fit TOP 的輸出解析度設 3840×1200,projectorBlend 每台的解析度和 kantanMapper 的 Resolution 都設 1920×1200。

原始畫面的比例通常和畫布不同。畫面裡沒有要對準實體物件的內容時,我把 Fit TOP 的 Fit 設成 Fit Outside,讓畫面等比放大到填滿畫布,多出來的上下或左右直接裁掉。左邊是 4:3 的測試圖,右邊是它填滿 1280×400 畫布後的樣子:

左邊是 4:3 的格線測試圖,有黃色與紅色外框,右邊是同一張圖等比放大到 1280×400 後的畫布,上下被裁掉,只剩中段格線、左右兩側的黃色直線與中央的紅色十字

projectorBlend 的陣列設成 2×1,overlap 設 0。陣列與每台的解析度在 Projector Blend 頁,overlap 在每台投影機自己的 Projector1、Projector2 頁。它輸出的仍是兩台畫面並排的一張圖,所以後面再接兩個 Crop TOP,一個裁出左半給左台,一個裁出右半給右台。

projectorBlend 參數視窗的兩頁,左邊 Projector Blend 頁的 Projector Array 是 2 與 1、Projector Resolution 是 640 與 400,右邊 Projector1 頁的 Overlap 四個欄位都是 0

官方說明寫輸入會被拉伸到陣列尺寸,我在 TD 2025.32050 實測看到的是輸入尺寸不對時,畫面被等比放大、邊緣被切掉。灰階測試圖看不出來,格線圖才看得到。

每台投影機用一個 kantanMapper 對四角

kantanMapper 是在投影畫面上畫形狀、直接拖動頂點的對位元件。四角校正只能把畫面往內收,所以每台投影機的投影範圍要蓋過自己負責的那一面。下圖是兩台剛架好、直接輸出各自半張畫面的樣子,兩台在中間交叉,畫面都越過折線投到對面,跨在接縫上的橘色圓環也被拆成兩段:

未校正的模擬畫面,兩片布面以夾角相接,左右投影機的格線在中間交叉並互相投到對面,橘色圓環被拆成兩段錯開的弧線

每台投影機各放一個 kantanMapper,Resolution 設成投影機解析度,在裡面畫一個矩形,貼圖選這台投影機的 Stoner。Stoner 還沒拖過點時,送出來的就是 projectorBlend 切好的半張畫面,所以可以先拉四角。選取矩形、切到頂點工具後,四個角會出現可以拖動的點,對著布面把它們拉到這一面的四個角:

左台 kantanMapper 的編輯視窗,左側 Resolution 是 640 與 400,Shapes 清單選取了一個矩形,右側的矩形已拉成梯形,四個角各有一個圓點,滑鼠停在左上角的點上

兩台都拉好以後,接縫落在折線上,橘色圓環也接回一個圓:

kantanMapper 四角對齊後的模擬畫面,紅色外框貼齊兩片布面的邊緣,橘色圓環在折線兩側接成完整的圓,但布面中間的格線略微彎曲

邊緣和接縫都對了,布面中間的格線卻還是彎的。矩形只有四個角點,只能做透視校正,布面往後垂造成的彎曲要交給 Stoner。

用 Stoner 修布面下垂

布面掛起來後中間會往後垂,投影機斜著往上投時,下垂在畫面上會更明顯。

kantanMapper 的矩形其實也能切網格修局部,不過我讓兩個元件分工:kantanMapper 負責把畫面對到布面的位置,需要遮罩時也在這裡畫,Stoner 只負責修畫面的形狀。

Stoner 要放在 kantanMapper 前面,直接接 projectorBlend 切出來的左半或右半畫面。這樣 Stoner 視窗裡看到的是原本方正的畫面,對照投影就知道哪一區要往哪裡拖。如果放在 kantanMapper 後面,視窗裡的畫面已經被拉成梯形,看著它拖點,沒辦法把內容拖到布面上該在的位置。

Stoner 切到 Grid Warp 就能拖動網格點,局部推拉畫面。點一下網格點會出現貝茲曲線的控制桿,拖動控制桿可以調整點周圍格線的彎曲:

左台 Stoner 的 Grid Warp 視窗,平面的半張格線畫面上有 4×4 的網格點,左下方一個點被選取,上下左右伸出四根貝茲控制桿,滑鼠停在這個點上,下方的 Mode 選在 Grid Warp,Rows 與 Columns 都是 4

我在現場用預設的 4×4 網格,看著投影畫面找出格線扭曲的區域,再拖動那一區的網格點,讓畫面恢復正常。左邊是只有 kantanMapper 的畫面,右邊是加上 Stoner 修正後:

接縫附近的對照,左邊只有 kantanMapper 時橘色圓環內的橫向格線往下彎,右邊加上 Stoner 修正後格線恢復平直

如果 4×4 的網格點太疏、拉不回某一區的扭曲,可以把 Rows 和 Columns 加大再拉點。用數字改 Rows 或 Columns 會重設整個網格,之前拖過的點都會被清掉。

校正後如果接縫旁冒出畫面另一側的內容,是因為 Stoner 內部預設把超出畫面邊緣的部分接回對側來畫。進到 Stoner 裡面,把 render/constant1 的 Color Map Extend U/V,以及 render/phong1GLSL 的 sampler Extend U/V 改成 Zero 就會消失。

總結

下圖是兩台都校正好以後,從左前方、正面、右前方看的樣子。地上的灰色方塊是兩台投影機,放在布面前方往上交叉投:

校正完成的模擬場景,從左前方、正面、右前方三個角度看兩片有夾角的布面,格線在折線兩側連續,橘色圓環接成完整的圓,布面前方地上有代表兩台投影機的灰色方塊

兩個有夾角的面不需要融接,接縫放在折線上,projectorBlend 只用來切畫面,要算的也只有畫布與單台投影機的解析度。四角對齊後剩下的布面下垂交給 Stoner,看著投影畫面拖動扭曲那一區的網格點,讓畫面恢復正常。

Stoner 除了修好的畫面,還有第二個輸出:一張位移圖。官方文件建議調整完成、保留這張位移圖以後,就把 Stoner 從專案移除,改用 Remap TOP 讀位移圖來變形畫面,效能會好很多。Remap TOP 的第一個輸入接要變形的畫面,第二個輸入接位移圖。正式演出時可以這樣換掉兩個 Stoner。

接著可以做什麼

下一篇Claude Code 的 deny 規則擋不住 git push --force?Bash 規則的比對方式與修正寫法AI
Ted Liou

Ted Liou

Unity 現役工程師,Unity、AI 技術開發經驗分享與諮詢。