世界を動かす技術を、日本語で。

Minecraft JavaがOpenGLからVulkanに移行します

概要

Minecraft Java Editionの Vibrant Visualsアップデート に伴い、 描画APIがOpenGLからVulkanへ 移行予定。 この変更は パフォーマンス向上と最新機能の活用 が目的。 macOSではMetalとの互換性のため翻訳レイヤー を使用。 Mod開発者にはOpenGL依存からの移行 が推奨されている。 古いデバイスの一部は非対応 となるが、移行には猶予期間が設けられる。

Minecraft Java Edition、OpenGLからVulkanへの移行

  • Vibrant Visualsアップデート により、描画エンジンを OpenGLからVulkanへ 変更
  • Mojang開発者 による2024年2月18日の公式発表
  • 現代的なグラフィック機能とパフォーマンス改善 が主な狙い
  • ほぼ全てのPC OS(macOS、Linux含む)でのプレイ維持 が目標
  • macOSではApple独自API「Metal」 のため、 Vulkan互換レイヤー を利用
  • 古いデバイスでVulkan非対応の場合、プレイ不可 となる可能性
  • Vulkanは多くの旧型GPUにも対応、ただし一部例外あり

Mod開発者への影響と対応

  • OpenGL依存のModは影響を受ける ため、 Vulkan対応が必要
  • OpenGLからVulkanへの移行は通常のアップデート以上の労力 が必要
  • 内部レンダリングAPIの再利用推奨、独自要件がある場合は Mojangへの相談 を推奨
  • Modコミュニティ全体で段階的な移行準備 が求められる

移行スケジュールとユーザー対応

  • VulkanとOpenGLの併用期間 が設けられ、 スナップショット(開発版) で夏頃から順次提供予定
  • テスト期間中は両APIの切り替えが可能
  • パフォーマンスと安定性が確認され次第、OpenGLは完全廃止
  • 正式対応前に十分な猶予期間 が用意される

プラットフォーム情報

  • リリース日 :2011年11月8日
  • プラットフォーム :Linuxネイティブ対応
  • 情報元 :GamingOnLinux.com

Hackerたちの意見

悪名高いVulkanシェーダーコンパイルのラグスパイクに対する解決策があるといいな。

MinecraftのレンダラーはPSOが重すぎてカクつくことはないと思うよ。アーティスト主導のワークフローやカスタムマテリアル、シェーダーをサポートする最先端の計算駆動型レンダラーじゃないからね…ただのボクセルレンダラーで、非常に原始的なライティングしかないし。

俺は初心者じゃないけど、なんでプリコンパイルされたシェーダーがそれを解決しないの?

MicrosoftがAppleよりもKhronosの標準に親しみを持つことになるとは思わなかった。彼らがSPIR-Vをシェーダーコンパイラーのターゲットとして採用し、DirectXでのインジェストフォーマットとしても使うようになったから、Vulkanとの相互運用性が両方向でスムーズになったね。

悪くない選択だね…Minecraft Java版はデスクトップ専用だから、モバイルのひどいVulkanドライバーに悩まされることもないし。ただ、Microsoftみたいな大企業なら、各プラットフォームで最も安定したAPI(WindowsはDX12、macOSはMetal)を使ったクロスプラットフォームRHIを作るリソースがあると思ってたんだけど…。

マイクロソフトみたいな大企業は色々できるリソースがあるけど、オフィスチームからリソースを借りてこのプロジェクトを手伝ってもらうわけじゃないよね。重要なのは、Mojangがスタジオとして持ってるリソースだと思う。ここでの決定は、Java側で3つのレンダラー実装の長期的なメンテナンスを続けたくないってことだと思う。もう一つの懸念は、モッディングがJavaエディションの人気の大きな要因で、特にシェーダーが含まれてること。これだけでもモッディング界に混乱をもたらすのに、シェーダーモッドのメンテナンスをさらに面倒にする必要はないよね。

ベッドロックエディションではbgfxを使ってるよ。 https://github.com/bkaradzic/bgfx https://www.minecraft.net/en-us/attribution

正直、VulkanとDX12の選択はかなり表面的だと思う。でも、VulkanをmacOSで簡単に動かせるよね。特にチームがOpenGL出身なら、今の新しいプロジェクトでDX12を使う理由があまり思いつかないな。

モバイルでは、サードパーティのランチャーがANGLEを使ってEGLやMetalドライバーを利用してるよ。

