Supplementary material

Supplementary material

This supplementary material complements the main paper by providing full videos, technical details and additional results.

Teaser videos (extends fig. 1)

Here we show the full videos used to make fig. 1.

Llamas in a village
Tropical beach

Camera motion: Pitch from +80° to -80°, no translation.

Prompt: A quiet mountain village during snowfall as smoke rises from chimneys and lights glow along the snowy street. Many llamas are walking around in the street.

Camera motion: Roll from -90° to 90°, move forward by 8 meters.

Prompt: A tropical beach at sunrise with palm trees swaying gently while small waves roll onto the golden sand.

Extreme rotation handling (extends fig. 2)

Here we show the full video used to make the "backflip" rotation (with no translation) from fig. 2, along with two additional examples of that same motion. The input camera rotation is overlaid on top in dark gray. Notice how only our method achieves a full 360° looping rotation.

Ours
UCPE
PreciseCam+GEN3C
Prompt: A dramatic canyon landscape with towering red rock cliffs carved by a winding river far below, warm sunset light illuminating layered rock formations, sparse desert vegetation clinging to the edges of the cliffs, vast open sky with glowing clouds above the horizon, rugged stone textures and dry shrubs in the foreground, ultra-detailed, cinematic lighting, natural colors, photorealistic, 35mm photography, depth of field, high dynamic range

Ours
UCPE
PreciseCam+GEN3C
Prompt: A dining room with a long wooden table surrounded by chairs. A chandelier hangs above the table.

Ours
UCPE
PreciseCam+GEN3C
Prompt: A wide alpine meadow filled with bright wildflowers in bloom beneath towering snow-capped mountains, clear blue sky stretching above the peaks, a narrow stream winding gently through the grassy field, soft spring sunlight illuminating colorful flowers in the foreground, distant pine forests along the slopes, peaceful high-altitude landscape, ultra-detailed, cinematic lighting, natural colors, photorealistic, 35mm photography, depth of field, high dynamic range.

Translations and zooms

This example isolates translation and field-of-view changes. The 3D grid visualization is composited over the generated video: the white line represents the horizon, red grid lines indicate downward directions, blue grid lines indicate upward directions, and the camera moves within this 3D grid over time.

Prompt: A medieval harbor at sunset with tall ships docking, gulls circling overhead, sailors unloading barrels of spice while amber light glints off varnished wood and gentle waves lap against stone piers.
Camera pitch Translation right (+x) Translation down (+y) Translation forward (+z) Zoom-in
FOV 100° to 30°
Zoom-out
FOV 30° to 100°
Forward (0°)
Down (-90°)

Training set examples (extends sec. 4.1 and fig. 4)

Here we show training data samples, complementing fig. 4. Each sample displays the video alongside camera trajectory visualizations from three perspectives: top view, side view, and a 3D view. The cameras are color-coded to represent their position in time: the first camera is purple and the last one is red. To improve the speed of the panorama cropping pipeline used during dataset construction, we re-implemented functions from the Skylibs library in PyTorch with CUDA support.

Caption: The video begins with a view of a cozy, eclectic shop filled with various vintage and rustic items. A statue of a Native American figure, adorned with a colorful blanket and a beaded necklace, stands prominently on the right. The shop is well-lit, with warm lights casting a welcoming glow on the brick walls and wooden furniture. A Christmas tree decorated with lights is visible in the background, adding a festive touch to the scene. The camera pans slightly to the left, revealing more of the shop's interior, which includes shelves with framed pictures, lamps, and assorted decorative pieces. The statue remains the focal point as the camera moves, capturing the shop's eclectic charm and the cozy atmosphere. Looking down, we see a person holding a phone in their hand.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: People walk under an archway in a historic city square. Looking down, we see a person walking on a cobblestone path.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: The video begins with a view of a modern, spacious living room featuring a sleek glass coffee table, a black floor lamp, and a brown sofa. The room is well-lit with natural light streaming through large windows, and a balcony with a white railing is visible above. In the background, a dining area with red chairs and a round table is partially visible. The camera slowly pans across the room, highlighting the minimalist decor and architectural details, including a large framed picture on the wall. As the camera moves, it reveals more of the room's features, such as a black spherical light fixture on the coffee table and a chessboard set on a stand. The video maintains a static view, focusing on the room's interior design and layout. Looking down, we see a glass bowl with apples on a table.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: People walk on an escalator in a busy indoor setting. Looking down, we see a person with a backpack on an escalator.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: Yellow aircraft with "REINO DE ESPAÑA 43032" flies over a rocky landscape.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: The video begins with a view of a wooden boardwalk alongside a river, where a tall ship with multiple masts is docked. The scene transitions to a bridge with cables, leading to a cityscape with modern buildings under a clear blue sky. The camera moves forward, capturing the river's surface and the bridge's structure. The view shifts to the riverbank, featuring a red brick building with a waterfront restaurant and a crane in the background. A person walks on the boardwalk, and the camera follows them, maintaining the focus on the river and the urban environment. Looking down, we see a person walking on a wooden deck while holding a phone.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: A serene underwater scene unfolds, showcasing a vibrant coral reef bathed in the soft light of the ocean surface. The camera pans gently over the reef, highlighting its diverse textures and colors, with sunlight filtering through the water, creating a tranquil and ethereal atmosphere.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: The video captures a vibrant outdoor scene at a flower garden on a sunny day. A wide path runs through the garden, bordered by rows of red and purple flowers. People are scattered throughout the area, some walking along the path, while others gather in groups to admire the flowers. In the background, a cityscape with tall buildings is visible under a clear blue sky. A kite is flying in the sky, adding to the leisurely atmosphere. The camera moves along the path, providing a panoramic view of the garden and its visitors. Looking down, we see a person walking on a path surrounded by red and purple flowers.
Video
Null-pitch Video
Top View
Side View
3D View
Caption: Paragliding over a vast desert landscape with mountains in the distance.
Video
Null-pitch Video
Top View
Side View
3D View

Full definition of $\varphi(\cdot)$ and $\psi(\cdot)$ (extends eq. 4)

Obtaining absolute camera poses

