2 คะแนน โดย GN⁺ 2023-09-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เอนจินเกมน้ำหนักเบาที่มีเป้าหมายเพื่อรื้อฟื้นประสบการณ์ของ Macromedia/Adobe Flash ในอดีต
  • ออกแบบมาให้ทำงานได้บนทุกแพลตฟอร์ม โดยมีเป้าหมายการส่งออกเพียงอย่างเดียวคือ WASM แบบล้วน ๆ
  • ไฟล์ผลลัพธ์ไม่มีไฟล์รันหรือโค้ด glue รวมอยู่ และ ไม่ใช้ Emscripten
  • รายการ import และ export ถูกกำหนดไว้อย่างชัดเจนใน PlatformCommunication.hpp
  • เป็นโครงสร้างที่สามารถนำไปใช้งานได้ง่ายบนทุกแพลตฟอร์ม รวมถึงเบราว์เซอร์

ภาพรวม

  • เอนจินเกมแบบ น้ำหนักเบา (light-weight) ที่มีเป้าหมายเพื่อจำลองประสบการณ์ของ Macromedia/Adobe Flash ในอดีต

สถาปัตยกรรม

  • ถูกสร้างมาให้รันได้บนทุกแพลตฟอร์ม โดยตั้งเป้าหมายการส่งออกเพียงอย่างเดียวเป็น WASM แบบล้วน ๆ
  • ไฟล์ผลลัพธ์ไม่มีไฟล์รัน โค้ด glue ฯลฯ รวมอยู่ และ ไม่ใช้ Emscripten
  • รายการ import และ export ถูกนิยามไว้อย่างเป็นระเบียบใน PlatformCommunication.hpp ทำให้นำไปใช้งานได้ง่ายบนทุกแพลตฟอร์ม รวมถึงเบราว์เซอร์

