北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

ECS について調べたこと

ECS とは Entity Component System のこと。

Entity component system - Wikipedia

wikipedia の歴史によれば、 2002 年の Scott Bilas の GDC2002 での講演が起源のようだ。

https://www.gamedevs.org/uploads/data-driven-game-object-system.pdf

元々は、デザイナーとプログラマーの協業のために、 C++ の静的なクラス階層ではなく、データ駆動型の API でゲームを構成しようとするものである。

さらにこれを体系的にまとめたものとして、 2013 年の Martin, Adam のブログが挙げられている。ただ、このブログは今日現在、 google のキャッシュからしか見ることができないようだ。 Part 2 以降を読みたければ、随時検索して google のキャッシュを表示させる必要がある。

webcache.googleusercontent.com

Adam のエントリで面白かったことは、 ECS を RDBMS と類似しているものとして語っているところだ。MMOの世界ではユーザのデータはネットワーク経由で RDBMS に格納することになるので、データ駆動の考え方である ECS とは相性が良いのだろう。

さて、 Rust の ECS 実装としては、 Amethyst で使っていた Spec というものがある。

GitHub - amethyst/specs: Specs - Parallel ECS

Spec はドキュメントも充実しているので、読むと勉強になる。

specs.amethyst.rs

Spec を使った教材として Roguelike Tutorial - in Rust があり、 Spec で何ができるのか知るのに丁度いい実例となっている。

bfnightly.bracketproductions.com

Amethyst で利用されてデファクトスタンダートとなっていた Spec だが、その Amethyst は現在 legion という新しい ECS へ乗り換えようと準備をしている。動機は詳しく調べていないのでわからないのだが、やり取りされている内容から推測すると Spec のパフォーマンスに不満があり、それを改善したいようだ。ただ、 crates.io にあがっている amethyst を見ると、まだ Specに依存しており 、 legion への移行は終わっていないように見える。

github.com

Rust には Amethyst の他に Bevy というゲームエンジンがあり、こちらほうが新しい。 Bevy も ECS 実装を持っている。

bevyengine.org