For completeness, here we repeat equation 4, which computes the absolute camera extrinsics: $$ \begin{gather} \mathbf{t}_{\text{abs},f} = \psi(\mathbf{\tilde{u}}_0)\mathbf{t}_{\text{rel},f} \nonumber \\ \mathbf{R}_{\text{abs},f} = \mathbf{R}_{\text{pano},f} \psi(\mathbf{\tilde{u}}_0)\mathbf{R}_{\text{rel},f} \\ \mathbf{E}_{\text{abs},f} = \varphi(\mathbf{R}_{\text{pano},0}) [\mathbf{R}_{\text{abs},f}|\mathbf{t}_{\text{abs},f} ] \;, \nonumber \end{gather} $$ where $\mathbf{\tilde{u}}_0$ corresponds to the average up vector of the first frame, $\mathbf{R}_{\text{pano},f}$ corresponds to the sampled camera rotation for frame $f$ and $\mathbf{t}_{\text{rel},f}$ and $\mathbf{R}_{\text{rel},f}$ are the translational and rotational components of the relative camera poses, respectively, and are derived from SfM. We now precisely define the function $\psi(\cdot)$, which aligns camera poses to gravity, and $\varphi(\cdot)$, which rotates the poses so that the yaw is null for the first frame.

Definition of the gravity alignment function $\psi(\cdot)$

We first compute the average gravity up vector $\mathbf{\tilde{u}}_0$, normalized to unit length. We then obtain a full gravity alignment rotation matrix $\psi(\mathbf{\tilde{u}}_0)$ by computing the forward and right vectors much as when computing a LookAt matrix (fixing the up vector instead of the forward vector). We show the full derivation below. $$\begin{align*} \mathbf{d} &\gets -\mathbf{\tilde{u}}_0 && \text{ $\triangleright$ Compute the down direction vector $\mathbf{d}$ in camera space. } \\ \mathbf{r} &\gets \mathbf{d} \times [0~0~1]^\top && \text{ $\triangleright$ Compute the right direction $\mathbf{r}$ vector using the down and temporary forward vector. } \\ \mathbf{r} &\gets \frac{\mathbf{r}}{\|\mathbf{r}\|} && \text{ $\triangleright$ Normalize the right direction vector $\mathbf{r}$. } \\ \mathbf{f} &\gets \mathbf{r} \times \mathbf{d} && \text{ $\triangleright$ Compute the forward direction vector $\mathbf{f}$. } \\ \psi(\mathbf{\tilde{u}}_0) &\gets \begin{bmatrix} \mathbf{r}~\mathbf{d}~\mathbf{f} \end{bmatrix} && \text{ $\triangleright$ Compute the matrix containing the absolute pitch and roll for the first frame by concatenating the basis vectors horizontally. } \end{align*}$$

Definition of the yaw removal function $\varphi(\cdot)$

We begin by extracting from $\mathbf{R}_{\text{pano},0}$ the rotations along the $y$, $x$ and $z$ axis, for the yaw, pitch and roll matrices. This results in the following decomposition: $$ \mathbf{R}_{\text{pano},0} = \mathbf{R}_{\text{pano},0,y} \mathbf{R}_{\text{pano},0,x} \mathbf{R}_{\text{pano},0,z}. $$ We then simply use the inverse yaw rotation $$ \varphi(\mathbf{R}_{\text{pano},0}) \gets \mathbf{R}_{\text{pano},0,y}^{-1}. $$

Dataset details and statistics (extends sec. 3.2 and 4.3)

Training dataset (extends sec. 3.2)

Below we show the distributions of rotations and translations, comparing our training set to RealEstate10K, a dataset typically used for training camera control methods (e.g. AC3D, GEN3C), and PanShot (used to train UCPE). The translation rose plots show the distribution of translation directions seen from the top (obtained from the last frame).

Rotation diversity

Translation diversity (top view)

Evaluation dataset (extends sec. 4.3)

Here, we supply additional details and statistics on our evaluation benchmark, SpatialVID-extreme, extending sec. 4.3 of the paper.

Camera path randomization

We randomly sample a start roll from \([-40°, 40°]\) and a start pitch from \([-90°, 90°]\). The final roll and pitch are sampled the same way, and the end yaw is sampled from \([-180°, 180°]\). The intermediate rotations are interpolated using spherical linear interpolation. Since the method used to compute absolute orientation metrics (Perspective Fields) was never trained on rolls beyond 45° in magnitude, we resample a random rotation trajectory if an intermediate frame goes outside the roll bounds of \([-40°, 40°]\). Finally, we obtain the translations by estimating them from the original videos with ViPE. We then apply a global rotation to those translations around the yaw axis, with an angle sampled from \([0°, 360°]\), in order to reduce the bias toward forward translations.

Evaluation dataset statistics

Here we show that the original SpatialVID-HQ dataset provides limited diversity in absolute orientation and relative rotations. Our new evaluation benchmark, SpatialVID-extreme, provides broader coverage of Euler angles and total angular distance.

Evaluation dataset statistics

Additional details on the "look-down" prompt (extends sec. 3.3)

Training details

We start by showing an example sampled from the training data. In the training video (left), we can see part of the selfie stick used to hold the camera, but it is absent from the null-pitch video (center), used for captioning. As explained in the paper, if undesirable elements are present in the training video (such as the selfie stick), but not in the caption, the model will learn to generate these as if they were normal scene content. To prevent this, we generate a third set of videos, this time looking straight down (right), and also caption them.

In practice, we give the following instructions to the VLM to obtain the "look-down" prompt:

Describe the content of this video in under 15 words.
Start by mentioning that the video is filmed looking down, e.g. "Looking down, we see ..." or "Below is a view of ...".

We then simply concatenate the two prompts 50% of the time in the following way:


if random.random() < 0.5:
    full_caption = caption_null_pitch + " " + caption_down
else:
    full_caption = caption_null_pitch
            
Training video
Null-pitch video
Look-down video
Caption: "The video begins with a view of a modern urban walkway lined with large buildings and greenery. The walkway is paved with stone tiles, and there are small patches of grass and plants along the sides. In the background, a set of stairs leads up to a higher level, where a few people are seen walking. The scene remains static for a moment before the camera pans slightly to the right, revealing more of the surrounding area. The video concludes with the camera still focused on the walkway, showing the same buildings and greenery in the background."
Caption: "Looking down, we see a person sweeping a patterned floor with a broom."

