見出し画像

【マイクラ】おすすめの軽量化MOD【検証編】

以下の記事で紹介した軽量化MODの効果を検証しました。
実際、軽量化MODでどのくらい効果があるのかの参考になれば嬉しいです!

まだ見てない人は先に見てください。↓


検証方法


マイクラ1.21.1、Fabric Loader 0.16.5で検証。
メモリ割り当ては8GB(引数:-Xms8192m -Xmx8192m)で、誤差をなるべく減らすために-XX:+AlwaysPreTouch引数(最初にメモリをすべて確保する)も付けました

ビデオ設定は、フレームレート無制限、垂直同期オフで、他はデフォルトです。描画距離は検証ごとに変えるので都度書きます。
視野は「最大」です。

PCスペックは以下の通り。
OS:Windows 11
CPU:Ryzen 7 5700X
GPU:RTX 4060 Ti 8GB
RAM:32GB DDR4-3200

FPSやGPU使用率の確認には、MSI Afterburnerというソフトを使います。
これを使うと左上にいろいろオーバーレイ表示がされるようになります。それぞれの数値の意味は画像の通りです。
主に赤枠の「平均FPS」の部分だけを見ればOKです(FPSが落ち着いてから数十秒間計測したときの平均になっています)

ちなみに説明は不要かもしれませんが、「FPS(フレームレート)」というのは「1秒間に何回画面が更新されたか」の数値で、もちろん高いほど良いです。

ワールドの描画


主要な軽量化MODであるSodium、Nvidium(Sodiumと一緒に入れる)、VulkanModの3つで平均FPSを比較してみます。
描画距離は32チャンクです。

バニラ

まずはバニラ。
平均89FPS。GPU使用率も39%と半分も使われていません。

Sodium

Sodium 0.5.11を入れた場合。
平均433FPS! なんと4倍以上伸びています。
GPU使用率もかなり高くなっており、性能がよく引き出されているのが分かります。
なお、葉っぱブロックがかなり明るくなっており、地形の影も少し形が違うようです。

SodiumとNvidium

Sodium 0.5.11に、Nvidium 0.3.1を追加で入れた場合。
平均705FPS。Sodiumから1.6倍と、さらにFPSが上がります。
見た目の変化はほぼないです(一応、水や色付きガラスの透過処理が改善されます。Sodium 0.6.0 betaで修正されていますが)。

VulkanMod

最後にVulkanMod 0.5.0-build.1の場合。
平均640FPS。Sodiumより軽く、Sodium+Nvidiumにも迫る軽さです。

なお、見た目はバニラから結構変わります。全体的にブロックが明るくなっており、遠くにある地形の描画の潰れ具合も違います。

EntityCulling


EntityCulling 1.7.0で検証。
なるべく検証対象の描画だけを行うようにするため、描画距離は2まで縮めます。

エンティティ(ブタ)

画像のように、壁を挟んでブタ500匹がいる方向を見た場合。

平均139FPS → 1949FPS
ブタの描画がまるまるスキップされていることが分かります。

ブロックエンティティ(チェスト)

今度は画像のように、チェスト4096個(16x16x16)を壁越しに見た場合。

平均123FPS → 1681FPS
こちらもチェストの描画がまるまるスキップされていることが分かります。

ImmediatelyFast


ImmediatelyFast 1.2.21で、それぞれの効果を検証します。
描画距離は同じく2。

GUI

サバイバルモードでチャットを開いた状態。
平均762FPS → 1586FPS(約2倍)

なお、以降の検証では、GUIの軽量化が影響しないようにF1でGUIを非表示にして計測します。

エンティティ(ウシ)

フェンスで囲った中にウシを100匹出した状態。
平均455FPS → 1016FPS(約2.2倍)

ブロックエンティティ(チェスト)

16x16に垂直でチェストを256個並べた状態。
平均1329FPS → 1255FPS(-6%)
なぜか少し下がりました。何回かやっても同じだったので誤差ではなさそうです。

ブロックエンティティ(ベッド)

同じようにベッドを256個並べた状態。
平均794FPS → 780FPS(-2%)
こちらも若干下がりました。ブロックエンティティへの効果が薄いのか?

看板

4行分ぎっしり文字を書いた看板を256個並べた状態。
平均442FPS → 587FPS(約1.3倍)

