- Minecraft Java Edition chuyển engine kết xuất đồ họa từ OpenGL sang Vulkan
- Bối cảnh của sự chuyển đổi này là OpenGL đã ngừng được cập nhật và macOS chấm dứt hỗ trợ
- Vulkan hỗ trợ gốc trên Windows và Linux, còn macOS được hỗ trợ qua lớp chuyển đổi mà không bị suy giảm hiệu năng
- Việc chuyển đổi được kỳ vọng sẽ cải thiện chất lượng hình ảnh và tăng tốc độ khung hình
- Sau khi thử nghiệm song song OpenGL và Vulkan trong snapshot, OpenGL sẽ được loại bỏ khi bảo đảm được độ ổn định
Bringing modern rendering to Java
- Trong Minecraft: Java Edition, công việc chuẩn bị cho Vibrant Visuals vẫn đang tiếp tục, đồng thời mã kết xuất đang được tái cấu trúc và hiện đại hóa
- Qua các bản cập nhật trước đó, cấu trúc mã kết xuất đã được cải thiện
- Hiện đã bước vào giai đoạn thay thế chính nền tảng công nghệ kết xuất
- Công nghệ kết xuất của trò chơi sẽ được chuyển từ OpenGL sang Vulkan
- Mục tiêu là mở ra các khả năng mới về đồ họa và hiệu năng
- Dự kiến sẽ có ảnh hưởng đến cộng đồng modding và một số người chơi
What are we changing?
- Hiện tại Java Edition đang sử dụng API đồ họa OpenGL được tạo ra từ những năm 1990
- Từ thời điểm phát hành ban đầu, trò chơi luôn dựa trên OpenGL
- Lý do chọn OpenGL là vì nó có thể hỗ trợ toàn bộ các hệ điều hành Linux, Windows và macOS
- Mục tiêu là để trò chơi chạy được trên gần như mọi PC và Mac
- OpenGL đã ngừng được cập nhật từ 9 năm trước, đang ở trạng thái deprecated trên macOS và sau này sẽ không thể chạy được nữa
- Để tương thích với macOS, dự án phải tiếp tục bám vào phiên bản OpenGL cũ, khiến việc hiện đại hóa codebase trở nên khó khăn
- Để Java Edition tiếp tục chạy được trên phần lớn PC, bao gồm cả macOS và Linux, việc chuyển khỏi OpenGL là cần thiết
Introducing: Vulkan
- Vulkan là API đồ họa đã được sử dụng trên thị trường hơn 10 năm và được áp dụng rộng rãi bởi các hãng phần cứng lớn
- Nó được hỗ trợ gốc trên Windows và Linux hiện đại; với macOS, có thể hỗ trợ thông qua lớp chuyển đổi mà vẫn hoạt động không suy giảm hiệu năng
- Về dài hạn, điều này mở ra khả năng nâng cao hiệu năng và mở rộng tính năng
- Đồng thời cung cấp nền tảng cần thiết để triển khai Vibrant Visuals
- Tuy vậy, các GPU đã hơn 10 năm tuổi có thể sẽ không hỗ trợ Vulkan
What does this mean for modders?
- Khi chuyển từ OpenGL sang Vulkan, các mod kết xuất dựa trên OpenGL sẽ bị ảnh hưởng
- Việc chuyển sang Vulkan được dự đoán sẽ cần nhiều công sức hơn so với việc chỉ thích ứng với các bản phát hành thông thường
- Nhóm phát triển khuyến nghị cộng đồng modding giảm sự phụ thuộc vào OpenGL
- Nên tái sử dụng tối đa API kết xuất nội bộ
- Khi cần, có thể trao đổi kỹ thuật trực tiếp với đội phát triển
- Các thảo luận kỹ thuật đang diễn ra trên kênh Discord của Vibrant Visuals
- Đây không phải kênh chỉ để thông báo, mà là không gian trao đổi kỹ thuật chuyên sâu giữa các nhà phát triển
What does this mean for players?
- Một số mod có thể bị ảnh hưởng trong quá trình chuyển đổi
- Các tác giả mod sẽ cần thời gian để cập nhật
- Trong các snapshot sắp tới, OpenGL và Vulkan sẽ được cung cấp song song
- Có thể chọn renderer trong cả snapshot lẫn phiên bản chính thức
- Đồng thời sẽ tiếp tục làm việc để bảo đảm độ ổn định và giảm thiểu lỗi
- Người dùng được đề nghị báo lỗi qua bugs.mojang.com
When is this happening?
- Mục tiêu là đưa Vulkan vào thử nghiệm snapshot trong mùa hè
- Trong thời gian thử nghiệm, người dùng có thể chuyển đổi giữa OpenGL và Vulkan
- Khi việc xác minh độ ổn định và hiệu năng hoàn tất, phần triển khai OpenGL sẽ bị loại bỏ
- Sẽ có thông báo trước khi gỡ bỏ
- Yêu cầu cấu hình tối thiểu cũng sẽ được cập nhật
Vulkan and Vibrant Visuals
- Việc hiện đại hóa renderer là bước cốt lõi trong lộ trình Vibrant Visuals
- Chuyển sang Vulkan sẽ mở rộng dư địa cải thiện đồ họa và tăng cường năng lực hiệu năng
- Dự kiến cũng sẽ giảm các lỗi liên quan đến driver
- Mục tiêu trọng yếu là bảo đảm trò chơi có thể tiếp tục chạy trên macOS
- Để bảo đảm người chơi trên mọi hệ điều hành được hỗ trợ đều có thể tham gia như nhau
Ý nghĩa của bản cập nhật
- Lần chuyển đổi này là một bước quan trọng đưa Minecraft Java tiến sang stack công nghệ đồ họa hiện đại
- Nó củng cố nền tảng kỹ thuật của game engine, tạo ra cấu trúc thuận lợi hơn cho việc mở rộng và bổ sung tính năng trong tương lai
- Việc chuyển từ OpenGL sang Vulkan cũng phù hợp với xu hướng thay thế thế hệ API đồ họa trên toàn ngành game
3 bình luận
Ý kiến trên Hacker News
Hy vọng theo thời gian overhead CPU của luồng chính sẽ giảm
Các game được port từ DX11 sang 12, hay từ OpenGL sang Vulkan, không chỉ cải thiện hiệu năng nhờ thay API, mà còn nhờ tận dụng khả năng xử lý draw call song song
Minecraft bị nghẽn do CPU chậm hơn tốc độ GPU có thể render, nên hy vọng thay đổi này cũng sẽ tạo thêm dư địa CPU cho cả môi trường mod
Thử cho vui bản Windows chạy qua Proton thì hiệu năng tăng 30%
Có lẽ là nhờ khả năng đa luồng của thư viện dxvk mà Proton sử dụng
Tôi nghĩ đây là lựa chọn ổn vì Minecraft Java Edition chỉ dành cho desktop, nên tránh được các vấn đề driver Vulkan trên di động
Tuy vậy, với quy mô như Microsoft thì tôi cứ nghĩ họ đủ khả năng làm một RHI đa nền tảng dùng API ổn định theo từng nền tảng (DX12, Metal)
Việc bảo trì ba phiên bản renderer Java là gánh nặng lớn, nhất là khi hệ sinh thái mod là cốt lõi, nên chỉ riêng thay đổi lần này thôi cũng đã đủ gây xáo trộn
Tôi không nghĩ cần làm cho việc bảo trì các shader mod trở nên khó hơn nữa
Trên macOS cũng có thể chạy Vulkan, nên tôi không thấy lý do rõ ràng nào để dùng DX12 cho một dự án mới
Trên chiếc Acer C720 Chromebook cũ của tôi (iGPU Intel HD4400), Vulkan không được hỗ trợ nên có vẻ Minecraft sẽ hỏng
Trước đây điểm hay là nó chạy được trên gần như mọi phần cứng, nên khá tiếc
Tôi thắc mắc vì sao họ không chuyển phần bình luận sang bài nguồn (chuỗi liên quan)
Thật thú vị khi Microsoft lại gần với tiêu chuẩn Khronos hơn Apple
Họ đã chấp nhận SPIR-V làm định dạng đầu ra và đầu vào cho DirectX Shader Compiler để tăng khả năng tương tác với Vulkan
Apple thì từ lâu đã rất không hài lòng với cách OpenCL được xử lý, còn Sony và Nintendo gần như không quan tâm tới Khronos
Trên thực tế, API của Khronos bị giảm tính di động hoàn toàn vì vấn đề extension spaghetti
VulkanMod cải thiện hiệu năng rất nhiều nhưng lại không tương thích với phần lớn mod
Nếu sau này có thể dùng Vulkan trong cả các modpack đầy đủ thì sẽ thực sự rất đáng mong đợi
Tôi hy vọng Vibrant Visuals sẽ sớm có trên Java Edition
Việc muốn dùng shader mà lúc nào cũng phải cần mod thì khá đáng tiếc
Có thể cài chỉ bằng cách kéo-thả file .zip, không cần loader phức tạp hay rủi ro bảo mật
Nó kém linh hoạt hơn Aperture, Iris, Optifine, nhưng tính năng thì khá tương tự
Tôi cũng tò mò liệu shader Vulkan có thể được đưa vào resource pack hay không. Dù vậy, nó có thể bị hạn chế vì rủi ro làm hỏng tính năng của game cao hơn
Tôi không biết là Java có binding cho Vulkan. Có lẽ là dùng JNI
Cũng khá bất ngờ khi họ vẫn còn dùng OpenGL. Tôi không rõ tình trạng hiện tại của Minecraft, và đây cũng là lần đầu tôi biết là có bản desktop không phải Java
Việc quản lý bộ nhớ sạch sẽ hơn nhiều, và việc binding với các hàm bên ngoài (như Vulkan) cũng dễ hơn rất nhiều
Tôi nghĩ đây là một trong những tính năng bị đánh giá thấp nhất của Java gần đây
Tôi thắc mắc vì sao họ lại duy trì hai phiên bản của cùng một game
Bedrock gần như đã bắt kịp về tính năng, nhưng xét như một bản thay thế hoàn toàn thì coi như thất bại
Bedrock có hiệu năng và tính di động tốt hơn, nhưng trên console thì dù sao cũng không thể mod
90% nội dung trên YouTube dựa trên Java, nên Microsoft đang tập trung vào việc đạt được sự tương đương về tính năng
Từ góc độ Microsoft, việc duy trì cả hai phiên bản để tối đa hóa doanh thu là hợp lý
Hy vọng họ đã xử lý tốt vấn đề độ trễ khi biên dịch shader Vulkan
Vì đây không phải hệ thống material phức tạp mà là một renderer voxel khá đơn giản
Vấn đề xảy ra khi engine tạo ra quá nhiều tổ hợp shader, hoặc khi một số trạng thái GPU nhất định (ví dụ: blending) kích hoạt việc biên dịch lại shader
Trong Vulkan hiện đại, phần lớn trạng thái có thể được xử lý bằng dynamic state, giúp giảm vấn đề này
Tuy nhiên, một số trạng thái như blending vẫn có thể gây biên dịch lại
Nói cách khác, nếu nhà phát triển tránh các dynamic state đó thì có thể ngăn độ trễ khá dễ dàng
Dạo này nhiều hãng game lớn khá lơ là với tối ưu kỹ thuật
Minecraft ban đầu là một trò chơi được phát triển bằng Java, nhưng sau khi được bán cho Microsoft thì lại được làm thêm một phiên bản bằng C++. Việc thay đổi hẳn ngôn ngữ phát triển và tái hiện lại toàn bộ một tựa game chắc hẳn không phải chuyện dễ, nên cũng khá thú vị khi tự hỏi vì sao họ lại làm vậy.
Có vẻ họ đã tạo ra bản Bedrock nhằm mục đích tối ưu cho di động..
Tôi từng nghĩ họ sẽ bỏ Java, nhưng rốt cuộc có vẻ cả hai đều sẽ tiếp tục được cập nhật.