Back in April I built SOLSTICE, a page that watches the sky over Chaco Canyon in New Mexico, the same sky the people who built its great houses were watching a thousand years ago. This fall I came back to it with everything I’ve learned from forge3d since, and ended up rebuilding most of it. The big idea of the new version is simple: at Chaco, the horizon isn’t flat. The canyon walls are the horizon, and the skyline is the calendar.

▶ Watch in HD (1080p)

Chaco Canyon on the summer solstice, June 21, 2027, just after sunrise · USGS 3DEP lidar · NAIP 2022 aerial photography · rendered with forge3d 1.40.1

76
Minutes the canyon wall
delays June sunrise
at Pueblo Bonito
59.8°
Summer solstice sunrise
on a flat horizon
8
Sites, each with
its own skyline
0
GPUs used
for the flyover

The flight

The camera flies the length of the canyon on the morning of the longest day, with the Sun placed where it will really be, low in the northeast, and the shadows running west down the canyon ahead of it.

The skyline is the calendar

The first version compared each day’s sunrise to one number. The new one starts with the land. For eight of the sites, a small Python script walks outward from the site in every direction, a quarter of a degree at a time, across USGS lidar elevation (metre-scale near the great houses, 5-metre in the rest of the canyon, 30-metre out to 80 kilometres), and keeps the highest point it can see, allowing for the curve of the Earth. That gives each great house its own skyline. Then, for every day of the year, it finds the moment the Sun’s top edge clears that skyline.

The difference is bigger than I expected. On a flat horizon, the summer solstice Sun comes up at 5:55 AM. At Pueblo Bonito, which sits right under the canyon’s north wall, it doesn’t clear the rim until about 7:11, more than an hour later and ten degrees further around, at 70.4°. At Una Vida, even closer in under the cliff, it’s later still. Up on the mesa at Pueblo Alto and out at Peñasco Blanco, the skyline is nearly flat and sunrise lands within a few minutes of the textbook time.

On the page, the horizon calendar draws each site’s real skyline and puts every sunrise of the year on it, so you can watch the Sun walk north along the rim toward June and back toward December. It also marks where the Moon rises at its extremes, which brings in the slow one: the Moon’s 18.6-year standstill cycle. The last major standstill was the winter of 2024–25, so we’re just past it now. The next minor standstill is around 2034.

Chaco Canyon from the southeast at summer solstice sunrise, the low Sun in the northeast lighting the canyon's south-facing walls, with the great houses labelled along the canyon floor

Summer solstice sunrise, June 21, 2027, 6:18 AM.

The same view of Chaco Canyon at winter solstice sunrise, the Sun now low in the southeast and the north wall of the canyon in long shadow

Same camera, winter solstice sunrise, December 21, 2027, 7:48 AM. The Sun has moved sixty degrees along the horizon.

What changed

Going back through it carefully, I found a few things I’d taken on trust in April that didn’t hold up. Fixing them was honestly the best part, because each one taught me something about the place.

The full list is in the project’s README.

forge3d with no graphics card

In April I wrote that rendering on GitHub’s servers “isn’t practical,” since they have no GPU. It turns out it is, just slowly. forge3d draws with Vulkan, and Mesa ships a software Vulkan driver that runs on an ordinary CPU. With a virtual display in front of it, the forge3d terrain viewer runs headless on a GitHub Actions machine. Each frame takes about twenty seconds, so the 1,651 frames of the flyover are split across thirty jobs that run side by side, then stitched together with ffmpeg and committed back to the site.

  1. The shape is USGS lidar. The whole canyon, about 22 by 20 kilometres, drawn in layers so the ground near the camera is as sharp as the data allows (more on that below).
  2. The colour is NAIP. The USDA’s 2022 aerial photos of New Mexico, colour-graded after forge3d’s Bryce Canyon example.
  3. The light is the real Sun. forge3d’s solar calculator places it for the date and minute on each image, and the viewer works out the shadows and the shading in the folds. A few lines of Python paint the dawn sky.

One thing I learned the hard way: the viewer won’t tilt the camera flatter than five degrees below level. Ask for a lower look and it quietly raises the camera instead, which put all my labels in the wrong place until I copied that behaviour into the label code.

Pueblo Bonito's D-shaped great house seen from the north rim at summer solstice sunrise, the canyon floor lit beyond it

Pueblo Bonito from the north rim, summer solstice sunrise.

Update: half a metre

A day after this went up, I wanted the ground sharper, so I went looking for better lidar. It turned out the lidar was already good. The catch was forge3d’s viewer, which squeezes any terrain down to about 2,048 points across. Spread over 22 kilometres of canyon, that’s one point every 11 metres, however fine the data underneath. The fix was to draw every frame in layers with the same camera and the same Sun: the whole canyon for the horizon, a few kilometres around the camera a little sharper, and the ground right below it sharpest of all. Each layer stays under the limit, and the finer one wins wherever it has ground.

Then came the real surprise. USGS’s finished elevation product has a hole right over the canyon core, the square kilometre around Pueblo Bonito, and it fills the hole with much coarser data. A newer survey was flown over Chaco but only published as raw point clouds, so I borrowed the trick from Project Kiva: download the tiles near each great house, keep the laser returns that reached the ground, and grid them at half a metre. That’s 89 tiles with 10 to 17 ground points in every square metre.

