A real reconstruction, not a procedural one: a downtown block of high-rises recovered as 225,000 coloured points from 251 aerial frames by Structure-from-Motion. Orbit it, or ride the solved capture path through the original lens, while a scan plane sweeps it and a decomposition front takes it apart. Drop your own Meshroom .abc or a .ply point cloud to scan that instead.
Drag to orbit · scroll or pinch to zoom · drop a scan onto the stage. Files you load are parsed in your browser and never leave your device.
Structure-from-Motion. The scan was made from ordinary images, not a laser. An SfM solver (here AliceVision, the engine inside Meshroom) finds distinctive features in every frame, matches them across frames, then solves for the camera poses and the 3D feature positions together by minimising reprojection error — bundle adjustment. Each surviving match becomes one point; its colour is the pixel colour where it was seen. The result is a sparse cloud: dense where facades have texture, empty on glass, sky and flat roofs, which is why the towers read as lattices.
Getting the file onto the page. The export is an Alembic archive in its Ogawa binary layout — a tree of groups and data blobs addressed by 64-bit offsets. A small reader (in Python for the bundled file, and a JavaScript port on this page for the files you drop) walks that tree to the AbcGeom_Points object and reads P and color, then every camera transform. The bundled scan was converted once into a 2 MB binary (16-bit positions, 8-bit colour) — a quarter of the 8.5 MB original.
Which way is up. SfM recovers a scene only up to an unknown rotation, translation and scale — no gravity, no metres. The page takes the average "up" vector of all 251 solved cameras (people and drones hold the horizon level) as vertical, centres on the 1st–99th percentile box of the points so a few stray matches can't shrink the city, and scales it to the same 2.6-unit frame as the other studies. Use Up axis if a dropped file without cameras arrives on its side.
Capture path. The cameras are sorted by the frame number in their names, which recovers the original flight. Frames were sampled sparsely (about 11° of turn between neighbours), so the view rides a Catmull-Rom spline through the solved positions and blends the solved viewing directions between them. It uses the solved lens: a 26.6° vertical field of view. The white frustums show where each frame was taken.
Effects. Scan plane, drift and slice glitch are the same vertex-shader effects as Point Cloud Scan, run on measured points. Decompose has two types. Front is the Point Cloud Scan original: a front sweeps across the city along x, and behind it each point is blown off by a 3D noise wind whose strength grows with the square of its distance past the front, so structure erodes edge-first; in Solid mode eroded points are removed rather than faded. Scatter takes the city apart everywhere at once, smoothly: each point has a random release threshold with a wide, overlapping easing window (30% of the slider), leaves its facade on an eased arc, and settles into a slow harmonic orbit — frequencies in 1:2:3 — around a random position inside the scan's bounding box. At 100% it is a uniform, gently breathing cloud of the same 224,979 measurements; pulling the slider back reassembles the city exactly. Luminous draws points additively, so dense structure blooms and nothing hides anything. Solid uses depth testing and opaque points, which reads closer to a photograph.
A study in the language of scan-based installation work — most directly Ryoichi Kurokawa's decomposing point-cloud landscapes and architecture, and Refik Anadol's data sculptures built from photographic archives of cities. It is not a recreation of any specific work, and it is not affiliated with either studio.
The bundled scan is an AliceVision SfM export (Alembic, December 2019): 224,979 points and 251 camera poses of a downtown high-rise block, reconstructed from frames of an aerial fly-over. It was supplied to this project as a sample file; the original author and the source footage are not recorded here.
P from Points or PolyMesh objects, and ignores parent transforms — fine for Meshroom exports, not for arbitrary animated scenes. PLY: ASCII or binary little-endian, vertex x y z with optional red green blue.