ทีมของ Li Fei-Fei เปิดตัว Spark 2.0 เครื่องเรนเดอร์ 3D Gaussian Splatting แบบโอเพนซอร์ส สามารถเรนเดอร์จุด Gaussian เกิน 100 ล้านจุดบนเว็บเบราว์เซอร์ได้อย่างลื่นไหล
หลังจากเปิดตัวโมเดลใหม่ Marble 1.1 series ได้ไม่ถึงหนึ่งสัปดาห์ World Labs บริษัท Spatial Intelligence ที่ก่อตั้งโดยศาสตราจารย์ Li Fei-Fei ได้ประกาศเปิดตัวเครื่องเรนเดอร์ 3D Gaussian Splatting Spark 2.0 แบบโอเพนซอร์สอีกครั้ง
เราได้สร้างระบบ Level of Detail (LoD) ที่สามารถสตรีมได้สำหรับ 3D Gaussian Splatting ซึ่งกำหนดความเป็นไปได้ใหม่ของการเรนเดอร์ 3D บนเว็บเบราว์เซอร์
Spark 2.0 สร้างขึ้นบนพื้นฐานของ Three.js ผู้ใช้สามารถใช้ WebGL2 สตรีมฉาก 3D ขนาดใหญ่พิเศษที่มี splats (จุด Gaussian 3D) มากกว่า 100 ล้านจุด ไปยังอุปกรณ์ใดก็ได้ รวมถึงเดสก์ท็อป, iOS, Android และอุปกรณ์ VR

ตัวอย่างเช่น ฉาก Coit Tower ด้านล่างประกอบด้วย splats มากกว่า 40 ล้านจุด แต่สามารถโต้ตอบได้อย่างเต็มที่ในเบราว์เซอร์:

ในบล็อกทางการ ยังมีฉาก 3D อีกมากมายให้สัมผัสออนไลน์:

การสร้างแบบจำลอง 3D แบบดั้งเดิมใช้ตาข่ายสามเหลี่ยมที่มีการแมปพื้นผิว (texture mapping) มาประกอบกันเป็นพื้นผิววัตถุ ในขณะที่เทคโนโลยี 3D Gaussian Splatting ใช้ทรงรีกึ่งโปร่งใสหลายล้านอัน (เรียกว่า splats) และผ่านการผสมผสานสีระหว่างกันเพื่อแสดงผลรายละเอียดที่สมจริงเป็นพิเศษ:

splat คืออะไร?
แต่ละ splat ถูกกำหนดโดยคุณสมบัติ 5 ประการ: ตำแหน่ง, การย่อ/ขยายตามแกน XYZ, มุมการหมุน, สี และความทึบแสง วิธีการทั่วไปในการเรนเดอร์ลงบนหน้าจอคือ “Painter’s Algorithm”: เรียงลำดับทรงรีเล็กๆ หลายล้านอันจากไกลไปใกล้ ซ้อนทับกันเป็นชั้นๆ คล้ายกับการวาดภาพ คำนวณภาพสุดท้ายแบบเรียลไทม์ ซึ่งคล้ายกับภาพวาดแบบ Pointillism ในรูปแบบดิจิทัล แต่ใช้โครงร่างการกระจายแบบ Gaussian 3D

สำหรับผลสำเร็จนี้ ศาสตราจารย์ Li Fei-Fei ได้ให้ความเห็นทันที:
Spark 2.0 ตอนนี้สามารถสตรีมเรนเดอร์ splats เกิน 100 ล้านจุดบนอุปกรณ์ใดก็ได้! ฉันรู้สึกภูมิใจอย่างยิ่งที่ได้มีส่วนร่วมในระบบนิเวศโอเพนซอร์สของการเรนเดอร์ 3D Gaussian Splatting บนเว็บ!

การออกแบบระบบ Spark
Spark มีต้นกำเนิดมาจากเครื่องเรนเดอร์ 3D Gaussian Splatting สำหรับใช้ภายในที่พัฒนาโดย World Labs ในเวลานั้น เครื่องเรนเดอร์บนเว็บที่มีอยู่ในตลาดมีข้อจำกัดที่ชัดเจน: บางเครื่องสามารถเรนเดอร์วัตถุ 3D Gaussian Splatting ได้เพียงหนึ่งวัตถุต่อครั้งเท่านั้น บางเครื่องไม่สามารถทำให้ splats เคลื่อนไหวแบบไดนามิกได้ และบางเครื่องสร้างขึ้นบนเฟรมเวิร์ก 3D ที่ไม่เป็นที่นิยมหรือใช้เทคโนโลยี WebGPU ที่ยังไม่แพร่หลาย ทำให้ความเข้ากันได้ของอุปกรณ์มีจำกัด
เครื่องเรนเดอร์ภายในนี้เคยถูกใช้ในการแสดงตัวอย่างงานวิจัยโมเดลโลกขนาดใหญ่ (Large World Model) ที่ทีมเปิดตัวในปี 2024 รวมถึงโครงการแสดงฉากในช่วงแรกอย่าง Lofi Worlds

