🔄 360° Panorama to Views
Slicing a 360 panorama into the perspective views WorldMirror can digest
- panorama
- views
- intrinsics
- camera_poses
Your fancy 360° panorama is one big distorted image, and most 3D reconstruction models - WorldMirror included - don't want it. They want a bunch of normal perspective photos from known camera positions. VNCCS_Equirect360ToViews is the slicer that turns one equirectangular panorama into a set of perspective views plus the camera poses and intrinsics that say exactly where each view was "taken" from. It's the first node in the pack's panorama-to-3D workflow (workflows/World-Mirror-panorama.json), and it's why you can feed a 360 and get a splat.
It's a pure computer-vision node - no models, no downloads, no VRAM. Just math, and it's the same kind of perspective-slicing trick the multi-view reconstruction world has used since before the current wave of generators.
How it works
The node walks a grid of yaw (horizontal) and pitch (vertical) directions. yaw_step (default 45°) controls how many horizontal slices you get around the circle; pitches is a comma-separated string like 0,-60,60 controlling the vertical angles you sample at each yaw. For each (yaw, pitch) it crops a perspective view of output_size (default 518) at field of view fov (default 90°) and records the matching camera pose and intrinsics.
Two details make or break the results:
dynamic_fov(default on) automatically shrinks the FOV when looking up or down, because perspective projection stretches badly near a panorama's poles - that's why "0,-60,60" works better than pointing straight up.sampling_modepicks the resampler:bilinearis the default because it's safer for 3D reconstruction, whilebicubicis sharper but can ring with colored fringes at edges - fringes that then get reconstructed as fake geometry.
The inputs that matter
panorama- required, an equirectangular image.yaw_step- smaller = more views = better coverage, more reconstruction time. 45° (8 views) is a reasonable start; 30° is common.pitches- include a high and low pitch so ceiling and floor aren't blind spots.fov/output_size- resolution and how wide each slice is. Wider FOV covers more but stretches; 90° is a sane default.
Outputs
views- the batch of perspective images.intrinsicsandcamera_poses- tensors describing each view's focal length and camera-to-world pose. All three wire intoVNCCS_WorldMirrorV2_3D(or the V1 variant) for reconstruction.
Install & troubleshooting
Shared pack install: ComfyUI Manager (search HY-World 2.0) or clone + pip install -r requirements.txt + python install.py. The reconstruction stage downstream is where models and VRAM get involved; this node is free.
The classic beginner miss: too few pitches. If you slice only at pitch 0, the floor and ceiling of your world come back as a mess (or holes), and then alignment downstream blames the wrong node. Turn on debug_log once to see the per-view camera diagnostics and confirm your grid before spending GPU time reconstructing. And stick with bilinear for anything feeding a 3D pipeline - the bicubic ring artifacts are a real, avoidable source of splat floaters.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| panorama | IMAGE | — | |
| fovopt | INT | 901–179 | — |
| yaw_stepopt | INT | 451–180 | — |
| pitchesopt | STRING | 0,-60,60 | — |
| output_sizeopt | INT | 518252–4096 | — |
| dynamic_fovopt | BOOLEAN | true | Automatically reduce FOV looking up/down to minimize stretching |
| sampling_modeopt | COMBO | bilinear | Perspective extraction resampling. bilinear is safer for 3D reconstruction; bicubic is sharper but can create colored edge ringing. |
| debug_logopt | BOOLEAN | false | Print per-view camera/intrinsics diagnostics for panorama slices. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| views | IMAGE | — |
| intrinsics | TENSOR | — |
| camera_poses | TENSOR | — |