- Minecraft Java Edition กำลังเปลี่ยนเอนจินเรนเดอร์กราฟิกจาก OpenGL ไปเป็น Vulkan
- สาเหตุของการเปลี่ยนผ่านคือ OpenGL หยุดอัปเดตและยุติการรองรับบน macOS หลังใช้งานมาตั้งแต่ทศวรรษ 1990
- Vulkan รองรับ Windows และ Linux โดยตรง ส่วน macOS รองรับผ่าน translation layer โดยไม่มีประสิทธิภาพลดลง
- การเปลี่ยนครั้งนี้คาดว่าจะช่วย ยกระดับคุณภาพภาพและเพิ่มเฟรมเรต
- จะทดสอบ OpenGL และ Vulkan ควบคู่กันในสแนปช็อต และมีแผนถอด OpenGL ออกเมื่อมั่นใจในเสถียรภาพ
Bringing modern rendering to Java
- Minecraft: Java Edition ยังคงเดินหน้าการเตรียมความพร้อมสำหรับ Vibrant Visuals พร้อมรีแฟกเตอร์และปรับปรุงโค้ดเรนเดอร์ให้ทันสมัย
- มีการปรับโครงสร้างโค้ดเรนเดอร์ให้ดีขึ้นผ่านอัปเดตก่อนหน้านี้
- ตอนนี้เข้าสู่ขั้นตอนของการเปลี่ยนเทคโนโลยีพื้นฐานด้านการเรนเดอร์โดยตรง
- มีแผนเปลี่ยนเทคโนโลยีเรนเดอร์ของเกมจาก OpenGL ไปเป็น Vulkan
- เพื่อเปิดความเป็นไปได้ใหม่ด้านกราฟิกและประสิทธิภาพ
- คาดว่าจะส่งผลต่อชุมชนม็อดและผู้เล่นบางส่วน
What are we changing?
- ปัจจุบัน Java Edition ใช้ OpenGL graphics API ที่สร้างขึ้นมาตั้งแต่ทศวรรษ 1990
- ใช้ OpenGL มาตั้งแต่ช่วงเปิดตัวแรกเริ่ม
- เหตุผลที่เลือก OpenGL เพราะสามารถรองรับ Linux, Windows และ macOS ครบทุกระบบปฏิบัติการ
- ออกแบบมาให้รันได้บนพีซีและ Mac แทบทั้งหมด
- OpenGL หยุดอัปเดตมาแล้ว 9 ปี และอยู่ในสถานะ Deprecated บน macOS ซึ่งในอนาคตจะไม่สามารถรันได้
- เพื่อให้เข้ากับ macOS ได้ จึงต้องค้างอยู่กับ OpenGL เวอร์ชันเก่า และทำให้การปรับโค้ดเบสให้ทันสมัยทำได้ยาก
- การเลิกใช้ OpenGL จึงจำเป็นเพื่อให้ Java Edition ยังรันต่อได้บนพีซีส่วนใหญ่ รวมถึง macOS และ Linux
Introducing: Vulkan
- Vulkan เป็น graphics API ที่ใช้งานในตลาดมานานกว่า 10 ปี และได้รับการยอมรับจากผู้ผลิตฮาร์ดแวร์รายหลักอย่างกว้างขวาง
- รองรับโดยตรงบน Windows และ Linux รุ่นใหม่ ส่วน macOS รองรับได้ผ่าน translation layer และทำงานได้โดยไม่เสียประสิทธิภาพ
- ในระยะยาวจะเปิดทางให้เพิ่มประสิทธิภาพและขยายความสามารถได้มากขึ้น
- เป็นรากฐานที่จำเป็นสำหรับการนำ Vibrant Visuals มาใช้
- อย่างไรก็ตาม GPU ที่มีอายุมากกว่า 10 ปีอาจไม่รองรับ Vulkan
What does this mean for modders?
- เมื่อเปลี่ยนจาก OpenGL ไปเป็น Vulkan โหมดเรนเดอร์ที่อิงกับ OpenGL จะได้รับผลกระทบ
- การย้ายไป Vulkan คาดว่าจะต้องใช้ความพยายามมากกว่าการรองรับรีลีสปกติ
- ทีมงานแนะนำให้ชุมชนม็อดลดการพึ่งพา OpenGL
- ควรนำ internal rendering API กลับมาใช้ซ้ำให้มากที่สุด
- หากจำเป็นสามารถพูดคุยเชิงเทคนิคกับทีมพัฒนาได้โดยตรง
- มีการพูดคุยเชิงเทคนิคในช่อง Discord ของ Vibrant Visuals
- ช่องนี้ไม่ใช่สำหรับประกาศข่าว แต่เป็นพื้นที่สนทนาเชิงเทคนิคเชิงลึกระหว่างนักพัฒนา
What does this mean for players?
- ม็อดบางตัวอาจได้รับผลกระทบระหว่างกระบวนการเปลี่ยนผ่าน
- ผู้พัฒนาม็อดอาจต้องใช้เวลาในการอัปเดต
- ในสแนปช็อตถัดไปจะมีการเปิดให้ใช้ OpenGL และ Vulkan ควบคู่กัน
- ผู้เล่นจะเลือก renderer ได้ทั้งในสแนปช็อตและเวอร์ชันจริง
- พร้อมกันนั้นจะมีการปรับปรุงด้านเสถียรภาพและลดบั๊กให้น้อยที่สุด
- ขอให้รายงานบั๊กผ่าน bugs.mojang.com
When is this happening?
- เป้าหมายคือเริ่มนำ Vulkan เข้าสู่การทดสอบในสแนปช็อตภายในช่วงฤดูร้อน
- ระหว่างช่วงทดสอบจะสามารถสลับระหว่าง OpenGL และ Vulkan ได้
- เมื่อยืนยันเสถียรภาพและประสิทธิภาพเรียบร้อยแล้ว จะมีการถอด implementation ของ OpenGL ออก
- จะมีการแจ้งล่วงหน้าก่อนถอดออก
- และจะมีการอัปเดตสเปกขั้นต่ำที่ต้องการ
Vulkan and Vibrant Visuals
- การปรับ renderer ให้ทันสมัยคือ ขั้นตอนสำคัญในโรดแมปของ Vibrant Visuals
- การเปลี่ยนไปใช้ Vulkan จะเพิ่มพื้นที่สำหรับการปรับปรุงกราฟิกและเสริมศักยภาพด้านประสิทธิภาพ
- คาดว่าจะช่วยลดบั๊กที่เกี่ยวข้องกับไดรเวอร์
- เป้าหมายสำคัญคือการทำให้ยังสามารถรันต่อบน macOS ได้อย่างต่อเนื่อง
- เพื่อให้ผู้เล่นบนทุกระบบปฏิบัติการที่รองรับเข้าร่วมได้อย่างเท่าเทียม
ความหมายของอัปเดตนี้
- การเปลี่ยนครั้งนี้เป็นก้าวสำคัญที่ทำให้ Minecraft Java ย้ายไปสู่เทคโนโลยีกราฟิกสมัยใหม่
- เป็นการ เสริมความแข็งแรงให้ฐานเทคนิคของเอนจินเกม เพื่อรองรับการขยายตัวและการเพิ่มฟีเจอร์ในอนาคตได้ดีขึ้น
- การย้ายจาก OpenGL ไปสู่ Vulkan ยังสอดคล้องกับ แนวโน้มการเปลี่ยนผ่านยุคของ graphics API ทั่วทั้งอุตสาหกรรมเกม
3 ความคิดเห็น
ความคิดเห็นจาก Hacker News
หวังว่าเมื่อเวลาผ่านไป ภาระ CPU บนเธรดหลักจะลดลง
เกมที่พอร์ตจาก DX11 ไป 12 และจาก OpenGL ไป Vulkan ไม่ได้แรงขึ้นเพียงเพราะเปลี่ยน API เท่านั้น แต่เพราะใช้ประโยชน์จาก ความสามารถในการประมวลผล draw call แบบขนาน
Minecraft ติดคอขวดเพราะ CPU ช้ากว่าความเร็วที่ GPU เรนเดอร์ได้ ดังนั้นจึงหวังว่าการเปลี่ยนแปลงนี้จะทำให้มีทรัพยากร CPU เหลือมากขึ้นแม้ในสภาพแวดล้อมที่มีม็อด
ลองรันเวอร์ชัน Windows ผ่าน Proton เล่น ๆ แล้วพบว่าประสิทธิภาพ ดีขึ้น 30%
คิดว่าน่าจะเป็นเพราะการทำงานแบบมัลติเธรดของ ไลบรารี dxvk ที่ Proton ใช้อยู่
คิดว่าเป็นตัวเลือกที่ดีตรงที่ Minecraft Java Edition เป็นเดสก์ท็อปเท่านั้น จึงเลี่ยง ปัญหาไดรเวอร์ Vulkan บนมือถือได้
แต่ถ้าเป็นบริษัทขนาด Microsoft ก็นึกว่าน่าจะมีทรัพยากรพอจะทำ cross-platform RHI ที่ใช้ API ที่เสถียรในแต่ละแพลตฟอร์มอย่าง DX12 และ Metal ได้
การดูแลเรนเดอเรอร์ Java 3 เวอร์ชันเป็นภาระหนัก และโดยเฉพาะเมื่อ ระบบนิเวศของม็อด เป็นหัวใจสำคัญ ความเปลี่ยนแปลงครั้งนี้อย่างเดียวก็น่าจะสร้างความสับสนมากแล้ว
ไม่น่าจำเป็นต้องทำให้การดูแล shader mod ยากขึ้นไปอีก
แม้แต่บน macOS ก็รัน Vulkan ได้ จึงไม่ค่อยเข้าใจว่าทำไมโปรเจกต์ใหม่ถึงต้องเลือก DX12
บน Acer C720 Chromebook เครื่องเก่าของฉัน (Intel HD4400 iGPU) ไม่มีการรองรับ Vulkan จึงดูเหมือนว่า Minecraft จะใช้งานไม่ได้
น่าเสียดาย เพราะเมื่อก่อนจุดเด่นคือมันรันได้บนฮาร์ดแวร์แทบทุกแบบ
สงสัยว่าทำไมไม่ย้ายคอมเมนต์ไปไว้ฝั่งต้นทาง (เธรดที่เกี่ยวข้อง)
น่าสนใจที่ Microsoft เข้าใกล้ มาตรฐานของ Khronos มากกว่า Apple
บริษัทได้นำ SPIR-V มาใช้เป็นฟอร์แมตอินพุตและเอาต์พุตของ DirectX shader compiler เพื่อเพิ่มการทำงานร่วมกับ Vulkan
Apple ไม่พอใจกับวิธีจัดการ OpenCL อย่างมาก ส่วน Sony กับ Nintendo ก็แทบไม่สนใจ Khronos เลย
ในทางปฏิบัติ API ของ Khronos ก็ยังพก ปัญหา extension spaghetti จนทำให้การพกพาอย่างสมบูรณ์ทำได้ไม่ดีนัก
VulkanMod เพิ่มประสิทธิภาพได้มาก แต่ไม่เข้ากันกับม็อดส่วนใหญ่
ถ้าในอนาคตใช้ Vulkan ได้ทั้งม็อดแพ็กเต็มรูปแบบก็น่าตื่นเต้นมาก
อยากให้ Vibrant Visuals มาที่ Java Edition เร็ว ๆ
น่าเสียดายที่ถ้าจะใช้ shader ก็ต้องพึ่งม็อดตลอด
ติดตั้งได้ด้วยการลากแล้ววางไฟล์ .zip โดยไม่ต้องใช้ loader ซับซ้อนหรือเสี่ยงด้านความปลอดภัย
มันยืดหยุ่นน้อยกว่า Aperture, Iris, Optifine แต่ความสามารถก็ใกล้เคียงกันมาก
เลยสงสัยว่า shader ของ Vulkan จะใส่ใน resource pack ได้ไหม แต่ก็อาจถูกจำกัดเพราะมีความเสี่ยงที่จะทำให้ฟังก์ชันของเกมเสียหายมากกว่า
ไม่รู้มาก่อนว่า Java มี Vulkan binding ด้วย น่าจะใช้ JNI
ยังแปลกใจที่ก่อนหน้านี้ยังใช้ OpenGL อยู่ ไม่ค่อยรู้สถานะปัจจุบันของ Minecraft เท่าไร แต่ก็เพิ่งรู้เหมือนกันว่ามีเวอร์ชันเดสก์ท็อปที่ไม่ใช่ Java ด้วย
การจัดการหน่วยความจำสะอาดขึ้นมาก และการทำ binding กับฟังก์ชันภายนอกอย่าง Vulkan ก็ง่ายขึ้นมาก
คิดว่านี่เป็นหนึ่งในฟีเจอร์ของ Java ยุคหลังที่ ถูกประเมินค่าต่ำเกินไป มากที่สุด
สงสัยว่าทำไมถึงต้องดูแลเกมเดียวกัน สองเวอร์ชัน
Bedrock ไล่ตามด้านฟีเจอร์มาเกือบหมดแล้ว แต่ก็ถือว่ายังแทนที่ได้ไม่สมบูรณ์
Bedrock แม้จะเด่นเรื่องประสิทธิภาพและการพกพา แต่บนคอนโซลก็ยังม็อดไม่ได้อยู่ดี
คอนเทนต์บน YouTube 90% อิงจาก Java ดังนั้น Microsoft จึงมุ่งเน้นการทำให้ฟีเจอร์เท่าเทียมกัน
ในมุมของ Microsoft การคงสองเวอร์ชันไว้เพื่อ เพิ่มรายได้สูงสุด จึงสมเหตุสมผล
หวังว่าจะแก้ปัญหา อาการหน่วงจากการคอมไพล์ shader ของ Vulkan ได้ดี
เพราะมันไม่ใช่ระบบ material ที่ซับซ้อน แต่เป็นเพียง voxel renderer ที่ค่อนข้างเรียบง่าย
ปัญหามักเกิดเมื่อเอนจินสร้าง ชุด shader combination มากเกินไป หรือเมื่อสถานะ GPU บางอย่าง (เช่น blending) ไปกระตุ้นให้มีการคอมไพล์ shader ใหม่
ใน Vulkan รุ่นใหม่ สถานะส่วนใหญ่จัดการเป็น dynamic state ได้ จึงช่วยลดปัญหานี้
แต่บางสถานะอย่าง blending ก็ยังอาจทำให้ต้องคอมไพล์ใหม่ได้
กล่าวคือ ถ้านักพัฒนาหลีกเลี่ยง dynamic state เหล่านั้นได้ ก็ป้องกันอาการหน่วงได้ไม่ยาก
ทุกวันนี้สตูดิโอเกมใหญ่หลายแห่งมักละเลยการปรับแต่งทางเทคนิค
เดิมที Minecraft เป็นเกมที่พัฒนาด้วย Java แต่พอถูกขายให้ MS ก็ถูกสร้างขึ้นมาใหม่อีกครั้งด้วย C++ สินะ การเปลี่ยนภาษาโปรแกรมของทั้งเกมแล้วนำมาสร้างใหม่ทั้งหมดคงไม่ใช่เรื่องง่ายแน่ ๆ เลย น่าแปลกดีว่าเกิดอะไรขึ้นถึงเป็นแบบนั้น
ดูเหมือนว่าพวกเขาจะสร้าง Bedrock Edition ขึ้นมาเพื่อจุดประสงค์ด้านการปรับให้เหมาะกับมือถือ..
ผมนึกว่าอาจจะทิ้ง Java ไปเสียแล้ว แต่สุดท้ายก็ดูเหมือนว่าจะอัปเดตทั้งสองฝั่งนะครับ