広告が含まれる場合があります ソフトウェア

Java版マインクラフトのクライアントとサーバーとは

2022年10月22日

Server and Client Eyecatch

https://creas-labo.org

ゆびきたす
ゆびきたす

こんにちは!マイクラ歴10歳のゆびきたすです。

Java版マイクラで「クライアント」とか「サーバー」とかよくわからん!って方に向けてザックリ解説します。

管理人はかなり遅まきながら「Aternos」という外部ネットワークへ接続するサーバーでマルチを初体験。

元々ぼっちシングルプレイが好きなのですが、数年前から二人の息子たちに誘われてマルチをしています。

その方法は「家の同一LANのPC同士のマルチ」でプレイ中で下のような手順を踏みます。

二人マルチプレイの例

PC(A君)内のワールド内で他のPC(B君)と一緒にマルチプレイしたい

PC(B君)が自宅内ネットワーク経由でPC(A君)のPCにログインしてプレイ

マイクラの一機能「LANに公開」を使う

入られる側のA君のPCが「サーバー」、入っていくB君のPCがクライアントという関係になります。

※実際にはA君のPC内のサーバーに自分もログインしているのでサーバー兼クライアントです

ここで引っ掛かる「クライアント」と「サーバー」という用語。

ザックリ解説します。

マイクラのサーバーとクライアント

Minecraft-Server

サーバーとは

ポイント