マップ

一番小さいマップを255個並べた状態(なぜかもう一個置けなかったんですが気にせず)。
平均58FPS → 84FPS(約1.4倍)

さらにImage2Mapで画像をマップにした場合。
平均425FPS → 1622FPS(約3.8倍)

ちなみに、最初の場合より軽い理由ですが、おそらく一箇所にマップを大量に設置したため、緑色の矢印アイコンが大量に重なって描画が重くなっていたからだと思います。

ビーコンビーム

16x16にビーコンを256個敷き詰めて起動した状態。
平均133FPS → 1060FPS(約7.9倍) めっちゃ軽くなる!

なお、長くなるので割愛しましたが、Sodium (0.5.11) と併用した場合もすべて同じように効果が出ました。強い。

Iris


Sodium 0.5.11とIris 1.7.3で検証します。
ワールドはImmediatelyFastの検証と同じものです。描画距離も同じく2。

エンティティ(ウシ)

Sodiumで、平均605FPS → 1126FPS(約1.8倍)

さらにImmediatelyFastを追加した場合は、平均1184FPSになりました(+5%)。

ブロックエンティティ(チェスト)

Sodiumで、平均1641FPS → 1536FPS(-7%)

さらにImmediatelyFastを追加した場合は、平均1400FPSまで下がってしまいました(-10%)。

ビーコンビーム

Sodiumで、平均 254FPS → 1182FPS(約4.6倍)

さらにImmediatelyFastを追加した場合は、平均1634FPSに上がりました(+38%)。

Enhanced Block Entities


Enhanced Block Entities 0.10.2で検証。
検証に使うワールドと、バニラの画像はImmediatelyFastの検証と同じものです。
描画距離は2。

ブロックエンティティ(チェスト)

平均1292FPS → 2280FPS(約1.7倍)
チェストは若干明るく描画されるようです。

ブロックエンティティ(ベッド)

平均780FPS → 2259FPS(約2.8倍)
こちらも明るさが少し変わって描画されるようです(底面が明るい)。

More Culling


More Culling 1.0.0で検証。

256x256に竹を敷き詰め、最大まで成長させた状態。成長はランダムな高さで止まるのですが、最大でも16ブロックまでです。
(つまり、256x256x16のスペースに竹がほぼ敷き詰められた状態)
描画距離は14です。

平均274FPS → 352FPS(約1.2倍)

ちなみに、自然生成の竹林ではFPSは上がりませんでした。地形などの描画量に対して、竹のカリング部分が小さすぎるせい?

足場

16x16x64に足場を敷き詰めた状態(16384個)。描画距離は3。
平均987FPS → 1262FPS(約1.2倍)

額縁

32x32の壁に額縁を置き、そのすべてに「鉄のインゴット」を入れた状態。
壁から20ブロックほど離れて計測するため、Frame LOD Culling(一定距離離れた額縁内のアイテムの側面を描画しない機能)が機能しています。
描画距離は2。

平均94FPS → 190FPS(約2倍)

ちなみに前述のLODは、入れたアイテムが「石」などのブロックの場合は機能しないようです。

地図が入った額縁のカリング

画像のように32x32の壁に地図入りの額縁を置き(255個)、それを後ろから見た場合。

平均57FPS → 1008FPS
地図の描画がまるまるスキップされているのが分かります。

看板のテキストのカリング

画像のように32x32に垂直にぎっしり文字を書いた看板を置き、それを後ろから見た場合。

平均74FPS → 1247FPS
こちらもテキストの描画がまるまるスキップされているのが分かります。

ビーコンビームのカリング

画像のように32x32にビーコンを敷き詰め、その中心で真下を見た場合。

平均35FPS → 120FPS
ビームは視野外のものがカリングされるようで、視野を下げるとさらにFPSが上がりました。

葉っぱブロック

これはビデオ設定で「Leaf Culling」の設定を変更する必要があります。
また、後述のSodium Leaf Cullingと比較するため、Sodium 0.6.0 beta2を入れて検証します。

描画距離32で、上空から森を見下ろしている状態。
Sodium環境で、平均381FPS → 処理優先モードにして平均451FPS(約+18%)

画像ではほとんど分かりませんが、近づくと葉っぱブロックの表面だけ描画されてスッカスッカになっています。

