1 ポイント 投稿者 GN⁺ 23 시간 전 | 1件のコメント | WhatsAppで共有
  • Minecraft 26.3 Snapshot 4では、ウィンドウ管理・入力・プラットフォーム統合バックエンドをGLFWからSDL3へ置き換え、キーボード入力にSDLのスキャンコードとキーコードを導入
  • キーバインドはキーボード配列ごとのコードではなく物理キーの位置を使用し、Linuxでは可能な場合Waylandを優先、macOSではネイティブの入力候補ウィンドウをサポート
  • カスタムかまど・醸造燃料用のデータコンポーネントが追加され、燃焼時間、使用回数、調理・醸造速度をnumber providerで設定可能
  • データパック111.0とリソースパック92.0で、看板のクリックイベント、戦利品テーブル参照、進捗トリガー、Mobスポーン環境属性、地形生成設定とシェーダーが大幅に変更
  • Windowsのマルチモニター環境とWaylandでは排他フルスクリーンでのクラッシュが既知の問題であり、テスト版はワールドを破損する可能性があるため、バックアップするか別フォルダーで実行する必要あり

SDL3ベースのウィンドウ・入力システム

  • ウィンドウ管理、入力、プラットフォーム統合ライブラリをGLFWからSDL3へ移行
    • キーボード入力は物理キーの位置にSDL scancodeを使用
    • キーボード配列によって変わるテキスト編集ショートカットにはSDL keycodeを適用
  • キーバインドはキーボード配列ごとのキーコードではなく、物理キーを基準に動作
  • Raw Inputのマウス設定を削除し、ゲームプレイ中は常に相対マウスモードを使用
  • ボーダーレスフルスクリーンがデフォルトのフルスクリーンモードとなり、再起動なしでボーダーレスと排他モードを切り替え可能
    • macOSでは排他フルスクリーンを今後サポートしない
    • 最小ウィンドウサイズは320×240ピクセル
  • Linuxでは利用可能な場合、Waylandをネイティブに優先使用
  • macOSでテキスト入力中にキーを長押しすると、ネイティブのアクセント・候補ポップアップを表示

既知のフルスクリーン問題

  • Windowsの排他フルスクリーンは、特定の状況、とくにマルチモニター環境でゲームのクラッシュを引き起こす可能性あり
  • Waylandでは排他フルスクリーンに入るとゲームがクラッシュ

プレイとインターフェースの変更

  • 観戦者モードのプレイヤーがポータルと相互作用してテレポート可能
  • アルマジロは液体に浸かったとき、丸まろうとしない
  • デバッグオーバーレイに個別のGUIスケールを適用可能
    • F3 + F6のDebug Optionsで設定
    • デフォルト値Autoは通常のGUIより高い解像度を維持し、Unchangedは通常のGUIスケールと一致
    • プレイヤーのティックあたりのブロック移動速度を示すplayer_speedと、ディスプレイのリフレッシュレート表示も追加
  • クリエイティブインベントリの鉱物の順序を、非ティア素材、未精製ティア素材、精製ティア素材の順に再配置
    • 建築ブロックは非ティア鉱物、精製ティア鉱物、Copper系の順で、項目数の多いCopperブロックは後方に配置
    • Natural BlocksタブはOverworld → Nether → Endの順に整理

カスタム燃料とアイテムコンポーネント

  • minecraft:cooking_fuelはFurnace、Smoker、Blast Furnace用の燃料を定義
    • burn_timeは燃焼ティック数、speed_multiplierは調理・製錬速度をそれぞれminecraft:number_providerで指定
  • minecraft:brewing_fuelはBrewing Stand燃料の使用回数と醸造速度を定義
    • 既存の#brewing_fuelアイテムタグは削除され、新しい醸造燃料の登録には使用不可
  • SmokerとBlast FurnaceのレシピはFurnaceと同じ調理時間を使用し、速度向上は燃料コンポーネントのminecraft:cooking/speed_defaultが担当
  • かまど・燻製器・溶鉱炉の調理および燃料時間フィールドはshortからintegerに変わり、speed_multiplierが追加
  • Brewing StandのBrewTimeFuelもintegerに変わり、total_brew_timetotal_fuelspeed_multiplierが追加
  • 追加されたデータコンポーネントは以下の通り
    • minecraft:sign_text_frontminecraft:sign_text_back: 看板の表・裏のテキストを保存し、アイテムのツールチップに表示
    • minecraft:waxed: 内容物がワックス処理済みであることを示すフィールドなしのマーカー
    • minecraft:cushion/color: 配置されたCushionに16種類の染料色を適用
    • minecraft:villager_food: 村人が食べられるアイテムと栄養値を定義
    • minecraft:mob_visibility: 装備がMobの検知距離に与える比率を0.0〜10.0で指定し、重複しても最大視野値は10.0を超えない