เพื่อให้นักพัฒนาทุกคนสามารถสร้างประสบการณ์ 3D Gaussian Splatting แบบอินเทอร์แอคทีฟบนเว็บได้ ทีมงานได้รวบรวมความรู้ทางเทคนิคและเปิดตัวเครื่องเรนเดอร์ 3D Gaussian Splatting แบบทั่วไป (เดิมชื่อ Forge ต่อมาเปลี่ยนชื่อเป็น Spark) แบบโอเพนซอร์สในปีที่แล้ว

Spark สร้างขึ้นบนเฟรมเวิร์กหลักอย่าง Three.js และกำหนดเทคโนโลยีพื้นฐานเป็น WebGL2 ซึ่งเป็น 3D Web API เดียวในปัจจุบันที่สามารถทำงานได้อย่างเสถียรบนอุปกรณ์เกือบทุกชนิด ทีมงานระบุว่าการพัฒนา Spark ดำเนินไปพร้อมๆ กับโมเดล Marble
Spark 2.0 รุ่นใหม่นี้ทำให้สามารถประมวลผลล่วงหน้า (preprocess) โหลดแบบสตรีม และเรนเดอร์ข้ามอุปกรณ์ สำหรับฉาก 3D Gaussian Splatting ขนาดใหญ่มากบนเว็บเบราว์เซอร์ได้ สำคัญที่สุดคือการผสานรวมเทคโนโลยีหลักสามประการ:
- เทคโนโลยี Level of Detail (LoD): สร้างข้อมูล splats ที่มีความละเอียดต่างกันล่วงหน้า และคัดกรองชุดย่อยของ splats ที่จำเป็นต้องเรนเดอร์อย่างชาญฉลาดตามมุมมองของกล้อง สำหรับพื้นที่ที่อยู่ไกลซึ่งตาไม่สามารถแยกแยะรายละเอียดได้ จะลดจำนวน splats ที่เรนเดอร์ลง ซึ่งช่วยเพิ่มประสิทธิภาพได้อย่างมีนัยสำคัญ
- การโหลดแบบสตรีมแบบก้าวหน้า (Progressive Streaming): ใช้กลยุทธ์การโหลด “จากหยาบไปละเอียด” โดยดาวน์โหลดข้อมูลที่เพิ่มรายละเอียดให้กับมุมมองปัจจุบันได้ดีที่สุดก่อน เมื่อข้อมูลถูกดาวน์โหลดเพิ่มขึ้นเรื่อยๆ ฉากจะค่อยๆ ละเอียดขึ้น ทำให้การแสดงผลเป็นไปอย่างราบรื่นและค่อยเป็นค่อยไป
- การจัดการหน่วยความจำเสมือน (Virtual Memory Management): จัดสรรพูลหน่วยความจำ GPU ขนาดคงที่สำหรับตารางหน้า (page table) ของ splats และสลับเปลี่ยนบล็อกข้อมูล 3D Gaussian Splatting โดยอัตโนมัติตามตำแหน่งของผู้ใช้ในฉาก ซึ่งทำให้สามารถเข้าถึงข้อมูล splats ข้ามวัตถุจำนวนมหาศาลที่ได้รับผ่านเครือข่ายได้อย่างมีประสิทธิภาพ
มาดูรายละเอียดของแต่ละเทคโนโลยีกัน
เทคโนโลยี Level of Detail (LoD)
ในคอมพิวเตอร์กราฟิกส์ เทคโนโลยี Level of Detail (LoD) เป็นโซลูชันคลาสสิกสำหรับการจัดการฉาก 3D ขนาดใหญ่ สามารถปรับระดับรายละเอียดการเรนเดอร์โดยอัตโนมัติตามระยะห่างระหว่างวัตถุกับผู้สังเกต ลดระดับรายละเอียดเมื่อต้องการเพิ่มอัตราเฟรม และเพิ่มระดับรายละเอียดเมื่อผู้ใช้หยุดนิ่งเพื่อสังเกต
การประยุกต์ใช้ LoD แบบทั่วไปคือ Mipmap texture mapping: ลดการสุ่มตัวอย่าง (downsample) ภาพพื้นผิวหนึ่งภาพทีละระดับ เพื่อสร้างพีระมิดของพื้นผิวชุดหนึ่งที่มีความละเอียดลดลงครึ่งหนึ่งในแต่ละระดับ เทคโนโลยีนี้รับประกันว่าจะสามารถสุ่มตัวอย่างข้อมูลพื้นผิวที่ตรงกับขนาดพิกเซลของหน้าจอได้อย่างรวดเร็วในระยะห่างใดก็ได้
แผนการใช้งาน LoD สามารถแบ่งออกเป็นแบบไม่ต่อเนื่อง (Discrete) และแบบต่อเนื่อง (Continuous) แบบไม่ต่อเนื่องจำเป็นต้องสร้างโมเดลหลายเวอร์ชันล่วงหน้า ซึ่งมีจำนวน splats ต่างกัน และสลับการเรนเดอร์ตามระยะทาง วิธีนี้มีข้อบกพร่อง: เมื่อผู้ใช้เคลื่อนที่ในฉาก การสลับรายละเอียดของโมเดลอย่างกะทันหันจะทำให้เกิดภาพผิดปกติแบบ “การกระโดด (popping)” ในขณะเดียวกัน เมื่อประมวลผล splats เป็นบล็อก ขอบเขตระหว่างบล็อกก็จะมองเห็นได้ชัดเจน
Spark ใช้ LoD แบบต่อเนื่อง ซึ่งหัวใจสำคัญคือการสร้างโครงสร้างแบบลำดับชั้นสำหรับ splats ทั้งหมด นั่นคือ LoD Splat Tree

