概要
突然ですが、動作が軽いゲームって低級ライブラリを低級言語で書けば作れると思っていませんか?
私は趣味でRubyやPythonを使ってミニゲームをよく作っています。ですが、完成品を実行ファイル気にして友人に遊んでもらうと、動きがモサっとしていてダサい。
この問題の解決のために、言語とライブラリを選びなおそうと思ったので、「軽く動作するライブラリとはなんなのか?」を調べてみました。
検証するフレームワーク
-
SDL2
- C++で記述する。後述のライブラリに比べて低級なライブラリ。
- 初期のUnreal Engineや多くのsteamゲーに使われていて実用的。
- 「低級ライブラリ・低級言語」枠(今回の検証で一番軽い事が予想される。)
-
SiV3D
- C++で記述する。SDL2に比べ、ウィンドウやレンダラーの作成やオーディオの設定などをライブラリ任せで開発できる。
- 「(SDL2に比べ)高級ライブラリ・低級言語」枠
-
Gosu(Ruby)
- Rubyで記述する。ウィンドウ表示やメインループ、I/OにSDL2を使用している。(SDL2のwrapperであると考える。)
- 「高級ライブラリ・高級言語」枠
実験内容
条件
- 表示要素(単位:px)
- 画面 幅1400, 高さ700
- 外枠の厚み5, 弾の辺の長さ5
- フレームレートは60fps制限
- 動き
- 画面内で5000個の弾がランダム方向に直線移動する。
- 外枠に当たると跳弾する。
- 開発にあたって
- 筆者ができるだけ同じアルゴリズムで動作するプログラムを書く。
- VisualStudioで開発しリリースビルドした実行ファイル、もしくは言語とライブラリを実行ファイルにまとめたものを使用する。
- 環境
- OS: Windows10
- CPU: Ryzen 7 1700
- RAM: 16GB
- GPU: GTX 1070
画面スクショ
検証結果
SDL2は作るの大変だったし、さぞかしCPUとかGPUに優しいんだろうなぁ~・・・・
...全然SDL2軽くないやん!?
順位
- CPU使用率
順位 | ライブラリ名 |
---|---|
1位 | SiV3D |
2位 | Gosu(ruby) |
3位 | SDL2 |
- メモリ使用量
順位 | ライブラリ名 |
---|---|
1位 | SDL2 |
2位 | SiV3D |
3位 | Gosu(ruby) |
- GPU使用率
順位 | ライブラリ名 |
---|---|
1位 | SiV3D |
2位 | Gosu(ruby) |
3位 | SDL2 |
考察
低級言語・低級ライブラリ代表のSDL2はマシンに優しくない事が分かりました。
Gosu(ruby)はそもそもコンパイルしていないので全体的にスコアが低くなるだろうと予想していましたが、
まさかSDL2がCPUパワー・GPUパワーの両方で最下位を記録するとは・・・
それでは低級言語・低級ライブラリの強みとはなんでしょうか?
実は、作成した実行ファイルの大きさを見ると一目瞭然です。
ライブラリ名 | 実行ファイル容量 |
---|---|
SDL2 | 13KB |
SiV3D | 24,000KB |
Gosu | 4,000KB |
SDL2で作った実行ファイルはまさかの13KBでした!
まとめ
- ライブラリによってCPUパワーとGPUパワーの使用に偏りがある。
- 低級言語・低級ライブラリを使っても動作は軽くならないが、ファイルが小さくなる。