1 ความคิดเห็น

 
GN⁺ 2023-09-27
ความคิดเห็นจาก Hacker News
  • ว้าว คนที่สร้าง Zero Engine นี่เองใช่ไหม? เคยลองใช้ตอนค่ายฤดูร้อนของ DigiPen นานมาแล้ว และการเขียนโปรแกรมด้วย Zilch สนุกมาก
    ตอนนั้นยังทำ AI ที่เล่นโคลนของ Galaga ด้วย เลยสงสัยมาตลอดว่า Zero จะเป็นยังไงหลังดราม่า Unity ครั้งนี้ ตอนนี้ดูเหมือนมันอาจจะกลับมาอีกครั้ง น่าตื่นเต้นมาก

    • เจ๋งมาก! Zilch เป็นสิ่งที่ผมตั้งใจสร้างและรักมาก ได้ยินแบบนั้นแล้วดีใจจริงๆ :D
  • ขอเสริมไว้อีกอย่าง สำหรับโน้ตบุ๊กสเปกต่ำแบบชัดเจนที่ใช้กราฟิกออนบอร์ด มันทำงานเหมือนเป็น สไลด์โชว์สุดเท่ อีกอันหนึ่ง
    ลองบน 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 ซึ่งก็ห่างไกลจากเครื่องแรงมาก

    • สงสัยว่าใน Chrome จะทำงานดีกว่าไหม ดูเหมือนหลายคนจะเจอ ปัญหากับ Firefox ผมจะพยายามทดสอบกับ Firefox เป็นประจำมากขึ้นในอนาคต
    • ถ้ายังลองใหม่ได้ เพิ่งปล่อยการแก้ไขที่ช่วยเพิ่มประสิทธิภาพบนบางเครื่องอย่างมาก
      เพราะนี่คือการพอร์ตเกมเอนจินแบบเนทีฟมาลง WASM ปัญหาเลยอยู่ที่ โค้ดจำกัดเฟรมเรต ที่ทำงานไม่เข้ากับ browser timing API เท่าไร: https://raverie-us.github.io/raverie-engine/
    • ผมก็เจอเหมือนกันเป๊ะบน M2 Pro และก็ใช้ Firefox เหมือนกัน
    • เขายังผลิต Celeron กันอยู่อีกเหรอ?
  • ตรงที่บอกว่า “เอนจินของเรามีฟีเจอร์เฉพาะชื่อ Spaces ที่สามารถสร้างอินสแตนซ์ของ world/level แยกกันได้” ฟังดูสำหรับผมแล้วเหมือนกับสิ่งที่เอนจิน Godot ทำอยู่เป๊ะเลย[1]
    เอนจินนั้นก็มีเป้าหมายสำหรับเบราว์เซอร์ (WASM) ด้วย [1]: https://godotengine.org/

    • ไม่ใช่แค่มีเป้าหมาย WASM แต่ยังมีเวอร์ชันเว็บด้วย: https://editor.godotengine.org/
      ดูเหมือนจะยังไม่ใช่ลำดับความสำคัญสูงของโปรเจ็กต์ ผมลองทดสอบนิดหน่อยก็ดูเหมือนใช้งานได้ :), แต่ช้ากว่าการรันแบบเนทีฟ
    • ผมก็ยังไม่ค่อยเข้าใจว่ามันต่างจาก scene ของ Unity ยังไง
  • ผมสงสัยว่ามี 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 สำหรับงานอย่างคลาวด์หรือคริปโตก็ดูจะสำคัญกว่า

    • ผมก็อยากได้แบบนี้มากเหมือนกัน อยากเห็นหน้าเว็บที่เป็นแค่ WASM แล้ว “เบราว์เซอร์” เป็น เบราว์เซอร์ wasm ล้วนๆ ที่ให้ platform imports แบบ WASI
      แต่ก็อย่างที่คุณว่า ดูเหมือนมันไม่ใช่สิ่งสำคัญสำหรับพวกเขา หวังว่าสักวันจะเป็นไปได้
    • ด้วย reference types ในทางเทคนิคตอนนี้ก็เรียก browser API ได้โดยตรงอยู่แล้ว เพราะ WASM สามารถรับส่ง JavaScript objects ได้
      ถ้า import Web API ที่เกี่ยวข้องเข้ามาทั้งหมด ก็สามารถส่งต่อ JS objects ระหว่างการเรียก API แต่ละตัวได้โดยแทบไม่ต้องมี JS คั่นกลางเลย จริงๆ แล้ว JS ที่จำเป็นอาจมีแค่ตอนเริ่มต้นโมดูล WASM ครั้งแรกเท่านั้น
    • ปัญหาของ WASM ล้วนๆ คือมันอาจนำไปสู่เว็บปิดที่มี โฆษณาที่บล็อกไม่ได้
    • อย่างน้อยบางส่วน ผมคิดว่านั่นคือทิศทางที่ ข้อเสนอ GC กำลังมุ่งไป
  • โปรเจ็กต์เจ๋งมาก มีวิธีขยาย UI บน จอความละเอียดสูง ไหม?
    บนจอ 2:1 ฟอนต์ดูเป็นรอยหยัก ถ้าตั้ง browser zoom เป็น 50% UI จะคมขึ้น แต่ทุกอย่างก็เล็กเกินไปจนใช้งานยาก

    • ถึง OP: วิธีแก้คือกำหนดความกว้างแคนวาสเป็น window.innerWidth * window.devicePixelRatio และความสูงเป็น window.innerHeight * window.devicePixelRatio
      จากนั้นใช้ CSS ขยายแคนวาสให้เต็มหน้าจอ
    • ผมไม่เข้าใจว่าทำไมถึงไม่ใช้ เอนจินเรนเดอร์แบบเนทีฟของเบราว์เซอร์ สำหรับ UI อย่างน้อยก็ SVG ก็ได้
      มันน่าจะถูกกว่าทั้งในแง่ทรัพยากร (หน่วยความจำ, เครือข่าย, CPU), รองรับการเข้าถึงได้ง่ายกว่า และเรนเดอร์ก็ง่ายกว่าด้วย
  • Trevor! ผมชอบวิชาเลือก CS ที่ DigiPen มาก วิชาที่สอนเรื่อง การออกแบบภาษาโปรแกรม ผ่านไวยากรณ์
    นักศึกษาที่คุณเคยสอนไปหลายคนตอนนี้ทำงานอยู่ที่ Minecraft ตอนนี้ผมกำลังออกแบบ scripting API ของ Minecraft และกำลังใช้พื้นฐานที่เรียนตอนนั้น รวมถึงหลายอย่างจากสมัย DigiPen อยู่เลย ดีใจที่ยังเห็นคุณทำสิ่งเจ๋งๆ อยู่เสมอ

    • ดีใจมากที่มันช่วยได้! สักวันผมคงได้กลับไป สอนหนังสือ อีก ;)
      แล้วก็อยากเห็นอินเทอร์เฟซสำหรับสคริปต์ที่คุณกำลังทำอยู่ด้วย เมื่อก่อนผมทำม็อด Minecraft เยอะมาก และอยากได้ dynamic scripting ในรูปแบบใดรูปแบบหนึ่งมาตลอด
  • เจ๋งจริงๆ ดีใจที่ได้เห็นผลิตภัณฑ์แนว WASM ล้วนๆ ในพื้นที่นี้ แต่บน M1 Mac Pro ของผมมันกระตุกพอสมควร

  • มีคำถามหนึ่งนะ อันนี้รันบน NES ได้ไหม? ของผมเป็นรุ่น front-loading ที่รีเฟอร์บิชมาแล้ว ชิ้นส่วนส่วนใหญ่ยังเป็นของเดิม แต่เพิ่ม RAM เข้าไปหน่อย
    ด้านบนติดด้วยกาวร้อน แล้วก็พ่นเคสเป็นสีแดงพร้อมติดตุ๊กตาทหารไว้สองสามตัว

    • ทำไมไอเดียทำตัวแปลง WASM > NES ถึงฟังดูสนุกจริงจังขนาดนี้นะ…
  • แค่เปิดฉากโรงงานเริ่มต้นก็ใช้ GPU หนักมากบน Radeon Pro 560X ในสภาพแวดล้อมเกือบ 4K
    แค่หมุนกล้องก็ทำให้เฟรมเรตตกหนักแล้ว มีใครพอรู้ไหมว่าอาจเป็นปัญหาด้านการปรับแต่ง WebGL หรือเปล่า?

    • บน Intel HD Graphics 620 ของผมทำงานลื่นมาก เป็นกราฟิกออนบอร์ด Intel รุ่น 7 ที่ทั้งเก่าและช้า แต่พอดูแค่ฉากโรงงานเริ่มต้นแล้วมันลื่นมากบนเครื่องผมจนน่าประหลาดใจ ผมใช้ Chrome
    • ถ้ายังลองใหม่ได้ เพิ่งปล่อยการแก้ไขที่ช่วยเพิ่มประสิทธิภาพบนบางเครื่องอย่างมาก
      เพราะนี่คือการพอร์ตเกมเอนจินแบบเนทีฟมาลง WASM ปัญหาเลยอยู่ที่ โค้ดจำกัดเฟรมเรต ที่ทำงานไม่เข้ากับ browser timing API เท่าไร: https://raverie-us.github.io/raverie-engine/
    • ฟังดูเหมือนมันอาจไม่ได้ใช้การ์ดจอแยก คุณลองเดโม WebGL อื่นๆ แล้วทำงานปกติไหม?