With the "look-down" caption included, the full caption is:

The video begins with a view of a modern urban walkway lined with large buildings and greenery. The walkway is paved with stone tiles, and there are small patches of grass and plants along the sides. In the background, a set of stairs leads up to a higher level, where a few people are seen walking. The scene remains static for a moment before the camera pans slightly to the right, revealing more of the surrounding area. The video concludes with the camera still focused on the walkway, showing the same buildings and greenery in the background. Looking down, we see a person sweeping a patterned floor with a broom.

Note that the VLM mistakenly identifies the selfie stick as a broom, but, in practice, we found this had no noticeable impact on the results.

Inference details

At inference time, we keep the input (positive) prompt intact. To ensure that undesirable elements (e.g. hands, distortions) are absent from the generated video, we use the following prompt for the negative direction:

Looking down, we see a person and a hand. Looking down, we see distortions. The video is low quality, worst quality, blurry, deformed, disfigured, distorted, extra limbs, cloned face.

Note that the choice of negative prompt can be adjusted at inference time based on user preferences without re-training the model.

Qualitative comparison

Here we show a few examples from our evaluation where training with the "look-down" prompts removes the first-person artifacts that otherwise appear when the camera points directly down. For each backbone, the left video uses the model trained with the look-down captions and the right video the model trained without them. The same prompt and negative prompt are used at inference. As mentioned in the paper, training on the "look-down" prompt is mostly beneficial when fully finetuning a model, as seen in the results rows from WAN 2.2.

Example 1: city sidewalk

WAN 2.2 5B: trained with look-down captions
WAN 2.2 5B: trained without look-down captions
UCPE (WAN 2.1): trained with look-down captions
UCPE (WAN 2.1): trained without look-down captions
Prompt: A bustling city sidewalk under scaffolding, with pedestrians in casual summer clothes, cars, and buildings visible in the background, all bathed in soft daylight under an overcast sky.

Example 2: lush forest

WAN 2.2 5B: trained with look-down captions
WAN 2.2 5B: trained without look-down captions
UCPE (WAN 2.1): trained with look-down captions
UCPE (WAN 2.1): trained without look-down captions
Prompt: A lush forest bathed in green and golden light, with towering trees, lush moss, and a tranquil, peaceful atmosphere.

Example 3: historic Chinese street

WAN 2.2 5B: trained with look-down captions
WAN 2.2 5B: trained without look-down captions
UCPE (WAN 2.1): trained with look-down captions
UCPE (WAN 2.1): trained without look-down captions
Prompt: A serene, historic Chinese street lined with red and yellow lanterns, tiled roofs, and bustling vendors under an overcast sky, evoking a tranquil, cultural atmosphere.

Quantitative comparison

Here, we show a quantitative analysis of the effect of the "look-down" prompts. Again, training on "look-down" prompts mostly helps the fully finetuned WAN 2.2 model, as seen in the gravity error decrease and the CLIP score increase. However, no clear effect is observed on the UCPE backbone, with a slightly better pitch error, but slightly worse scores on other metrics. We attribute this discrepancy to the smaller number of trained parameter in UCPE, which makes it less prone to overfitting to artifacts (like a person walking).

Backbone Look-down captions PitchErr (abs.) ↓ GravityErr (abs.) ↓ RotErr (rel.) ↓ TransErr (rel.) ↓ CLIP ↑ FID ↓ FVD ↓
WAN 2.2 5B Without 11.97 14.42 14.87 0.74 19.78 113.49 994.50
WAN 2.2 5B With 8.36 10.54 15.05 0.74 20.62 115.96 1014.40
UCPE (WAN 2.1) Without 15.44 18.42 12.01 0.46 21.47 109.65 899.68
UCPE (WAN 2.1) With 13.98 17.16 12.12 0.46 21.25 112.47 978.13

Backbones and camera encodings (extends sec. 4.1 and 4.2)

We trained the following backbone and camera-conditioning variants. For all backbones, classifier-free guidance (CFG) is applied only to the text conditioning, and not to the camera conditioning. All methods use a batch size of 1 per GPU and generate 49 frames per video. The training clips are sampled with stride 2 from the original videos, i.e., half of the original frames are skipped, so a 30 FPS video becomes 15 FPS.

Backbone Camera representation Camera encoder Trained modules Training resolution LR GPUs used Iterations Other details
WAN 2.1 1.3B Plücker Large camera encoder Full finetuning 832×480 1e-5 8 H200 30K Reuses the Wan2.1-Fun-V1.1-1.3B-Control-Camera implementation, except that we remove the first-frame encoder. See also the DiffSynth-Studio training script.
WAN 2.2 5B Plücker Lightweight camera encoder Full finetuning 736×480 1e-5 8 H200 30K Uses the lightweight custom encoder detailed below to reduce the parameter count of the camera-conditioning branch.
WAN 2.1 1.3B UCPE UCPE module UCPE module only 832×480 1e-4 8 H200 24K Starts from the original chengzhag/UCPE implementation and reuses the same architecture. The rest of the DiT is frozen.
CogVideoX 2B Plücker ControlNet camera encoder ControlNet 720×480 1e-4 4 H100 10K Starts from the original AC3D implementation (lefreud/ac3d) and uses the same training-noise truncation and biasing as in the original paper.

Lightweight camera encoder architecture

The lightweight camera control encoder used for the WAN 2.2 5B variant comprises the following layers:

Layer Parameters
PixelUnshuffle downscale_factor=16
Conv2d in_channels=24×256, out_channels=128, kernel_size=2, stride=2, padding=0
GroupNorm num_groups=8, num_channels=128
ReLU -
Conv2d in_channels=128, out_channels=out_dim, kernel_size=1, stride=1, padding=0 (zero initialized weights and biases)

All layers except the last one are randomly initialized. The last layer's features are added as a residual connection after the DiT's patchify layer.

Comparison against panorama generation methods (extends sec. 2)

Panorama generation methods, such as PanoWAN [46], can generate realistic 360° equirectangular videos. As mentioned in the paper, gravity-aligned camera control can be achieved by cropping the desired field of view out of the generated panorama, but this comes with several disadvantages: 1) most of the panorama pixels are discarded, resulting in severe resolution degradation; 2) the desired concepts described in the prompt can be cropped out and thus not appear in the video; and 3) current text-conditioned methods do not provide control over camera translation.