Sodium Leaf Culling


Sodium Leaf Culling 1.0.0で、Sodium 0.6.0 beta2を一緒に入れて検証します。
前述のMore Cullingの葉っぱブロック検証と比較します。

まずはデフォルトのSolid Aggressiveモード。
平均381FPS → 445FPS(約+16%)
More Cullingの処理優先モードに近い効果が出ています。

次にSolidモード。
平均381FPS → 413FPS(約+8%)
Solidモードはあまり効果が高くないようです。

最後にHollowモード(内側の葉っぱブロックを処理優先時のように描画せず、カリングのみを行う)。
平均381FPS → 445FPS(約+16%)
Solid Aggressiveモードと同じ結果になりました。

Particle Core


Particle Core 0.2.4で検証。

画像のような16x16x16の立方体(底にソウルサンドがあって、中の水すべてに泡のパーティクルが出ている)の右下を視野の端っこに映した場合。

平均486FPS → 997FPS(約2倍)
おそらく「正面のチャンクにはあるが、視野内に収まっていないパーティクル」の描画がスキップされているものと思われます。

※MSPTについて


以降は、サーバー側MODの検証になります。
そのため、今まで軽量化の指標としてMSI Afterburnerで平均「FPS」を見ていましたが、ここからは「MSPT」を見ます。

MSPTとは、Milli Seconds Per Tickの略で、1tick(ティック)あたりの処理時間を表します(ミリ秒単位)。
「tick(ティック)」というのはマインクラフトの処理単位で、マイクラは1秒につき20ティックで処理が進んでいます。
要は、MSPTが低ければ低いほど軽いです。

確認方法ですが、F3+2を押してデバッグ画面を出し、右下のグラフになっているのがMSPTです。
また、その上に表示されている数値が、それぞれ左から最小MSPT、平均MSPT、最大MSPTになっています。主に平均MSPTを見れば良いです。

ちなみに、検証では描画距離は8、最大フレームレートは余計な負荷を与えないよう60に制限します。

Lithium


Lithium 0.13.1で検証。
効果は広範囲に及ぶので、一部を検証します。

村人

処理負荷が大きいであろう村人が500体いる状態。
平均22ms → 12ms(約1.8倍の高速化)

ホッパー

64x64x32に131,072個のホッパー(下向き)を敷き詰めた状態。
平均31ms → 1ms(31倍の高速化)
軽すぎ!

アイテム

1ブロックの上に、木のシャベルを1500個ドロップさせた状態。
見るだけでMSPTが上がってしまうので、検証では反対方向を向きます。

平均39ms → 3ms(13倍の高速化)
ちゃんと1500個落ちてるんですが、かなり軽くなるようです。

Alternate Current


Alternate Current 1.9.0で検証。

減算モードのコンパレーターを使った高速クロック回路を大量に並べたワールドで検証します。

平均42ms → 2ms(約21倍の高速化)
また、バニラでは頻繁に最大83msまで上がるため、かなり処理落ちしていたのがまったく処理落ちしなくなりました。
とはいえ、この検証では大量のレッドストーンダストと、クロック回路で計算コストを上げたために、ここまで効果が出た感じはするのであくまで参考程度に。

ちなみに、Lithium 0.13.1の場合は平均23msでした(約1.8倍の高速化)。

ワールド生成


Noisium(検証結果により本編には出していませんが)、ScalableLuxC2ME (Concurrent Chunk Management Engine)Lithium(ついで)で、ワールド生成にどのくらい効果があるのかを検証します。
ChunkyというMODで2000x2000の範囲を生成し、掛かった時間がログに出力されるのでそれを比較します。

⋯のですが、今のPCでは実際に効果があるのか、ただの誤差なのかが分からなかったので、もっと性能の低いPCで検証します。

スペックは以下の通り。
OS:Windows 10
CPU:Core i5-3470
GPU:Intel HD Graphics 2500(内蔵グラフィック)
RAM:16GB DDR3-1600

メインPC(冒頭のRyzen 7 5700XのPC)とPassMarkのスコアで比較すると、シングルコア性能が57.4%、マルチコア性能に至っては17.5%にしか満たない性能です。10年前のCPUなのでこんなもんですね。