正直、MicrosoftがJavaの実装を持ってるなんて驚きだよ。彼らはそれが存在しないふりをするタイプの組織だと思ってたのに!

JavaはMojang/Notchからのオリジナルバージョンだよ。コミュニティが十分に存在してるから、Javaを捨てると多くの拡張機能が壊れたり、サーバーが大反発するだろうね。Javaじゃないバージョン(Bedrock)もあるけど、あれは全然拡張性がないからね。

あなたがここでMinecraftを指しているのは分かるけど、さらに驚かせるためにこれを楽しんでね: https://en.wikipedia.org/wiki/Microsoft_Java_Virtual_Machine

これでメインスレッドのCPUオーバーヘッドが少しでも減るといいな。DX11からDX12、OpenGLからVulkanに移植したゲームの中には、APIの入れ替えだけじゃなくて、新しい高い並列描画コールの能力を活かす必要があったから、性能が上がったものも多いし。# メインスレッドはMinecraftではしばしば制約要因だからね。MinecraftはGPUがシーンを描画できる速さには追いつけないし、かなりの数のシェーダーがあってもCPUがボトルネックになってる。時間が経てばこれが改善されるといいな。Minecraftのモッディングにはもう少しCPUの時間が自由になると助かるし。

GPUでいくつかの計算を実装できるかもしれないね。Vulkanにはそれをサポートする機能があるから。これでボクセルレンダリングが加速されるかも。

JavaにVulkanバインディングがあるとは知らなかった。これってJNIのことかな?納得だね。どこかでまだOpenGLを使ってるのにはちょっと驚いたけど、実はMinecraftにはあまり詳しくないから、今の状態についてはあまり分からないんだ。デスクトップ用の非Java版があることすら気づかなかったよ。

できればJNIの代わりにForeign Function and Memory APIを使ってほしいな。

外部関数&メモリAPIについての他のコメントを詳しく説明すると、JNIは実質的に死んでるか廃止されてて、前述のAPIに置き換えられたんだ。開発者にとっては何倍も使いやすいよ。メモリの管理もずっとクリーンにできるし、外部関数(例えばVulkan)とやり取りするバインディングを作るのも簡単。最近のJavaリリースで最も過小評価されてる素晴らしい機能だと思う。

これは素晴らしいニュースだね。Rainbow Six SiegeがVulkan版をやめたときはすごくがっかりした。彼らはサポートの負担を理由にそれをやめたんだけど、スタジオのほとんどのゲームがDX11/12にデフォルトでなってたからね。その後少なくとも2年間、DX12でフレームのカクつきについての苦情が止まらなかった。あれ以降状況が良くなったかは分からないけど、ちょっと脱線するけど、Minecraft Java Editionにはもっと安全で堅牢なモッディングAPIが欲しいな。過去10年間、モッディングの努力はほとんど逆アセンブルしたモッドフレームワークの上にパッチを当てるだけだったから、ゲームの一部をモッドにさらけ出してたんだ。FactorioはLuaのサンドボックス化と制限されたAPIでこの点では理想的だよね。これは大きなセキュリティと安定性の問題だけど、マイクロソフトにはそれを修正する本当のインセンティブがないんだよね。

Bedrock用のはあるよ、一応。JavaScriptベース(QuickJS経由)。 https://learn.microsoft.com/en-us/minecraft/creator/scriptap...

R6の問題はそれだけじゃないからね!

Vibrant VisualsがMinecraft Java Editionに早く来てほしいな。Javaではシェーダーを使うのにモッドが必要なのが残念だよね。

macOSのことについては、AppleがVulkanを直接サポートしてないから、翻訳レイヤーを使うみたいだね(彼らはMetalという独自のAPIを作ったし)。どこに書いてあるの?MoltenVKを使えばいいのに?

MoltenVKが彼らが使ってる翻訳レイヤーなんじゃないかな。

うわ、これが原因で俺の古いマシン、Acer C720 Chromebook(Linuxで動くように改造したやつ)が壊れちゃうな。Intel HD4400のiGPUはVulkanをサポートしてないんだ!子供の頃、いいハードウェアが手に入らなかったから、MCがほぼどんなハードでも動くのは本当にありがたかった。

これが起こると、プレイヤーはOpenGLレンダリングとVulkanレンダリングを切り替えられるようになると思う。これって、MinecraftをOpenGLで使い続けられるってことだよね。

OpenGLが目標を達成したのは面白いよね。多くのデバイスでの互換性が一番高いグラフィックスAPIなんだ。