Qualitative comparison

Here, we show an example where two concepts should be present in the generated image: a house and a lake.

We run both our method and PanoWAN on 4 different seeds and display the first generated frame. When cropping a 90° FOV from the generated panorama, notice that for 3 out of the 4 seeds (0, 1, 2), PanoWAN only includes either the lake or the house but not both. When cropping a 45° FOV, all seeds lack either the house or the lake. Our method includes both elements, while also generating sharper details. Please zoom in to compare.

Prompt: A charming wooden lakeside house with warm lights glowing from the windows, sitting beside a crystal-clear blue lake surrounded by lush green trees and distant mountains, soft golden sunset light reflecting on the calm water, wildflowers in the foreground, ultra-detailed, cinematic lighting, natural colors, photorealistic, 35mm photography, depth of field, high dynamic range
Ours PanoWAN
90° FOV 45° FOV Generated panorama 90° FOV (cropped) 45° FOV (cropped)
Seed 0
Seed 1
Seed 2
Seed 3

We show a second example where a temple should be clearly visible and surrounded by valleys. Again, PanoWAN omits the temple in most generations, whereas our method consistently includes it.

Prompt: An ancient stone temple perched high on a rugged mountain ridge surrounded by dramatic cliffs and mist-filled valleys, intricate carvings on weathered stone pillars, snow-capped peaks visible in the distance, warm sunrise light illuminating the temple facade, cinematic lighting, natural textures, photorealistic, 35mm photography, depth of field, high dynamic range
Ours PanoWAN
90° FOV 45° FOV Generated panorama 90° FOV (cropped) 45° FOV (cropped)
Seed 0
Seed 1
Seed 2
Seed 3

Quantitative comparison

Since PanoWAN produces full 360° panoramas at $448 \times 896$ resolution, we must crop its outputs to create standard perspective images. This cropping results in significant detail loss, discarding 86.1% and 95.8% of pixels for 90° and 45° fields of view, respectively. The reduction in high-frequency details affects CLIP alignment and FID scores, even though both models are trained on similar data. We train ours on a subset of PanoVid, while PanoWAN uses the entire dataset. At 90° FOV, PanoWAN shows lower prompt alignment (CLIP 19.46 vs. our 21.25) and image quality (FID 123.10 vs. our 112.47). When using a narrower FOV of 45°, these differences are more pronounced, with PanoWAN reaching a CLIP score of 16.82 versus our 19.45 and an FID of 142.81 versus our 110.46.

Details of the AC3D baseline prompt engineering (extends sec. 4.2)

For the AC3D baselines, we provide the model with the absolute camera orientation through text, as mentioned in sec. 4.2 of the paper. Here, we show the code used to generate these camera descriptions. We first take the absolute camera extrinsics \(E_\text{abs}\) for the video and convert them to Euler angles. We then textually describe only the first frame's pitch and roll, and the last frame's yaw, pitch, and roll. Please click below for the full implementation.

Click here to expand the full code
def get_camera_prompt_from_absolute_c2w(c2w_absolute):
    euler_angles = c2w_to_pitch_roll_yaw(c2w_absolute)
    first_pitch = euler_angles['pitch'][0].item()
    first_roll = euler_angles['roll'][0].item()
    first_yaw = euler_angles['yaw'][0].item()
    last_pitch = euler_angles['pitch'][-1].item()
    last_roll = euler_angles['roll'][-1].item()
    last_yaw = euler_angles['yaw'][-1].item()
    
    
    def describe_angle_shot(pitch):
        """Describe pitch angle shot."""
        pitch_rounded = round(pitch)
        if -5 <= pitch_rounded <= 5:
            return "near straight-on shot"
        elif pitch_rounded > 0:
            if 5 < pitch_rounded <= 20:
                return f"small tilt-up of {pitch_rounded} degrees"
            elif 20 < pitch_rounded <= 45:
                return f"large tilt-up of {pitch_rounded} degrees"
            else:
                return f"extreme tilt-up of {pitch_rounded} degrees"
        else:
            abs_pitch = abs(pitch_rounded)
            if 5 < abs_pitch <= 20:
                return f"small tilt-down of {abs_pitch} degrees"
            elif 20 < abs_pitch <= 45:
                return f"large tilt-down of {abs_pitch} degrees"
            else:
                return f"extreme tilt-down of {abs_pitch} degrees"
    
    def describe_dutch_angle(roll):
        """Describe roll (Dutch angle) with clockwise/counterclockwise."""
        roll_rounded = round(roll)
        if -5 <= roll_rounded <= 5:
            return "near level shot"
        
        abs_roll = abs(roll_rounded)
        if abs_roll <= 20:
            magnitude = "small"
        elif abs_roll <= 45:
            magnitude = "large"
        else:
            magnitude = "extreme"
        
        # Positive roll is counterclockwise, negative is clockwise
        direction = "counterclockwise" if roll_rounded > 0 else "clockwise"
        
        return f"a {magnitude} Dutch angle tilted {direction} {abs_roll} degrees"
    
    def describe_yaw(yaw):
        """Describe yaw (pan) direction."""
        yaw_rounded = round(yaw)
        
        abs_yaw = abs(yaw_rounded)
        direction = "right" if yaw_rounded > 0 else "left"
        return f"pan of {abs_yaw} degrees turned {direction}"
    
    # Build start description
    start_parts = []
    start_pitch_desc = describe_angle_shot(first_pitch)
    start_roll_desc = describe_dutch_angle(first_roll)
    
    if start_pitch_desc != "near straight-on shot":
        start_parts.append(start_pitch_desc)
    if start_roll_desc != "near level shot":
        start_parts.append(start_roll_desc)
    
    # Build end description
    end_parts = []
    end_yaw_desc = describe_yaw(last_yaw)
    end_pitch_desc = describe_angle_shot(last_pitch)
    end_roll_desc = describe_dutch_angle(last_roll)
    
    if end_yaw_desc:
        end_parts.append(end_yaw_desc)
    if end_pitch_desc != "near straight-on shot":
        end_parts.append(end_pitch_desc)
    if end_roll_desc != "near level shot":
        end_parts.append(end_roll_desc)
    
    # Construct final description
    description_parts = []
    

    start_text = "The camera starts at " if len(start_parts) == 1 else "The camera starts with "
    description_parts.append(start_text + ", and ".join(start_parts))
    
    end_text = "The camera ends with " + ", ".join(end_parts)
    description_parts.append(end_text)
    
    return ". ".join(description_parts)
        

