36 Câu lệnh, Một Thành phố Vô tận

Khám phá một thành phố vô tận thông qua 36 câu lệnh

  • 6 min read
36 Câu lệnh, Một Thành phố Vô tận
Khám phá một thành phố vô tận thông qua 36 câu lệnh

36 Prompt, Một Thành Phố Vô Tận

Thuật toán Wave Function Collapse biến các mảnh 3D do AI tạo ra thành một thành phố London vô tận và có thể khám phá.

Trong bài viết trước, một tác nhân (agent) đã kết nối hai Hugging Face Spaces để biến các prompt thành những tượng đài 3D. Lần này, chúng tôi tiến thêm một bước nữa: chuyện gì sẽ xảy ra nếu các tài nguyên được tạo ra không phải là điểm đến, mà là từ vựng cho một điều gì đó lớn lao hơn?

Kết quả là Infinite London: mỗi lần truy cập, một thành phố thời Victoria hoàn toàn mới sẽ được tạo ra một cách ngẫu nhiên từ 36 mảnh ghép 3D do AI tạo ra. Các con phố kết nối với nhau, những quảng trường vườn mở ra, tháp Big Ben thỉnh thoảng xuất hiện trên đường chân trời, và thế giới sẽ tiếp tục hiện ra mãi mãi khi bạn di chuyển bằng phím WASD.

👉 mishig/infinite-london

Việc tạo asset rất tốn kém. Thuật toán chính là chất nhân bản.

Công nghệ Text-to-3D rất chậm: mất vài phút cho mỗi asset trên một GPU dùng chung. Bạn không thể tạo ra cả một thành phố theo yêu cầu ngay lập tức. Nhưng bạn không cần làm thế. Bí quyết nằm ở một kỹ thuật cũ trong phát triển game: Wave Function Collapse (WFC). Đây là thuật toán lắp ghép các mảnh mô-đun thành những sắp xếp nhất quán vô tận bằng cách khớp các điểm nối cạnh, giống như cách giải Sudoku: mỗi ô bắt đầu là một sự chồng chất của tất cả các mảnh ghép có thể, và khi một ô được xác định, nó sẽ khiến các ô xung quanh “sụp đổ” (thu hẹp lựa chọn) theo.

WFC luôn có một nút thắt: ai đó phải tạo ra bộ mảnh ghép (tileset). Trước đây, người đó là một nghệ sĩ 3D. Giờ đây, đó là một vòng lặp prompt:

  1. Hình ảnh mảnh ghép: ideogram-ai/ideogram4 tạo ra mỗi mảnh ghép dưới dạng một mẫu kit game phối cảnh isometric trên nền đen. Một prompt cho mỗi mảnh.
  2. Lưới 3D (Meshes): microsoft/TRELLIS.2 tái tạo mỗi hình ảnh thành một file GLB có vân bề mặt, sau đó chúng tôi đơn giản hóa khoảng 12 lần để có thể kết xuất (render) hàng loạt trong trình duyệt.

Cả hai Space này đều được điều khiển từ đầu đến cuối bởi một agent đọc các thông số kỹ thuật trong agents.md.

Mọi Gradio Space trên Hub đều có nút Agents: bạn chỉ cần sao chép hướng dẫn trong agents.md trực tiếp vào agent lập trình của mình. Điểm mấu chốt ở đây là sự phân chia công việc: 36 lần tạo tốn kém, lưu vào bộ nhớ đệm một lần. Những thành phố vô tận, miễn phí, trong trình duyệt, mãi mãi. Chi phí biên để tạo ra một thế giới mới chỉ là một mã seed ngẫu nhiên.

Quy tắc cấu tạo (Ngữ pháp)

