Atlas 飛越運鏡 是做什麼的?
選擇觀眾在鏡頭結束時應發現的畫面。檢查靜態影像的前景邊緣、可通行的空間,以及不同深度的地標。經過前景物體時的偏移運鏡有助於突顯比例感。反向角度需要主體背後有足夠的視覺證據。
使用已驗證的 World Labs CLI、Python 3 與 NumPy,以及 FFmpeg。在一個全新的拍攝目錄中作業。將 PREP 設定為此技能中 scripts/prepare.py 的絕對路徑。提供一個 JPEG 檔案及其預期的輸出尺寸。
提示增強功能預設啟用,適用於支援視角與最終運鏡。若要在特定生成過程中完全使用場景提示,請在 prepare.py 的生成命令中加入 --no-enhance-prompt。
python3 "$PREP" pose scene.jpg --resolution 1280 720 > pose-request.json
worldlabs tasks run images2PosedRGBD --request pose-request.json --wait --json > pose.json
撰寫 shot.json,包含一個場景提示與關鍵影格。每一行指定正規化時間、攝影機局部 XYZ 位移(右、上、後)、正規化影像空間瞄準點 U 和 V(從左上角開始)、以來源攝影機單位表示的瞄準深度、焦距倍率與傾斜角度(度)。時間必須嚴格遞增,範圍從 0 到 1。檢查估計的深度值,以選擇符合場景尺度的距離。以下是一個最小橫向運鏡的起點:
{"prompt":"A sunlit workshop with a workbench and tall windows.","knots":[[0,0,0,0,0.5,0.5,2,1,0],[0.5,0.15,0,-0.12,0.53,0.5,2,1,0],[1,0.35,0,-0.25,0.57,0.5,2,1,0]]}
python3 "$PREP" angles shot.json --pose pose.json --supports 6 > supports-request.json
worldlabs tasks run atlasGenerate --request supports-request.json --wait --json > supports.json
worldlabs operations download "$(jq -er '.id' supports.json)" --out supports
在進行完整渲染前,依序檢視支援視角。追蹤相鄰角度之間的相同地標。若要與輸入影格零完全一致,請使用該處的原始姿態攝影機。
為困難運鏡選擇錨點
對於穿越、環繞或反向揭露運鏡,請探查障礙物兩側以及轉彎的中間點。使用 Developer API 來建立 Viewfinder 風格的靜態影像。執行 atlasGenerate,搭配稀疏的 targetCameras、returnDepth: true 與 enhancePrompt: true。一個覆蓋範圍良好的簡單運鏡可以使用第一次的支援視角生成結果。
若第一次生成結果不一致,請在相同的攝影機姿態下產生替代方案。保持稀疏目標陣列與場景提示不變。變更您在 contextFrames 中提供的可靠先前姿態視角,例如在一次生成中偏好入口側的視角,在另一次則偏好出口側的視角。將所有攝影機與深度圖保持在相同的世界座標系統中。
將候選視角以一個攝影機時間對應一個欄位、一個生成輪次對應一列的方式排列。比較每個候選視角與其相鄰視角。尋找連續的開口、穩定的地標輪廓、合理的前景深度以及清晰的視線。檢查攝影機近距離通過的表面上的深度。選擇在整個序列中一致的視角。跳過多餘或破損的姿態,或在進行密集渲染前先探查缺失的角度。
若要使用混合選擇,請將每個選取結果記錄為其儲存操作中的零基影格索引。例如,在下載並檢視兩個各六個視角的生成結果後,使用 jq 建立最終的上下文。請自行替換選取結果。保持同一個回傳影格的 RGB 資產、深度資產與攝影機在一起。
# 儲存選取結果,以便稍後能重建相同的上下文。
echo '[["A",0],["B",2],["A",4],["B",5]]' > picks.json
jq -n --slurpfile a supports.json --slurpfile b alternate.json --slurpfile picks picks.json '
{A: $a[0].response.frames, B: $b[0].response.frames} as $runs
| [$picks[0][] as [$run, $i]
| ($runs[$run][$i] // error("Unknown anchor: \($run)[\($i)]"))
| {camera, imageAsset: {assetId: .imageAsset.assetId},
depth: {depthAsset: {assetId: .depth.depthAsset.assetId}}}]
' > anchors.json
渲染與比較
根據拍攝關鍵影格準備密集攝影機請求。
python3 "$PREP" flight shot.json --pose pose.json --angles supports.json --frames 120 > flight-request.json
若您策劃了一組混合選擇,請立即替換這些錨點。這會將第一個姿態影像與選取的影格一起保留。
jq --slurpfile picks anchors.json '.contextFrames = [.contextFrames[0]] + $picks[0]' flight-request.json > selected-request.json
mv selected-request.json flight-request.json
在單一操作中提交完整的路徑。
worldlabs tasks run atlasGenerate --request flight-request.json --wait --timeout 1800 --json > flight.json
worldlabs operations download "$(jq -er '.id' flight.json)" --out frames
ffmpeg -framerate 24 -i frames/frames_%03d_image.jpg -c:v libx264 -pix_fmt yuv420p -movflags +faststart shot.mp4
檢查起點、最寬基線、揭露點與終點,然後以正常速度觀看片段。若運鏡仍然感覺像是縮放,請保持鏡頭固定,並在靠近支援的前景邊緣處增加橫向移動。在連接兩個意圖連貫的運鏡時,請匹配端點位置、方向、鏡頭與速度。可選的 --footfalls 參數可為步行鏡頭添加微妙的晃動感。
在比較錨點組合時,請渲染相同的密集請求兩次,僅變更 contextFrames。若您在偵察過程中修改了軌跡,請在該修改後的軌跡上重新執行舊的錨點。每個請求使用一個不同的操作,儲存這些請求,並檢查刪除 contextFrames 後是否留下相同的 JSON。在相同時間戳記上顯示同步的影格,特別是在轉彎或揭露點。啟用提示增強時,請檢查兩個回應中的 promptUsed:選取的影像可能會改變增強的敘述。若要進行一個同時固定有效文字的實驗,請在兩次執行中重複使用一個敘述,並將 enhancePrompt 設為 false。獨立的渲染仍然可能有所不同。
在 Tide Organ 海灘範例中,兩次 API 生成產生了 20 個姿態的 40 張靜態影像。十七個選取結果涵蓋了接近、肋狀拱門、開闊海浪以及海岸的反向視角。銅管是判斷離岸轉彎處連續性的有用地標。