After obtaining the camera description, we append it to the regular prompt. Refer to the qualitative results at the end of the supplementary material for examples of camera descriptions.

Quantitative results on RealEstate10K (extends sec. 4.3)

The main paper evaluation focuses on performance on extreme trajectories using SpatialVID-extreme. Here, we evaluate our method (with the UCPE encoding) on a subset of 140 videos of RealEstate10K's test set, a standard benchmark with minimal camera movement, and compare it against prior work. Our method still reaches the lowest pitch and gravity errors and is competitive on all other metrics. Note that AC3D was trained on RealEstate10K.

Method PitchErr ↓ GravityErr ↓ RotErr ↓ TransErr ↓ CLIP ↑ FID ↓ FVD ↓
CogVideoX-2B + Plücker camera encoder + ControlNet
AC3D + cam. text. 5.58 6.41 2.46 0.63 26.26 79.28 658.90
Ours 5.44 6.39 4.48 0.56 24.85 81.17 848.27
WAN 2.1 1.3B + Plücker camera encoder + full finetuning
PreciseCam+WAN-I2V-CC 9.46 10.30 1.86 0.75 25.33 91.79 724.36
Ours 4.92 6.33 6.01 0.66 24.36 80.37 841.48
WAN 2.2 5B + Plücker camera encoder + full finetuning
Ours 5.08 6.00 4.29 0.78 24.38 81.44 756.76
WAN 2.1 1.3B + UCPE encoding + UCPE module training
UCPE 5.62 6.58 2.18 0.43 25.53 79.86 716.80
Ours 5.08 5.87 2.11 0.51 25.13 78.53 713.73

Absolute rotation ablation (extends sec. 4.5)

We compare our full model against the ablated variant trained without absolute rotations (with poses defined relative to the first frame). The 3D grid overlay shows the requested camera trajectory for both generated videos. Notice how removing the absolute rotations causes the model to generate a video with incorrect pitch and roll.

Ours
Ours w/o absolute rotations
Prompt: A vibrant urban landscape features two contrasting skyscrapers under a clear blue sky, blending modern and traditional architecture in a striking setting.

Additional results on the prompt-camera entanglement benchmark (extends sec. 4.6 and fig. 6)

Additional quantitative results (extends fig. 6.b)

First, we report additional graphs showcasing the relationship between the prompt alignment and the input pitch angle, via the CLIP score, where a higher score indicates stronger agreement between the prompt and the image. We report the CLIP score computed between the generated image and the caption from the ground truth at the input pitch angle (left, same as in fig. 6.b) and from the forward-looking prompt (right). We observe that our method (in orange) comes closer to the ground-truth values (in black) than the variant trained without null-pitch conditioning (in red) and the other methods, across the full range of pitch angles.

CLIP computed between the caption from the ground truth (at the input pitch angle) and the generated image (absolute)

CLIP computed between the input caption (forward looking) and the generated image (absolute)

Commercial text-to-image models

Early results indicate that a commercial text-to-image model, in this case ChatGPT Images 2.0, also entangles camera orientation with scene description. We use the same scene prompt as in fig. 6.a and prepend only the camera-angle instruction.

ChatGPT Images 2 output requested at minus 90 degrees pitch

Extreme high-angle shot
(−90° pitch)

Extreme high-angle shot (-90 degrees pitch). A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
ChatGPT Images 2 output requested at zero degrees pitch

Eye-level shot
(0° pitch)

Eye-level shot (0 degree pitch). A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
ChatGPT Images 2 output requested at plus 90 degrees pitch

Extreme low-angle shot
(+90° pitch)

Extreme low-angle shot (+90 degree pitch). A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.

We observe that when the camera is looking up, the entanglement between camera angle and scene content is present.

Additional qualitative results (extends fig. 6.a)

Here, we randomly sampled 6 scenes out of the 20 used in our benchmark. We show the prompt and each method's output along with the ground truth, for 5 different pitch angles. Notice how our method more closely follows the input pitch angle, especially at extreme pitch angles (-90° and 90°).

Note that PreciseCam was trained on PolyHaven panoramas used in our benchmark.

Prompt: Two people are working at a desk with computers. The room has wooden beams on the ceiling and posters on the wall. One person is typing on a keyboard while the other looks at the screen. The workspace is cluttered with various items.
PitchGround truthOursw/o null-pitchUCPEPreciseCam
90°
50°
-50°
-90°
Prompt: The scene shows an abandoned concrete structure with graffiti on the walls and ceiling. Sunlight streams through large openings, illuminating the overgrown vegetation outside. The interior is dusty and empty, with visible cracks and decay. The graffiti includes the word "RAVE" in red.
PitchGround truthOursw/o null-pitchUCPEPreciseCam
90°
50°
-50°
-90°
Prompt: A dirt path winds through a lush, green forest with tall trees and dense shrubs. The sky is clear and blue, with a few scattered clouds. The path leads into the distance, surrounded by vibrant vegetation.
PitchGround truthOursw/o null-pitchUCPEPreciseCam
90°
50°
-50°
-90°
Prompt: A cozy room features a beige tufted sofa in the center, flanked by a Christmas tree and a white fireplace adorned with a wreath. To the right, a gray canopy tent and a small cloud-shaped decoration are visible. The room is illuminated by a chandelier and overhead lights, with sheer curtains on the left and decorative screens nearby.
PitchGround truthOursw/o null-pitchUCPEPreciseCam
90°
50°
-50°
-90°
Prompt: A large circular softbox light is positioned on the right side of a plain, white room. The softbox emits a bright, diffused light, illuminating the area around it. The ceiling and walls are smooth and unadorned, with visible wiring and a corner of the room slightly curved. The scene remains static, focusing solely on the lighting setup.
PitchGround truthOursw/o null-pitchUCPEPreciseCam
90°
50°
-50°
-90°
Prompt: A spacious workshop with large windows and industrial equipment is shown. A blue metal structure dominates the foreground, surrounded by various tools and workbenches. In the background, a staircase leads to an upper level with a glass enclosure. The room is filled with scattered tools, machinery, and workstations, creating an organized yet busy atmosphere.
PitchGround truthOursw/o null-pitchUCPEPreciseCam
90°
50°
-50°
-90°