看板とデータパック互換性

  • データパックバージョンは111.0へ上昇
  • 看板のカスタムテキストのコマンドとクリックイベントは、デフォルトではブロッククリック時に実行されず、新しい看板のテキストコンポーネントも自動解釈されない
    • 新しいallow_op_featuresフィールドのデフォルト値はfalseで、以前の動作を復元するには明示的にtrueに設定する必要あり
    • 以前のバージョンで保存された看板と、看板データを含むminecraft:block_entity_dataにはallow_op_features=trueが適用
  • 配置後の看板編集画面は、ワックス処理されておらず表面テキストを編集できるなど、通常クリックで編集画面を開ける場合にのみ表示
  • 看板はminecraft:sign_text_frontminecraft:sign_text_backminecraft:waxedコンポーネントを受け渡し
  • /spreadplayersがプレイヤーを配置できる安全なブロックは、#entities_can_teleport_toブロックタグで制御

レジストリ参照と戦利品・進捗の変更

  • 専用レジストリを持つ戦利品テーブルタイプは、レジストリ要素とタグ参照をサポート
    • 単一要素フィールドはnamespaced IDまたはインライン値を受け取れる
    • リストフィールドはインライン値、単一・複数のnamespaced ID、インライン値リスト、#タグIDを受け取れる
    • 対象はadvancement、item modifier、loot table、number provider、predicate、recipe、slot source
  • predicate、item modifier、slot sourceの既存のreferenceタイプは不要になり削除
  • 進捗トリガーの複数のフィールドは、インラインpredicateだけでなくnamespaced predicate IDも受け取れる
    • 既存条件リストの暗黙的なminecraft:all_of動作が削除され、typeを必ず指定する必要あり
    • 複数のblockrecipe_idloot_tableフィールドはそれぞれ複数形に変わり、単一ID、リスト、タグをサポート
  • Loot Pool Entryのconditionsconditionfunctionsmodifierに名称変更
  • Loot Functionのconditionscondition、関数タイプを示していたfunctiontypeに変更
    • インライン条件リストは今後受け付けず、同じ動作にはminecraft:all_ofを明示する必要あり
  • Predicateのタイプフィールドconditiontypeに変わり、minecraft:referenceminecraft:block_state_propertyは削除
    • 新しいminecraft:match_blockはブロックID・タグ、状態、NBT、コンポーネントとコンポーネントpredicateをまとめて検査
  • インラインnumber providerは常にtypeを明示する必要があり、今後minecraft:uniformをデフォルト値として使用しない
  • 調理燃料ごとの燃焼時間とデフォルトの調理・醸造速度、醸造回数を提供する複数のVanilla number providerが追加

Mobスポーンとワールド生成

  • 新しい環境属性minecraft:gameplay/natural_mob_spawnsが、カテゴリー別の重み付きMobスポーンとエンティティ別spawn costを定義
    • ワールド生成配置中はDimensionとBiomeのみがこの属性を適用
    • overlay修飾子は上位階層のカテゴリー設定と同じエンティティのspawn costを優先適用
  • minecraft:gameplay/creature_world_gen_spawn_probabilityは、ワールド生成中のcreatureカテゴリーMobスポーン反復確率を0以上1未満で指定し、デフォルト値は0.1
  • Biomeのspawnersspawn_costscreature_spawn_probabilityは削除され、新しい環境属性へ移動
  • 周囲パーティクル環境属性は、タイムラインのキーフレーム間の確率を補間し、下位階層のパーティクルリストに項目を連結するappend修飾子をサポート
  • Noise Settingsでaquiferとore vein設定を、それぞれ任意のaquifersオブジェクトとore_veinsリストに再構成
    • 設定がなければ該当するaquiferまたはore veinを生成しない
    • 関連するdensity functionフィールドはnoise_routerから新しい構造へ移動
  • Density Functionにsubdivnegatelerpfloorroundceiltruncatebeardifierが追加
    • 複数の既存引数名はvalueleftrightinputnoiseに変更
    • invertreciprocalに名称変更
    • final_densityには今後beardifierが暗黙的に加算されない

