Trình biên tập game phong cách Unity chạy trên WASM thuần
(raverie-us.github.io)- Một game engine nhẹ hướng đến việc tái hiện trải nghiệm của Macromedia/Adobe Flash trước đây
- Được thiết kế để hoạt động trên mọi nền tảng, với đích xuất duy nhất là WASM thuần
- Sản phẩm đầu ra không bao gồm file thực thi hay glue code, v.v.; không dùng Emscripten
- Danh sách import và export được định nghĩa rõ ràng trong PlatformCommunication.hpp
- Cấu trúc dễ triển khai trên bất kỳ nền tảng nào, bao gồm cả trình duyệt
Tổng quan
- Là một game engine nhẹ (light-weight), hướng đến việc tái hiện trải nghiệm của Macromedia/Adobe Flash trước đây
Kiến trúc
- Được xây dựng để chạy trên mọi nền tảng, với mục tiêu đích xuất duy nhất là WASM thuần
- Sản phẩm đầu ra không bao gồm file thực thi, glue code, v.v.; không sử dụng Emscripten
- Danh sách import và export được định nghĩa gọn gàng trong PlatformCommunication.hpp, nên có thể triển khai dễ dàng trên bất kỳ nền tảng nào, bao gồm cả trình duyệt
1 bình luận
Ý kiến trên Hacker News
Wow, đây là những người đã tạo ra Zero Engine phải không? Tôi từng dùng nó ở trại hè DigiPen từ rất lâu rồi, và lập trình bằng Zilch thật sự rất vui
Tôi còn làm cả một AI chơi bản clone Galaga. Vì vụ Unity lần này, tôi đã tự hỏi Zero giờ ra sao, nên rất háo hức khi có vẻ nó sẽ hồi sinh
Nhân tiện bổ sung một chút: trên một laptop cấu hình thấp rõ rệt có đồ họa tích hợp, nó chạy như một slideshow tuyệt đẹp khác
Tôi cũng thử trên chiếc Mate 20 Pro cũ, và nó trông như bị kẹt ở “Downloading runtime”. Có vẻ không phải do 4G chập chờn, nên tôi cắm USB vào laptop, mở
chrome://inspectđể kiểm tra tab thì thấy lỗiUncaught (in promise) Error: Needs OES_texture_float_linear to function. Dù sao thì việc có đáng làm một màn hình lỗi chỉ để báo rằng bạn không thể nghịch nó hay không lại là một câu hỏi mang tính triết họcTôi thích ý tưởng này. Nhưng GPU và trình duyệt của tôi đang khóc vì độ trễ, và nó trông như một slideshow ấn tượng
Sau vài lần thử, cuối cùng tôi mới chọn được quả cầu khởi đầu. Ban đầu tôi còn không chắc nó đã tải xong chưa. Tất nhiên tôi đang dùng Firefox trên Celeron 1.8GHz, GPU tích hợp, RAM 8GB, nên còn xa mới gọi là cấu hình cao
Vì đây là việc port một game engine native sang WASM, vấn đề nằm ở mã giới hạn tốc độ khung hình không hợp với API timing của trình duyệt: https://raverie-us.github.io/raverie-engine/
Đoạn “engine của chúng tôi có một tính năng độc đáo gọi là Spaces, cho phép khởi tạo các world/level riêng biệt” theo tôi trông giống hệt những gì engine Godot làm[1]
Engine đó cũng có target trình duyệt (WASM). [1]: https://godotengine.org/
Có vẻ đây không phải ưu tiên cao của dự án. Tôi thử sơ qua thì có vẻ chạy được :), nhưng chậm hơn chạy native
Tôi tự hỏi liệu có luồng phát triển WASM nào cho phép Web API của trình duyệt và WASM thuần tương tác với nhau mà không cần tầng JS, hoặc với chi phí thấp hay không
Thỉnh thoảng tôi xem https://github.com/WebAssembly/proposals và thấy rất rối. Đề xuất import type có vẻ còn cách nhiều năm nữa, đề xuất GC gần như hoàn tất thì dành cho ngôn ngữ GC chứ dường như không dành cho trình duyệt↔WASM. Component model có vẻ xa với use case trình duyệt, JS String Builtins giúp chuỗi JS nhanh hơn nhưng không phải DOM. Tích hợp mô-đun ECMAScript biến mô-đun WASM thành ES module, nhưng Web API không phải ES module nên không giúp được gì. Nhìn các cuộc trao đổi của những người đóng góp, đôi lúc có vẻ việc cung cấp tính năng này không phải ưu tiên cũng chẳng nằm trong kế hoạch; với đa số, WASI và component model cho các mục đích như cloud, mã hóa có vẻ quan trọng hơn
Nhưng như bạn nói, có vẻ đó không phải ưu tiên của họ. Hy vọng một ngày nào đó sẽ làm được
Nếu import toàn bộ các Web API liên quan, bạn có thể truyền nguyên các đối tượng JS giữa các lệnh gọi API riêng lẻ, nên gần như không cần JS trung gian. Thực tế JS chỉ cần thiết lúc khởi tạo mô-đun WASM ban đầu
Dự án rất hay. Có cách nào phóng to UI trên màn hình độ phân giải cao không?
Trên màn hình 2:1, font chữ bị răng cưa. Nếu đặt zoom trình duyệt ở 50%, UI sắc nét hơn, nhưng mọi thứ lại quá nhỏ đến mức khó dùng
window.innerWidth * window.devicePixelRatio, chiều cao thànhwindow.innerHeight * window.devicePixelRatioSau đó dùng CSS để phóng tối đa canvas lên màn hình là được
Như vậy sẽ rẻ hơn về tài nguyên (bộ nhớ, mạng, CPU), dễ hỗ trợ accessibility hơn, và render cũng dễ hơn
Trevor! Tôi thật sự thích môn tự chọn CS ở DigiPen về thiết kế ngôn ngữ lập trình thông qua ngữ pháp
Khá nhiều sinh viên từng được dạy hiện đang làm ở Minecraft. Khi thiết kế API scripting cho Minecraft hiện nay, tôi đang tận dụng những nền tảng đã học khi đó và rất nhiều nội dung từ thời DigiPen. Rất vui khi thấy bạn vẫn đang làm những thứ tuyệt vời
Tôi cũng rất muốn xem giao diện scripting mà bạn đang làm. Trước đây tôi đã làm rất nhiều mod Minecraft, và luôn muốn có một dạng scripting động nào đó
Thật sự rất tuyệt. Rất vui khi thấy một sản phẩm dựa trên WASM thuần trong lĩnh vực này. Tuy vậy trên M1 Mac Pro của tôi nó khá giật
Tôi có một câu hỏi: cái này có chạy được trên NES không? Máy của tôi là mẫu nạp băng phía trước đã tân trang, linh kiện hầu hết là nguyên bản, nhưng tôi có gắn thêm ít RAM
Tôi dán nó lên phía trên bằng súng bắn keo, sơn vỏ màu đỏ rồi gắn thêm vài món đồ chơi lính
Chỉ mở cảnh quả bóng mặc định thôi mà nó đã đánh rất mạnh vào Radeon Pro 560X của tôi trong môi trường gần 4K
Chỉ xoay camera thôi cũng khiến tốc độ khung hình rất thấp. Có ai biết liệu có thể có vấn đề tối ưu WebGL không?
Vì đây là việc port một game engine native sang WASM, vấn đề nằm ở mã giới hạn tốc độ khung hình không hợp với API timing của trình duyệt: https://raverie-us.github.io/raverie-engine/