3D + 2D: การทดสอบเอนจินกราฟิก WASM แบบข้ามแพลตฟอร์ม
(news.ycombinator.com)- ปัญหา การพอร์ตข้ามแพลตฟอร์ม ที่ Adobe พบระหว่างย้ายแอปขนาดใหญ่อย่าง Photoshop และ Acrobat ไปยังหลายสภาพแวดล้อม กลายเป็นจุดเริ่มต้นของการพัฒนา Renderlet
- Renderlet ตั้งเป้าเป็น เฟรมเวิร์กกราฟิก WASM ที่รันและฝังได้ทุกที่ โดยมุ่งทั้งความสะดวกในการพัฒนาแอปและการใช้ประโยชน์จาก GPU ในระดับต่ำ
- รันไทม์แบบเปิด Wander ให้ API 3D ระดับต่ำบน GPU และมีการทดลองเชื่อมต่อเข้ากับตัวเรนเดอร์เวกเตอร์ 2D โอเพนซอร์สของ Rive
- ปัจจุบันอยู่ในขั้น ก่อนโอเพนอัลฟา และมีแผนจะทำ Show HN หรือ Launch HN เมื่อคอมไพเลอร์และการผสานรวมกับแพลตฟอร์มพร้อมแล้ว
- เช่นเดียวกับที่ Unity ทำให้การพัฒนาเกมข้ามแพลตฟอร์มง่ายขึ้น Renderlet มุ่งเน้นการทำให้ แอปพลิเคชันด้านภาพ หลากหลายประเภทสามารถรันได้ง่ายขึ้นในหลายสภาพแวดล้อม
ปัญหาด้านการพกพาที่ Renderlet ต้องการแก้
- การทำให้แอปพลิเคชันขนาดใหญ่อย่าง Photoshop และ Acrobat ของ Adobe ทำงานได้บนเดสก์ท็อป เว็บ มือถือ และคลาวด์ เป็นความท้าทายใหญ่
- เวอร์ชันเว็บของ Lightroom และ Photoshop ผ่านเส้นทางยาวนานตั้งแต่ JavaScript, Google PNaCl, asm.js ไปจนถึง WebAssembly
- ต้องคิด สถาปัตยกรรม GPU ใหม่ให้เหมาะกับอุปกรณ์เป้าหมาย และยังต้องมีบิลด์แบบเธรดเดียว รวมถึงการสร้าง UI ใหม่บนพื้นฐานของ Web Components
- ปัจจุบันเว็บบิลด์ทำงานได้ดีแล้ว แต่กระบวนการนั้นใช้เวลาทำงานยาวนานถึง 10 ปี
- สแต็กกราฟิกยังคงเป็น คอขวดด้านการพกพา และ WebAssembly ถูกเลือกเป็นฐานที่สามารถรันและฝังได้ทุกที่ พร้อมให้ประสิทธิภาพที่จำเป็นสำหรับกราฟิกแบบเรียลไทม์
- Renderlet เน้นโครงสร้างที่สร้างโมดูลกราฟิกแบบบรรจุในตัวเองและเชื่อมต่อกัน เพื่อให้รันได้บนทุกสภาพแวดล้อมและภายในแอปใดก็ได้
- ผู้พัฒนาเข้าร่วม YC ในฐานะผู้ก่อตั้งเดี่ยว และได้พัฒนา Renderlet มาตลอด 6 เดือนที่ผ่านมา
การทดลองผสานรวม Rive Renderer
- หลังจาก Rive เปิดซอร์สเอนจินเวกเตอร์ 2D เป็นโอเพนซอร์ส ก็มีการทดลองว่า Rive Renderer สามารถรันบน GPU backend ของ Renderlet ได้หรือไม่
- Rive Renderer ประกอบด้วย 2D API ระดับสูงที่คล้ายกับ SVG
- Wander เป็นส่วนรันไทม์โอเพนซอร์สของ Renderlet และให้ 3D API ระดับต่ำบน GPU
- ผลการทำให้ใช้งานได้คือสามารถรันไลบรารี Rive Renderer บน GPU backend ของ Renderlet ได้ และทำให้แอป 3D สามารถใช้แบ็กเอนด์เวกเตอร์ 2D ได้ด้วย
- ดูตัวอย่างการทำงานได้ใน วิดีโอ Vimeo
- รายละเอียดทางเทคนิคสรุปไว้ที่ Using renderlet with rive-renderer
- โค้ดของ Wander ซึ่งเป็นรันไทม์ Wasm Renderer เปิดเผยไว้ที่ renderlet/wander
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ควรข้ามขั้น PAL แล้วไปที่ SetupRuntime ได้เลย นักพัฒนาที่ไม่ได้ทำกราฟิกมักไม่รู้เรื่องพวกนี้ และไม่ควรเพิ่มขั้นตอนที่ไม่จำเป็นใน API เนื่องจาก PAL ไม่ได้ถูกใช้ที่อื่น จึงควรใช้ WebGPU แทน (
IPalควรเป็นสมาชิกของIRuntimeและกำลังเตรียมถูกถอดออกในบริบทของ WebGPU)IPalเข้ากับIRuntimeและมีแผนถอดออกโปรเจ็กต์นี้อาจกลายเป็นทั้ง widget kit ที่ยอดเยี่ยมสำหรับสร้าง GUI ข้ามแพลตฟอร์ม และเป็น canvas ที่น่าทึ่งสำหรับโมเดลปฏิสัมพันธ์ โดยมีแบ็กเอนด์ C/C++ และเป้าหมาย WASM ที่สามารถสร้าง FFI ได้กับแทบทุกภาษา
อยากทราบแผนเกี่ยวกับการรองรับข้อความและฟอนต์ เอนจินกราฟิกบางตัวไม่รองรับข้อความในทุกแบบที่ต้องการ จึงมีคำถามว่าจะสามารถโหลดไฟล์ OTF หรือ WOFF2 และแสดงสตริงตามต้องการได้หรือไม่
สนใจโปรเจ็กต์นี้มาก มีคำถามหลายข้อเกี่ยวกับ runtime, event loop, FFI และการเป็นเจ้าของ window pointer เป็นต้น สนใจเรื่อง audio plugin และ VST ซึ่งมีข้อจำกัดด้าน event loop และการจัดการหน้าต่าง แม้ JUCE จะเป็นทางออกโดยพฤตินัย แต่ก็เก่าและใช้งานไม่สะดวก
โปรเจ็กต์นี้เจ๋งมาก และเป็นสิ่งที่ใฝ่ฝันมาหลายปี WASM มีศักยภาพสูงมากในฐานะหน่วยพกพาสำหรับงานคำนวณด้านกราฟิก/เสียง/มัลติมีเดีย
กำลังทำงานเพื่อให้ WASM ทำงานบน Godot Engine และอยากรู้ว่าคุณเอาชนะปัญหาการเข้าถึง shared array buffer บน Safari รวมถึงปัญหาการเข้าถึงเครือข่ายโฆษณาซึ่งสำคัญต่อเกมออนไลน์ได้อย่างไร พร้อมทั้งชี้ให้เห็นประเด็นเรื่องบิลด์แบบ single-thread เทียบกับบิลด์ปกติ
ดีใจที่ได้เห็นโปรเจ็กต์เพิ่มขึ้นในสาย 3D graphics/WASM และถามว่ามีเคล็ดลับในการเข้า YC หรือไม่ ผู้แสดงความคิดเห็นทำงานพอร์ต Unreal Engine 5 ไปยัง WebGPU และ WebAssembly มาหลายปีแล้ว มีทั้ง multi-threaded renderer และระบบ asset streaming ทำให้ผู้ใช้ไม่ต้องดาวน์โหลดเกม/แอปทั้งหมดล่วงหน้า อีกทั้งไม่จำเป็นต้องโหลดทั้งแอปพลิเคชันขึ้นหน่วยความจำพร้อมกัน และยังสร้างทั้งแพลตฟอร์มโฮสติ้งและแบ็กเอนด์สำหรับให้นักพัฒนาปล่อยโปรเจ็กต์ออนไลน์ได้ด้วย
การนำเสนอในงาน wasm I/O น่าทึ่งมาก และดีใจที่เห็นงานนี้ได้รับความสนใจ
มีคำถามว่าได้อ่านบทความของ Ian Hickson นักพัฒนาหลักของ Flutter หรือไม่ ซึ่งอธิบายแนวคิดการมี UI framework แบบข้ามแพลตฟอร์มอย่างสมบูรณ์โดยใช้ WASM และนี่ก็เป็นแนวคิดที่ Flutter ใช้อยู่
ขอแนะนำ manifold อย่างมากสำหรับใช้เป็น CAD kernel ที่สามารถนำไปรวมเข้ากับแอปได้