Two shaded-relief views of the same 600-metre square around Pueblo Bonito. Left, from the USGS elevation service: a soft blur with the canyon wall barely shown. Right, half-metre lidar from the raw point clouds: the D-shaped great house and its walls, the boulders below the cliff, the park road and the arroyo, all crisp

The same 600 metres around Pueblo Bonito. Left: what the USGS elevation service returns. Right: half-metre ground built from the raw point clouds.

That made room for a new view on the page: Pueblo Bonito from above the canyon floor on the June solstice, about an hour after the Sun first touches the open horizon, with the Sun low on the right raking across the walls.

Pueblo Bonito from the air an hour after the June sunrise: the D-shaped great house with its room blocks and round kivas, the north canyon wall behind it and the boulders of Threatening Rock, which fell in 1941

Pueblo Bonito, summer solstice morning, 6:54 AM. The rubble against the back wall is Threatening Rock, which fell from the cliff in 1941.

The better ground made the skylines better too. With the canyon walls right next to the great houses now drawn from the new lidar, a few sunrises and sunsets moved by several minutes. Pueblo Bonito’s June sunrise is five minutes later than I first had it, and Una Vida’s nine. The flyover, the stills and the calendar on the page all use the new ground.

What’s on the page now

Last thing

A daily job still updates the sky every morning, so the page keeps watching even when I’m not. Thanks again to Milos Popovic for forge3d; this is the first time I’ve run it without a graphics card at all, and it held up beautifully. And the most important line on the page belongs here too: Chaco Canyon is the ancestral homeland of the Pueblo peoples and the Diné, and a sacred place to them today.

Live at brooksgroves.com/solstice · code at github.com/bdgroves/solstice · the first build post is here.

Data: USGS 3D Elevation Program, including the CO_CONMGaps_D24 lidar point clouds; USDA NAIP 2022 via Microsoft Planetary Computer; site locations from OpenStreetMap and Wikipedia. Rendering: forge3d 1.40.1 by Milos Popovic, with Mesa’s llvmpipe Vulkan driver. Astronomy: PyEphem and astronomy-engine. Sources for the archaeology are listed on the live page.


Go deeper

🎧 Listen & watch

The Mystery of Chaco Canyon — The Solstice Project, 1999, about 56 min. Anna Sofaer’s documentary on Chaco’s solar and lunar alignments, narrated by Robert Redford.

The Sun Dagger — The Solstice Project, 1982, about 58 min. The original film about the spirals on Fajada Butte, also narrated by Robert Redford.

Anna Sofaer, Founder of the Solstice Project — Report From Santa Fe (KENW), 26 May 2024, about 28 min. Sofaer looks back on finding the Sun Dagger in 1977 and forty years of Chaco research.

The Standstill — Scott Thybony’s Canyon Commentary, KNAU, 26 February 2024, about 4 min. A cold night on Fajada Butte waiting for the major standstill Moon.

📄 Read

Sofaer, A., Zinser, V. & Sinclair, R.M. (1979). A unique solar marking construct. Science 206, 283–291. The paper that introduced the Sun Dagger; free PDF from the Solstice Project.

Sofaer, A.P. & Sinclair, R.M. (1983). Astronomical markings at three sites on Fajada Butte. In Carlson, J.B. & Judge, W.J. (eds), Astronomy and Ceremony in the Prehistoric Southwest. Maxwell Museum of Anthropology, Anthropological Papers 2. Free PDF from the Solstice Project.

Sofaer, A., Weiner, R. & Stone, W. (2017). Inter-site alignments of prehistoric shrines in Chaco Canyon to the major lunar standstill. In The Science of Time 2016, Astrophysics and Space Science Proceedings 50, 79–101. Springer.

Munro, A.M. & Malville, J.M. (2011). Ancestors and the sun: astronomy, architecture and culture at Chaco Canyon. Proceedings of the International Astronomical Union 7 (S278), 255–264.

Plog, S. & Heitman, C. (2010). Hierarchy and social inequality in the American Southwest, A.D. 800–1200. Proceedings of the National Academy of Sciences 107, 19619–19626.

Crown, P.L. & Hurst, W.J. (2009). Evidence of cacao use in the Prehispanic American Southwest. Proceedings of the National Academy of Sciences 106, 2110–2113.

The Chaco Meridian — Stephen H. Lekson’s big, much-debated idea about Chaco, Aztec and Paquimé, in its 2015 second edition.

A Guide to Prehistoric Astronomy in the Southwest — J. McKim Malville’s friendly field guide to sky-watching at Chaco, Mesa Verde and Chimney Rock.

📊 Data & agencies

Chaco Culture National Historical Park — National Park Service; plan a respectful visit to a place that is sacred to Pueblo and other Indigenous peoples today. · Chaco Culture — UNESCO World Heritage listing, inscribed 1987. · The Solstice Project — Anna Sofaer’s nonprofit, with papers and films.

Chaco Research Archive — a century of excavation records, open to all. · USGS 3D Elevation Program — the lidar behind every skyline. · forge3d — the renderer for the flyover.

SOLSTICE — the live page, updated daily. · bdgroves/solstice — the code on GitHub.