เอดิเตอร์เกมสไตล์ Unity ที่รันบน WASM แบบล้วน ๆ
(raverie-us.github.io)- เอนจินเกมน้ำหนักเบาที่มีเป้าหมายเพื่อรื้อฟื้นประสบการณ์ของ Macromedia/Adobe Flash ในอดีต
- ออกแบบมาให้ทำงานได้บนทุกแพลตฟอร์ม โดยมีเป้าหมายการส่งออกเพียงอย่างเดียวคือ WASM แบบล้วน ๆ
- ไฟล์ผลลัพธ์ไม่มีไฟล์รันหรือโค้ด glue รวมอยู่ และ ไม่ใช้ Emscripten
- รายการ import และ export ถูกกำหนดไว้อย่างชัดเจนใน PlatformCommunication.hpp
- เป็นโครงสร้างที่สามารถนำไปใช้งานได้ง่ายบนทุกแพลตฟอร์ม รวมถึงเบราว์เซอร์
ภาพรวม
- เอนจินเกมแบบ น้ำหนักเบา (light-weight) ที่มีเป้าหมายเพื่อจำลองประสบการณ์ของ Macromedia/Adobe Flash ในอดีต
สถาปัตยกรรม
- ถูกสร้างมาให้รันได้บนทุกแพลตฟอร์ม โดยตั้งเป้าหมายการส่งออกเพียงอย่างเดียวเป็น WASM แบบล้วน ๆ
- ไฟล์ผลลัพธ์ไม่มีไฟล์รัน โค้ด glue ฯลฯ รวมอยู่ และ ไม่ใช้ Emscripten
- รายการ import และ export ถูกนิยามไว้อย่างเป็นระเบียบใน PlatformCommunication.hpp ทำให้นำไปใช้งานได้ง่ายบนทุกแพลตฟอร์ม รวมถึงเบราว์เซอร์
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ว้าว คนที่สร้าง Zero Engine นี่เองใช่ไหม? เคยลองใช้ตอนค่ายฤดูร้อนของ DigiPen นานมาแล้ว และการเขียนโปรแกรมด้วย Zilch สนุกมาก
ตอนนั้นยังทำ AI ที่เล่นโคลนของ Galaga ด้วย เลยสงสัยมาตลอดว่า Zero จะเป็นยังไงหลังดราม่า Unity ครั้งนี้ ตอนนี้ดูเหมือนมันอาจจะกลับมาอีกครั้ง น่าตื่นเต้นมาก
ขอเสริมไว้อีกอย่าง สำหรับโน้ตบุ๊กสเปกต่ำแบบชัดเจนที่ใช้กราฟิกออนบอร์ด มันทำงานเหมือนเป็น สไลด์โชว์สุดเท่ อีกอันหนึ่ง
ลองบน Mate 20 Pro รุ่นเก่าด้วย และมันดูเหมือนค้างอยู่ที่ “Downloading runtime” ตอนแรกคิดว่าไม่น่าใช่เพราะ 4G ไม่เสถียร เลยเปิด
chrome://inspectผ่าน USB จากโน้ตบุ๊กเพื่อตรวจดูแท็บ แล้วเจอ error ว่าUncaught (in promise) Error: Needs OES_texture_float_linear to functionสุดท้ายก็เลยกลายเป็นคำถามเชิงปรัชญาว่า คุ้มไหมที่จะทำหน้าจอ error ขึ้นมาเพื่อบอกว่ามันเล่นไม่ได้อยู่ดีชอบแนวคิดนะ แต่ GPU กับเบราว์เซอร์ ของผมกำลังร้องไห้เพราะอาการหน่วง และมันดูเหมือนสไลด์โชว์ที่น่าประทับใจ
ผมต้องลองอยู่หลายครั้งกว่าจะเลือกทรงกลมเริ่มต้นได้ ตอนแรกยังไม่แน่ใจด้วยซ้ำว่าโหลดเสร็จหรือยัง แน่นอนว่าผมใช้ Firefox บน Celeron 1.8GHz, GPU ออนบอร์ด และ RAM 8GB ซึ่งก็ห่างไกลจากเครื่องแรงมาก
เพราะนี่คือการพอร์ตเกมเอนจินแบบเนทีฟมาลง WASM ปัญหาเลยอยู่ที่ โค้ดจำกัดเฟรมเรต ที่ทำงานไม่เข้ากับ browser timing API เท่าไร: https://raverie-us.github.io/raverie-engine/
ตรงที่บอกว่า “เอนจินของเรามีฟีเจอร์เฉพาะชื่อ Spaces ที่สามารถสร้างอินสแตนซ์ของ world/level แยกกันได้” ฟังดูสำหรับผมแล้วเหมือนกับสิ่งที่เอนจิน Godot ทำอยู่เป๊ะเลย[1]
เอนจินนั้นก็มีเป้าหมายสำหรับเบราว์เซอร์ (WASM) ด้วย [1]: https://godotengine.org/
ดูเหมือนจะยังไม่ใช่ลำดับความสำคัญสูงของโปรเจ็กต์ ผมลองทดสอบนิดหน่อยก็ดูเหมือนใช้งานได้ :), แต่ช้ากว่าการรันแบบเนทีฟ
ผมสงสัยว่ามี workflow การพัฒนา WASM แบบไหนไหมที่จะทำให้ Web API ของเบราว์เซอร์กับ WASM ล้วนๆ โต้ตอบกันได้โดยไม่มีชั้น JS หรือมีต้นทุนต่ำมาก
บางครั้งผมก็ไปดู https://github.com/WebAssembly/proposals แล้วรู้สึกสับสนมาก ข้อเสนอเรื่อง type imports ดูเหมือนยังอีกหลายปี ส่วนข้อเสนอ GC ที่เกือบเสร็จแล้วก็ดูเหมือนมีไว้สำหรับภาษา GC มากกว่าสำหรับเบราว์เซอร์↔WASM, component model ก็ดูห่างไกลจาก use case บนเบราว์เซอร์, JS String Builtins ก็แค่ทำให้สตริง JS เร็วขึ้นแต่ไม่ใช่ DOM, การรวมกับ ECMAScript modules ก็แค่ทำให้ WASM modules กลายเป็น ES modules แต่ Web API ไม่ใช่ ES modules เลยไม่ได้ช่วยอะไร จากบทสนทนาของผู้มีส่วนร่วม บางทีก็ดูเหมือนการเปิดฟีเจอร์แบบนี้ไม่ใช่ทั้งลำดับความสำคัญและไม่อยู่ในแผน และสำหรับคนส่วนใหญ่ WASI กับ component model สำหรับงานอย่างคลาวด์หรือคริปโตก็ดูจะสำคัญกว่า
แต่ก็อย่างที่คุณว่า ดูเหมือนมันไม่ใช่สิ่งสำคัญสำหรับพวกเขา หวังว่าสักวันจะเป็นไปได้
ถ้า import Web API ที่เกี่ยวข้องเข้ามาทั้งหมด ก็สามารถส่งต่อ JS objects ระหว่างการเรียก API แต่ละตัวได้โดยแทบไม่ต้องมี JS คั่นกลางเลย จริงๆ แล้ว JS ที่จำเป็นอาจมีแค่ตอนเริ่มต้นโมดูล WASM ครั้งแรกเท่านั้น
โปรเจ็กต์เจ๋งมาก มีวิธีขยาย UI บน จอความละเอียดสูง ไหม?
บนจอ 2:1 ฟอนต์ดูเป็นรอยหยัก ถ้าตั้ง browser zoom เป็น 50% UI จะคมขึ้น แต่ทุกอย่างก็เล็กเกินไปจนใช้งานยาก
window.innerWidth * window.devicePixelRatioและความสูงเป็นwindow.innerHeight * window.devicePixelRatioจากนั้นใช้ CSS ขยายแคนวาสให้เต็มหน้าจอ
มันน่าจะถูกกว่าทั้งในแง่ทรัพยากร (หน่วยความจำ, เครือข่าย, CPU), รองรับการเข้าถึงได้ง่ายกว่า และเรนเดอร์ก็ง่ายกว่าด้วย
Trevor! ผมชอบวิชาเลือก CS ที่ DigiPen มาก วิชาที่สอนเรื่อง การออกแบบภาษาโปรแกรม ผ่านไวยากรณ์
นักศึกษาที่คุณเคยสอนไปหลายคนตอนนี้ทำงานอยู่ที่ Minecraft ตอนนี้ผมกำลังออกแบบ scripting API ของ Minecraft และกำลังใช้พื้นฐานที่เรียนตอนนั้น รวมถึงหลายอย่างจากสมัย DigiPen อยู่เลย ดีใจที่ยังเห็นคุณทำสิ่งเจ๋งๆ อยู่เสมอ
แล้วก็อยากเห็นอินเทอร์เฟซสำหรับสคริปต์ที่คุณกำลังทำอยู่ด้วย เมื่อก่อนผมทำม็อด Minecraft เยอะมาก และอยากได้ dynamic scripting ในรูปแบบใดรูปแบบหนึ่งมาตลอด
เจ๋งจริงๆ ดีใจที่ได้เห็นผลิตภัณฑ์แนว WASM ล้วนๆ ในพื้นที่นี้ แต่บน M1 Mac Pro ของผมมันกระตุกพอสมควร
มีคำถามหนึ่งนะ อันนี้รันบน NES ได้ไหม? ของผมเป็นรุ่น front-loading ที่รีเฟอร์บิชมาแล้ว ชิ้นส่วนส่วนใหญ่ยังเป็นของเดิม แต่เพิ่ม RAM เข้าไปหน่อย
ด้านบนติดด้วยกาวร้อน แล้วก็พ่นเคสเป็นสีแดงพร้อมติดตุ๊กตาทหารไว้สองสามตัว
แค่เปิดฉากโรงงานเริ่มต้นก็ใช้ GPU หนักมากบน Radeon Pro 560X ในสภาพแวดล้อมเกือบ 4K
แค่หมุนกล้องก็ทำให้เฟรมเรตตกหนักแล้ว มีใครพอรู้ไหมว่าอาจเป็นปัญหาด้านการปรับแต่ง WebGL หรือเปล่า?
เพราะนี่คือการพอร์ตเกมเอนจินแบบเนทีฟมาลง WASM ปัญหาเลยอยู่ที่ โค้ดจำกัดเฟรมเรต ที่ทำงานไม่เข้ากับ browser timing API เท่าไร: https://raverie-us.github.io/raverie-engine/