ソフトウェア

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

ゆびきたす
ゆびきたす

こんにちは!

ゆびきたすです。

Java版マイクラで

「クライアント」とか
「サーバー」とかよくわからん!

って方向けにザックリかみ砕いて解説してみます。

Server

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

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

やり方は「家の同一LANのPC同士のマルチ」でプレイ中で

二人マルチプレイの例

・PC(A)内のワールドでPC(B)でマルチをします

・PC(B)がネットワーク経由でPC(A)のPCにログインして二人で遊ぶ。

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

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

ザックリ解説します。

なお自身が特別にハードウェアやソフトウェアに詳しい専門家ではないため、感覚的に語ってしまっている箇所もあることをご容赦下さいませ。

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

サーバーとは

ポイント

(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君はクライアント動作していることになります。

つまりA君のPCは2人分のサーバーとしての演算をしつつ、A君自信のクライアントとしての機能も動作しているため、A君のPCは総じて負荷が高いと言えます。

また逆にB君PCの場合、各種エンティティやワールドデータの演算はサーバーたるA君のPCがメインで行うので負荷が減ることになります。

このクライアントとサーバー2つをハードウェア的に完全に分けることで軽量化できるよって話もあるくらいです。
イメージ図では以下のような感じで役割分担されています。

Server and Client Image

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

Open to LAN
Optifine Performance Settings

またOtifine(軽量化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

のようなイメージになるかと思います。
(簡略化のため色々省略)

AternosやConoha VPSなど外部サーバーを利用する場合はサーバーとクライアントが物理的に分割され、その間がネットワークでつながるイメージ。

ただゲームにおいてOpenGLで動作するのはややデメリットもあって、例えばnVdiaなどのグラフィックカード。

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

昔から言われていたのが

OpenGL性能はAMDの方が強い
もしくは
nVidiaであればQuadroシリーズの方が強い

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

nVidiaのラインナップ上、クリエイティブ・業務用途のQuadro(クアドロ)シリーズがあります。
このQuadro、そこそこパワーのあるカードは業務用だけあって非常に高額。

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

ゲーム・一般クリエイティブ用途のハイエンドカードが30~40万円に対しQuadroのハイエンド系は余裕の100万円超え。
筆者としてはQuadroとマイクラ比較してみたのですが、如何せん価格が高過ぎるし自身の用途的に無理…

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

Split

ゲームは通常プレーヤーが行けない場所や変更することができない、いわゆる背景みたいな中を行動するものが多いです。

しかしマイクラは岩盤ブロックや雲などを除いて世界中のブロックを履かしたり置き換えたりいわゆる「何でもできる」ゲーム。

軽量化modを入れない状態のいわゆる「バニラ」では見た目に反してわりと重め。
低スペックのノートPCで充分と思いきや、ものすごくカクカクして快適性に問題が出ることが多いです。

ノートはグラフィック性能が低めである点も原因としてありますが、同時に排熱の関係でCPUもデチューンされているケースが多いです。
たとえ多コア対応のCPUであっても、です。
またメモリ性能においても然り。

マイクラはマルチコアに対応した!と言って久しいですが、実際使用しているコア数は全体に少な目。
噂では「サーバーはマルチコアに対応した」と聞きます。
ではクライアント側は?

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

Single Play@Thread

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

CPUのシングルコア(スレッド)がもっと強ければFPSが伸びるのかな?と思います。

対してビデオカードに関しては意外にも30%ほど。
特にGTX1080Tiという製品からRTX3090になって完全にCPUのシングルコア性能がボトルネック状態です。
CPUクロックを5GhHzにしてみたりハイパースレッディングを切ったり色々試した限り変化に乏しくほぼ意味なしでした。
(消費電力と発熱で体感上デメリットしか無し)

つまりはCPU自体のIPCに関わっているのかなというところ。
解決策は…新世代CPU(&マザーボード)とDDR5メモリの熟成度次第かなと思います。

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

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

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

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

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

また外部サーバー契約する場合はサーバー側のスペックもですが、ネットワークの遅延にも少し気を付ける必要があります。

サーバーとクライアント間は細かで頻繁なデータパケットのやり取りを行います。
そのなかでサーバーまでの物理的な距離や経路によっては遅延(ラグ)に直結します。

Lag 273ms

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

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

Agames Ping

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

しかし問題は導入のハードルがまぁまぁ高いこと。
軽量さで考えるとWindowsなんかよりLinuxが有利なんですが、筆者自身まずは勉強が必要です。

そこでサクッとサーバーを用意するなら時短も考えると、やはり国内のサーバーなどを借りてしまうのも手ですね。
今後記事にする予定の「Agames」、無料の外国サーバーの弱点を克服した素晴らしいパフォーマンスでした!

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

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

では!


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

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

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

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

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

続きを見る

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

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

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

続きを見る

スポンサー

  • この記事を書いた人

ゆびきたす

妻子ありの4人家族の副業ブロガー
趣味のPC・家電のことを徒然なる心のままに描いています
Blogアイコン自作してみました。これからデジ絵トレーニング開始

-ソフトウェア