Bản đồ sao Project Hail Mary, dựng từ 1,8 tỷ ngôi sao thật
Project Hail Mary là loại tiểu thuyết mà tác giả chịu tính toán thật. Andy Weir check cơ học quỹ đạo. Check vật lý thiên văn. Điều hướng bằng sao trong truyện không phải trang trí - vị trí của từng ngôi sao cụ thể quan trọng với cốt truyện.
Val xem xong phim, muốn nhìn thấy cái khu vực không gian đó trong 3 chiều với dữ liệu thật, và đã xây nó. valhovey.github.io/gaia-mary là bản đồ điều hướng sao 3D tương tác dựa trên các hệ sao trong cuốn tiểu thuyết. Nó đạt 736 điểm trên Hacker News chỉ một ngày sau.
Chuyện kể bằng một cảnh
--> // making it invisible to querySelectorAll. // // `data-cfasync="false"` keeps this rescue script executable even when // Rocket Loader is active. It rescues module scripts via two strategies: // 1. Query the DOM for type$="-module" + src (covers case A) // 2. Regex-parse the raw HTML for commented-out script tags (covers case B) // Dynamically-created scripts bypass Rocket Loader entirely. (function () { if (window.__markdyRescue) return; window.__markdyRescue = true; var rescued = false; function rescueModuleScripts() { if (rescued) return; rescued = true; var srcs = []; // Strategy 1: Rocket Loader kept the tag in DOM but changed the type. // type="module" → type="{uuid}-module" (still has src attribute) document.querySelectorAll('script[type$="-module"][src]').forEach(function (s) { srcs.push(s.src); }); // Strategy 2: Rocket Loader COMMENTED OUT the script tag entirely: // // These are invisible to querySelectorAll, so we parse the raw HTML. // We handle both attribute orderings (type-first or src-first). var html = document.documentElement.innerHTML; var reSrcFirst = //g; var reTypeFirst = //g; var m; while ((m = reSrcFirst.exec(html)) !== null) { srcs.push(m[1]); } while ((m = reTypeFirst.exec(html)) !== null) { srcs.push(m[1]); } // Re-inject each found src as a real module script. // Deduplicate first, then inject. Dynamically-created scripts bypass // Rocket Loader entirely. Modules with the same URL are only executed // once by the browser (cached), so re-injecting already-running scripts // is safe. var seen = {}; srcs.forEach(function (src) { if (seen[src]) return; seen[src] = true; var fix = document.createElement('script'); fix.type = 'module'; fix.src = src; fix.setAttribute('data-cfasync', 'false'); document.head.appendChild(fix); }); } // Rescue when user clicks the placeholder (fallback if autoplay failed). document.addEventListener('click', function (e) { var t = e.target; if (t && typeof t.closest === 'function' && t.closest('.markdy-placeholder')) { rescueModuleScripts(); } }); // Rescue automatically after a short delay for autoplay. // Only fires if initAll() never ran (no data-markdy-init on any root). setTimeout(function () { if (document.querySelector('.markdy-root:not([data-markdy-init])')) { rescueModuleScripts(); } }, 1500); }());Bản đồ được dựng từ catalog GAIA DR3 của ESA: 1,8 tỷ ngôi sao, vị trí và màu sắc đo với độ chính xác cao bởi kính viễn vọng không gian Gaia. Val viết Python script để render toàn bộ catalog đó thành các ảnh skybox tùy chỉnh, rồi xây giao diện điều hướng bằng SvelteKit.
GAIA DR3 thực ra là gì
ESA phóng tàu Gaia năm 2013. Nhiệm vụ: đo vị trí chính xác, khoảng cách và độ sáng của các ngôi sao trong dải Ngân Hà. GAIA DR3 - Data Release 3, công bố năm 2022 - là lần phát hành thứ ba của catalog đó.
1,8 tỷ ngôi sao. Mỗi cái có vị trí trong không gian 3 chiều, màu sắc, độ sáng. Tải về miễn phí. Bộ dữ liệu thực sự phi thường.
Khi bạn nhìn vào trường sao trong một video game và tự hỏi liệu ai đó có bịa không - đây là bộ dataset khiến việc bịa trở nên thừa thãi. Thiên hà thật đã được lập bản đồ rồi. Ai đó chỉ cần xây renderer.
Vấn đề tỉ lệ
Có một bình luận trong thread đáng trích nguyên văn:
Kích thước hành tinh, ngôi sao và quỹ đạo của chúng hoàn toàn không theo tỉ lệ thực. Để hình dung độ trống của không gian: 1 dặm = 63.360 inch, và 1 năm ánh sáng = 63.239 đơn vị thiên văn. Nếu thu nhỏ sao cho Trái Đất cách Mặt Trời 1 inch, thì Hải Vương Tinh cách 30 inch còn Alpha Centauri cách 4 dặm.
Nếu dùng màn 4K với Mặt Trời và Alpha Centauri ở hai đầu màn hình, quỹ đạo Hải Vương Tinh sẽ nằm cùng một pixel với Mặt Trời.
Bản đồ này không giả vờ thể hiện tỉ lệ thực - nhìn vào là thấy ngay. Nhưng bình luận đó là một cách cân chỉnh hữu ích. Khoảng cách giữa các ngôi sao lớn đến mức không có bản đồ tương tác nào có thể thể hiện trung thực mà vẫn điều hướng được. Bất kỳ bản đồ nào như này cũng là một thỏa hiệp UX: bạn cho thấy topology, tên gọi, mối quan hệ - vì hiện khoảng cách thật sẽ cho ra màn hình trống với hai pixel.
Điểm thiết kế thú vị là Val không cố bù đắp bằng khoảng cách giả. Vị trí là thật, dữ liệu là thật, và tỉ lệ bị nén là cái giá cần trả khi muốn xây thứ gì đó điều hướng được bằng chuột.
Kỹ thuật bên trong
Chính Val giải thích trong thread:
Demo này dùng bộ dữ liệu GAIA DR3 tuyệt vời từ ESA. Tôi có Python script render toàn bộ 1,8+ tỷ ngôi sao thành các ảnh tùy chỉnh, dùng làm skybox. Vị trí và màu sắc ngôi sao đều dùng dữ liệu GAIA (ngoại trừ một vài sao sáng không có trong catalog).
Cách dùng skybox là quyết định kỹ thuật cốt lõi. Render 1,8 tỷ điểm sao live trong trình duyệt là không khả thi - dung lượng dữ liệu một mình cũng đủ để giết chết trang. Thay vào đó, Val pre-render toàn bộ catalog thành một bộ ảnh tile liền mạch bao quanh người xem làm nền. Các phần tương tác - nhãn hệ sao, overlay điều hướng - nằm phía trước backdrop này.
Kết quả là cảm giác đứng trong không gian và nhìn bầu trời thật.
HN đang thảo luận gì
Ba luồng chính chạy xuyên suốt thread:
Góc nhìn dữ liệu mở. Nhiều người nhận xét rằng dự án chỉ khả thi vì ESA phân phối GAIA DR3 miễn phí. “Dữ liệu thực sự đáng nể” từ Val không phải lời khen xã giao; ESA publish nó không kèm hạn chế sử dụng. Đây là thứ một thập kỷ đầu tư khoa học công cộng thực sự tạo ra khi được thả vào commons.
So sánh với Elite Dangerous. Ít nhất ba bình luận riêng biệt đề cập đến Elite Dangerous - tựa game không gian 2014 đã model toàn bộ dải Ngân Hà từ dữ liệu sao thật. Bản đồ Gaia Mary khơi dậy nỗi nhớ tức thì về việc lái tàu qua 400 tỷ hệ sao được sinh ra theo thủ tục.
Bản đồ pulsar của Voyager. Một bình luận nhắc lại rằng đĩa vàng trên Voyager 1 có bản đồ điều hướng bằng pulsar do Carl Sagan thiết kế - sơ đồ định vị Mặt Trời tương đối với 14 pulsar đã biết, để bất kỳ nền văn minh nào tìm thấy tàu cũng biết nó đến từ đâu. Bản đồ Gaia Mary có ý định tương tự ở tỉ lệ con người: bản đồ sao thật, đặt các hệ thống cụ thể trong quan hệ 3 chiều với nhau, dùng để theo dõi một hành trình hư cấu được xây dựng trên hình học thật.
Một chi tiết ít ai nói đến
Có một bản đồ sao khác được xây độc lập tại dwheeler.com - nhìn từ góc trên sao Polaris thay vì từ bên trong trường sao. Hai người khác nhau, cùng nguồn cảm hứng, hai cách tiếp cận hoàn toàn khác cho cùng một bài toán lập bản đồ.
Chính vì GAIA DR3 là mở mà cả hai đều tồn tại. Bản đồ đẹp. Nhưng thứ làm cho bản đồ khả thi là bộ dữ liệu mất mười năm và một vệ tinh để thu thập, và được phát hành để bất kỳ ai cũng dùng được.
Thảo luận trên Hacker News · Nguồn: valhovey.github.io/gaia-mary · Đăng bởi speleo
Hoang Yell
Một nhà phát triển phần mềm và là người kể chuyện kỹ thuật. Tôi đọc Hacker News mỗi ngày và kể lại những câu chuyện hay nhất ở đây — bằng tiếng Việt và tiếng Anh, cho người tò mò nhưng không có thời gian.