Was macht Atlas-Flythrough?
Wählen Sie aus, was der Betrachter bis zum Ende der Einstellung entdecken soll. Untersuchen Sie das Standbild auf Vordergrundkanten, freien Bewegungsraum und markante Punkte in mehreren Tiefen. Eine versetzte Bewegung an einem Vordergrundobjekt vorbei erleichtert das Lesen der Maßstäbe. Ein Gegenwinkel erfordert Hinweise darauf, was sich hinter dem Motiv befindet.
Verwenden Sie eine authentifizierte World Labs CLI, Python 3 mit NumPy und FFmpeg. Arbeiten Sie in einem frischen Shot-Verzeichnis. Setzen Sie PREP auf den absoluten Pfad von scripts/prepare.py in diesem Skill. Stellen Sie ein JPEG und dessen gewünschte Ausgabemaße bereit.
Die Prompt-Verbesserung ist standardmäßig für Support-Ansichten und den endgültigen Flug aktiviert. Übergeben Sie --no-enhance-prompt an einen Generierungsbefehl in prepare.py, um den Szenen-Prompt für diesen Durchlauf wörtlich zu verwenden.
python3 "$PREP" pose scene.jpg --resolution 1280 720 > pose-request.json
worldlabs tasks run images2PosedRGBD --request pose-request.json --wait --json > pose.json
Schreiben Sie shot.json mit einem Szenen-Prompt und Keyframes. Jede Zeile gibt die normalisierte Zeit, die kamerabezogene XYZ-Verschiebung (rechts, oben, rückwärts), das normalisierte bildbezogene Ziel U und V (von oben links), die Zielentfernung in Quellkamera-Einheiten, den Brennweitenmultiplikator und die Banking in Grad an. Halten Sie die Zeit streng monoton von 0 bis 1 steigend. Untersuchen Sie die geschätzte Tiefe, um Entfernungen im Maßstab der Szene zu wählen. Diese minimale laterale Bewegung ist ein Ausgangspunkt:
{"prompt":"Eine sonnendurchflutete Werkstatt mit einer Werkbank und hohen Fenstern.","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
Untersuchen Sie die Supports in der Pfadreihenfolge vor der vollständigen Renderung. Verfolgen Sie denselben markanten Punkt über benachbarte Winkel hinweg. Verwenden Sie für eine exakte Übereinstimmung mit der Eingabe in Frame Null die ursprünglich positionierte Kamera dort.
Auswahl von Ankern für eine schwierige Bewegung
Erkunden Sie für einen Durchgang, einen Orbit oder eine Umkehrenthüllung beide Seiten des Hindernisses und die Mitte der Kurve. Verwenden Sie die Developer API für Viewfinder-ähnliche Standbilder. Führen Sie atlasGenerate mit spärlichen targetCameras, returnDepth: true und enhancePrompt: true aus. Eine einfache Bewegung mit guter Abdeckung kann den ersten Support-Durchlauf verwenden.
Wenn der erste Durchlauf inkonsistent ist, generieren Sie Alternativen an denselben Kameraposen. Behalten Sie das spärliche Ziel-Array und den Szenen-Prompt fest. Variieren Sie, welche zuverlässigen früheren positionierten Ansichten Sie in contextFrames bereitstellen, z. B. bevorzugen Sie in einem Durchlauf eingangsseitige Ansichten und in einem anderen ausgangsseitige Ansichten. Behalten Sie alle Kameras und Tiefenkarten in denselben Weltkoordinaten.
Ordnen Sie die Kandidaten mit einer Spalte pro Kamerazeit und einer Zeile pro Durchlauf an. Vergleichen Sie jeden Kandidaten mit den Ansichten auf beiden Seiten. Achten Sie auf eine durchgehende Öffnung, eine stabile Silhouette eines markanten Punkts, plausible Vordergrundtiefe und eine klare Sichtlinie. Untersuchen Sie die Tiefe auf den Oberflächen, an denen die Kamera nahe vorbeikommt. Wählen Sie die Ansichten, die über die Sequenz hinweg übereinstimmen. Überspringen Sie redundante oder fehlerhafte Posen oder erkunden Sie einen fehlenden Winkel, bevor Sie sich auf den dichten Render festlegen.
Um eine gemischte Auswahl zu verwenden, notieren Sie jede Auswahl als nullbasierten Frame-Index in ihrer gespeicherten Operation. Erstellen Sie beispielsweise nach dem Herunterladen und Überprüfen von zwei Sechs-Ansichten-Durchläufen den endgültigen Kontext mit jq. Ersetzen Sie Ihre eigenen Auswahlen. Behalten Sie das RGB-Asset, das Tiefen-Asset und die Kamera aus demselben zurückgegebenen Frame bei.
# Speichern Sie die Auswahlen, damit derselbe Kontext später wiederhergestellt werden kann.
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("Unbekannter Anker: \($run)[\($i)]"))
| {camera, imageAsset: {assetId: .imageAsset.assetId},
depth: {depthAsset: {assetId: .depth.depthAsset.assetId}}}]
' > anchors.json
Rendern und vergleichen
Bereiten Sie die dichte Kameraanfrage aus den Shot-Keyframes vor.
python3 "$PREP" flight shot.json --pose pose.json --angles supports.json --frames 120 > flight-request.json
Wenn Sie eine gemischte Auswahl kuratiert haben, ersetzen Sie jetzt diese Anker. Dies bewahrt das erste positionierte Bild zusammen mit den ausgewählten Frames.
jq --slurpfile picks anchors.json '.contextFrames = [.contextFrames[0]] + $picks[0]' flight-request.json > selected-request.json
mv selected-request.json flight-request.json
Übermitteln Sie den vollständigen Pfad in einer Operation.
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
Überprüfen Sie den Start, die größte Basislinie, die Enthüllung und das Ende, sehen Sie sich dann den Clip in voller Geschwindigkeit an. Wenn die Bewegung immer noch wie ein Zoom wirkt, halten Sie das Objektiv fest und vergrößern Sie die seitliche Verschiebung in der Nähe eines unterstützten Vordergrundrands. Gleichen Sie Endposition, Ausrichtung, Brennweite und Geschwindigkeit an, wenn Sie zwei Bewegungen verbinden, die sich durchgehend anfühlen sollen. Optional fügt --footfalls einen subtilen Wobble für Geh-Aufnahmen hinzu.
Beim Vergleichen von Ankersätzen rendern Sie dieselbe dichte Anfrage zweimal und ändern nur contextFrames. Wenn Sie die Flugbahn während der Erkundung überarbeitet haben, führen Sie die alten Anker auf dieser überarbeiteten Flugbahn erneut aus. Verwenden Sie eine eigene Operation pro Anfrage, speichern Sie die Anfragen und überprüfen Sie, dass das Löschen von contextFrames identisches JSON hinterlässt. Zeigen Sie synchronisierte Frames zu denselben Zeitstempeln an, insbesondere an der Kurve oder Enthüllung. Wenn die Prompt-Verbesserung aktiviert ist, überprüfen Sie beide promptUsed-Antworten: Die ausgewählten Bilder können die verbesserte Beschreibung ändern. Für ein Experiment, das auch den effektiven Text konstant hält, verwenden Sie eine Beschreibung mit enhancePrompt: false in beiden Durchläufen. Unabhängige Renderings können trotzdem variieren.
Im Tide-Organ-Strandbeispiel produzierten zwei API-Durchläufe 40 Standbilder in 20 Posen. Siebzehn Auswahlen deckten den Zugang, den gerippten Bogen, die offene Brandung und die Gegenansicht zum Ufer ab. Das Kupferrohr war ein nützlicher markanter Punkt zur Beurteilung der Kontinuität während der Wendung auf See.