グラフィックと主なバグ修正

  • リソースパックバージョンは92.0へ上昇
  • 順序非依存透明度(order-independent transparency)をサポートするシェーダーとOIT_ALWAYS_WRITE_DEPTH定義が追加
  • core/integrate_depth.fshは3D HUDと常に上に表示されるgizmoの深度バッファをメイン深度バッファに統合
  • 修正された主な問題は以下の通り
    • 非QWERTY配列とmacOS・CJK入力に関連するキーバインドおよび入力問題
    • Improved Transparencyでの地図レンダリングのクラッシュ、ガラス・半透明オブジェクト・パーティクル・ワールド境界表示の問題
    • ワールド高度外の発射体と最低高度でのミツバチの巣配置によって発生していたクラッシュ
    • ワールド生成のheightmap保存・読み込み問題とtick sprint後のMob位置の非同期化
    • Cushionの配置、色、カスタム名、燃料時間、衝突判定の問題
    • Ender Dragonのダメージ・飛行、観戦者のポータル使用、/spreadplayersの安全ブロック判定の問題

インストールとテスト時の注意事項

  • SnapshotはMinecraft: Java Edition向けで、Minecraft LauncherInstallationsタブでSnapshotを有効化してインストール
  • テスト版はワールドを破損する可能性があるため、バックアップするか、通常のワールドとは別のフォルダーで実行する必要あり
  • クロスプラットフォーム用のMinecraft server jarも提供
  • バグはMinecraft issue tracker、意見はFeedbackサイトで提出可能

