Voxel Space
Demo web: Engine Voxel Space
Lịch sử
- Năm 1992, CPU chậm hơn khoảng 1000 lần so với hiện tại, và việc tăng tốc GPU khi đó chưa phổ biến hoặc rất đắt đỏ.
- Trò chơi 3D được tính toán hoàn toàn bởi CPU, và engine render chỉ vẽ các đa giác đơn sắc.
- Năm 1991 game Gunship 2000 của MicroProse và năm 1992 game Comanche của NovaLogic đã được phát hành.
- Comanche khi đó cung cấp đồ họa đáng ngạc nhiên, thể hiện texture, shading và shadow.
Thuật toán render
- Comanche sử dụng công nghệ Voxel Space, dựa trên ý tưởng tương tự như ray casting.
- Engine Voxel Space là engine 2.5D, không cung cấp toàn bộ mức tự do mà một engine 3D tiêu chuẩn có thể có.
Bản đồ độ cao và bản đồ màu
- Cách dễ nhất để biểu diễn địa hình là dùng bản đồ độ cao và bản đồ màu.
- Game Comanche dùng bản đồ độ cao và bản đồ màu kích thước 1024 * 1024, mỗi phần tử 1 byte.
- Những bản đồ này tuần hoàn và không thể biểu diễn các công trình phức tạp, nhưng bản đồ màu đã bao gồm shading và shadow sẵn nên không cần tính toán ánh sáng trong quá trình render.
Thuật toán cơ bản
- Thuật toán render của một engine 3D rất đơn giản.
- Engine Voxel Space rasterize bản đồ độ cao và bản đồ màu để vẽ các đường thẳng đứng.
- Xóa màn hình, render từ sau ra trước để đảm bảo việc ẩn.
- Xác định các đường trên bản đồ theo khoảng cách quang học tính từ người quan sát.
- Rasterize các đường này theo số cột của màn hình.
- Lấy giá trị độ cao và màu của đoạn đường tương ứng trong bản đồ 2D.
- Thực hiện phép chiếu phối cảnh cho toạ độ độ cao.
- Dùng độ cao sau khi chiếu phối cảnh cùng màu đã lấy được để vẽ các đường thẳng đứng.
Thêm xoay
- Với thuật toán trên, có thể chỉ nhìn theo hướng bắc.
- Để nhìn theo các góc khác, cần vài dòng code để xoay toạ độ.
Tối ưu hiệu năng
- Có nhiều thủ thuật để cải thiện hiệu năng.
- Thay vì render từ sau ra trước, có thể render từ trước ra sau.
- Cần một y-buffer bổ sung để đảm bảo ẩn.
- Điều chỉnh mức độ chi tiết để render chi tiết nhiều hơn khi gần và ít hơn khi xa.
Liên kết
- Trang web demo dự án
- Giới thiệu engine địa hình Voxel
- Trang web cá nhân
Bản đồ
Giấy phép
- Phần mềm được cấp phép theo MIT.
- Công nghệ Voxel Space có thể vẫn còn được cấp bằng sáng chế tại một số quốc gia.
- Bản đồ màu và bản đồ độ cao được lấy ngược từ game Comanche và do đó không nằm trong giấy phép.
1 bình luận
Bình luận trên Hacker News
Tôi luôn nhớ về thời kỳ các thuật toán độc đáo, tinh gọn mang lại cảm giác như phép thuật. Khi tài nguyên phần cứng còn hạn chế, các nhà phát triển đã bù đắp bằng kỹ thuật mới và sự sáng tạo để phát triển trò chơi.
Có một video liên quan tới chương trình mars.com khá thú vị.
Cách kết xuất này rất thú vị nhưng khó được gọi là voxel vì không thể render bất kỳ thể tích nào. Đây thực sự là một triển khai rất gọn gàng của một renderer bản đồ chiều cao.
Có thể bài thảo luận năm 2020 hoặc 2017 đã được nhắc tới trong tiêu đề. Năm 2021 cũng đã có cuộc thảo luận về cùng một kho mã.
Khi mới bắt đầu học lập trình, tôi từng viết chương trình tạo heightmap địa hình bằng QBasic và render theo phong cách isometric. Đó là một trong những lý do khiến tôi tiếp tục đi theo con đường lập trình.
Tôi từng làm một game bằng Adventure Game Studio sử dụng kỹ thuật này. Phiên bản engine trước chưa được tối ưu cho kỹ thuật này, nhưng tôi sẽ cập nhật lên đây một lúc nào đó.
Trong hầu hết game hiện đại, núi thường trông rỗng; nhưng với cách này, núi trông rất đặc và vững chắc.
Tôi vẫn nhớ cảm giác khi chơi Comanche lần đầu tiên. Nó cho tôi cảm giác như đang ở tương lai, như trong một bộ phim.
Dự án dựng hình bằng phần mềm rất vui và rất hợp để làm vào cuối tuần. Tôi từng thử hiện thực hóa thuật toán tương tự trước đây, nhưng bản hiện tại thì hiệu năng tốt hơn nhiều và đơn giản hơn.
Tôi ước mình được sống trong một dòng thời gian thay thế, nơi GPU là voxel-based.