Spark จะคัดกรองชุดย่อยของ splats ที่เหมาะสมที่สุดสำหรับวิวพอร์ตปัจจุบันอย่างแม่นยำตามขอบเขตของต้นไม้นี้ ทำให้เกิดการเปลี่ยนแปลงรายละเอียดที่ราบรื่นและไม่ขาดตอน

Spark 2.0 มีอัลกอริทึมการสร้าง LoD Splat Tree สองแบบในตัว:
* อัลกอริทึม Tiny-LoD: อัลกอริทึมที่รวดเร็วและน้ำหนักเบา ใช้โดยค่าเริ่มต้นสำหรับการสร้างฉากแบบเรียลไทม์บนเว็บ
* อัลกอริทึม Bhatt-LoD: อัลกอริทึมที่มีความแม่นยำสูง ใช้โดยค่าเริ่มต้นสำหรับการประมวลผลฉากแบบออฟไลน์ด้วยเครื่องมือ command-line
อัลกอริทึมทั้งสองนี้เป็นโซลูชันที่ไม่ต้องพึ่งการฝึกฝน (training) ไม่จำเป็นต้องมีข้อมูลอ้างอิงภาพหรือข้อมูลอินพุตเพิ่มเติมอื่นๆ สามารถประมวลผลข้อมูล 3D Gaussian Splatting โดยตรงได้ Spark ยังเข้ากันได้กับอัลกอริทึมการสร้างของบุคคลที่สามอื่นๆ เช่น NanoGS
การโหลดแบบสตรีมแบบก้าวหน้า
Spark 2.0 กำหนดรูปแบบไฟล์ใหม่ นั่นคือ .RAD รูปแบบนี้ไม่เพียงแต่สามารถบีบอัดข้อมูล 3D Gaussian Splatting ได้อย่างมีประสิทธิภาพ แต่ยังรองรับการโหลดแบบสตรีมด้วยการเข้าถึงแบบสุ่ม (random access) ทำให้สามารถเรนเดอร์ฉากแบบก้าวหน้าและละเอียดขึ้นเรื่อยๆ ซึ่งเหมาะอย่างยิ่งกับสถานการณ์การส่งผ่านเครือข่าย
หลังจากใช้รูปแบบ RAD แล้ว วัตถุ 3D Gaussian Splatting สามารถแสดงผลได้ทันทีในเวอร์ชันหยาบที่มี splats 64K ตัว หลังจากนั้น ระบบจะดึงข้อมูลบล็อกที่ใช้เพิ่มรายละเอียดให้กับพื้นที่ที่มองเห็นได้ตามลำดับความสำคัญก่อน ตามมุมมองของผู้使用者 ทำให้สามารถปรับลำดับความสำคัญแบบไดนามิกได้

