Editor Game Bergaya Unity yang Berjalan di WASM Murni
(raverie-us.github.io)- Engine game ringan yang bertujuan menghidupkan kembali pengalaman Macromedia/Adobe Flash di masa lalu
- Dirancang agar berjalan di semua platform, dengan satu-satunya target keluaran berupa WASM murni
- Keluaran tidak menyertakan file executable, glue code, dan sejenisnya, serta tidak menggunakan Emscripten
- Daftar import dan export didefinisikan dengan jelas di PlatformCommunication.hpp
- Struktur yang mudah diimplementasikan di platform apa pun, termasuk browser
Gambaran Umum
- Sebagai engine game ringan (light-weight), bertujuan mereplikasi pengalaman Macromedia/Adobe Flash di masa lalu
Arsitektur
- Dibuat agar dapat berjalan di platform apa pun, dengan WASM murni sebagai satu-satunya target keluaran
- Keluaran tidak menyertakan file executable, glue code, dan sejenisnya, serta tidak menggunakan Emscripten
- Daftar import dan export didefinisikan dengan rapi di PlatformCommunication.hpp, sehingga mudah diimplementasikan di platform apa pun termasuk browser
1 komentar
Komentar Hacker News
Wah, ini orang-orang yang membuat Zero Engine, ya? Saya pernah memakainya di kamp musim panas DigiPen dulu, dan memprogram dengan Zilch benar-benar menyenangkan
Saya juga membuat AI yang memainkan klon Galaga. Karena kisruh Unity ini, saya sempat penasaran apa kabar Zero, dan saya sangat antusias karena sepertinya akan hidup kembali
Sebagai tambahan informasi, di laptop low-end sungguhan dengan grafis terintegrasi, ini berjalan seperti satu lagi slideshow keren
Saya juga mencobanya di Mate 20 Pro lama, dan terlihat seperti berhenti di “Downloading runtime”. Sepertinya bukan karena 4G yang tidak stabil, jadi saya membuka
chrome://inspectdi laptop lewat USB untuk memeriksa tab, dan muncul errorUncaught (in promise) Error: Needs OES_texture_float_linear to function. Ini memang jadi pertanyaan filosofis apakah layak membuat layar error hanya untuk menampilkan pesan bahwa toh saya tidak bisa memainkannyaSaya suka konsepnya. Namun GPU dan browser saya menangis karena latensi, dan ini terlihat seperti slideshow yang mengesankan
Setelah beberapa kali mencoba, akhirnya saya bisa memilih bola awal. Awalnya saya bahkan tidak yakin apakah loading sudah selesai. Tentu saja saya memakai Firefox di Celeron 1,8GHz, GPU terintegrasi, dan RAM 8GB, jadi jauh dari spesifikasi tinggi
Karena ini adalah porting game engine native ke WASM, masalahnya ada pada kode pembatas frame rate yang tidak cocok dengan timing API browser: https://raverie-us.github.io/raverie-engine/
Bagian “engine kami memiliki fitur unik bernama Spaces, dan bisa menginstansiasi world/level terpisah” menurut saya terlihat persis seperti yang dilakukan engine Godot[1]
Engine itu juga punya target browser (WASM). [1]: https://godotengine.org/
Sepertinya ini bukan prioritas tinggi dalam proyek. Setelah saya uji sedikit, tampaknya memang berjalan :), tetapi lebih lambat daripada menjalankan native
Saya penasaran apakah ada alur pengembangan WASM yang memungkinkan Web API browser dan WASM murni berinteraksi tanpa lapisan JS, atau dengan biaya rendah
Sesekali saya melihat https://github.com/WebAssembly/proposals dan itu sangat membingungkan. Proposal type imports tampaknya masih bertahun-tahun lagi, sedangkan proposal GC yang hampir selesai tampaknya untuk bahasa GC, bukan untuk browser↔WASM. Component model terlihat jauh dari use case browser, dan JS String Builtins mempercepat string JS, bukan DOM. Integrasi modul ECMAScript mengubah modul WASM menjadi modul ES, tetapi Web API bukan modul ES, jadi tidak membantu. Dari percakapan para kontributor, kadang terlihat bahwa penyediaan fitur seperti ini bukan prioritas dan bahkan tidak masuk rencana; bagi kebanyakan orang, WASI dan component model untuk penggunaan seperti cloud dan kriptografi tampaknya lebih penting
Namun seperti yang Anda katakan, tampaknya itu bukan prioritas mereka. Semoga suatu hari bisa terwujud
Jika semua Web API terkait diimpor, objek JS bisa diteruskan apa adanya di antara pemanggilan API individual, sehingga hampir tidak perlu JS perantara. Dalam praktiknya, JS hanya diperlukan saat menginisialisasi modul WASM pertama kali
Proyek yang keren. Apakah ada cara memperbesar UI di display beresolusi tinggi?
Pada display 2:1, font terlihat bergerigi. Jika zoom browser saya set ke 50%, UI menjadi tajam, tetapi semuanya jadi terlalu kecil sehingga sulit dipakai
window.innerWidth * window.devicePixelRatio, dan tingginya kewindow.innerHeight * window.devicePixelRatioSetelah itu, maksimalkan canvas ke layar dengan CSS
Dari sisi resource (memori, jaringan, CPU) seharusnya lebih murah, lebih mudah menangani aksesibilitas, dan rendering juga lebih mudah
Trevor! Saya sangat menyukai mata kuliah pilihan CS di DigiPen yang membahas desain bahasa pemrograman lewat tata bahasa
Banyak dari mahasiswa yang Anda ajar sekarang bekerja di Minecraft. Saat merancang Minecraft scripting API sekarang, saya memanfaatkan dasar-dasar yang saya pelajari saat itu dan banyak hal dari masa DigiPen. Senang melihat Anda masih berkarya dengan keren
Saya juga benar-benar ingin melihat scripting interface yang sedang Anda kerjakan. Dulu saya membuat sangat banyak mod Minecraft, dan selalu menginginkan suatu bentuk dynamic scripting
Benar-benar keren. Senang melihat produk berbasis WASM murni di bidang ini. Namun di M1 Mac Pro saya, ini cukup tersendat
Saya punya satu pertanyaan: apakah ini juga berjalan di NES? Model front-loading yang sudah direfurbish, sebagian besar komponennya asli, tapi saya menambahkan sedikit RAM
Saya menempelkannya di atas dengan lem tembak, mengecat casing-nya merah, lalu memasang beberapa mainan tentara
Bahkan hanya dengan membuka scene bola default, ini menghantam GPU sangat keras di Radeon Pro 560X dan lingkungan hampir 4K
Hanya memutar kamera saja membuat frame rate sangat rendah. Ada yang tahu apakah mungkin ada masalah optimasi WebGL?
Karena ini adalah porting game engine native ke WASM, masalahnya ada pada kode pembatas frame rate yang tidak cocok dengan timing API browser: https://raverie-us.github.io/raverie-engine/