
Dạo này lướt mạng, đi đâu cũng thấy anh em khoe dùng AI generator để tạo map, vẽ background mượt như Sunsilk chỉ bằng vài câu prompt. Nhưng mà thú thật, mấy trò mì ăn liền đó thỉnh thoảng lại đẻ ra mấy cái dị tật đ*o chịu nổi, sửa còn cực hơn tự làm. Nay mò lên Hacker News, vớ được bài của lão Felix Turner chễm chệ 475 upvotes về trò "Building a Procedural Hex Map with Wave Function Collapse". Đọc xong tự nhiên thấy mấy thuật toán "chạy bằng logic thuần" nó vẫn ở một cái tầm gì đó rất ma giáo anh em ạ.
Cho mấy đồng đạo nào tối cổ chưa biết, Wave Function Collapse (WFC) không phải là thuyết lượng tử cao siêu gì đâu. Nó là một cái thuật toán sinh map (procedural generation) cực kỳ bá đạo, thường được chuộng trong giới làm game indie.
Hiểu nôm na thế này: Các ông định nghĩa các quy tắc rõ ràng (ví dụ: gạch cỏ không được nằm trực tiếp cạnh gạch dung nham, sông thì phải nối với sông). Sau đó, ném cho nó một mớ tiles, và nó sẽ từ từ tính toán, loại trừ các khả năng (collapse) như chơi Sudoku để lấp đầy bản đồ mà không bị "bể" logic.
Làm WFC trên lưới vuông (grid) bình thường đã đủ cho não anh em nhảy số rồi, đằng này tác giả còn chơi lớn làm trên Hex Map (lưới lục giác). Chơi hệ lục giác thì xịn thật, vì khoảng cách di chuyển giữa các ô đều nhau, nhìn tự nhiên hơn. Nhưng bù lại, số lượng cạnh và hàng xóm của một ô tăng lên, đồng nghĩa với việc code check logic ràng buộc sẽ dễ thành một đống bùi nhùi nếu các ông không tổ chức data structure đàng hoàng. Lão Felix đã bóc tách từng bước: từ việc định nghĩa tile, set socket (khớp nối) cho từng cạnh lục giác, đến việc xử lý backtracking khi thuật toán lỡ đi vào ngõ cụt. Khá là nể!
Dạo qua một vòng các luồng tranh luận, thấy anh em dev chia phe combat cũng gắt lắm:
Tóm cái váy lại, vụ này là một ví dụ điển hình của việc hiểu sâu về thuật toán. Giữa cái thời buổi mà ai cũng đè đầu cưỡi cổ API để gen đủ thứ trên đời, thì việc ngồi cày một cái logic thuật toán cốt lõi thế này giúp não mình bớt "phẳng" đi rất nhiều.
Chưa kể nếu anh em đang làm game hoặc app cần sinh data ngẫu nhiên nhưng phải hợp logic, thì WFC là vũ khí tối thượng. Code ngon rồi, đóng gói lại ném lên một con cloud vps nào đấy làm backend sinh map tự động cho user, khéo lại kiếm được bát phở mỗi ngày chứ đùa.
Nguồn hóng hớt: Building a Procedural Hex Map with Wave Function Collapse
Bỏ qua mấy trò AI gen map lỗi tùm lum đi, xem cao nhân Hacker News múa thuật toán Wave Function Collapse tạo bản đồ Hexagon mượt như Sunsilk đây này.