ในเหตุการณ์ที่น่าประหลาดใจสำหรับการเขียนโปรแกรมกราฟิก ระบบนิเวศ OpenGL ได้รับส่วนขยายที่ใหญ่ที่สุดในเกือบทศวรรษด้วยการอนุมัติ GL_EXT_mesh_shader การพัฒนานี้เกิดขึ้นในช่วงเวลาที่หลายคนมองว่า OpenGL กำลังจะล้าสมัยและถูกแทนที่ด้วยทางเลือกที่ทันสมัยกว่า เช่น Vulkan ส่วนขยายนี้ ซึ่งพัฒนาขึ้นหลักโดยวิศวกรของ AMD ถือเป็นการปรับให้ทันสมัยครั้งสำคัญของ Graphics API ที่มีอายุมากและได้จุดประกายการอภิปรายอย่างแข็งขันในหมู่นักพัฒนาถึงทิศทางในอนาคตของอินเทอร์เฟซการเขียนโปรแกรมกราฟิก
เวลาที่เลือกปล่อยครั้งนี้มีความน่าสนใจเป็นพิเศษเมื่อพิจารณาจากสถานะปัจจุบันของ Graphics API ในขณะที่ Vulkan ถูกวางตำแหน่งให้เป็นผู้สืบทอดของ OpenGL มาตั้งแต่เกือบสิบปีก่อน การอภิปรายในชุมชนเผยให้เห็นว่านักพัฒนาจำนวนมากยังคงชอบใช้ OpenGL เนื่องจากความเรียบง่ายและความเข้ากันได้ในวงกว้าง across platforms
การเชื่อมโยงกับ Minecraft ที่ขับเคลื่อนนวัตกรรม
แรงผลักดันสำหรับการรองรับ mesh shader ใน OpenGL ดูเหมือนจะได้รับอิทธิพลอย่างมีนัยสำคัญจากชุมชนผู้ปรับแต่ง Minecraft โดยมีมอดยอดนิยมชื่อ nvidium ที่เคยใช้ส่วนขยาย mesh shader เฉพาะของ NVIDIA เพื่อปรับปรุงประสิทธิภาพการเรนเดอร์อย่างมาก แต่สิ่งนี้กลับปิดกั้นผู้ใช้ที่มีการ์ดกราฟิกจาก AMD และ Intel ด้วยส่วนขยายข้ามผู้ขายใหม่นี้ ประโยชน์ด้านประสิทธิภาพเหล่านี้จะพร้อมใช้งานสำหรับผู้เล่นทุกคน
มอดดังกล่าวทำการคัดเอาส่วน chunk ที่มองไม่เห็นออกโดยขับเคลื่อนด้วย GPU และยังสร้างสามเหลี่ยมเองด้วย mesh shader จากข้อมูลภูมิประเทศ ซึ่งช่วยลดขนาด vertex ลงได้อย่างมาก
สิ่งนี้แสดงให้เห็นว่าการใช้งานในโลกจริง แม้แต่ในมอดเกม ก็สามารถขับเคลื่อนความก้าวหน้าทั่วทั้งอุตสาหกรรมได้ แนวทางของมอดที่สร้างสามเหลี่ยมโดยตรงจากข้อมูลภูมิประเทศโดยใช้ mesh shaders เป็นตัวแทนของนวัตกรรมประเภทเดียวกันที่ส่วนขยายใหม่นี้เปิดโอกาส
ประโยชน์ของ Mesh Shader สำหรับเกมแบบ Voxel
- การคัดกรองเรขาคณิตที่มองไม่เห็นโดยใช้ GPU
- การสร้างสามเหลี่ยมโดยตรงจากข้อมูลภูมิประเทศ
- ลดขนาด vertex buffer และการใช้หน่วยความจำ
- ลดจำนวน draw call ผ่านการรวมกลุ่มที่ดีขึ้น
- รองรับข้ามผู้ผลิต (แตกต่างจากการใช้งานก่อนหน้าที่รองรับเฉพาะ NVIDIA เท่านั้น)
ทำความเข้าใจกับก้าวกระโดดทางเทคนิค
Mesh shaders เป็นตัวแทนของการเปลี่ยนแปลงพื้นฐานในวิธีที่ไปป์ไลน์กราฟิกจัดการกับเรขาคณิต การเรนเดอร์ OpenGL แบบดั้งเดิมใช้ไปป์ไลน์แบบคงที่ด้วย vertex shader และ geometry shader ที่แยกจากกัน Mesh shaders รวมขั้นตอนเหล่านี้เข้าด้วยกันเป็นแนวทางที่ยืดหยุ่นกว่า คล้ายกับการประมวลผลแบบ compute ซึ่งมอบการควบคุมที่ละเอียดยิ่งขึ้นให้นักพัฒนาว่าจะประมวลผลและคัดเรขาคณิตออกอย่างไร
ประโยชน์ในทางปฏิบัติมีมากสำหรับแอปพลิเคชันอย่าง Minecraft ที่เรนเดอร์รูปทรงเรขาคณิตง่าย ๆ จำนวนมหาศาล ด้วยการประมวลผลกลุ่ม vertex ขนาดเล็กที่ชาญฉลาดขึ้นและคัดเรขาคณิตที่มองไม่เห็นออกโดยตรงบน GPU, mesh shaders สามารถลดทั้งการใช้งานหน่วยความจำและค่าใช้จ่ายในการเรนเดอร์ลงได้อย่างมาก สิ่งนี้มีคุณค่าเป็นพิเศษสำหรับเกมที่ใช้ voxel ซึ่งโครงสร้างของข้อมูล vertex มีความสม่ำเสมอและบีบอัดได้สูง
การอภิปรายในวงกว้าง: OpenGL vs. Vulkan vs. ความเป็นจริง
การอภิปรายในชุมชนเผยให้เห็นถึงความแตกแยกอย่างลึกซึ้งในความชอบการเขียนโปรแกรมกราฟิก นักพัฒนาจำนวนมากแสดงความหงุดหงิดกับความซับซ้อนของ Vulkan โดยชี้ให้เห็นว่าการดำเนินการที่ควรจะง่ายดายมักต้องใช้โค้ดแบบ boilerplate นับสิบบรรทัด ตามที่นักพัฒนาคนหนึ่งระบุไว้อย่างตรงไปตรงมาว่า สิ่งที่ควรจะเป็น malloc กลับกลายเป็นวิทยานิพนธ์ปริญญาเอกใน Vulkan, สิ่งที่ควรจะเป็น memcpy ก็เป็นอีกวิทยานิพนธ์หนึ่ง, และสิ่งที่ควรจะเป็น kernel launch ง่ายๆ กลับกลายเป็นเรื่องบ้าบอ
ความรู้สึกนี้สะท้อนโดยคนอื่นๆ ที่พบว่าความเรียบง่ายเปรียบเทียบของ OpenGL เหมาะสมกว่าสำหรับหลายกรณีการใช้ ในขณะที่ Vulkan นำเสนอการควบคุมระดับต่ำกว่า ค่าใช้จ่ายในการพัฒนาก็มีมาก ทำให้ไม่เหมาะสำหรับโครงการขนาดเล็ก, การศึกษา, หรือแอปพลิเคชันที่ประสิทธิภาพสูงสุดไม่ใช่สิ่งสำคัญ
การอภิปรายยังเน้นย้ำถึงความกังวลเรื่องความแตกแยกของแพลตฟอร์ม ในขณะที่ WebGPU กำลังเกิดขึ้นเป็นมาตรฐานเว็บที่เป็นไปได้ มันยังคงตามหลัง API ดั้งเดิมในด้านคุณสมบัติ ตามที่ความคิดเห็นหนึ่งระบุ OpenGL ซึ่งถูกยกเลิกการสนับสนุนโดยพฤตินัยมาแล้วกว่าห้าปี ยังมีพลัง/คุณสมบัติด้านความสามารถของฮาร์ดแวร์ที่มากกว่า WebGPU เป็น orders of magnitude
การเปรียบเทียบ Graphics API
ด้าน | OpenGL | Vulkan | WebGPU |
---|---|---|---|
ความยากในการเรียนรู้ | ปานกลาง | ยากมาก | ปานกลาง |
โค้ดเบื้องต้นที่ต้องเขียน | น้อยที่สุด | มากมาย | ปานกลาง |
การรองรับแพลตฟอร์ม | ครอบคลุมทั่วไป | ครอบคลุมทั่วไป | เน้นเว็บ |
ศักยภาพด้านประสิทธิภาพ | ดี | ยอดเยี่ยม | ดี |
ความเร็วในการพัฒนา | เร็ว | ช้า | ปานกลาง |
อนาคตของ Graphics API
การมาถึงของ mesh shaders ใน OpenGL บ่งชี้ว่าข่าวการตายของ API นี้คงจะถูกกล่าวอ้างเกินจริง แม้ผู้ขายแพลตฟอร์มรายใหญ่เช่น Apple จะเลิกสนับสนุน OpenGL แล้วเพื่อไปสนับสนุน Metal และ Khronos จะมุ่งเน้นการพัฒนา Vulkan แต่การวิวัฒนาการอย่างต่อเนื่องของ OpenGL ผ่านส่วนขยายแสดงให้เห็นถึงความเกี่ยวข้องที่ยั่งยืนของมัน
การอภิปรายในชุมชนชี้ให้เห็นว่า API ที่แตกต่างกันตอบสนองความต้องการที่แตกต่างกัน Vulkan ดีเลิศสำหรับเกมเอ็นจิ้นระดับ AAA ที่ต้องการประสิทธิภาพและการควบคุมสูงสุด ในขณะที่ OpenGL ยังคงมีคุณค่าสำหรับวัตถุประสงค์ทางการศึกษา, แอปพลิเคชันรุ่นเก่า, และนักพัฒนาที่ให้ความสำคัญกับความเร็วในการพัฒนามากกว่าประสิทธิภาพสัมบูรณ์ ไดรเวอร์ Zink ของโปรเจกต์ Mesa ซึ่งนำ OpenGL ไปทำงานบน Vulkan อาจเป็นตัวแทนของอนาคตในระยะยาวสำหรับความเข้ากันได้ของ OpenGL
ภูมิทัศน์ของการเขียนโปรแกรมกราฟิกดูเหมือนจะกำลังก้าวเข้าสู่อนาคตที่มีหลาย API แทนที่จะรวมเข้าสู่โซลูชันเดียว API แต่ละตัวให้บริการกลุ่มผู้ใช้ที่มีข้อกำหนดต่างกัน และการพัฒนาส่วนขยาย OpenGL อย่างต่อเนื่องบ่งชี้ว่ามันจะยังคงมีความเกี่ยวข้องไปอีกหลายปี โดยเฉพาะในแอปพลิเคชันที่ความสมดุลระหว่างความสามารถและความเรียบง่ายของมันมอบประสบการณ์นักพัฒนาที่ดีที่สุด
อ้างอิง: Mesh Shaders In The Current Year