(IT分野での広義は)サービスを利用者のリクエストに応じて提供するソフトウェア、あるいはその機能が稼働しているコンピュータのことである
(出典:サーバー wikipedia

Java版マイクラでは、Javaの環境下でエンティティの演算処理、ワールドの作成処理など計算を伴う作業をサーバーが担います。

エンティティという単語は以下の引用から。

エンティティ(英語:Entity)とは、Minecraftの世界における、動きを持つオブジェクトすべてを指すものである。

Minecraft Wiki

例えばmob(クリーパーなどの敵対生物や村人など)、ボート、トロッコ、落下する砂ブロック、トーチの火の粉など多くは動くものがエンティティです。

また設置だけでは動かないものもあって、例えば額縁もエンティティとなります。

いろいろなブロックやアイテムを飾ることができ、かつ回転も可能だったりと内部に様々な変数のようなものを持つためです。

新旧どのバージョンでも額縁を大量に設置すると劇的に重くなります。

エンティティは以下の説明文の通り実に多種多様です。

Minecraft  Entity
出典:Minecraft Wiki

動く・変化が伴うもの、内部に何かしら数値的なものを内包している物には様々な演算が伴い、これらの演算がサーバーの役目の1つ。

対してクライアントは一般的には下の通り。

ポイント

顧客、依頼人、などの意味を持つ英単語で、他のコンピュータやソフトウェア(≒サーバー)から機能や情報の提供を受けるコンピュータやソフトウェアのこと
(出典:クライアントとは IT用語辞典 e-Words)

ザックリ言うとマルチサーバーに接続したときの操作側の自分のPCクライアントです。

なお1台のPCでのシングルプレイ時でサーバーを立てていないと見える状態でも、実は内部ではサーバーとクライアント2つで動作しています。サーバーは描画を直接行わず、それに関わる計算を数多くこなしているため、その性能はCPUやメモリ依存しています。

冒頭の例では、A君のPCはクライアント+サーバー兼任で動作、B君のPCはクライアント動作していることになります。つまりA君のPCは2人分の演算をしつつ、A君自身のクライアントとしても動作しているため、A君のPCは総じて負荷が高いと言えます。

また逆にB君のPCの場合には各種エンティティやワールドデータの演算はサーバーたるA君のPCが行うので負荷が減ることになります。クライアントとサーバー2つをハードウェア的に分けることでマイクラの動作を軽量化できるよって話もあるくらいです。

イメージ図では以下のような感じで役割分担されています。

Server and Client Image

うかがい知れるのがシングルプレイ時の先の「LANに公開」項目です。
比較的手軽にマルチができるのは、内部サーバーが既に稼働しているからこそです。

Open to LAN
Optifine Performance Settings

またOptifineという軽量化modの設定には、「サーバー負荷を分散」という設定項目もあります。

※ONにするとスポーン地点から離れた場所にいる場合、スポーン地点の各種演算が停止します。そのため負荷軽減になります。
ただ例えばスポーン地点にアイアンゴーレム・トラップのような放置系のトラップ機構がある場合停止してしまいます。
つまりトラップ稼働のためには自身がスポーンエリアにいる必要があります。

マイクラはシングルプレイであろうと実はサーバー機能が内部で動いているのです。

Java版マインクラフトの構造をざっくり解説

マイクラは「Javaの仮想マシン環境でOpenGLを使って描画されるゲーム」と解説されます。

クライアントPCでは、グラフィックドライバと同時にインストールされるOpenGLというAPIを使って最終的な「描画」につなげます。

ポイント

APIとは本来直接通信・やり取りができないソフトウェアなどやプログラムなどの間に立って対話可能にする窓口のイメージ。

java環境のマイクラプログラムは、モニターに見える形で出力するグラフィックドライバー/GPUと直接データのやりとりができません。
※GPUはグラフィックカードやCPU内蔵グラフィックを指します

そこで「OpenGL」というAPIが仲介してグラフィックドライバーが処理できる形にしてデータを渡します。このようなグラフィックAPIと言われるものは、他にDirectX(Windows専用・統合版のマイクラはこれ)などがあります。

なぜjava版マイクラの初期からOpenGLが使用されてきたのか?

それはOpenGLの特性そのままだと思われます。

OpenGLの特徴

  • Windows、iOS、Linuxなどの幅広く対応できるクロスプラットフォーム
  • 構造が比較的単純
  • 連携できる外部ライブラリが非常に豊富

いろいろな環境に対応できて開発が比較的やりやすいものと捉えられます。

1台のPC内で動作するマイクラをザックリ簡略的に図示すると

Server and Client and OpenGL

のようなイメージになります。

OpenGLを経てグラフィックカード内で描画データが作成され、最終的にはモニターへ映像信号が伝達されます。AternosやConoha VPSなど外部サーバーを利用する場合は、サーバーとクライアントの間がネットワークでつながっているイメージです。

ただゲームにおいてOpenGLで動作するのはややデメリットもあります。

多くのゲームがDirectX11や12を使うのに対し、グラフィックカードの動作において(ハードウェア的にも)OpenGLは動作制限があるということです。

ずっと昔から言われてきたことがあります。

OpenGL性能はAMD製の方が高い
もしくは
nVidia製であればゲーミングのGTX(RTX)シリーズよりもQuadroシリーズの方が高い性能

しかし最近はそのバランスも崩れてnVidiaにおいてもOpenGLゲームの最適化の面では制限が緩くなっています。

nVidiaでは業務用途のQuadro(クアドロ)シリーズがあります。
このQuadro、そこそこパワーのあるカードは業務用だけあって非常に高額です。

Quadro
出典:パワフルなビジュアルコンピューティング…

ゲーム・一般クリエイティブ用途のハイエンドカードが30~40万円に対し、基本業務用のQuadroハイエンドは余裕の100万円超えです。

この業務用ビデオカードの存在があるだけに、ゲーム用途のGTX/RTXはOpenGL性能がややデチューンされているとも言えます。

マインクラフトの軽量化の方法:サーバーを分ける

Split

通常ゲームではプレーヤーが行けない場所や変更することができない箇所が多くあります。

しかしマイクラは岩盤ブロックや雲などを除いて世界中のブロックを壊したり置き換えたりできる幅がかなり広い「サンドボックス」ゲーム。軽量化modを入れない状態のいわゆる「バニラ」では、めちゃくちゃ軽く見えるドットな見た目に反して重めで、例えばCPU内蔵のグラフィックで充分と思いきやカクツキが非常に強く低いフレームゆえに快適さからは程遠いです。

またマイクラにおいては4コアを超えるコア数はアドバンテージが若干薄いのも1つあります。

マイクラはマルチコアに対応した!と言って久しいですが、クライアントPCで見ると使用しているコア数は全体に少なめです。なおサーバー部分はマルチコアに対応しています。

ではクライアント側は?

クライアント側は描画だけを行っているわけでなく、CPUの演算パワーを使って実際のフレーム生成にも関わります。

タスクマネージャを見ると1コアの依存性が非常に高いです。CPU速度的には設定MAX値の4.7GHzに届いている部分もあり、検証機のCore i7-8700kではCPUがボトルネックになっている可能性が大です。

Single Play@Thread

(Aternosなど)物理的にサーバーを分けても同一PCでサーバーを兼任した場合も似た傾向でした。

CPUのシングルコアがもっと高性能であればフレームレートが伸びそうです。

(クロックを5GhHzにしてみたりハイパースレッディングを切ったりしましたが、ほぼ効果なし)

描画に対しては高フレームレートを要求するする場合、当然CPU負荷が高まります。

元々CPU処理が遅めの場合、追加でサーバー部分の演算も負荷として重くのしかかります。
(特にjava版はサーバー上スポーンチャンクをバックグラウンドでも読み込んで演算しているため)

Aternosの記事において、よりCPU性能が低い場合は外部にサーバーを置くことでFPS向上が見込めました。

軽量化のヒントとしてはマルチにおけるサーバーとクライアントの分離です。

シングルプレイにおいてもサーバーを物理的に分ける

贅沢なやり方ですが高FPSを突き詰めるとこの形になりそうです。

また外部サーバー契約する場合はサーバー側のスペックもですが、ネットワークの状態に注意する必要があります。

サーバーとクライアント間では細かで頻繁なデータのやり取りを行います。

そのなかでサーバーまでの物理的な距離や経路によっては遅延(ラグ)に直結します。

Lag 273ms

※過去のAternosサーバーの記事ではこのラグが気になってしまうことも触れています。

比較として契約してみた「Agames」サーバーの場合は10分の一の遅延。
(Aternosは250~300msでラグがかなり大きい)

さすが国内サーバーといったところです。

Agames Ping

遅延を気にする場合自宅にマイクラ用サーバーを立てるのが一番有利だと思います。
また他のゲームでもクライアントとサーバーが別れて動作しているのものがあるので、やり方次第では他のゲームでも生かせそうです。

しかし問題は導入のハードルが高いこと。
軽さを考えるとWindowsよりLinuxが有利ですが、相応の知識が必要です。

そこでサクッとサーバーを用意するなら時短も考えると、やはり国内の外部サーバーなどを借りてしまうのも手ですね。

以上ザックリ分かったような分からないような記事を読んでいただいてありがとうございます。

さてマイクラ楽しんでいきましょう!

では!


以上を踏まえて無料の外国サーバー、有料の国内サーバーの2つを試してみました。

初めての外部サーバーAternosの記事

Aternos Server EyeCatch Image
ATERNOS: マイクラ無料サーバーの立て方をザックリ解説

マインクラフトの無料マルチプレイサーバーで有名なAternos。
どうせ無料だから低スペックでガクガクカクカクなんでしょ?

そんな先入観を持っていたのでfpsを中心に簡単にですが検証してみました。

続きを見る

サクサク動作してまるでローカル環境のプレイできたAgamesの記事

MultiPlay EyeCatch@Agames
AgamesでForgeマルチプレイ:国内最安サーバーの立て方と契約の注意点

以前Aternosという無料サーバーでマルチをしていました。
そうすると解決したい課題も見えてきます。
まずはラグを何とかしたい、でもできるだけ安価に。
それを実現すべく国内最安とうたわれるAgamesというサーバーを、使い方を含めて検証!

続きを見る

スポンサー

-ソフトウェア