【中級者向け・軽量化方法】Minecraft Java版

f:id:riminosu13:20211024211430j:plain
MinecraftをOptiFineで軽量化する方法は有名ですが、それ以外の方法で更に軽くすることが可能です。軽量化色々試したけど重い、もっと軽くしたいといった人向けに、この記事では中級者向けのマインクラフト軽量化方法を紹介します。

はじめに

この記事は中級者向けです。Modの導入方法やパソコンの基本操作が分かる人のみ読み進めてください。
また、以下の軽量化は既に行っている・知っているものとして話を進めます。

OptiFine等の軽量化Mod
グラボの設定、電源管理、その他PCの設定
メモリ割り当て

※これらを行っていなくてもこの記事で紹介する軽量化に支障はありません。

クライアントとサーバーを分ける

f:id:riminosu13:20211024172103p:plain
Minecraftの描画処理はクライアント側で行われていますが、エンティティの処理や新規チャンク作成の処理などは、サーバー側が行っています。
視覚的な処理内部的な処理を別々に分けて扱うことはゲームにおいてよくあることなのですが、Minecraftでは視覚的な処理クライアント内部的な処理サーバーに分けています。

f:id:riminosu13:20211024173106p:plain
実は、シングルプレイでもサーバーが建てられていて、そのサーバーにクライアントが接続してMinecraftをプレイしているという状態になっています。(1つのPCで全ての処理を行うので重い。)

f:id:riminosu13:20211024172701p:plain
「LANに公開」ですぐにマルチプレイが開始できるのはこのおかげです。

f:id:riminosu13:20211024175800p:plain
Minecraftをプレイする用のPCサーバーを建てる用のPC2台を用意し、処理を分散させることでMinecraftを軽量化できます。

 

具体的なやり方は以下の通りです。

・別のPCでMinecraftサーバーの用意

・クライアントからサーバーに接続

①サーバー用PCにMinecraftサーバーを建てる

建て方はこちらの記事で紹介しています。

Spigotは軽量なサーバーですが、挙動がバニラと若干異なるので特定の機械やトラップタワーなどが動作しなくなる可能性があります。
完全にバニラと同じ状態でやりたい方は、バニラのサーバーを建てることをおすすめします。

2台目のPCがない方は、レンタルサーバーを使って建ててください。

おすすめのレンタルサーバーはこちら↓の記事で紹介しています。

②サーバーに接続する

マルチプレイに参加する要領で自分の建てたサーバーに接続します。

家庭内のPCで建てた場合、接続に必要なIPアドレスグローバルIPアドレスではなく、ローカルIPアドレスになります。また、建てているPCが参加するPCと異なるのでlocalhost127.0.0.1ではありません。必要なIPアドレスは、コマンドプロンプトから確認できます。

f:id:riminosu13:20211024191247p:plain
サーバーを建てたPCコマンドプロンプトを開きます。(Windowsの検索バー「cmd」と打つと出てきます。)

f:id:riminosu13:20211024190733p:plain
コマンドプロンプト「ipconfig」と入力しエンターを押してください。
すると、様々な情報が出力されます。その中にあるIPv4 アドレス」の値が参加に必要なIPアドレスです。

f:id:riminosu13:20211024191219p:plain
あとは、普通に接続して完了です。

f:id:riminosu13:20211024192101p:plain
私の環境では、エリトラで空を高速移動してもMinecraftが重くならないくらいには軽くなりました。
様々な内部処理をサーバーPCに任せられるので、動画を見たり、別のゲームをしたり、他のことをしながらでもMinecraftがプレイできます。

OptiFine以外の軽量化Modを使う

OptiFine以外にも軽量化Modはたくさんありますが、ほとんど効果がなかったり逆に下がったりしてしまったりします。

ですが、OptiFineと同等の効果がある軽量化Modも存在します。

Sodiumです。

comparison.png
出典: https://www.curseforge.com/minecraft/mc-mods/sodium

Sodiumhttps://www.curseforge.com/minecraft/mc-mods/sodium

SodiumFabric系軽量化Modで、サーバー側の処理を軽量化するLithiumと光源の処理エンジンを最適するPhosphorの2つのModと併用するのが一般的です。

Lithiumhttps://www.curseforge.com/minecraft/mc-mods/lithium

Phosphorhttps://www.curseforge.com/minecraft/mc-mods/phosphor

SodiumとOptiFineは競合するのでどちらかしか導入することはできません。

CPUGPUの種類などによってSodiumの方が軽くなったり、OptiFineの方が軽くなったりするので、両方とも試してみて自分のPCに合った方を使用してください。

※Forgeへの移植版もあるようですが、Fabric版をそのまま使った方が良いです。

NVIDIAのグラフィックボードを積んでいる方はNvidiumというmodもおすすめです。

Nvidium : https://modrinth.com/mod/nvidium

カクつかないメモリ割り当て(1.17以降限定)

Minecraftには、どんなに高スペックのPCでもたまにカクつく時があります。

f:id:riminosu13:20211025171836j:plain
このカクつきの原因として、最も多いのが「メモリ解放時の一時停止」です。

Minecraft Javaは、文字通りJavaというプログラミング言語で書かれています。

Javaコンパイル型言語なのでとても高速に動作し、JVM(Java仮想マシン)を利用してほぼ全てのコンピューターで実行可能という優れたものです。
しかし、その代償としてメモリ管理が残念なことになっています。

C++では使わなくなった変数をすぐに自動で消去(変数が独占しているメモリを解放)してくれるのに対し、Javaでは使わなくなった変数が溜まってから消去(GC: ガベージコレクション)します。しかも消去の処理中はプログラム全体の動作が一時停止したり、他の動作が遅くなります。

ですが、言語自体のアップデートで少しずつ改善されてきています。
GC(ガベージコレクション)をするGC(ガベージコレクター)にも、Incremental GCやParallel GC、G1GCなどの様々な種類が追加され、GC時に起きるプログラムの一時停止(カクつき)を少し軽減できるようになりました。

ここからが本題です。

Minecraft 1.17からJavaバージョンが16に更新されたことにより、ZGCが使用できるようになりました。
ZGCはとても少ないプログラム停止時間でメモリ解放ができ、マルチコアにも対応している最先端のGCです。

停止時間(値が小さいほど良い)

出典: Oracle 公式サイト

つまり、JVMの引数からZGCを使用できるように設定してあげることで、Minecraftプレイ中のカクつきを大幅に改善できるということです。

具体的な例はこちら↓

JVMの引数

-Xmx8G -Xms8G -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -XX:+AlwaysPreTouch

「-Xmx8G -Xms8G」の部分は自分のPCに合わせて調整してください。

f:id:riminosu13:20211025172412j:plain
実際に設定するとこんな感じです。
G1GCが高負荷なのに対し、ZGCは何も無かったかのようにメモリ解放しています。

性能の良いPCを購入する

単純に性能の良いPCを購入するのが手っ取り早いです。
色々設定しても結局はPCの性能次第なので、新しいPCを購入することをおすすめします。