Additional qualitative results (extends fig. 5)

We stratify the SpatialVID-extreme evaluation set into ten equal-count bins by total angular distance and randomly select one sample from each bin. Both comparisons use the same scenes in decreasing angular-distance order. The black overlay is the input 3D camera grid. Every method video is downsampled from $480 \times 720$ to $240 \times 360$ before synchronization and horizontal concatenation.

Comparisons against the baselines from fig. 5. For "AC3D + cam. text.", the camera prompt is additionally supplied to indicate absolute camera orientation.

Sample: SpatialVID-HQ-dataloader-00094-7c736f48-8095-569a-b6be-2cfd7170c940
Total angular distance: 178.02°
Scene: A bright forest with towering green-leaved trees forming a dense canopy overhead.
Camera motion (for AC3D): The camera starts with large tilt-up of 29 degrees, and a small Dutch angle tilted clockwise 13 degrees. The camera ends with pan of 180 degrees turned right, small tilt-down of 18 degrees, a small Dutch angle tilted counterclockwise 7 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓9.2125
GravityErr (abs.) ↓10.0886
RotErr (rel.) ↓10.2068
TransErr (rel.) ↓0.8939
CLIP ↑23.8044
PitchErr (abs.) ↓12.4163
GravityErr (abs.) ↓13.5109
RotErr (rel.) ↓14.8791
TransErr (rel.) ↓0.8236
CLIP ↑23.4853
PitchErr (abs.) ↓17.7397
GravityErr (abs.) ↓20.4756
RotErr (rel.) ↓55.8916
TransErr (rel.) ↓0.5934
CLIP ↑25.4400
PitchErr (abs.) ↓19.0256
GravityErr (abs.) ↓25.0909
RotErr (rel.) ↓51.9763
TransErr (rel.) ↓0.8881
CLIP ↑23.5640
PitchErr (abs.) ↓35.0662
GravityErr (abs.) ↓35.6861
RotErr (rel.) ↓39.6428
TransErr (rel.) ↓0.8045
CLIP ↑24.2247
PitchErr (abs.) ↓35.5366
GravityErr (abs.) ↓38.4120
RotErr (rel.) ↓16.4959
TransErr (rel.) ↓0.6969
CLIP ↑20.9569
Sample: SpatialVID-HQ-dataloader-00115-2c385976-bef2-52d2-9a05-79bc6f8e256c
Total angular distance: 149.74°
Scene: An evening view of the Eiffel Tower bathed in yellow light against a dark blue sky, framed by bare trees in a peaceful urban setting.
Camera motion (for AC3D): The camera starts with large tilt-down of 36 degrees, and a large Dutch angle tilted counterclockwise 37 degrees. The camera ends with pan of 155 degrees turned right, small tilt-up of 9 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓10.5314
GravityErr (abs.) ↓12.1192
RotErr (rel.) ↓37.4392
TransErr (rel.) ↓0.4248
CLIP ↑20.6619
PitchErr (abs.) ↓8.8960
GravityErr (abs.) ↓10.7768
RotErr (rel.) ↓20.1412
TransErr (rel.) ↓0.7160
CLIP ↑22.2858
PitchErr (abs.) ↓24.5544
GravityErr (abs.) ↓26.1429
RotErr (rel.) ↓34.1009
TransErr (rel.) ↓0.2848
CLIP ↑21.4530
PitchErr (abs.) ↓64.8916
GravityErr (abs.) ↓67.1266
RotErr (rel.) ↓40.2374
TransErr (rel.) ↓0.7760
CLIP ↑23.6987
PitchErr (abs.) ↓27.1944
GravityErr (abs.) ↓28.0827
RotErr (rel.) ↓36.8783
TransErr (rel.) ↓0.5910
CLIP ↑20.3912
PitchErr (abs.) ↓19.9173
GravityErr (abs.) ↓22.3643
RotErr (rel.) ↓7.7620
TransErr (rel.) ↓0.2625
CLIP ↑18.0196
Sample: SpatialVID-HQ-dataloader-00101-3cfeecbb-ebcf-504d-bef4-a83049584189
Total angular distance: 135.15°
Scene: A rainy night on a quiet city street, where slick pavement reflects glowing lights and a lone car glides through the stillness, surrounded by dark trees and distant buildings.
Camera motion (for AC3D): The camera starts at extreme tilt-down of 47 degrees. The camera ends with pan of 129 degrees turned right, extreme tilt-down of 60 degrees, a small Dutch angle tilted counterclockwise 6 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓9.2411
GravityErr (abs.) ↓11.7102
RotErr (rel.) ↓28.1187
TransErr (rel.) ↓1.0968
CLIP ↑24.2255
PitchErr (abs.) ↓20.2925
GravityErr (abs.) ↓21.0233
RotErr (rel.) ↓23.4795
TransErr (rel.) ↓0.7450
CLIP ↑25.1526
PitchErr (abs.) ↓24.0930
GravityErr (abs.) ↓25.7671
RotErr (rel.) ↓33.5021
TransErr (rel.) ↓0.6478
CLIP ↑23.9905
PitchErr (abs.) ↓37.6043
GravityErr (abs.) ↓38.0087
RotErr (rel.) ↓37.3030
TransErr (rel.) ↓0.6868
CLIP ↑23.5156
PitchErr (abs.) ↓37.7710
GravityErr (abs.) ↓38.6362
RotErr (rel.) ↓33.3560
TransErr (rel.) ↓0.8103
CLIP ↑19.1394
PitchErr (abs.) ↓16.7401
GravityErr (abs.) ↓19.0439
RotErr (rel.) ↓9.6431
TransErr (rel.) ↓0.5352
CLIP ↑18.4862
Sample: SpatialVID-HQ-dataloader-00003-3ef36ee6-3152-5122-9f5a-a8880c4a5a1e
Total angular distance: 125.10°
Scene: A serene coastal bay features a small beach, rocky cliffs, and clustered buildings, framed by lush green hills under bright, natural lighting.
Camera motion (for AC3D): The camera starts with extreme tilt-up of 50 degrees, and a large Dutch angle tilted counterclockwise 24 degrees. The camera ends with pan of 50 degrees turned right, extreme tilt-down of 69 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓8.9875
GravityErr (abs.) ↓12.8998
RotErr (rel.) ↓16.5456
TransErr (rel.) ↓0.4205
CLIP ↑17.3378
PitchErr (abs.) ↓5.9099
GravityErr (abs.) ↓7.5559
RotErr (rel.) ↓19.5279
TransErr (rel.) ↓0.3592
CLIP ↑18.8680
PitchErr (abs.) ↓6.2076
GravityErr (abs.) ↓7.2748
RotErr (rel.) ↓22.0281
TransErr (rel.) ↓0.4858
CLIP ↑19.9562
PitchErr (abs.) ↓44.7900
GravityErr (abs.) ↓56.7092
RotErr (rel.) ↓44.8728
TransErr (rel.) ↓0.5123
CLIP ↑18.8677
PitchErr (abs.) ↓36.1496
GravityErr (abs.) ↓39.8930
RotErr (rel.) ↓46.6470
TransErr (rel.) ↓0.2459
CLIP ↑17.0128
PitchErr (abs.) ↓46.6495
GravityErr (abs.) ↓47.8770
RotErr (rel.) ↓36.4475
TransErr (rel.) ↓0.5818
CLIP ↑14.5584
Sample: SpatialVID-HQ-dataloader-00087-2ec206f5-311e-5c33-9fc1-4baa3b400ec0
Total angular distance: 110.75°
Scene: A serene urban garden features white hydrangeas, a winding grass path, and a sleek concrete building, bathed in soft, diffused light that enhances its tranquil atmosphere.
Camera motion (for AC3D): The camera starts at small tilt-up of 7 degrees. The camera ends with pan of 119 degrees turned right, extreme tilt-up of 76 degrees, a large Dutch angle tilted counterclockwise 34 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓21.7744
GravityErr (abs.) ↓23.2666
RotErr (rel.) ↓18.6535
TransErr (rel.) ↓0.3305
CLIP ↑17.4882
PitchErr (abs.) ↓33.1131
GravityErr (abs.) ↓37.0826
RotErr (rel.) ↓13.5204
TransErr (rel.) ↓0.9102
CLIP ↑24.2839
PitchErr (abs.) ↓24.2324
GravityErr (abs.) ↓24.6518
RotErr (rel.) ↓25.8472
TransErr (rel.) ↓0.5582
CLIP ↑22.6083
PitchErr (abs.) ↓51.2740
GravityErr (abs.) ↓53.3903
RotErr (rel.) ↓38.8929
TransErr (rel.) ↓0.4752
CLIP ↑23.0565
PitchErr (abs.) ↓36.7328
GravityErr (abs.) ↓37.7930
RotErr (rel.) ↓34.6644
TransErr (rel.) ↓0.5159
CLIP ↑23.1199
PitchErr (abs.) ↓24.0216
GravityErr (abs.) ↓26.7223
RotErr (rel.) ↓9.1602
TransErr (rel.) ↓0.3059
CLIP ↑20.4584
Sample: SpatialVID-HQ-dataloader-00052-6fe06b69-8421-502c-8544-f287c630b1f4
Total angular distance: 93.71°
Scene: A modern yacht interior features a woman in a striped suit, a plush couch, a dining area, and elegant lighting through window blinds, evoking luxury and sophistication.
Camera motion (for AC3D): The camera starts at small tilt-up of 14 degrees. The camera ends with pan of 52 degrees turned right, extreme tilt-up of 83 degrees, a small Dutch angle tilted clockwise 15 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓49.8691
GravityErr (abs.) ↓50.3017
RotErr (rel.) ↓21.8804
TransErr (rel.) ↓0.4517
CLIP ↑26.5318
PitchErr (abs.) ↓51.5734
GravityErr (abs.) ↓52.7320
RotErr (rel.) ↓17.4720
TransErr (rel.) ↓0.9059
CLIP ↑27.7451
PitchErr (abs.) ↓34.3574
GravityErr (abs.) ↓34.9078
RotErr (rel.) ↓17.6683
TransErr (rel.) ↓0.4415
CLIP ↑27.7872
PitchErr (abs.) ↓64.7063
GravityErr (abs.) ↓65.8822
RotErr (rel.) ↓39.6566
TransErr (rel.) ↓0.5359
CLIP ↑27.3651
PitchErr (abs.) ↓16.6110
GravityErr (abs.) ↓20.4234
RotErr (rel.) ↓22.3841
TransErr (rel.) ↓0.8192
CLIP ↑23.9252
PitchErr (abs.) ↓37.4965
GravityErr (abs.) ↓38.9955
RotErr (rel.) ↓17.6613
TransErr (rel.) ↓0.5698
CLIP ↑20.2714
Sample: SpatialVID-HQ-dataloader-00053-1fb6f4f1-aec2-5bd7-a398-7c4f307181f4
Total angular distance: 85.77°
Scene: A serene pond with swans and cygnets, surrounded by stone edges and greenery, under an overcast sky, capturing quiet natural life.
Camera motion (for AC3D): The camera starts with small tilt-up of 7 degrees, and a small Dutch angle tilted clockwise 6 degrees. The camera ends with pan of 80 degrees turned left, large tilt-up of 33 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓16.4533
GravityErr (abs.) ↓16.9498
RotErr (rel.) ↓7.5299
TransErr (rel.) ↓1.0478
CLIP ↑24.3162
PitchErr (abs.) ↓16.2228
GravityErr (abs.) ↓16.8548
RotErr (rel.) ↓5.8164
TransErr (rel.) ↓0.9572
CLIP ↑24.3074
PitchErr (abs.) ↓8.7367
GravityErr (abs.) ↓9.5328
RotErr (rel.) ↓13.9433
TransErr (rel.) ↓0.9523
CLIP ↑28.2995
PitchErr (abs.) ↓21.5195
GravityErr (abs.) ↓21.6986
RotErr (rel.) ↓20.4100
TransErr (rel.) ↓0.7712
CLIP ↑24.9414
PitchErr (abs.) ↓6.8468
GravityErr (abs.) ↓9.0722
RotErr (rel.) ↓24.6648
TransErr (rel.) ↓0.7248
CLIP ↑16.5736
PitchErr (abs.) ↓13.9145
GravityErr (abs.) ↓15.3800
RotErr (rel.) ↓8.4604
TransErr (rel.) ↓0.3375
CLIP ↑16.5489
Sample: SpatialVID-HQ-dataloader-00014-7f27d735-17bb-5ddd-97b0-d733d7dd93e4
Total angular distance: 79.50°
Scene: A narrow urban alleyway features a construction site with scaffolding, a low fence, and greenery, under an overcast sky, evoking an industrial and utilitarian atmosphere.
Camera motion (for AC3D): The camera starts with large tilt-up of 35 degrees, and a small Dutch angle tilted clockwise 7 degrees. The camera ends with pan of 84 degrees turned left, small tilt-up of 12 degrees, a large Dutch angle tilted clockwise 35 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓4.9023
GravityErr (abs.) ↓12.6036
RotErr (rel.) ↓11.4505
TransErr (rel.) ↓0.1723
CLIP ↑19.5443
PitchErr (abs.) ↓8.2126
GravityErr (abs.) ↓10.3732
RotErr (rel.) ↓14.4923
TransErr (rel.) ↓0.1482
CLIP ↑22.5968
PitchErr (abs.) ↓10.6718
GravityErr (abs.) ↓13.7123
RotErr (rel.) ↓21.7743
TransErr (rel.) ↓0.1879
CLIP ↑20.0547
PitchErr (abs.) ↓21.7711
GravityErr (abs.) ↓34.7293
RotErr (rel.) ↓29.0246
TransErr (rel.) ↓0.3102
CLIP ↑22.2354
PitchErr (abs.) ↓5.6051
GravityErr (abs.) ↓18.5598
RotErr (rel.) ↓10.4525
TransErr (rel.) ↓0.1005
CLIP ↑21.4221
PitchErr (abs.) ↓5.3172
GravityErr (abs.) ↓10.7880
RotErr (rel.) ↓3.1268
TransErr (rel.) ↓0.0360
CLIP ↑21.8820
Sample: SpatialVID-HQ-dataloader-00021-3d3d0e82-2feb-5afa-ab61-4211c4868c98
Total angular distance: 53.60°
Scene: A luxurious breakfast tray floats in a clear pool, surrounded by modern outdoor lounges, exuding calm and opulence under bright sunlight.
Camera motion (for AC3D): The camera starts with small tilt-up of 16 degrees, and a small Dutch angle tilted clockwise 16 degrees. The camera ends with pan of 55 degrees turned right, small tilt-up of 13 degrees, a small Dutch angle tilted counterclockwise 6 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓27.5571
GravityErr (abs.) ↓28.8083
RotErr (rel.) ↓3.1285
TransErr (rel.) ↓0.3285
CLIP ↑18.2450
PitchErr (abs.) ↓28.7265
GravityErr (abs.) ↓29.9024
RotErr (rel.) ↓6.7044
TransErr (rel.) ↓0.3414
CLIP ↑21.9821
PitchErr (abs.) ↓21.5870
GravityErr (abs.) ↓21.9413
RotErr (rel.) ↓1.7646
TransErr (rel.) ↓0.2815
CLIP ↑21.7355
PitchErr (abs.) ↓28.1252
GravityErr (abs.) ↓29.4991
RotErr (rel.) ↓5.2445
TransErr (rel.) ↓0.3080
CLIP ↑24.8939
PitchErr (abs.) ↓8.0369
GravityErr (abs.) ↓14.4963
RotErr (rel.) ↓4.8712
TransErr (rel.) ↓0.2467
CLIP ↑21.4897
PitchErr (abs.) ↓9.9043
GravityErr (abs.) ↓17.2245
RotErr (rel.) ↓2.4558
TransErr (rel.) ↓0.1436
CLIP ↑18.5746
Sample: SpatialVID-HQ-dataloader-00104-7dd684e9-01cb-5a54-845d-64348b4cd802
Total angular distance: 40.47°
Scene: A rugged mountain road winds through a dry, green landscape under bright sunlight, framed by steep slopes and scattered rocks, evoking a sense of natural beauty and isolation.
Camera motion (for AC3D): The camera starts with small tilt-down of 18 degrees, and a small Dutch angle tilted counterclockwise 17 degrees. The camera ends with pan of 41 degrees turned right, small tilt-down of 12 degrees, a small Dutch angle tilted counterclockwise 11 degrees
GT Trajectory:
Top
GT top view
Side
GT side view
Ours
Ours (w/o null-pitch cond.)
UCPE
AC3D + cam. text.
PreciseCam + WAN-I2V-CC
PreciseCam + GEN3C
PitchErr (abs.) ↓1.5652
GravityErr (abs.) ↓20.7034
RotErr (rel.) ↓6.9452
TransErr (rel.) ↓0.5595
CLIP ↑22.6332
PitchErr (abs.) ↓3.1581
GravityErr (abs.) ↓15.7385
RotErr (rel.) ↓8.5755
TransErr (rel.) ↓0.4454
CLIP ↑22.2062
PitchErr (abs.) ↓3.9588
GravityErr (abs.) ↓13.1067
RotErr (rel.) ↓8.6168
TransErr (rel.) ↓0.4372
CLIP ↑23.9830
PitchErr (abs.) ↓38.7535
GravityErr (abs.) ↓51.8856
RotErr (rel.) ↓6.4516
TransErr (rel.) ↓0.4344
CLIP ↑21.5578
PitchErr (abs.) ↓27.3009
GravityErr (abs.) ↓28.1376
RotErr (rel.) ↓3.5767
TransErr (rel.) ↓0.7727
CLIP ↑19.8179
PitchErr (abs.) ↓31.4029
GravityErr (abs.) ↓32.3403
RotErr (rel.) ↓4.6245
TransErr (rel.) ↓0.2900
CLIP ↑18.2293