Nebula · Tổng quan R&D · cập nhật 20-07-2026 · English →

Dựng môi trường quy mô thành phố từ dữ liệu thật, sạch bản quyền

Báo cáo những gì đã thử để tái dựng thế giới xung quanh vật thể chính (hero capture) — đường, khu phố, toà nhà quanh một cảnh — và kết quả.

Đề bài khởi nguồn (Jonathan): “Dùng AI làm từng toà nhà 3D chi tiết, có màu, một toà một lúc; đưa vào Blender rồi pre-render hoặc chuyển thành Gaussian Splat — và tìm cách làm cho cả thành phố trên hàng trăm máy. Chỉ dùng vật liệu miễn phí/sạch bản quyền; ảnh Google/Apple chỉ làm tham chiếu.”

01Hai hướng đã thử

A · Sinh từng toà nhà bằng AI

Ảnh + tham chiếu Apple/Google + OSM → mô hình image-to-3D (TRELLIS.2 / Pixal3D) → GLB có texture → LOD → Blender. Đã chạy đầu-cuối trên toà nhà thật. Kết quả: dùng được cho một vật thể đơn lẻ; ở quy mô lớn cho ra hướng/tỉ lệ tuỳ tiện, geometry mỏng/thoái hoá, và mỗi toà là một job GPU riêng.

B · Tái dựng từ dữ liệu đo

LiDAR USGS 3DEP + màu ảnh NAIP + footprint OSM → một mesh/splat liền mạch phủ hàng nghìn toà cùng lúc. Kết quả: liền mạch, nhận diện được, sạch bản quyền, không floater. Các mục 02+ nói về hướng này.

Kết quả hướng A — TRELLIS.2 / Pixal3D (ảnh → 3D)

Một ảnh tham chiếu → một GLB mesh có texture (~1 triệu tam giác mỗi cái), chạy trên GPU Vast thuê. Các output dưới đây render tươi bằng hardware WebGPU.

Ảnh input
Input — một ảnh chụp toà tháp kính RangerOne.
Output TRELLIS cho toà tháp
Output — mesh có texture (0,74×0,93×0,78, ~970k tris). Mặt kính đọc được, nhưng geometry méo + chảy; chỉ dựng được phía đã chụp.
Output TRELLIS toà nhà cổ điển
Landmark cổ điển (test riêng) — mái vòm, tháp, chi tiết cửa sổ dựng sạch. Một toà nhà đặc trưng đơn lẻ là nơi phương pháp chạy tốt nhất.
Output TRELLIS từ ảnh hàng không
Từ ảnh hàng không — output là relief phẳng mỏng (0,96×0,87×0,11), billboard chứ không phải khối 3D. Ảnh hàng không không có trục "lên" chuẩn.

Cả hai hướng đều nặng AI — khác nhau ở chỗ AI ra tay. Sinh geometry từ số 0 là nơi chất lượng sụp ở quy mô lớn; còn nâng cấp + phủ vật liệu lên geometry thật là nơi nó trụ được.

02Nền dữ liệu — một khu, đo đầy đủ

Mọi thứ bắt đầu từ ba nguồn miễn phí, sạch thương mại cho khu RangerOne (Arlington, TX): LiDAR USGS 3DEP (điểm 3D thật), ảnh hàng không NAIP của USDA (màu), và footprint OpenStreetMap (2.722 toà). Không một pixel Google/Apple nào chạm vào kết quả — chúng chỉ là tham chiếu.

03Từ đám điểm thành một thế giới đặc, liền mạch

Đầu tiên chúng ta thử biến môi trường thành Gaussian Splat (cùng chất liệu với hero). Qua bốn lần retrain, splat cứ kéo nhoè toà nhà thành vệt đứng — không phải lỗi tinh chỉnh mà là trần dữ liệu: LiDAR hàng không 2018 dày ở mái/mặt đất nhưng yếu ở tường, nên các gaussian trôi tự do không có gì để bám.

Splat môi trường, góc xiên rộng
Môi trường đã train, dưới dạng Gaussian Splat — cả khu render từ env3.csplod (2,6M gaussian, WebGPU 3DGS): lòng chảo sân vận động, địa hình, cây, sông.
Splat môi trường cận cảnh
Cận cảnh — gaussian mềm, thể tích (đúng chất splat). Toà nhà smear và floater trôi: LiDAR hàng không 2018 yếu ở tường nên gaussian không có gì để bám.
Splat môi trường sân vận động
Sân vận động ở 3D — đọc rõ, nhưng nước thành hố đen (LiDAR không phản xạ). Bốn lần retrain không sửa nổi smear — trần dữ liệu, không phải lỗi tinh chỉnh.

Lời giải là ngừng chống lại nó: mesh hoá LiDAR thành một bề mặt liền mạch (như địa hình Cesium). Bề mặt thì không thể trôi, nên vệt nhoè biến mất hoàn toàn — và các điểm đã sẵn màu hàng không nên mesh có texture miễn phí.

Xem trực tiếp — 3D tương tác ngay trên trình duyệt

Đây là mesh WebGPU thật, sinh từ LiDAR — không có geometry Google/Apple. Bề mặt liền mạch = không floater, nhận diện rõ sân vận động/đường/hồ/cây.

04Phần khó: mặt tiền (tường)

Chụp từ trên cao thấy mái và mặt đất nhưng gần như không thấy tường. Trên mesh LiDAR thô, toà nhà “tan chảy” (mái đổ thẳng xuống đất, không có mặt đứng). Cách đã dùng: lấy footprint OSM, lấy độ cao mái từ LiDAR, rồi đùn tường đứng giữa hai cái đó (City3D / LoD2).

Đùn tường mặt tiền trên mesh
Bù mặt tiền — đùn tường đứng từ footprint + độ cao mái LiDAR biến khối tan chảy thành toà nhà có cạnh thật. Riêng texture tường (bề mặt trông thế nào) là lựa chọn còn lại: lấy màu chủ đạo, dùng thủ tục, hoặc AI tổng hợp — vì hầu hết toà nhà không có ảnh tường thật.

05AI enhance — số đo

Đã thử enhance ảnh bằng AI (Gemini, Qwen-Image-Edit) trên các render trước khi train. Enhance từng góc nhìn riêng lẻ: splat train thành cháo, đo được PSNR ~9,5. Enhance một bề mặt 3D chung (bake texture) rồi render các góc nhất quán từ nó: PSNR ~22.

063D-tiles photoreal Google/Overture

Cũng đã dựng 3D-tiles photoreal của Google/Overture với hệ LOD streaming (giảm 90% dung lượng cho góc tổng quan).

3D-tiles photoreal của khu
3D-tiles photoreal của chính khu này.