36 mảnh ghép tuân theo một quy tắc khớp nối đơn giản. Mỗi cạnh hoặc là vỉa hè hở hoặc là đường phố, và WFC chỉ đặt những mảnh ghép có các cạnh khớp nhau:

  • 10 mảnh mặt đất: quảng trường, công viên, chợ, đài phun nước, sân khấu ngoài trời, vườn tu viện.
  • 12 mảnh đường phố: đường thẳng, góc cua, ngã ba, ngã tư, cầu, vạch kẻ đường cho người đi bộ, trạm dừng xe buýt, đại lộ rợp bóng cây.
  • 9 mảnh tòa nhà: nhà liền kề kiểu Georgian, gạch kiểu Victorian, nhà phố trát vữa, quán pub ở góc phố, nhà kho bến cảng.
  • 3 công trình biểu tượng hiếm: Big Ben, mái vòm St Paul, cột tượng đài.
  • 2 điểm kết thúc đường: ngõ cụt có bốt điện thoại đỏ, bãi đỗ xe taxi đen.

Mỗi mảnh ghép là một file GLB có thể kiểm tra trên Hub. Dưới đây là mảnh bãi đỗ taxi đen vừa ra lò từ quy trình:

Đặt prompt như một nghệ sĩ thiết kế bộ kit game

Lần thử đầu tiên tạo bộ mảnh ghép đã thất bại theo một cách rất đáng để học hỏi. Việc đặt prompt cho những khung cảnh đẹp như tranh tạo ra những hình ảnh tuyệt vời nhưng khi tái tạo thành thế giới thì lại rời rạc: các bức tường nền trở thành các mặt phẳng lơ lửng, phần đế của hình ảnh làm rách lưới, và mọi ranh giới giữa các ô đều lộ rõ đường nối.

Cách khắc phục là đặt prompt như một nghệ sĩ thiết kế mô-đun thay vì một nhiếp ảnh gia: nền là những tấm phẳng, các tuyến đường chạy sát từ mép này sang mép kia, các tòa nhà đứng độc lập hoàn chỉnh cả bốn mặt, diện tích hình vuông hoàn hảo, không có phông nền. Vẫn dùng các mô hình đó, vẫn quy trình đó. Sự khác biệt giữa một mớ hỗn độn và một thành phố nằm hoàn toàn ở ngôn ngữ thiết kế của 36 prompt.

Trình hiển thị

Phần trình duyệt sử dụng three.js thuần túy, không cần bước build. Một vài chi tiết giúp thế giới cảm giác sống động hơn:

  • WFC vô tận chia theo phân đoạn (Chunked): Thế giới được giải trong các phân đoạn 8x8 ô xung quanh camera, được xác định bởi seed + tọa độ phân đoạn, vì vậy khi bạn đi ngược lại, bạn sẽ luôn tìm thấy những con phố cũ. Các phân đoạn ở xa sẽ bị loại bỏ; thế giới là vô tận theo mọi hướng.
  • Nhìn thấy ranh giới: Những ô chưa “sụp đổ” sẽ hiển thị dưới dạng các hình vuông nhấp nháy mờ, như một lớp sương mù xác suất sẽ hiện rõ thành kiến trúc khi bạn tiến lại gần. Nếu chạy nhanh về phía rìa, bạn có thể quan sát thành phố đang tự quyết định hình dáng của nó.
  • Không bao giờ đứng yên: Camera luôn trôi về phía trước; thao tác của bạn dùng để điều hướng.
  • Chia sẻ thế giới: Mỗi thế giới là một mã seed. Bạn chỉ cần nhấp vào, gửi liên kết, và người khác sẽ đứng chính xác tại vị trí London của bạn.

Trải nghiệm ngay

Hãy dạo quanh thành phố, nhấn phím R để tạo thế giới mới, hoặc dán liên kết agents.md vào agent lập trình của riêng bạn để tạo ra một thành phố hoàn toàn khác. Một chủ đề mới chỉ cách bạn 36 prompt.

👉 mishig/infinite-london · Các bộ sưu tập tương tự: Paris · Nhật Bản · Ai Cập

Recommended for You

Lolaby — Những bài hát ru được hỗ trợ bởi AI

Lolaby — Những bài hát ru được hỗ trợ bởi AI

Các bài hát ru được tạo ra bằng trí tuệ nhân tạo

Phân tích hiệu năng CUDA trong PyTorch (Phần 2)- Từ nn.Linear đến Fused MLP

Phân tích hiệu năng CUDA trong PyTorch (Phần 2)- Từ nn.Linear đến Fused MLP

Hướng dẫn phân tích hiệu năng CUDA trong PyTorch, chuyển đổi từ nn.Linear sang Fused MLP