検証方法の詳細

マイクラ1.21.1、Fabric 0.16.7で検証。
メモリ割り当ては同じく8GBで、-XX:+AlwaysPreTouch引数も付けます。

ビデオ設定は余計な負荷を減らすため、描画距離2、演算距離5、最大フレームレート30、グラフィックを処理優先、スムースライティングはOFFです。
また、ウィンドウを小さくして解像度は854x480になっています。

検証の手順は以下です。計測回数が多く非常に手間がかかるので、マクロを組んで自動で行います。

  1. ワールド作成(クリエイティブモード、シード値は1)

  2. "/tp @s 0 320 0 0 -90" で上空へ移動(負荷軽減と、条件を揃えるため)

  3. CPU使用率が落ち着くまで待つ(5%以下くらい)

  4. 以下のChunkyのコマンドで、ワールド生成を開始
    /chunky center 10000 10000
    /chunky radius 1000
    /chunky start

結果

とっても長いので表にまとめました。

5パターンで掛かった時間をまとめています。
左から3つで20回、C2MEで3回、Lithiumで10回計測して、一番下の数値が平均値になっています。

軽量化MODなし
20回の計測で、平均9:13。
これが基準になります。

Noisium(2.3.0)
20回の計測で、平均9:15。
意外と効果はまったくないようです(2秒増えてるのはおそらく誤差)。

しかし、どうやら1.20.4以前だと効果があるみたいです
3つの旧バージョンでの検証データを以下にまとめました。Noisiumはどれもバージョン2.3.0です。

1.20.1と1.20.4では1分ほど短くなりますが、1.20.5ではほとんど変わっていません(5秒短くなっていますが、これが実際の効果なのかは分かりません)。
これについてGitHubにIssueを出したところ、開発者さんもまだ実際どのくらい効果があるのかは把握できていないようです。今後に期待。

ScalableLux(0.1.0)
20回の計測で、平均8:42。
30秒ほど短くなっていて、約5.6%の高速化です。
地味ですが効果はあるようです。

C2ME(0.3.0+alpha.0.291)
3回の計測で、平均17:42。
明らかに遅くなったので、計測は3回だけにしました。

遅くなった理由ですが、元からCPU使用率が100%だったので、並列化が逆効果になってしまったのだと思います。
メインPCではちゃんと速くなりました(詳細は後述)。

Lithium(0.14.0)
10回の計測で、平均9:23。
最適化の内容にワールド生成に関するものがあったので、ついでに検証したのですが、ワールド生成に直接効果はなかったようです。

メインPCでの結果

以上を踏まえて、Lithium以外のMODをメインPCでも検証してみました。

Noisium(2.3.0)
1.20.4以前で効果があることが分かったNoisiumですが、メインPCでは1.20.4でも効果は見られませんでした。
MODページのベンチマークでも、ある程度の性能があるCPUでは差がなかったようなので、おそらく正常だと思います。

ScalableLux(0.1.0)
誤差の可能性もありますが、メインPCでも若干速くなっているように見えます。

C2ME(0.3.0+alpha.0.292)
2倍も速くなっています。8コアすべてが使われたおかげでしょう。

C2MEとScalableLuxの併用
並列化された分、効果が大きくなるかと思ったのですが、全体のタイムが短くなって余計分かりづらくなってしまいました。
1:31が多いので若干速くなってる⋯のかも?

まとめ

2つの検証結果をまとめます。

Noisium
1.20.4以前で効果あり。ただ低スペックに限る。

ScalableLux
効果あり。ただスペックが高いと効果が薄い。

C2ME
効果あり。ただ低スペックだと逆効果。

Lithium
ワールド生成には効果なし。

その他MOD


Dynamic FPSや、ClumpsGet It Together, Drops! は説明通りの効果なので詳しい検証はしませんでした(ちゃんと1.21.1で機能していることは確認済み)。
また、FerriteCoreModernFixも、メモリ使用量の比較が面倒だったので検証していません(実際にメモリ使用量が削減されることは確認済み)。

最後に


以上です。
ここまで読んでいる人がいるかは分かりませんが、とーっても手間が掛かった内容になったので、この検証が参考になれば嬉しいです。
良ければ『スキ』お願いします!


この記事が気に入ったらサポートをしてみませんか?