1件のコメント

 
Hacker Newsのコメント
  • このバインディングのLWJGL実装はGTNHモッドパックのチームメンバーが書いたもので、vanilla→modded→vanillaの循環が再び完成した https://github.com/LWJGL/lwjgl3/pull/1033

    • 大げさに言えば、GTNHはMicrosoftよりもMinecraftに多く貢献してきたとも言える。少しだけ自分でも貢献したから言うわけではなく、注がれた労力と作業量は驚くべき水準
    • 現在のMinecraft開発者のうち、以前モッダーだった人や今もモッダーとして活動している人がどれくらいいるのか気になる
  • 最近、ゲームTribal Trouble(https://github.com/bondolo/tribaltrouble)をGLFWからSDL3へ移行したが、全体としてはスムーズなリファクタリングだった。排他的フルスクリーンとデスクトップフルスクリーンでいくつか問題はあったが、最終的には解決できた
    厄介な画面モード処理を試して文書化するためにデモも書いた。ゲームはMinecraftのようにJavaだが、デモはできるだけ単純にするためCを使った

    • Tribal Troubleとは本当に久しぶりに聞く名前。開発者がゲーム開発に変わった、あるいは珍しい言語を使いたくてJavaを選んだと言っていたのを覚えている
    • GLFWに問題があったのか、それともどんな理由でSDL3への移行を選んだのか気になる
  • Windowsの排他的フルスクリーンは、特にマルチモニター環境でゲームを壊すことがあり、Waylandでは入るだけで壊れるという既知の問題がある。どちらも普通はスナップショットを延期してよいブロッカーバグに見えるので、正式リリース前には直ってほしい

    • スナップショットは、ブロッカーバグも含めた現在のメインブランチの状態をそのまま配布するもの
      安定性への期待値は、長期サポート版、正式版、リリース候補、ベータ、アルファ、スナップショット、たった今マージされたコミット、未マージのPR、ドラフトPRの順だと考えている。大きなバグならリリース候補やベータを遅らせるべきだし、致命的なバグならそもそもマージを止めるべきだが、CIを通ってマージされたバグのせいでスナップショットを遅らせる理由はない
      スナップショットは、ユーザーが自分でmainをビルドしなくても実行してフィードバックできるよう、現在の状態を定期的に切り出して配布するものに近い
    • 正式リリースなら延期できるが、スナップショットを延期する理由はない。現状のまま配布して、既知の問題がどれくらいの頻度で発生するかをテレメトリで把握し、まだ知られていない問題も正式リリース前に見つけられる
      スナップショットはバグがないと約束したことはなく、むしろその逆が前提
    • Minecraftは、特に設定しない限り、かなり前からボーダーレスフルスクリーンを使っていたはず。この10年あまりで、多くのプラットフォームやサービス、アプリが排他的フルスクリーンを廃止してきた
    • 最近では、排他的フルスクリーンよりフルスクリーンウィンドウ描画のほうが一般的。ウィンドウマネージャーは、最前面のフルスクリーンウィンドウにも、昔は排他モードにしか適用していなかったのと同じ最適化を普通に適用する
    • スナップショットなのだから起こりうる問題で、次のスナップショットでは修正されている可能性が高い
  • Minecraftをまったく知らない技術者の父親が、2026年に家族用サーバーを立てるにはどうすればいいのか気になる。子どもたちは今のところiPadと、ときどき古いMacBookやWindows PCで遊んでいる

    • MinecraftにはJava版とBedrock版の2つのエディションがある。モバイル・コンソール・Windows Store版はBedrockベースで、Webサイトから直接入手するものはJava版
      標準のJavaサーバーを運用しつつ、GeyserでBedrockプロトコルをリアルタイム変換できる。制約の厳しいBedrockクライアントには回避策が必要なこともあるが、選択肢の多いJavaサーバーを中心に管理できる
    • ネット上のMinecraft JVMチューニング指南は古いか間違っていることが多いので、無視したほうがよい
      最新のJVMを使い、許容できる範囲まで最大メモリを増やしてZGCを使えば十分。根拠なく多数のフラグを調整したり、Eden領域サイズと目標停止時間のような相反する設定を一緒に入れている指南もある
      ZGCはレイテンシが非常に低く、ヒープが大きいほど性能低下が少ないが、オブジェクトヘッダー圧縮を維持するには32GB未満にしておくのがよい。最新のJVMはメモリ使用量と全体的な性能も改善してくれる
    • Java版バニラサーバーの設定方法に従えばよい。Java版はWindows・macOS・Linuxでしか動かないが、Bedrock版よりバグが少なく、より良いと思う
      さらに性能が必要ならfabriclithiumを入れればよい。Paper・Spigot・Purpurのようなものは自動化設備を壊すことがあるので避けたほうがよい
    • スマートフォンやタブレットのMinecraftはJava版より閉鎖的で制限も多く、選択肢が減る
      itzg/docker-minecraft-serverを何年も安定して使っており、依存関係を一つずつ入れなくてもイメージが全部処理してくれる点がよかった。Bedrockサーバーのイメージもあるが、うまく動かせなかった
      最も楽に運用するには全員がWindows・Mac・LinuxでJava版を使うことだが、そうでなければホスティングサーバーのRealmsを契約する方法もある
    • 子どもたちがiPadで遊びたがる好みを考えると、Realmsも見てみる価値がある。月7ドルほどで10人用サーバーを提供しているはずだが、JavaとBedrockで契約が分かれており、料金プランも何段階かに細分化されている
      家族サーバーの目的によっては合わないかもしれないが、子どもたちが素早く簡単に一緒に遊ぶには最も簡単な方法。長い間BedrockにこだわってからJavaへ移り、もっと早く切り替えなかったことを後悔した子どもたちも見てきた
  • Icculus が SDL2 から SDL3 へゲームを移植する素晴らしい動画を上げており、Doom の移植動画はこちら: https://www.youtube.com/watch?v=ixdeGhsoxy8

    • Chocolate Doom が SDL3 に移植され、しかも Icculus 自身が作業しているとは知らなかった。知っている Doom 移植版では Woof! がすでに移行済み: https://github.com/fabiangreffrath/woof
  • Minecraft が単なるゲームよりも、ますます 独自のゲームエンジン に近づいているのが驚き

  • GLFW を離れた理由が文書化されているのか気になる。GLFW を使っているプロジェクトがあるので、SDL のほうがより良い選択なのか いつも考えてしまう

    • 今回のアップデートで Wayland 対応 が追加作業なしで動くようになった。以前は回避策が必要で、適用しても新しい問題が次々に出ていたが、たいていは XWayland で動かせれば十分と考えてあまり気にしていなかった
      SDL3 は Wayland 対応がもともとしっかりしている。Minecraft では GLFW はウィンドウ生成、タスクバーアイコン、フルスクリーン、入力にしか使っておらず、残りは生の OpenGL で処理しているので移行も簡単だった。今では Vulkan まで対応し、Linux デスクトップと Steam Deck で完全にモダンなスタックを使える
    • SDL はモバイルをサポートするが GLFW はそうではないので、プラットフォームごとのコードベースを統合しようとしているのかもしれない
      SDL3 は Android 4.2 でも動作し、Java なしで SDL3 と ImGui だけでアプリを作ったこともある
    • 理由の一つは 入力メソッド (IME) 対応
    • SDL はほとんどどこでも使える プラットフォーム層 に近い。ウィンドウ、グラフィックス、オーディオ、入力、ネットワーク、スレッドをすべて提供するが、GLFW はウィンドウ、グラフィックスコンテキスト、入力しか提供しないので、残りのライブラリは自分で用意する必要がある
      すべてのプロジェクトで大きな差になるとは限らないが、SDL のほうが機能が多く移植性も高い
    • OpenGL や Vulkan がなくても SDL API だけで完全な 2D ゲーム を作れる
  • リズムゲーム osu! も最近 SDL2 から SDL3 に移行し、性能とレイテンシが大きく改善した。SDL3 の導入はやや遅く見え、Minecraft が今まで GLFW を使っていたのも意外
    特に SDL3 へ移行した後は、osu! 実行中に Discord クライアントを開いていたときに起きていた遅延が消えた。YouTube の開発動画で見た内容だと記憶している

    • Linux の一部ディストリビューションでは sdl2-compat と sdl12-compat が SDL2・1.2 のデフォルト実装なので、すでに SDL3 を間接的に使っている 場合が多い。おかげでより多くのアプリが XWayland よりレイテンシの低い Wayland でネイティブ動作し、コントローラー対応も良くなる
      Ubuntu 24.04 には最初から SDL3 が含まれておらず、SDL3 が思ったより新しいため、導入速度が期待より遅い理由の一つに見える
    • osu! は主要デスクトップ OS 3 種に加えて iOS・Android もすべてサポートし、Wayland のような機能もネイティブのまま維持しようとして SDL3 への移行に約 2 年 かかった。今回の移行で初めて実際の最終段階に到達したようだ
    • SDL3 では複数の API が変わって導入がより難しくなっており、特に バインディングライブラリ を通すと負担が大きい
  • SDL2 は特に Vulkan・Metal を含む GPU API 抽象化 で老朽化が目立っていたため、SDL3 への移行は妥当。Java 版の Linux で長く続いていた入力遅延や Alt+Tab の問題も、ウィンドウ・入力層の変更で解決するのか気になる

    • 実際の移行対象は SDL2 ではなく GLFW だったので、新しく選ぶなら自然に SDL3 を選ぶことになる
  • モッドを活発に支援するには、Java や C# のような 逆コンパイルやランタイム改変が容易な言語、あるいは JVM や .NET CLR を使うほうが良さそう
    内部変更を行いながらモッダーまで考慮するなら、実質的に追加コストなしで優れたモッディング API を得られる

    • モッドが非常に多いゲームに本当に必要なのは 十分に大きなユーザーベース だけ。熱心なモッダーにとって、多少のバイナリパッチや DLL 注入は障害にならない