LoD Splat Tree โดยพื้นฐานแล้วเป็นโครงสร้างสี่มิติ: ประกอบด้วยมิติพื้นที่สามมิติและมิติระดับรายละเอียดหนึ่งมิติ เพื่อให้สามารถโหลดแบบสตรีมและเรนเดอร์แบบก้าวหน้าและละเอียดขึ้นได้ จำเป็นต้องแบ่ง LoD splats ออกเป็นบล็อกข้อมูลต่างๆ ในไฟล์ RAD อย่างเหมาะสม
กลยุทธ์หลักที่ Spark ใช้คือ ให้ความสำคัญกับความใกล้เคียงเชิงพื้นที่ (Spatial Locality First): แบ่งพื้นที่สามมิติออกเป็นพื้นที่ย่อยๆ อย่างต่อเนื่อง (recursive subdivision) แต่ละบล็อกข้อมูลจะเติม splats ในพื้นที่ที่สอดคล้องกันตามลำดับ “จากใหญ่ไปเล็ก” เพื่อให้แน่ใจว่าทุกบล็อกสามารถแสดงรายละเอียดของพื้นที่นั้นได้สูงสุด
การจัดการหน่วยความจำเสมือน
หน่วยความจำเสมือนเป็นเทคนิคการจัดการหน่วยความจำแบบคลาสสิก โดยแบ่งหน่วยความจำออกเป็นหน้า (page) ขนาดคงที่ และสร้างความสัมพันธ์การแมปตารางหน้า (page table mapping) เพื่อจำลองพื้นที่หน่วยความจำเสมือนขนาดใหญ่ด้วยหน่วยความจำทางกายภาพที่มีจำกัด
Spark 2.0 นำแนวคิดนี้มาประยุกต์ใช้อย่างสร้างสรรค์กับการเรนเดอร์ 3D Gaussian Splatting:
โดยจัดสรรพูลหน่วยความจำ GPU ขนาดคงที่ล่วงหน้า (ความจุ 16 ล้าน splats) และสร้างกลไกการแมปตารางหน้า ซึ่งแมป “หน้า memory” แต่ละหน้าของ GPU ที่มี splats 64K ตัว กับบล็อกข้อมูล splats 64K ตัวในไฟล์ RAD แบบหนึ่งต่อหนึ่ง

การโหลดและการสลับเปลี่ยนบล็อกข้อมูลเป็นไปตามกฎต่อไปนี้:
- ตามผลลัพธ์การสำรวจ (traverse) LoD splat trees โหลดบล็อกข้อมูลที่มีลำดับความสำคัญสูงลงในหน้าว่างของพูลหน่วยความจำ GPU
- เมื่อพูลหน่วยความจำ GPU เต็มและจำเป็นต้องโหลดบล็อกข้อมูลใหม่ที่มีลำดับความสำคัญสูง ระบบจะใช้อัลกอริทึม LRU (Least Recently Used) เพื่อสลับเปลี่ยนบล็อกข้อมูลในหน้าหน่วยความจำที่มีลำดับความสำคัญต่ำที่สุดออกไป
การออกแบบนี้ให้ความยืดหยุ่นสูงแก่ Spark: รองรับการโหลดไฟล์ RAD หลายไฟล์พร้อมกัน และให้ไฟล์เหล่านี้แชร์พูลหน่วยความจำ GPU เดียวกัน สำหรับแต่ละไฟล์ RAD Spark จะรักษาความสัมพันธ์การแมปสองชุด: การแมปไปข้างหน้า (forward mapping) จากบล็อกข้อมูลไปยังหน้าหน่วยความจำ และการแมปย้อนกลับ (reverse mapping) จากหน้าหน่วยความจำกลับไปยังไฟล์และบล็อกข้อมูล
ขณะสำรวจต้นไม้ splat หลายระดับรายละเอียด (LoD) Spark จะบันทึกลำดับการเข้าถึงบล็อกข้อมูลของไฟล์ทั้งหมดอย่างเป็นเอกภาพ และในที่สุดสร้างรายการลำดับความสำคัญของบล็อกข้อมูลระดับโลก (global) ซึ่งทำให้สามารถบรรลุการโหลดและการจัดเก็บที่เหมาะสมแบบครบวงจรสำหรับวัตถุ 3D Gaussian Splatting ทั้งหมด
ดูรายละเอียดทางเทคนิคเพิ่มเติมได้ที่บทนำบล็อกทางการ: https://www.worldlabs.ai/blog/spark-2.0#lod-splat-tree
⚠️ หมายเหตุ: เนื้อหาได้รับการแปลโดย AI และตรวจสอบโดยมนุษย์ หากมีข้อผิดพลาดโปรดแจ้ง
☕ สนับสนุนค่ากาแฟทีมงาน
หากคุณชอบบทความนี้ สามารถสนับสนุนเราได้ผ่าน PromptPay
本文来自网络搜集,不代表คลื่นสร้างอนาคต立场,如有侵权,联系删除。转载请注明出处:http://www.itsolotime.com/th/archives/30258
